大量索引場景下 Easysearch 和 Elasticsearch 的吞吐量差異
最近有客戶在使用 Elasticsearch 搜索服務時發(fā)現(xiàn)集群有掉節(jié)點,并且有 master 收集節(jié)點信息超時的日志,節(jié)點的負載也很高,不只是 data 節(jié)點,master 和協(xié)調節(jié)點的 cpu 使用率都很高,看現(xiàn)象集群似乎遇到了性能瓶頸。
查看了 Hot_threads, 發(fā)現(xiàn)大量線程被權限驗證相關的類和方法占用,主要在 RBACEngine 和 AuthorizationService 兩個類。并且不止協(xié)調節(jié)點和數(shù)據(jù)節(jié)點,master 節(jié)點居然也有那么多權限驗證的操作?
于是懷疑是不是對權限驗證的使用方式不對,在 github 上搜了下,果然發(fā)現(xiàn)有人遇到和我們非常類似的場景。
Improve Authorization performance in clusters with a large number of indices #67987
提到有些個用戶在達到數(shù)千或上萬個索引的場景下,在啟用安全驗證進行寫入數(shù)據(jù)時,服務端幾乎會耗費掉所有 CPU 時間在 transport_worker 線程上進行權限驗證,從而阻塞其他傳入請求,
導致集群的吞吐量下降,下降的程度似乎是 2 倍到 3 倍。
有人建議升級到 7.16 或更高版本來解決這個問題。
為了確認下我們的產(chǎn)品是否有類似現(xiàn)象,我對兩個服務進行了測試對比,由于硬件資源有限,只對單個節(jié)點進行了寫入吞吐的壓測。
測試條件:
- -Xms3g -Xmx3g
- 16 邏輯核 CPU
- 啟用 security 驗證
- 預先創(chuàng)建了 1000 個索引
- 每個索引 1 個 shard,3 個別名
采用相同的 loadgen 腳本進行壓測, 壓測命令:./loadgen-linux-amd64 -config loadgen-index_0.yml -d 120 -c 10
即每秒 10 個并發(fā)請求,持續(xù)壓測 120 秒,每個 bulk 請求包含寫入 5000 個 doc,對單個索引進行壓測。
Easysearch 1.0 寫入了 6900000 條。
對比搜索服務 7.3.2 寫入了 5865000 條。
壓測完畢,顯示 Easysearch 的吞吐大約高出了 17%。
測試時觀察 Hot_threads,Easysearch 除了 lucene 的寫入和 merge 線程,未發(fā)現(xiàn)權限驗證相關熱點線程,表明了啟用安全驗證不會對 Easysearch 的寫入造成性能影響。
關于 Easysearch
INFINI Easysearch 是一個分布式的近實時搜索與分析引擎,核心引擎基于開源的 Apache Lucene。Easysearch 的目標是提供一個輕量級的 Elasticsearch 可替代版本,并繼續(xù)完善和支持更多的企業(yè)級功能。 與 Elasticsearch 相比,Easysearch 更關注在搜索業(yè)務場景的優(yōu)化和繼續(xù)保持其產(chǎn)品的簡潔與易用性。
官網(wǎng)文檔:https://www.infinilabs.com/docs/latest/easysearch
大量索引場景下 Easysearch 和 Elasticsearch 的吞吐量差異的評論 (共 條)
