GreptimeDB 在行業標準測試 Prometheus-Benchmark 當中以 100 個 8c16g 規格節點的集羣,在 datanode 峯值水位為 CPU 38%、內存 40% 的負載下,承接了每秒約 4000 萬點的寫入流量。總體活躍時間線 6.1 億條,每十分鐘更新 615 萬條時間線,在測試的 1.5 小時內均能穩定寫入。
測試結果説明 GreptimeDB 的架構設計能夠支撐超大規模的數據集羣,並且在同等規模集羣下,GreptimeDB 的資源佔用極低。對比同樣適用對象存儲的 Grafana Mimir,在處理同等規模的數據下,Mimir 需要消耗 5 倍以上的 CPU 和內存資源(基於 Mimir 測試報告折算)。
測試環境及工具
本輪測試中所使用的 Prometheus Benchmark 壓測工具的相關關鍵參數及解釋如下:
通過如上配置最終構建的理論數據產生速率約每秒 4160 萬點。
測試環境中一共有兩個集羣,分別是上述的 Prometheus Benchmark 的壓力集羣和 GreptimeDB 的數據庫集羣。兩個集羣均在 AWS EKS 部署。其中,GreptimeDB 集羣所使用的鏡像版本為 v0.8.2 所涉及到的各組件的部署規格及數量如下表所示:
GreptimeDB 集羣的 WAL 組件為 AWS EBS;SST flush 以及 compaction 均基於 S3 完成。本地盤規格為 GP3,S3 為相同 Region 的 Standard 類別。在本次測試中不包含節點調度遷移等的情況,各個節點之間使用 Round-Robin Selector 均勻分配數據分區,一共有 200 個 Regions。
詳細測試數據
寫入吞吐
本次測試一共持續約 1.5 小時,總和寫入量以及分節點的寫入量監控數據如下,可以看到在 1.5 個小時內集羣寫入流量能一直穩定保持在每秒約 4000 萬點的速率:
資源佔用
對 GreptimeDB 集羣水位進行觀察,可以看到如下數據:
- Datanode 的總和 CPU 使用率。總核數為 100 * 8c = 800c,峯值為 305,約佔 38%。
- Frontend 的總和 CPU 使用率。總核數為 50 * 8c = 400c,峯值為250,約佔 63%。
- Datanode 的總和內存佔用。總內存為 100 * 16GiB = 1600 GiB。峯值為640GiB,約佔 40%。
- Frontend 的總和內存佔用。總內存為 50 * 16GiB = 800 GiB。峯值為 110 GiB,約佔 14%。
存儲寫入流量
下圖是 S3 寫入流量的統計,帶寬佔用基本在 512 MiB/s 以下,最終一個半小時內的總寫入量為 2.8 TiB。
而 WAL 組件觀測到的寫入流量約為 800 MiB/s。通過兩張圖的對比能夠看到 GreptimeDB 對數據進行了有效壓縮,壓縮比達到 75%,降低了數據刷寫流量。最終壓測結束時 S3 的目錄大小遠小於 1 TiB。
結語
100 個節點遠遠不是上限,本次測試驗證了 GreptimeDB 架構無限擴展的能力,對比同樣基於對象存儲的 Grafana Mimir 有 5 倍的資源消耗降低。
下一步我們將進一步優化性能和測試,使 GreptimeDB 可承載海量時序指標數據的讀寫和分析。本次測試的版本是 v0.8.2, GreptimeDB 已發佈 v0.9.0 版本,引入了日誌引擎和全文檢索能力,進一步優化了性能和穩定性,朝着成為一個融合 Metrics、Logs 和 Events 的統一時序數據庫邁進了一大步,歡迎各位開發者測試使用。
關於 Greptime
Greptime 格睿科技專注於為可觀測、物聯網及車聯網等領域提供實時、高效的數據存儲和分析服務,幫助客户挖掘數據的深層價值。目前基於雲原生的時序數據庫 GreptimeDB 已經衍生出多款適合不同用户的解決方案,更多信息或 demo 展示請聯繫下方小助手(微信號:greptime)。
歡迎對開源感興趣的朋友們參與貢獻和討論,從帶有 good first issue 標籤的 issue 開始你的開源之旅吧~期待在開源社羣裏遇見你!添加小助手微信即可加入“技術交流羣”與志同道合的朋友們面對面交流哦~
Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb
官網:https://greptime.cn/
文檔:https://docs.greptime.cn/
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack
LinkedIn: https://www.linkedin.com/company/greptime/