天天看點

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

前言

本文是《SpringCloud 應用在 Kubernetes 上的最佳實踐》的第11期,從前面兩期開始我們進入到了高可用專題,分别介紹了流量防護和故障演練相關内容。本文将從另一個視角介紹如何保障業務高可用性:即業務準備階段,提前進行線上的瓶頸定位和容量評估,以便更低成本、更高效/真實的發現系統瓶頸點,做到最精确的容量評估。

高可用體系介紹

首先來介紹下高可用體系,應用生命周期的高可用都有哪些政策、分别可以實作什麼能力呢?

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)
SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

從上圖示意中可以看出,應用生命周期的整個過程中,都有響應的高可用政策,如前面2期介紹的 流量防護即為線上運作時的線上管控相關政策,混沌工程即為系統演練的相關政策。而全鍊路壓測即為規劃階段的重要政策,其包括線上壓測(即環境選擇)、容量規劃(即壓測實施)、彈性伸縮(即生态内關聯)。

以下将重點介紹容量評估的重要性,以及如何實施壓測來實作容量評估。

為何要進行容量評估

關于容量評估的重要性及必要性已經是個老生常談的問題了,分别從技術角度和業務戰略角度總結如下:

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

容量評估的目的自然是解決容量問題,如新業務上線前的準備,大型營銷活動的準備等等。大型活動中洪峰流量引起的系統表現不确定性,是最經典的适用場景。一個理想的營銷活動周期應該是有如下閉環流程:

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

性能測試是容量評估的核心手段,性能測試之後通過用戶端-應用系統-基礎負載一系列的監控分析,最終可得出瓶頸點位于何處、應如何有針對性的優化。上圖可以看出,性能測試通過真實、高效的壓測方式進行容量評估/瓶頸定位&解決,最終來保障活動穩定進行。

如何進行性能測試

阿裡巴巴全鍊路壓測從2013年到現在也已經是第7個年頭了,在這7年中間我們不斷的積累、總結、優化進步,進行這樣一種大規模的項目活動,離不開有效的流程把控及分工管理。關于全鍊路壓測的前期準備,這邊将不做贅述,有興趣的同學可以參考文章

《獨家揭秘 | 阿裡巴巴是如何做全鍊路壓測的?》

。以下将重點介紹壓測執行階段操作。

進行全鍊路壓測之前,單應用會進行内部壓測,以便能提升全鍊路壓測的效率,即解決内部問題之後再解決關聯問題。故以下将分别介紹Spring Cloud應用的壓測以及全鍊路壓測分别如何執行。

單應用壓測Spring Cloud應用

單應用的壓測不少開發者會選擇開源JMeter進行壓測,甚至還會進行自建平台以便實作高并發能力。這兩者都不推薦,他們都有較為明顯的劣勢。阿裡雲性能測試服務(PTS Performance Testing Service)提供了雲端壓測服務,其完美相容了JMeter,隻需把腳本上傳上來即可發起壓測。

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

同時,目前PTS上已經支援直接進行微服務壓測,不需要自己設定進行插件管理和更新,隻需直接在PTS中選擇對應的叢集等資訊,即可快速發起壓測。

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

全鍊路壓測

如前面介紹性能壓測流程中所屬,整個全鍊路壓測包括的前期事宜較多,如環境選擇與改造、資料準備、安全政策等,這部分内容在此不做贅述,有興趣的可以查閱

《Performance Test Together》主題

相關介紹。本處主要介紹全鍊路壓測的實施:即配置與線上業務模型一樣的業務場景,從公網發起真實流量進行多元度和場景的壓測,驗證容量能力和瓶頸問題的定位。

一般正式壓測會按照壓測計劃,執行多種壓測政策。淘寶的雙11大促壓測,一般包含這樣幾步:

  • 峰值脈沖

    即完全模拟0點大促目标峰值流量,進行大促态壓測,觀察系統表現。

  • 系統摸高

    取消限流降級保護功能,擡高目前壓測值(前提是目前的目标壓測值已經達到,則可以進行摸高測試),觀察系統的極限值是多少。可進行多輪提升壓力值壓測,直到系統出現異常為止。簡化摸高測試的提升資訊

  • 限流降級驗證

    顧名思義,即驗證限流降級保護功能是否正常。修改限流降級的作用與驗證方法,更簡化。 (AHAS引入)商業化産品AHAS(應用高可用服務,Application High Availability Service)提供了全面的限流降級能力,可進行全鍊路的降級保護。

  • 破壞性測試

    這個主要是為了驗證預案的有效性,類似于容災演練時的預案執行演練。即為持續保持大促态壓測,并驗證預案的有效性,觀察執行預案之後對系統的影響。修改破壞性測試的内容。

在PTS上壓測

上述壓測場景的實施,均可以在PTS上操作實作,且配置不同的壓測量級資料,來進行多輪壓測,并觀察其系統表現。壓測不應該是一次性的操作,而應該是反複的、多輪驗證的操作。以下以峰值脈沖為例,介紹如何在PTS上實施壓測。

首先是場景的建構。PTS提供了豐富的建立場景方式,包括JSON、JMX、YAML腳本的導入,純互動0編碼UI建立、雲端錄制器錄制結果導入、完美相容JMeter腳本等。下圖作為示例:

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

業務場景建構完成之後,以PTS自研原生引擎(即純互動UI編排模型)為例,提供了豐富的壓力來源定制化能力,可實作多地域/營運商的來源定制,更真實地模拟真實流量情況。

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

同時,可通過SLA + 定時任務能力,實作“無人值守”壓測,對核心業務鍊路進行周期性的性能摸頂。

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

壓測結束後,PTS提供了可下載下傳的壓測報告,有詳細統計資料及趨勢圖資料,采樣日志以及添加了的監控資料,可快速進行問題方向的定位于分析。

在EDAS上壓測Spring Cloud應用

EDAS 的微服務治理能力,同時打通了與 PTS 服務的相應的壓測能力,進入到服務查詢頁面之後點選壓測按鈕即可開始在 PTS 的性能測試,如下圖:

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)

結尾

本文簡單介紹了下業務高可用體系的相關政策,容量評估的重要性以及核心手段-性能測試的實施方式,同時在Spring Cloud下的快速應用。此外,PTS 還提供了更多功能:

  • 全鍊路壓測的流量隔離改造
  • JMeter的環境管理及本地化插件
  • 壓測過程中,雲上業務的架構監控
  • JMeter的進階流量定制
  • ......

以性能壓測為主線,進行應用系統規劃期的容量驗證,并以壓測資料結果為參考,通過

應用高可用服務AHAS中流量防護

進行從網關到應用多元度的系統防護,以此來實作業務系統上線後的高可用性。後續PTS和AHAS會提供更多的智能化功能,來更好地幫助實作線上業務在各種極端場景下的連續性。

【更多精彩】

1.中間件爆款一折起,還有阿裡巴巴十年最佳實踐深度解密,點選馬上了解:

https://www.aliyun.com/activity/daily/commercial?spm=5176.20960838.0.0.6a54305etoEn4D

2.【填問卷領淘公仔】點選馬上填寫問卷:

https://survey.aliyun.com/apps/zhiliao/YmW95Gk8bU

【加入行業實戰交流釘釘群】

阿裡雲專門成立了“網際網路架構更新實戰課”釘釘群,每周邀請一位阿裡雲專家在群内進行行業最佳實踐直播,每天分享行業前沿幹貨,釘釘掃碼馬上加入。

SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(容量評估)