javascript
Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)
作者 | 穹谷
導(dǎo)讀:從上篇開始,我們進(jìn)入到了高可用的章節(jié),上篇提到的熔斷能力,是歷年保障大促當(dāng)天晚上整個(gè)系統(tǒng)不被洪峰流量打垮的法寶。本文將重點(diǎn)介紹為什么我們要做混沌工程以及如何使用 ChaoBlade 工具和 AHAS 平臺(tái)快速實(shí)施混沌工程。
前言
從上篇開始,我們進(jìn)入到了高可用的章節(jié),上篇提到的熔斷能力,是歷年保障大促當(dāng)天晚上整個(gè)系統(tǒng)不被洪峰流量打垮的法寶,本篇介紹的措施與熔斷有不一樣的地方,一個(gè)是線上洪峰來臨時(shí)的保護(hù)措施,它更多的是流量低峰或者在專門的演練環(huán)境中,針對(duì)可能遇見的各類故障,采取演練的手段,來窺探對(duì)業(yè)務(wù)的影響;它的主要目的是讓我們自己更加了解自己業(yè)務(wù)系統(tǒng)的薄弱環(huán)節(jié),以便來對(duì)癥下藥增強(qiáng)系統(tǒng)的高可用能力。
為什么需要混沌工程?
任何一個(gè)系統(tǒng)都會(huì)有未曾可知的故障出現(xiàn),拿現(xiàn)代工藝已經(jīng)很好的磁盤來說,有統(tǒng)計(jì)數(shù)據(jù)的磁盤最低的年故障率都可達(dá)到 0.39% 。即便是這么底層基礎(chǔ)設(shè)施,也會(huì)有這么高的不確定性。
尤其當(dāng)下大部分的服務(wù)形態(tài)都是分布式架構(gòu),在分布式系統(tǒng)架構(gòu)下,服務(wù)間的依賴日益復(fù)雜,更很難評(píng)估單個(gè)服務(wù)故障對(duì)整個(gè)系統(tǒng)的影響;并且請(qǐng)求鏈路長,監(jiān)控告警的不完善導(dǎo)致發(fā)現(xiàn)問題、定位問題難度增大;同時(shí)業(yè)務(wù)和技術(shù)迭代快,如何持續(xù)保障系統(tǒng)的穩(wěn)定性和高可用性受到很大的挑戰(zhàn)。
1. 云原生系統(tǒng)挑戰(zhàn)更大
談到云原生,可以說云原生是一個(gè)理念,主要包含的技術(shù)有云設(shè)施、容器、微服務(wù)、服務(wù)網(wǎng)格、Serverless 等技術(shù)。云設(shè)施指公有云、專有云和混合云等,是云原生系統(tǒng)的基礎(chǔ)設(shè)施,基礎(chǔ)實(shí)施的故障可能對(duì)整個(gè)上層業(yè)務(wù)系統(tǒng)造成很大影響,所以說云設(shè)施的穩(wěn)定性是非常重要的。
容器服務(wù)的挑戰(zhàn)可以分兩大類:一類是面向 K8s 服務(wù)提供商,服務(wù)是否穩(wěn)定;另一類是面向用戶,配置的擴(kuò)縮容規(guī)則是否有效,實(shí)現(xiàn)的 CRD 是否正確,容器編排是否合理等問題。
分布式服務(wù)的挑戰(zhàn)主要是復(fù)雜性,單個(gè)服務(wù)的故障很難判斷對(duì)整個(gè)系統(tǒng)的影響;service mesh,sidecar 的服務(wù)路由、負(fù)載均衡等功能的有效性,還有 sidecar 容器本身的可用性。
一些新興的部署模式的挑戰(zhàn)如 serverless,現(xiàn)在基本上都是函數(shù)加事件的形式,資源調(diào)度是否有效,而且 serverless 服務(wù)提供商屏蔽了一些中間件,你能掌控的是函數(shù)這些服務(wù),那么你可以通過混沌工程去驗(yàn)證你函數(shù)調(diào)用的一些配置,比如超時(shí)配置、相關(guān)的一些降級(jí)策略等這些是否合理。
以上技術(shù)都有相同的共性,比如彈性可擴(kuò)展、松耦合、容錯(cuò)性高、還有一些易于管理,便于觀察這些特性。所以說在云原生時(shí)代,通過混沌工程可以更有效的推進(jìn)系統(tǒng)的“云原生”化。
2. 每個(gè)職位都需要懂混沌工程
混沌工程是一種思想,它讓系統(tǒng)中的每個(gè)參與者都學(xué)會(huì)去考慮一件事情:如果所依賴的某服務(wù)中斷了服務(wù)該怎么辦?對(duì)于以下四類人群而言,意義尤顯突出:
-
對(duì)于架構(gòu)師來說,可以驗(yàn)證系統(tǒng)架構(gòu)的容錯(cuò)能力,我們需要面向失敗設(shè)計(jì)的系統(tǒng),混沌工程的思想就是踐行這一原則的方式;
-
對(duì)于開發(fā)和運(yùn)維,可以提高故障的應(yīng)急效率,實(shí)現(xiàn)故障告警、定位、恢復(fù)的有效和高效性;
-
對(duì)于測試來說,可以彌補(bǔ)傳統(tǒng)測試方法留下的空白,之前的測試方法基本上是從用戶的角度去做,而混沌工程是從系統(tǒng)的角度進(jìn)行測試,降低故障復(fù)發(fā)率;
-
對(duì)于產(chǎn)品和設(shè)計(jì),通過混沌事件查看產(chǎn)品的表現(xiàn),提升客戶使用體驗(yàn)。所以說混沌工程面向的不僅僅是開發(fā)、測試,擁有最好的客戶體驗(yàn)是每個(gè)人的目標(biāo),所以實(shí)施混沌工程,可以提早發(fā)現(xiàn)生產(chǎn)環(huán)境上的問題,并且可以以戰(zhàn)養(yǎng)戰(zhàn),提升故障應(yīng)急效率和可以使用體驗(yàn),逐漸建設(shè)高可用的韌性系統(tǒng)。
混沌工程實(shí)操
在一次完整的演練流程中,需要先做好計(jì)劃,對(duì)相關(guān)的演練計(jì)劃有一個(gè)行為預(yù)期;演練相關(guān)計(jì)劃的同時(shí),我們推薦的最佳實(shí)踐是需要配合有業(yè)務(wù)的自動(dòng)化測試,每演練一次需要全方位的跑完自動(dòng)化測試用例,這樣才能全面的了解真正的業(yè)務(wù)產(chǎn)生時(shí)對(duì)業(yè)務(wù)造成的影響:
在上面的圖中描述了一次完整的故障演練需要經(jīng)過的步驟,其中最重要的一步的實(shí)踐是如何“執(zhí)行預(yù)制混沌實(shí)驗(yàn)”?因?yàn)檫@一步需要一個(gè)專業(yè)的工具,在業(yè)內(nèi)目前最流行的工具是 Netflix 的 Chaos Monkey 和阿里巴巴開源的 ChaosBlade,我們接下來主要是介紹如何使用 ChaosBlade 來完成一次演練。
1. 使用 ChaosBlade 去做
ChaosBlade 是阿里巴巴一款遵循混沌實(shí)驗(yàn)?zāi)P偷幕煦鐚?shí)驗(yàn)執(zhí)行工具,具有場景豐富度高,簡單易用等特點(diǎn),而且擴(kuò)展場景也特別方便,開源不久就被加入到 CNCF Landspace 中,成為主流的一款混沌工具。目前包含的場景有基礎(chǔ)資源、應(yīng)用服務(wù)、容器服務(wù)、云資源等。ChaosBlade 下載解壓即用,可以通過執(zhí)行 blade 命令來執(zhí)行云原生下微服務(wù)的演練場景,下面是模擬 Kubernetes 下微服務(wù)中數(shù)據(jù)庫調(diào)用延遲故障。
2. 使用 AHAS 故障演練平臺(tái)去做
AHAS 故障演練平臺(tái)是阿里云對(duì)外部用戶開放的云產(chǎn)品,使用方式可參考官方文檔。其底層的故障注入能力大部分來源于 ChaosBlade 實(shí)現(xiàn),另一部分使用自身小程序擴(kuò)展實(shí)現(xiàn)。AHAS 相比于 ChaosBlade,除了簡單易用的白屏操作之外,還實(shí)現(xiàn)了上層的演練編排、權(quán)限控制、場景管理等,而且還針對(duì)微服務(wù)新增應(yīng)用維度演練,簡化演練成本,優(yōu)化演練體驗(yàn)。
結(jié)尾
混沌工程是一種主動(dòng)防御的穩(wěn)定性手段,體現(xiàn)的是反脆弱的思想,實(shí)施混沌工程不能只是把故障制造出來,需要有明確的驅(qū)動(dòng)目標(biāo)。我們要選擇合適的工具和平臺(tái),控制演練風(fēng)險(xiǎn),實(shí)現(xiàn)常態(tài)化演練。
阿里巴巴內(nèi)部從最早引入混沌工程解決微服務(wù)的依賴問題,到業(yè)務(wù)服務(wù)、云服務(wù)穩(wěn)態(tài)驗(yàn)證,進(jìn)一步升級(jí)到公共云、專有云的業(yè)務(wù)連續(xù)性保障,以及在驗(yàn)證云原生系統(tǒng)的穩(wěn)定性等方面積累了比較豐富的場景和實(shí)踐經(jīng)驗(yàn);這一些經(jīng)驗(yàn)沉淀我們都通過開源產(chǎn)品以及云產(chǎn)品 AHAS 一一對(duì)外輸出。
相關(guān)文章推薦:
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 —— 開發(fā)篇》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 部署篇(開發(fā)部署)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 部署篇(工具部署)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可灰度)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 診斷(線上聯(lián)調(diào))》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可監(jiān)控)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(可回滾)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 線上發(fā)布(優(yōu)雅上下線)》
-
《SpringCloud 應(yīng)用在 Kubernetes 上的最佳實(shí)踐 — 高可用(熔斷)》
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的公眾號(hào)。”
總結(jié)
以上是生活随笔為你收集整理的Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 还在担心服务挂掉?Sentinel Go
- 下一篇: 从零入门 Serverless | 教你