反應式服務的性能應該如何測試?

Pivotus工程總監Lilit Yenokyan在Reactive峯會上介紹了反應式服務性能測試。Yenokyan描述了性能測試的類型,並介紹了運行測試和分析結果所需的工具。

Yenokyan首先介紹了一個銀行代理商用於管理與客戶對話的門戶網站。它還包含了一個React Native應用程序。這個應用程序可能被任何一個後端使用,這可能意味着有數百萬用戶。

團隊意識到,系統產生的流量將是巨大的,但問題是系統可以承受多少負載以及如何設置準確的流量。

Yenokyan將性能測試的目標定義爲確定容量。有了性能指標,就可以通過系統的運行成本來評估和比較系統性能。這給人一種花錢的感覺,如果潛在的收益值得花時間,可能就需要進行優化。

Yenokyan定義了三種性能測試。負載測試是一個用戶數量恆定的場景。壓力測試是指將系統推向極限,這樣可以確定在發生崩潰之前它可以承受多大的壓力。它還可以用於測試故障恢復。耐久性測試是指在中等負載下長時間運行,它可用於發現內存消耗等問題。

性能測試的第一步是定義成功標準。爲實現這一目標,必須先定義具體的比例術語,比如併發用戶數。然後再定義和實現具體的場景。爲目標系統確定目標,以便制定具體的性能目標。理想情況下,測試將在生產集羣上運行。不過這通常不是一種切實可行的解決方案,克隆一個生產環境或許是更好的做法。

Yenokyan列舉了他們團隊的幾個技術棧工具。測試本身使用Apache JMeter執行。JMeter是一個測試工具,可以並行發送請求並生成結果。

Jenkins自己會運行測試。它提供了各種參數和構建觸發器,可用於進行負載測試。參數化構建還提供了一種對測試進行更精細控制的方法,無需藉助手動執行。

測試結果被髮送到時間序列數據庫InfluxDB,然後通過可視化工具Grafana對數據進行可視化。Datadog是一種基礎設施監控服務,它提供了有關係統中不同計算機資源使用情況的指標。

測試單體系統和微服務系統之間的區別在於如何解釋結果。在單體系統中,性能被視爲一個整體。而在微服務系統中,每個微服務都進行獨立的測試,然後進行獨立優化和擴展。

Yenokian繼續分享他們團隊學習到的經驗教訓。首先是測試縮放。雖然團隊認爲應用程序會通過添加實例進行線性擴展,但測試顯示吞吐量會保持不變。他們通過分析數據來發現限制水平擴展的幾個瓶頸,例如數據庫和Web套接字限制。

Yenokyan總結了要點:

  • 在提交之前定義預期性能;

  • 儘早開始測量;

  • 對顯而易見的東西提出質疑;

  • 測試每個版本的性能。

原文鏈接

https://www.infoq.com/news/2018/11/performance-testing-reactive

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章