ALB具備超強彈性及大規模應用層流量處理能力。實際業務場景中如您有ALB壓力測試需求,可參考本文進行壓力測試。
壓測拓撲
您可參考下圖進行測試環境設計。
壓測方法
壓測指標說明
ALB有四個關鍵指標:新建連接數、并發連接數和處理數據量(請求和響應)、每秒請求數。每一個指標的壓測方法不一樣。
壓測新建連接數指標建議使用短連接,用于測試負載均衡服務與后端服務器的新建處理能力。
建議使用簡單的心跳服務測試,減少過多的帶寬消耗帶來的影響。使用短連接測試時,需要注意客戶端端口不足的問題。
壓測并發連接數指標建議使用長連接,用于測試負載均衡服務與后端服務器的并發處理能力。
每一條長連接建議使用簡單的心跳服務測試,起到保活會話的作用。使用長連接測試高并發能力時,同樣需要注意客戶端端口不足的問題。
壓測處理數據量建議使用長連接,用于測試帶寬上限或特殊業務。
壓測工具的超時時間建議設置一個較小值,如5秒。因為超時時間太大,測試結果顯示平均響應時間加長,導致不利于判斷是否已經到達壓測水位。超時時間調小,測試結果會體現在成功率上,便于快速判斷壓測水位。
壓測每秒請求數,用于測試負載均衡服務與后端服務器的請求處理能力。可以選擇HTTP短連接、HTTP長連接、HTTPS短連接、HTTPS長連接進行測試。
服務器組配置建議
建議關閉健康檢查功能,減少健康檢查對后端服務器的訪問請求。
壓測工具建議
建議您使用阿里云PTS:可以設置足夠高的并發,PTS會分配來自全國各地的公網IP,壓力來源足夠分散,并且可以在PTS中集成云監控,實時查看端到端的全部性能數據。
不建議您使用Apache ab作為壓力測試工具:Apache ab在大量并發場景下存在3秒、6秒、9秒階梯式停頓的現象。Apache ab會通過判斷content length來確定請求是否成功,而NLB掛載多臺后端服務器時,返回的content length會不一致,導致測試結果有誤。
使用PTS簡單壓測示例
創建一個ALB實例,并為該ALB實例添加一個HTTP 80監聽和HTTPS 443監聽,HTTP監聽和HTTPS監聽均添加了兩臺ECS實例作為后端服務器,服務器組后端協議為HTTP,后端端口均設置為80。
ECS服務器的配置為CPU 2核,內存2 GiB且使用CentOS 7.9 64位的操作系統。分別登錄這兩臺ECS實例,執行以下步驟安裝Web服務并完成壓測。關于如何登錄ECS,請參見ECS遠程連接操作指南。
執行以下命令,安裝Apache Web Server提供Web服務。
sudo yum install -y httpd
執行以下命令,初始化默認首頁index.html。
sudo echo "testvm" > /var/www/html/index.html
執行以下命令,啟動HTTP服務。
sudo systemctl start httpd
執行以下任意一條命令,訪問80端口確認Web服務可用。
curl http://localhost
或
curl http://127.0.0.1:80
在PTS中創建測試場景,開始壓力測試。具體操作請參見如何在一分鐘內發起壓測?。
可能導致壓測性能低的原因
若發現壓測性能低,可能是以下原因造成的:
客戶端端口不足
在進行壓力測試時,客戶端端口不足會導致連接建立失敗。負載均衡會默認抹除TCP連接的timestamp屬性,Linux協議棧的tw_reuse(time_wait狀態連接復用)無法生效,time_wait狀態連接堆積導致客戶端端口不足。
解決方法:客戶端使用長連接代替短連接。使用RST報文斷開連接,即socket設置SO_LINGER屬性。
后端服務器accept隊列滿
后端服務器accept隊列滿,導致后端服務器不回復syn_ack報文,客戶端超時。
解決方法:默認net.core.somaxconn的值為128,執行
sysctl -w net.core.somaxconn=1024
命令更改net.core.somaxconn的值,并重啟后端服務器上的應用。后端服務器依賴的應用成為瓶頸
請求經過負載均衡到達后端服務器后,后端服務器本身負載正常,但由于所有后端服務器上的應用又依賴其他應用,例如數據庫,當數據庫成為瓶頸時,也會引起性能降低。
解決方法:根據實際情況清理后端服務器上不需要的應用。
后端服務器的健康檢查狀態異常
在壓測時,容易忽略后端服務器的健康檢查狀態,如果有后端服務器健康檢查失敗或者健康檢查狀態經常跳躍(成功到失敗,又從失敗到成功,反復變化),也會導致壓測性能低。
解決方法:建議關閉健康檢查功能,減少健康檢查對后端服務器的訪問請求。