天天看點

雲廠商MongoDB性能測試

作者:楊建榮的學習筆記

0、概述

由于工作關系,筆者曾對國内外四家雲廠商巨頭的 MongoDB 産品做了性能測試,測試對象是托管的 MongoDB V4.0 三節點副本集架構。由于不同雲廠商的産品規格并不統一,比如 MongoDB V4.0 副本集架構國内的A雲、T雲有4C8G的規格,國内的H雲和國外A雲(以下采用AW雲)并沒有該規格。是以,H雲選擇4C16G規格替代,AW雲選擇4C32G規格替代。另外,這次測試是2022年Q2做的,不代表雲廠商産品的目前狀态。綜上情況,此次雲廠商MongoDB性能測試結果,不具有生産實際參考,僅供參考。

本次測試的場景是“95%讀5%寫”和“50%讀50%寫”,觀測了這兩種場景下,雲廠商托管的MongoDB在不同線程數下的每秒操作數(throughput ops/sec)、RAL(us) 平均讀時延、WAL(us) 平均寫時延、系統負載等名額。

測試結論:在上述測試條件,兩種場景的AW雲的MongoDB 副本集性能最好,H雲、A雲和T雲以及On Ecs自建的性能相差并不大。由于資料庫服務端的CPU核數是4,故在16線程的性能到達峰值,再增加線程數,資料庫性能下降。見下圖1和圖2。

雲廠商MongoDB性能測試

圖1:95%讀5%寫

雲廠商MongoDB性能測試

圖2:50%讀50%寫

1、測試環境

1.1 測試工具

YCSB全稱為“Yahoo!Cloud Serving Benchmark”,是雅虎用于測試雲NoSQL的工具,支援對常見的NoSQL産品進行性能測試,如Cassandra、MongoDB、HBase、Redis等。使用該工具前,還需要下載下傳和配置JDK、Maven、python元件。相關元件的下載下傳配置詳見YCSB介紹。

1.2 服務端資訊

雲廠商MongoDB性能測試
注意:本次測試雲廠商的MongoDB産品,均使用預設參數。

1.3 用戶端資訊

雲廠商MongoDB性能測試

2、測試步驟

2.1 Load資料階段

在測試生成資料階段,使用100個線程,生成2000萬的資料,資料大約有25G。

指令如下:

ycsb load mongodb -s -P /root/ycsb-0.17.0/workloads/workloada -threads 100 -p insertstart=0 -p recordcount=20000000 -p readproportion=0 -p updateproportion=0 -p insertproportion= -p requestdistribution=uniform -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb -p table=t_test > load_result.txt           

workload相關參數介紹如下:

recordcound:load階段加載到資料庫的紀錄條數 (default: 0) ,run階段操作的資料範圍(注:run階段該值不能大于load階段的值,否則會出報錯)              operationcount:run階段執行的操作總數              threads:請求線程數,不要超過服務端的maxConnect數,否則會報錯              readproportion: 讀操作比例 (default: 0.95)              updateproportion: 更新操作比例 (default: 0.05)              insertproportion: 插入操作比例 (default: 0)              insertstart:第一個插入值的偏移量(default: 0)              requestdistribution: 請求的分布規則 uniform, zipfian or latest              mongodb.url:待測試mongo執行個體的連接配接位址              mongodb.database:測試時使用的資料庫名稱(default: ycsb)              table: 測試表的名稱 (default: usertable)           

2.2 Run性能階段

  • 95%讀5%寫

測試指令如下:

ycsb run mongodb -s -P /root/ycsb-0..0/workloads/workloada -threads ${num} -p recordcount=3000000 -p operationcount=5000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.95 -p updateproportion=0.05 -p insertproportion=0 -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb -p table=t_test > run_95_5_result_${num}.txt           
  • 50%讀50%寫

測試指令如下:

ycsb run mongodb -s -P /root/ycsb-0..0/workloads/workloada -threads ${num} -p recordcount=3000000 -p operationcount=5000000 -p insertstart=0 -p insertcount=0 -p readproportion=0.5 -p updateproportion=0.5 -p insertproportion=0 -p mongodb.url=mongodb://user:password@ip:port/admin -p mongodb.database=ycsb -p table=t_test > run_5_5_result_${num}.txt               

使用以上指令分别測試2、4、8、16、32、64、128、256線程,并記錄相關測試資料。3、測試資料

3.1 95%讀5%寫場景

3.2 50%讀50%寫場景

雲廠商MongoDB性能測試

總結分析表3和表4資料可以發現:

  • 每秒操作數一開始随着線程數的增加而增大,到達一定線程數後,每秒線程數下降。最大值均出現在16個線程時。
  • 當線程數到達16時,各家雲廠商的産品CPU負載均到達了95%以上。
  • 當線程數到達32時,平均RT是負載較低時的10倍左右。
  • 50%寫50%讀場景,資料庫每秒操作數降低了2倍左右,RT也增長了2倍左右。
  • 自建的MongoDB在性能上,和同規格的阿裡雲、騰訊雲并沒有太大差異,性能基本相同。

4、測試總結

通過上述測試分析後,在生産使用4C8G的副本集架構産品時,不建議線程數使用過多。因為線程數過多并不能提高讀寫性能,反而RT會增長很大,由此可能會帶來性能不穩定。建議線程數和服務端CPU核數保持一緻或者略高。總體看,各雲廠家MongoDB産品的性能差距并不大。

5、參考

  • YCSB使用介紹 @YCSB Github Documentation
  • MongoDB介紹 @MongoDB Documentation

繼續閱讀