全部產品
Search
文件中心

ApsaraDB for MongoDB:複本集執行個體最大串連數壓力測試

更新時間:Jun 19, 2024

本文通過ECS訪問ApsaraDB for MongoDB的方式,壓測ApsaraDB for MongoDB的不同規格複本集執行個體的最大串連數。

測試環境

建立ECS執行個體和ApsaraDB for MongoDB複本集執行個體。如何建立,請參見棄置站台集執行個體建立ECS執行個體

本次測試的執行個體配置如下:

配置項

ECS執行個體

ApsaraDB for MongoDB雲端硬碟架構執行個體

ApsaraDB for MongoDB本地碟架構執行個體

地區及可用性區域

華北2(北京)可用性區域H

華北2(北京)可用性區域H

華北2(北京)可用性區域H

網路類型

Virtual Private Cloud

Virtual Private Cloud

Virtual Private Cloud

執行個體規格類型系列

計算平衡增強型c6e

通用型和獨享型

通用型和獨享型

執行個體規格

ecs.c6e.2xlarge

包含三種在售規格,詳情請參見測試結果

包含兩種在售規格,詳情請參見測試結果

儲存類型

ESSD AutoPL雲端硬碟

ESSD雲端硬碟

本地碟

執行個體或鏡像版本

Alibaba Cloud Linux 3.2104 LTS 64位

4.19.91-26.al7.x86_64

3.10.0-327.ali2017.alios7.x86_64

MongoDB核心版本

不涉及

  • 大版本:4.4

  • 小版本基準:4.4.28

  • 大版本:4.2

  • 小版本基準:4.2.23

  • 測試採用的ApsaraDB for MongoDB執行個體為標準複本集拓撲結構(三節點,包含一個主節點、一個從節點和一個隱藏節點)。

  • 測試採用的ECS執行個體和ApsaraDB for MongoDB執行個體在同一地區及可用性區域下,RTT(Round-Trip Time)平均值為0.103ms。

測試載入器

  • 本次壓力測試將採用開源社區的YCSB 0.17.0壓測工具。

    說明

    YCSB是一款Java編寫的支援多種資料庫的效能測試工具,具體安裝和使用方法請參見YCSB

  • 本次壓力測試將使用到自訂的串連數壓測程式,關於自訂的串連數壓測程式的介紹,請參見關於96000串連數測試的補充說明

測試方法

  1. 將ECS執行個體的主私網IP添加到ApsaraDB for MongoDB執行個體的白名單中。如何添加,請參見修改白名單
    說明 您可以登入ECS控制台,在執行個體詳情頁面的網路資訊地區查看ECS執行個體的主私網IP
  2. 遠端連線ECS執行個體。如何串連,請參見串連ECS執行個體
  3. 使用YCSB工具載入測試資料。

    // 運行ycsb run負載
    ./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8

    您需要修改以下參數值:

    • recordcount=1000000:載入至ApsaraDB for MongoDB執行個體的資料總數。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin"ApsaraDB for MongoDB執行個體的串連地址。本文使用的資料庫帳號為test,所屬資料庫為admin。

      說明

      您可以登入ApsaraDB for MongoDB控制台,在資料庫連接頁面的私網串連 - 專用網路地區查看串連地址。

    • threads 8:用戶端的並發線程數。

  4. 執行如下測試命令,進行效能壓測。

    ./bin/ycsb.sh run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin&maxPoolSize=8000" -p table=test -threads 8000

    您需要修改以下參數值:

    • recordcount=1000000:載入至ApsaraDB for MongoDB執行個體的資料總數。

    • operationcount=5000000:執行讀寫測試的總次數。

    • insertproportion=0:載入資料操作比例。

    • readproportion=50:讀操作比例。

    • updateproportion=50:更新操作比例。

    • mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin"ApsaraDB for MongoDB執行個體的串連地址。本文使用的資料庫帳號為test,所屬資料庫為admin。

      說明
      • 您可以登入ApsaraDB for MongoDB控制台,在資料庫連接頁面的私網串連 - 專用網路地區查看串連地址。

      • 您在使用上述命令是需要指定maxPoolSize參數,如果不指定該參數的話,其預設值僅為100,會導致測試過程中遇到MongoWaitQueueFullException的錯誤,從而無法達到期望的最大串連數。

  5. 查看測試執行個體的監控資訊,具體操作,請參見基本監控

    您需要在基本監控頁簽下,選擇本次測試對應的時間段,查看執行個體的CPU使用率記憶體使用量率操作QPS數串連數串連數使用率指標。

關於96000串連數測試的補充說明

由於YCSB測試依賴於Java環境,但JVM的最大堆記憶體存在上限。在進行高並發數(threads > 20000)運行測試時會出現形如下圖的Cannot allocate memory錯誤,從而導致測試無法繼續進行。image

即便是臨時調大Java的JAVA_OPTS配置參數也依舊會出現錯誤。為瞭解決該問題,您需要選擇使用自訂的串連數壓測程式。壓測程式的邏輯如下:迴圈產生若干線程,每個線程產生1個MongoClient用戶端,用戶端執行查詢後保持一段時間內部不釋放串連即可。

因為單台壓測用戶端機器的連接埠數量有限,所以單台壓測用戶端機器已無法滿足32核128 GB規格的串連數(最大串連數96000)測試,您需要在多台壓測用戶端機器上同時運行相同的壓測程式。

查詢壓測用戶端機器的當前連接埠範圍的Bash命令如下:

sysctl net.ipv4.ip_local_port_range

返回樣本如下:

net.ipv4.ip_local_port_range = 40000    65535

您還可以通過如下的命令來適當放大壓測用戶端機器的連接埠範圍,然後再進行串連數壓力測試:

sudo sysctl -w net.ipv4.ip_local_port_range="10240 65535"

測試結果

ESSD雲端硬碟版

獨享型4核8 GB

目標最大串連數:8000

操作QPS數

串連數

串連數使用率

CPU使用率

記憶體使用量率

image.png

image.png

image.png

image.png

image.png

說明

受限於基本監控視圖的分鐘級採樣粒度,視圖中未能顯示當時達到的最大串連數資訊。實際上當時串連數已經達到了8000,您可以通過細粒度的監控或者serverStatus結果的connections子文檔來確認。image

獨享型32核128 GB

目標最大串連數:96000

操作QPS數

串連數

串連數使用率

CPU使用率

記憶體使用量率

image.png

image.png

image.png

image.png

image.png

說明

因使用的壓測工具跟另外兩個測試不同,以上的QPS、CPU和記憶體使用量率監控截圖並不具備可比性。

通用型8核32 GB

目標最大串連數:16000

操作QPS數

串連數

串連數使用率

CPU使用率

記憶體使用量率

image.png

image.png

image.png

image.png

image.png

本地碟版

通用型16核64 GB

目標最大串連數:32000

操作QPS數

串連數

串連數使用率

CPU使用率

記憶體使用量率

image.png

image.png

image.png

image.png

image.png

說明

受限於基本監控視圖的分鐘級採樣粒度,該通用型規格執行個體的部分採樣時間點由於CPU使用率滿導致採集命令逾時而失敗,監控出現斷點,因此會出現分鐘級的波穀,當時的實際串連數持續為32000。

獨享型2核16 GB

目標最大串連數:8000

操作QPS數

串連數

串連數使用率

CPU使用率

記憶體使用量率

image.png

image.png

image.png

image.png

image.png

總結

  • 不同規格不同架構的ApsaraDB for MongoDB複本集執行個體均可以達到其規格對應的最大串連數。

  • 當達到最大串連數之後,MongoDB會拒絕後續串連。業務側會因無法建立串連而出現請求延遲高或卡頓。

  • 並發的串連數越多,執行個體的CPU和記憶體等資源的開銷會越大。建議您根據實際業務情況,合理控制執行個體的串連數。