705
魔獸
某移動APP性能優化__最佳實踐_性能測試-阿裏雲
移動APP項目實施案例分析及調優
1 背景
隨著客戶業務發展,目前係統架構已不能滿足業務發展需要,因此急需將服務器托管到阿裏雲上,並進行擴容;遷移到阿裏雲上以後,係統資源消耗是否比目前線上環境結果要好。因此在上線前需要進行性能測試,測試是否滿足各項性能指標。
2 測試目標
本次測試目標如下:
- 容量測試:核心業務(核心業務1+核心業務2)+非核心業務基線(非核心業務1+非核心業務2+非核心業務3+非核心業務4+非核心業務5+非核心業務6)混合交易容量
- 穩定性測試:混合交易穩定性
- 突變測試:非核心業務突變3倍,對核心業務的影響
- 對比測試:和線上同等壓力下,線上和線下資源消耗和響應時間對比。
- 恢複性測試:模擬網絡攻擊
3 架構
係統架構主要有如下服務器:
- HTTP服務器:核心業務1和核心業務2業務
- TCP服務器:核心業務使用人員終端心跳業務
- MongoDB服務器:非結構化數據庫存儲
- Redis服務器:信息推送
- MySQL服務器:結構化數據庫存儲
4 測試指標
- 容量測試:核心業務1 TPS>=600筆/秒,核心業務2 TPS>=1200筆/秒
- 穩定性測試:至少在核心業務1 TPS等於300筆/秒和核心業務2 TPS等於600筆/秒能穩定運行8小時
- 突變測試:非核心業務突變3倍,基本對核心業務無影響
- 線上線下資源消耗對比測試:在跟線上核心業務1 TPS等於150筆/秒和核心業務2 TPS等於120筆/秒同等壓力下,測試環境的MonogoDB和Redis CPU Load小於0.5%,磁盤利用率小於0.1%
- 線上線下存儲訪問時間對比測試:在核心業務1 TPS等於200筆/秒和核心業務2 TPS等於400筆/秒的情況下,應用觀察到的存儲訪問平均耗時不超過4ms,最大耗時不超過100ms。
- 恢複性測試:係統能恢複,TPS無變化
5 業務模型
5.1 分析
通過生產上高峰業務量分析得出,核心業務1和核心業務2除了雙12外,比例占比1:1.5左右,通過係統整個趨勢觀察,發現核心業務2業務量有明顯增長趨勢,因此核心業務1和核心業務2的占比為1:2。高峰時候核心業務總的TPS隻有50~200筆/秒。
核心業務量:
非核心業務量:
非核心業務1+非核心業務2+非核心業務3+非核心業務4+非核心業務5+非核心業務6
編號 | 業務 | TPS | 占比 |
---|---|---|---|
1 | 非核心業務1 | 400 | 16.4% |
2 | 非核心業務2 | 500 | 20.5% |
3 | 非核心業務3 | 833 | 34.2% |
4 | 非核心業務4 | 210 | 8.6% |
5 | 非核心業務5 | 300 | 12.3% |
6 | 非核心業務6 | 190 | 8% |
合計 | 2433 | 100% |
5.2 模型
5.2.1 模型1
此模型用於容量測試、穩定性測試和恢複性測試。
5.2.2 模型2
此模型用於突變測試。
5.2.3 模型3
此模型用於線上線下資源消耗對比測試。
5.2.4 模型4
此模型用於線上線下存儲訪問時間對比測試
6 腳本設計
經過調研,發送後台的業務均是URL+自定義Body方式,因此在性能測試裏麵,新增一個腳本,上傳參數化文件,定義事務,設置連接和Body就行了,注意盡可能多的進行參數化。
7 測試結果
7.1 容量測試
7.1.1 測試場景
按照模型1,設置用戶數比例和步調時間(保持業務占比,不偏模型),運行20分鍾,進行負載測試。
7.1.2 測試結果及分析
- 第一輪測試
按照核心業務1 1000筆/秒和核心業務2 2000筆/秒目標發起壓力,發現不能達到目標,TPS曲線不穩定,運行到1分鍾的時候,下降非常厲害,抖動也非常厲害,通過監控,發現FULL GC非常頻繁,達到1秒1次,經過與架構師溝通,這是由於實現機製導致的,核心業務1的機製是將內容放到隊列裏麵,隊列長度是2147483647,後台隻有64個線程(不能修改)在消化,消費者(消化)處理速度的比生產者(核心業務1)慢,導致隊列長度越來越大,內存很快被消化完了,導致FULL GC頻繁,這屬於架構問題,不能進行修改。
核心業務2:
第二輪測試
按照核心業務1 600筆/秒和核心業務2 1200筆/秒發起壓力,運行20分鍾,TPS基本保持穩定,通過監控發現,order應用連接MongoDB連接數報已滿的異常錯誤、logserver IO過高、MongoDB locked DB值高於75%。 按照核心業務1 800筆/秒和核心業務2 1600筆/秒目標發起壓力,不能達到此目標,TPS曲線非常不穩定。第三輪測試
mongoDB 隻有表鎖沒有行鎖,導致locked值非常高,這個是產品問題,沒辦法進行調優。
將order應用MongoDB連接數從250調到1000;logserver 磁盤換成效率更高SSD磁盤;重新按照核心業務1 800筆/秒和核心業務2 1600筆/秒目標發起壓力,運行20分鍾,TPS曲線基本穩定。
核心業務1:
核心業務2:
7.1.3 測試結論
係統的容量為核心業務1 800筆/秒和核心業務2 1600筆/秒,滿足核心業務1 600筆/秒和核心業務2 1200筆/秒目標要求。
7.2 線上線下資源消耗對比測試
7.2.1 測試場景
按照模型3發起壓力,在核心業務1 150TPS和核心業務2 120TPS壓力情況下,運行20分鍾,資源消耗對比。
7.2.2 測試結果及分析
MongoDB 和 Redis CPU Load均小於0.5, CPU 利用率均小於10%,磁盤利用率均小於0.1%, 這些指標結果比線上資源消耗結果略好。
7.2.3 測試結論
在跟線上同等壓力的情況下,阿裏雲環境各項指標結果略好於目前線上環境資源消耗。
7.3 線上線下存儲訪問時間對比測試
7.3.1 測試場景
按照模型4發起壓力,在核心業務1 200筆/秒和核心業務2 400筆/秒的壓力下,運行20分鍾,觀察存儲訪問的時間。
7.3.2 測試結果及分析
在xflush上麵觀察到的存儲耗時值小於3ms,最大值不超過100ms
7.3.3 測試結論
滿足目標平均耗時不超過4ms,最大耗時不超過100ms的需求。
7.4 突變測試
7.4.1 測試場景
按照模型2,在核心業務1 TPS 400筆/秒和核心業務2 TPS 800筆/秒的情況下,平穩運行5分鍾後,將非核心業務按照基線的3倍進行突變,運行5分鍾,觀察核心業務TPS曲線的變化,然後將非核心業務恢複到基線,觀察核心業務TPS曲線的變化。
7.4.2 測試結果及分析
核心業務1:
核心業務2:
從圖中可以看出,當非核心業務突變3倍以後,對核心業務1和核心業務2有輕微的影響(核心業務1和核心業務2 TPS下降),但馬上能恢複,突變的整個過程對核心業務基本無影響。
7.4.3 測試結論
非核心業務突變3倍對核心業務基本無影響,滿足目標要求。
7.5 恢複性測試
7.5.1 測試場景
按照模型1,在核心業務1 800筆/秒和核心業務2 1600筆/秒的壓力下,平穩運行5分鍾後,斷開所有mysql服務網絡5秒,觀察核心業務TPS曲線變化,然後恢複mysql網絡,觀察核心業務TPS曲線變化,接著斷開所有MongoDB服務網絡5秒,觀察核心業務TPS曲線變化,然後恢複所有MongoDB服務網絡,觀察核心業務TPS曲線變化。
7.5.2 測試結果及分析
核心業務1:
核心業務2:
從圖中可以看出,斷開MySQL和MongoDB網絡5秒的瞬間,核心業務1和核心業務2的TPS有輕微的下降,隨後能恢複到正常水平,因此對核心業務基本沒有影響。
7.5.3 測試結論
模擬網絡攻擊,對核心業務基本沒有影響,滿足目標要求。
7.6 穩定性測試
7.6.1 測試場景
按照模型1和最大容量的80%左右發起壓力(核心業務1:600筆/秒和核心業務2:1200筆/秒),運行8小時,觀察係統是否能穩定運行。
7.6.2 測試結果及分析
核心業務1:
核心業務2:
運行到35分鍾後,核心業務1和核心業務2 TPS開始有輕微大幅度波動,運行到45分鍾後,核心業務1和核心業務2 TPS開始大幅度波動,比較頻繁,並且不能恢複到初始水平(過一段時間,TPS逐漸在下降),經過分析發現是FULL GC導致,詳見7.1.2測試結果及分析。 因此將壓力降為一半(核心業務1:300筆/秒,核心業務2:600筆/秒),重新運行穩定性測試。
核心業務1:
核心業務2:
係統在核心業務1 300筆/秒和核心業務2 600筆/秒的壓力下,基本能穩定運行8小時,但隨著時間推移,Full GC次數越來越多,長時間運行下去將會導致係統處理能力大幅度下降(詳見7.1.2測試結果及分析)
7.6.3 測試結論
在核心業務1 300筆/秒和核心業務2 600筆/秒的壓力下,係統基本能穩定運行8小時,滿足目標要求。
8 風險及建議
經過多次分析、調優及測試,基本能滿足各業務場景的目標要求,但係統處理能力不能再繼續上升的瓶頸主要體現在係統架構上,因此隨著未來業務量勐增,超過係統處理能力的時候,將會產生處理能力急需下降、客戶體現差甚至宕機的風險,建議針對係統架構進行修改,並進行架構類性能測試,滿足日益增長的業務需要。
最後更新:2016-05-06 10:44:38
上一篇:
大規模分布式壓測__最佳實踐_性能測試-阿裏雲
下一篇:
錄製工具使用指南__腳本錄製調試指南_性能測試-阿裏雲
ALIYUN::RAM::Group__資源列表_資源編排-阿裏雲
nodejs sdk__SDK使用手冊_內容檢測API文檔_阿裏綠網-阿裏雲
創建高權限賬號__設置實例基礎配置_快速入門(MySQL)_雲數據庫 RDS 版-阿裏雲
創建錄製索引文件__直播流操作接口_API 手冊_CDN-阿裏雲
MXNet 最佳實踐__深度學習最佳實踐_高性能計算-阿裏雲
金融雲連接示例(專有網絡)__技術分享_技術運維問題_金融雲-阿裏雲
雲上係統專家保障(尊享版)__工作說明書_尊享服務_支持計劃-阿裏雲
綁定子賬號__賬號管理類 API_Open API 參考_企業級分布式應用服務 EDAS-阿裏雲
查詢鏡像商品類目列表__API參考_雲市場-阿裏雲
前言 極速自由的大數據OLAP體驗__使用手冊_分析型數據庫-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲