我們正在對目前正在構建的系統上的彈性搜索進行彈性搜索時遇到一些性能問題或異常情況。同時將數據以恆定速率推送到Elasticsearch的多個索引上時的性能問題
要求: 我們需要爲我們的多個客戶捕獲數據,他們將近實時地查詢和報告他們。所有收到的文檔都是相同的格式,具有相同的屬性並且處於扁平結構(所有字段都是主類型,沒有嵌套對象)。我們希望保持每個客戶的信息彼此分開。
頻率上接收和查詢數據: 我們以每秒200到700文件波動率接收數據,爲每一個客戶 - 與一天中的高峯之中。 查詢將主要集中在每個客戶大約1200萬個文檔上 - 直方圖/百分位可以顯示隨時間變化的模式,偶爾可以找到原始文檔檢索以查明特定時間點發生的情況。我們的目標是以50至100個客戶的不同費率插入文檔 - 最小的文檔可以是20個文檔/秒,最大的文檔可以以1000個文檔/秒的速度達到峯值,持續幾分鐘。
我們如何存儲數據: 每個客戶每天有一個索引。例如,如果我們有5個客戶,那麼整週就會有35個索引。我們每天打破它的原因是因爲它大多是最近兩次偶爾會被其他人查詢。我們也這樣做的,所以我們可以客戶的獨立刪除舊的指標(有些人可能希望保留7天,約14天的數據)的
我們是如何插入: 我們正在分批發送數據10到2000 - 每秒。一個文件大約900bytes原始。
環境 AWS C3-大 - 3個節點 所有指標與10個碎片創建了2副本的測試目的 兩個Elasticsearch 1.3.2和1.4.1
我們已經注意到:
如果我只將數據推送到一個索引,當插入速率大約爲每秒100個文檔時,對於每個批插入的響應時間在80到100ms之間開始。我把它加大了,我可以在插入速率接近每秒1秒之前達到1600,當我將它增加到接近1700時,由於併發插入,它會在某個時間點撞到牆上,時間會旋轉到4或5秒鐘。說,如果我減少插入的速度,Elasticsearch恢復很好。 CPU使用率隨着費率增加而增加。
如果我同時推到兩個索引,我總共可以達到1100,並且CPU每秒約900個文件達到93%。 如果我同時推送3個索引,我總共可以達到150個,CPU達到95%到97%。我嘗試了很多次。有趣的是,當時的響應時間大約是109ms。我可以將負載增加到900,響應時間仍然在400到600左右,但CPU保持不變。
問:
綜觀我們的要求,上述調查結果,是設計方便了什麼要求?我能做些什麼測試來了解更多?是否有任何設置需要檢查(並更改)?