javascript
SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(容量评估)
作者 | 牛兔
導讀:本文是《SpringCloud 應用在 Kubernetes 上的最佳實踐》系列文章的第 11 篇,從前面兩期開始我們進入到了高可用專題,分別介紹了流量防護和故障演練相關內容。本文將從另一個視角介紹如何保障業務高可用性:即業務準備階段,提前進行線上的瓶頸定位和容量評估,以便更低成本、更高效/真實的發現系統瓶頸點,做到最精確的容量評估。
高可用體系介紹
首先來介紹下高可用體系,應用生命周期的高可用都有哪些策略、分別可以實現什么能力呢?
從上圖示意中可以看出,應用生命周期的整個過程中,都有相應的高可用策略,如前面 2 篇文章介紹的流量防護即為線上運行時的線上管控相關策略,混沌工程即為系統演練的相關策略,而全鏈路壓測即為規劃階段的重要策略,其包括線上壓測(即環境選擇)、容量規劃(即壓測實施)、彈性伸縮(即生態內聯動)。
以下將重點介紹容量評估的重要性,以及如何實施壓測來實現容量評估。
為何要進行容量評估?
關于容量評估的重要性及必要性已經是個老生常談的問題了,分別從技術角度和業務戰略角度總結如下:
容量評估的目的自然是解決容量問題,如新業務上線前的準備,大型營銷活動的準備等等。大型活動中洪峰流量引起的系統表現不確定性,是最經典的適用場景。一個理想的營銷活動周期應該是有如下閉環流程:
性能測試是容量評估的核心手段,性能測試之后通過客戶端-應用系統-基礎負載一系列的監控分析,最終可得出瓶頸點位于何處、應如何有針對性地優化。上圖可以看出,性能測試通過真實、高效的壓測方式進行容量評估/瓶頸定位&解決,最終來保障活動穩定進行。
如何進行性能測試?
阿里巴巴全鏈路壓測從 2013 年到現在也已經是第 7 個年頭了,在這 7 年間我們不斷積累、總結、優化進步,進行這樣一種大規模的項目活動,離不開有效的流程把控及分工管理。關于全鏈路壓測的前期準備,這邊將不做贅述,有興趣的同學可以參考文章《獨家揭秘 | 阿里怎么做 雙11 全鏈路壓測?》。以下將重點介紹壓測執行階段操作。
進行全鏈路壓測之前,單應用會進行內部壓測,以便能提升全鏈路壓測的效率,即解決內部問題之后再解決聯動問題。故以下將分別介紹 Spring Cloud 應用的壓測以及全鏈路壓測分別如何執行。
1. 單應用壓測 Spring Cloud 應用
單應用的壓測不少開發者會選擇開源 JMeter 進行壓測,甚至還會進行自建平臺以便實現高并發能力。這兩者都不推薦,他們都有較為明顯的劣勢。阿里云性能測試服務(PTS Performance Testing Service)提供了云端壓測服務,其完美兼容了 JMeter,只需把腳本上傳上來即可發起壓測。
同時,目前 PTS 上已經支持直接進行微服務壓測,不需要自己設置進行插件管理和升級,只需直接在 PTS 中選擇對應的集群等信息,即可快速發起壓測。
2. 全鏈路壓測
如前面介紹性能壓測流程中所屬,整個全鏈路壓測包括的前期事宜較多,如環境選擇與改造、數據準備、安全策略等,這部分內容在此不做贅述,有興趣的可以查閱《Performance Test Together》主題相關介紹。本處主要介紹全鏈路壓測的實施:即配置與線上業務模型一樣的業務場景,從公網發起真實流量進行多維度和場景的壓測,驗證容量能力和瓶頸問題的定位。
一般正式壓測會按照壓測計劃,執行多種壓測策略。淘寶的 雙11 大促壓測,一般包含這樣幾步:
-
峰值脈沖:即完全模擬 0 點大促目標峰值流量,進行大促態壓測,觀察系統表現;
-
系統摸高:取消限流降級保護功能,抬高當前壓測值(前提是當前的目標壓測值已經達到,則可以進行摸高測試),觀察系統的極限值是多少,可進行多輪提升壓力值壓測,直到系統出現異常為止。簡化摸高測試的提升信息;
-
限流降級驗證:顧名思義,即驗證限流降級保護功能是否正常,修改限流降級的作用與驗證方法,更簡化,(AHAS 引入)商業化產品AHAS(應用高可用服務,Application High Availability Service)提供了全面的限流降級能力,可進行全鏈路的降級保護;
-
破壞性測試:這個主要是為了驗證預案的有效性,類似于容災演練時的預案執行演練。即為持續保持大促態壓測,并驗證預案的有效性,觀察執行預案之后對系統的影響。修改破壞性測試的內容。
3. 在 PTS 上壓測
上述壓測場景的實施,均可以在 PTS 上操作實現,且配置不同的壓測量級數據,來進行多輪壓測,并觀察其系統表現。壓測不應該是一次性的操作,而應該是反復的、多輪驗證的操作。以下以峰值脈沖為例,介紹如何在 PTS 上實施壓測。
首先是場景的構建。PTS 提供了豐富的創建場景方式,包括 JSON、JMX、YAML 腳本的導入,純交互 0 編碼 UI 創建、云端錄制器錄制結果導入、完美兼容 JMeter 腳本等。下圖作為示例:
業務場景構建完成之后,以 PTS 自研原生引擎(即純交互 UI 編排模型)為例,提供了豐富的壓力來源定制化能力,可實現多地域/運營商的來源定制,更真實地模擬真實流量情況。
同時,可通過 SLA + 定時任務能力,實現“無人值守”壓測,對核心業務鏈路進行周期性的性能摸頂。
壓測結束后,PTS 提供了可下載的壓測報告,有詳細統計數據及趨勢圖數據,采樣日志以及添加了的監控數據,可快速進行問題方向的定位于分析。
4. 在?EDAS 上壓測 Spring Cloud 應用
EDAS 的微服務治理能力,同時打通了與 PTS 服務的相應的壓測能力,進入到服務查詢頁面之后點擊壓測按鈕即可開始在 PTS 的性能測試,如下圖:
結尾
本文簡單介紹了下業務高可用體系的相關策略,容量評估的重要性以及核心手段-性能測試的實施方式,同時在 Spring Cloud 下的快速應用。此外,PTS 還提供了更多功能:
- 全鏈路壓測的流量隔離改造
- JMeter 的環境管理及本地化插件
- 壓測過程中,云上業務的架構監控
- JMeter 的高級流量定制
- …
以性能壓測為主線,進行應用系統規劃期的容量驗證,并以壓測數據結果為參考,通過應用高可用服務 AHAS 中流量防護進行從網關到應用多維度的系統防護,以此來實現業務系統上線后的高可用性。后續 PTS 和 AHAS 會提供更多的智能化功能,來更好地幫助實現線上業務在各種極端場景下的連續性。
相關文章推薦:
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 —— 開發篇》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 部署篇(開發部署)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 部署篇(工具部署)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上發布(可灰度)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 診斷(線上聯調)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上發布(可監控)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上發布(可回滾)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 線上發布(優雅上下線)》
- 《SpringCloud 應用在 Kubernetes 上的最佳實踐 — 高可用(熔斷)》
- 《Spring Cloud 應用在 Kubernetes 上的最佳實踐 — 高可用(混沌工程)》
課程推薦
去年,CNCF 與 阿里云聯合發布了《云原生技術公開課》已經成為了 Kubernetes 開發者的一門“必修課”。今天,阿里云再次集結多位具有豐富云原生實踐經驗的技術專家,正式推出《云原生技術實踐公開課》。課程內容由淺入深,專注講解“ 落地實踐”。還為學習者打造了真實、可操作的實驗場景,方便驗證學習成果,也為之后的實踐應用打下堅實基礎。點擊鏈接查看課程:https://developer.aliyun.com/learning/roadmap/cloudnative2020
“阿里巴巴云原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的公眾號。”
總結
以上是生活随笔為你收集整理的SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(容量评估)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Cloud Alibaba
- 下一篇: Sentinel-Go 集成 Nacos