大量索引場景下 Easysearch 和 Elasticsearch 的吞吐量差異

infinilabs發表於2023-11-25

最近有客戶在使用 Elasticsearch 搜尋服務時發現叢集有掉節點,並且有 master 收集節點資訊超時的日誌,節點的負載也很高,不只是 data 節點,master 和協調節點的 cpu 使用率都很高,看現象叢集似乎遇到了效能瓶頸。
檢視了 Hot_threads, 發現大量執行緒被許可權驗證相關的類和方法佔用,主要在 RBACEngine 和 AuthorizationService 兩個類。並且不止協調節點和資料節點,master 節點居然也有那麼多許可權驗證的操作?

於是懷疑是不是對許可權驗證的使用方式不對,在 github 上搜了下,果然發現有人遇到和我們非常類似的場景。

提到有些個使用者在達到數千或上萬個索引的場景下,在啟用安全驗證進行寫入資料時,服務端幾乎會耗費掉所有 CPU 時間在 transport_worker 執行緒上進行許可權驗證,從而阻塞其他傳入請求,
導致叢集的吞吐量下降,下降的程度似乎是 2 倍到 3 倍。
有人建議升級到 7.16 或更高版本來解決這個問題。

為了確認下我們的產品是否有類似現象,我對兩個服務進行了測試對比,由於硬體資源有限,只對單個節點進行了寫入吞吐的壓測。

測試條件:

  • -Xms3g -Xmx3g
  • 16 邏輯核 CPU
  • 啟用 security 驗證
  • 預先建立了 1000 個索引
  • 每個索引 1 個 shard,3 個別名

採用相同的 loadgen 指令碼進行壓測, 壓測命令:./loadgen-linux-amd64 -config loadgen-index_0.yml -d 120 -c 10

即每秒 10 個併發請求,持續壓測 120 秒,每個 bulk 請求包含寫入 5000 個 doc,對單個索引進行壓測。

Easysearch 1.0 寫入了 6900000 條。

對比搜尋服務 7.3.2 寫入了 5865000 條。

壓測完畢,顯示 Easysearch 的吞吐大約高出了 17%。

測試時觀察 Hot_threads,Easysearch 除了 lucene 的寫入和 merge 執行緒,未發現許可權驗證相關熱點執行緒,表明了啟用安全驗證不會對 Easysearch 的寫入造成效能影響。

關於 Easysearch

about easysearch

INFINI Easysearch 是一個分散式的近實時搜尋與分析引擎,核心引擎基於開源的 Apache Lucene。Easysearch 的目標是提供一個輕量級的 Elasticsearch 可替代版本,並繼續完善和支援更多的企業級功能。 與 Elasticsearch 相比,Easysearch 更關注在搜尋業務場景的最佳化和繼續保持其產品的簡潔與易用性。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70029458/viewspace-2997253/,如需轉載,請註明出處,否則將追究法律責任。

相關文章