日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

面对不可避免的故障,我们造了一个“上帝视角”的控制台

發(fā)布時(shí)間:2025/3/20 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面对不可避免的故障,我们造了一个“上帝视角”的控制台 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者?|?肖長(zhǎng)軍(穹谷)
來源 | 阿里巴巴云原生公眾號(hào)

混沌工程隨著云原生的發(fā)展逐漸進(jìn)入大家的視野,通過混沌工程可以很好地發(fā)現(xiàn)和解決在云原生化過程中的高可用問題。阿里巴巴在 2019 年開源了底層的混沌工程工具?- chaosblade,今年年初再次開源混沌工程控制臺(tái) chaosblade-box,ChaosBlade 品牌進(jìn)一步升級(jí)。本文主要圍繞云原生面臨的高可用挑戰(zhàn)和混沌工程機(jī)遇,詳細(xì)介紹開源控制臺(tái)的設(shè)計(jì)、特性和實(shí)踐和未來規(guī)劃,旨在幫助企業(yè)更好的了解控制臺(tái)并通過其來實(shí)現(xiàn)混沌工程落地,解決云原生系統(tǒng)下高可用問題。

去年年底 AWS 和 Google 都出現(xiàn)了比較嚴(yán)重的服務(wù)故障:AWS 故障是由于處理數(shù)據(jù)流服務(wù) kinesis 出現(xiàn)問題,導(dǎo)致很多云服務(wù)不可用;Google 故障是由于登錄服務(wù)的擴(kuò)容配額問題導(dǎo)致多服務(wù)不可用。從中可以發(fā)現(xiàn),他們都存在因服務(wù)依賴不合理,導(dǎo)致一個(gè)服務(wù)故障影響多個(gè)服務(wù)不可用,缺少應(yīng)急預(yù)案,整個(gè)故障恢復(fù)時(shí)間比較長(zhǎng),監(jiān)控告警系統(tǒng)不完善等問題,Google 故障發(fā)生幾十分鐘后才感知故障的發(fā)生,AWS 的 CloudWatch 處于不可用的狀態(tài)。故障不可避免,所有的一切時(shí)時(shí)刻刻存在著失敗的風(fēng)險(xiǎn)。

尤其隨著敏捷開發(fā)、DevOps、微服務(wù)、云原生架構(gòu)和治理的出現(xiàn),應(yīng)用的交付能力大大提升,但系統(tǒng)的復(fù)雜度也日益增加,在業(yè)務(wù)快速迭代的同時(shí),如何保障業(yè)務(wù)持續(xù)的高可用性和穩(wěn)定性面臨著很大的挑戰(zhàn)。混沌工程通過主動(dòng)注入故障的方式,提前發(fā)現(xiàn)系統(tǒng)的薄弱點(diǎn),推進(jìn)架構(gòu)的改進(jìn),最終實(shí)現(xiàn)業(yè)務(wù)韌性。

打不倒我的必使我強(qiáng)大,建設(shè)韌性架構(gòu)是混沌工程的目標(biāo)。韌性架構(gòu)包含兩部分,一部分是韌性系統(tǒng),比如具備冗余性、擴(kuò)展性、降級(jí)熔斷、故障隔離等,避免級(jí)聯(lián)故障,構(gòu)建容災(zāi)容錯(cuò)的韌性系統(tǒng)。另一部分是韌性組織,包含高效交付、故障預(yù)案、應(yīng)急響應(yīng)等組織協(xié)同建設(shè)。高度韌性的系統(tǒng)也會(huì)出現(xiàn)預(yù)期之外的故障,所以韌性的組織能彌補(bǔ)韌性系統(tǒng)缺失的部分,通過混沌工程構(gòu)建極致的韌性架構(gòu)。

常見的云原生高可用架構(gòu)架構(gòu)基本上是基于多可用區(qū),或者是跨地域級(jí)的容災(zāi)架構(gòu),業(yè)務(wù)應(yīng)用采用微服務(wù)架構(gòu)下集群部署,中間件具備容錯(cuò)容災(zāi)能力等等。從底層設(shè)施到上層業(yè)務(wù),都存在潛在的故障風(fēng)險(xiǎn),比如機(jī)房斷網(wǎng)、整個(gè)可用區(qū)不可用、集群宕機(jī)、中間件節(jié)點(diǎn) crash 等。從可用區(qū)到集群、主機(jī),再到細(xì)粒度的請(qǐng)求,故障影響的爆炸半徑逐漸減小,這也是混沌工程原則中非常重要的一點(diǎn) – 控制爆炸半徑。控制爆炸半徑的方式一般有兩種:一是環(huán)境隔離,通過隔離實(shí)驗(yàn)的機(jī)房、集群等來控制影響面;二是基于實(shí)驗(yàn)工具或平臺(tái)自身的場(chǎng)景控制能力,比如 chaosblade 實(shí)驗(yàn)工具,通過實(shí)驗(yàn)參數(shù)來控制實(shí)驗(yàn)粒度,比如微服務(wù)調(diào)用延遲,可以控制到單個(gè)服務(wù)接口、版本,甚至一次請(qǐng)求。下面我們來介紹一下 chaosblade 混沌實(shí)驗(yàn)工具。

Chaosblade 是一款遵循混沌實(shí)驗(yàn)?zāi)P偷幕煦鐚?shí)驗(yàn)執(zhí)行工具,具有場(chǎng)景豐富度高、簡(jiǎn)單易用等特點(diǎn),而且擴(kuò)展場(chǎng)景也特別方便,開源不久便被加入到 CNCF Landspace 中,成為主流的一款混沌工具。chaosblade 是個(gè)直接下載解壓即可使用的工具,不需要安裝,它支持的調(diào)用方式包含 CLI 方式,直接執(zhí)行 blade 命令,這里舉個(gè)做網(wǎng)絡(luò)屏蔽的例子:我們添加 -h 參數(shù)就可以看到非常完善的命令提示,比如要一個(gè) 9520 端口調(diào)用做網(wǎng)絡(luò)丟包,它的演練目標(biāo)是 network;它的 action 是丟包;它的 matcher 就是調(diào)用遠(yuǎn)程的一個(gè)服務(wù)端口 9520。執(zhí)行成功后會(huì)返回實(shí)驗(yàn)結(jié)果,每一個(gè)實(shí)驗(yàn)場(chǎng)景我們都會(huì)作為一個(gè)對(duì)象,它會(huì)返回一個(gè)實(shí)驗(yàn)對(duì)象的 UID,此 UID 用于后續(xù)的實(shí)驗(yàn)管理,比如銷毀、查詢實(shí)驗(yàn)都是通過此 UID 來做的。要銷毀實(shí)驗(yàn),也就是恢復(fù)實(shí)驗(yàn),直接執(zhí)行 blade destroy 命令就可以。

Chaosblade 支持多平臺(tái)、多語言環(huán)境,包含 Linux、Kubernetes、Docker 平臺(tái),以及 Java、NodeJS、C++、Golang 語言應(yīng)用。共涉及 200 多個(gè)場(chǎng)景、3000 多個(gè)參數(shù),為用戶提供豐富的場(chǎng)景和實(shí)驗(yàn)參數(shù)控制。使用 blade -h 命令可以查看詳細(xì)的使用文檔,包含案例和場(chǎng)景、參數(shù)介紹。下面我們重點(diǎn)介紹一下 chaosblade 對(duì)應(yīng)用服務(wù)場(chǎng)景的支持。

Chaosblade 支持 Java、C++、Golang、NodeJS 語言應(yīng)用,其中對(duì) Java 應(yīng)用的支持能力更豐富,包含 OOM、線程池滿、指定線程數(shù)、CPU 負(fù)載、codecache 滿等 JVM 本身的場(chǎng)景,還支持很多常用組件,比如 Druid、Dubbo、Elasticsearch、HBase、HttpClient、Redis、Kafka、Lettuce、MongoDB、MySQL、PostgreSQL、RabbitMQ、RocketMQ、Servlet、Tars、gRPC 等。Java 場(chǎng)景更強(qiáng)大的一個(gè)功能是可用指定任意類和方法注入異常、延遲、篡改返回,甚至可以通過自己編寫 Groovy 或 Java 腳本,實(shí)現(xiàn)更加復(fù)雜的實(shí)驗(yàn)場(chǎng)景來滿足自身業(yè)務(wù)實(shí)驗(yàn)需求。還支持鏈路標(biāo)識(shí)識(shí)別、請(qǐng)求數(shù)限制等能力。Golang 場(chǎng)景是通過編譯時(shí)在任意代碼行注入埋點(diǎn)邏輯來實(shí)現(xiàn),目前支持修改變量值、修改參數(shù)值、修改返回值、異常、延遲、內(nèi)存溢出和 Panic 場(chǎng)景。現(xiàn)在,已登記的試用或在使用的企業(yè)已經(jīng) 40 家,其中包含一些深度合作共建的企業(yè)用戶。下面我們舉個(gè)例子來說明 chaosblade 故障注入的執(zhí)行流程。

以云原生 Dubbo 應(yīng)用調(diào)用下游 PetQueryService 服務(wù)延遲三秒故障場(chǎng)景為例,我們可以通過 chaosblade 自帶的 blade 工具或 kubectl 以及通過編碼的方式來執(zhí)行。此處列舉了使用 kubectl 和自身的 blade 工具執(zhí)行。先看使用 kubectl 執(zhí)行,通過配置 ChaosBlade 類型的 YAML 文件,使用 kubectl apply 命令來創(chuàng)建實(shí)驗(yàn),Kubernetes 會(huì)創(chuàng)建一條?chaosblade 資源,后續(xù)通過 kubectl delete 命令刪除此咨詢即可恢復(fù)實(shí)驗(yàn)。創(chuàng)建好 chaosblade 資源后,chaosblade operator 監(jiān)聽 chaosblade 資源創(chuàng)建,查詢目標(biāo)容器,按需透?jìng)鲌?chǎng)景相關(guān)的實(shí)驗(yàn)工具,調(diào)用 blade 工具在容器內(nèi)執(zhí)行實(shí)驗(yàn)。使用 blade 執(zhí)行,命令如上圖,指定 K8s 下的 dubbo 應(yīng)用注入延遲故障,通過 process 參數(shù)指定應(yīng)用名、time 參數(shù)指定延遲時(shí)間、service 參數(shù)指定受影響的服務(wù)接口、names 參數(shù)和 container-names 分別指定 Pod 和 Container 名稱,如果不清楚參數(shù)可以添加 -h 來查看命令幫助。

通過以上案例可以看出 chaosblade 工具使用簡(jiǎn)單,而且支持豐富的實(shí)驗(yàn)場(chǎng)景,我們?cè)诖斯ぞ叩幕A(chǔ)上做了 ChaosBlade 品牌升級(jí)。

我們開源了 chaosblade-box 混沌工程控制臺(tái),可實(shí)現(xiàn)混沌實(shí)驗(yàn)平臺(tái)化操作,而且支持更多混沌工程實(shí)驗(yàn)工具的托管,比如 litmuschaos 等。品牌升級(jí)后,我們更進(jìn)一步地解決了用戶落地混沌工程的困難度,讓用戶將更多的精力放到推進(jìn)系統(tǒng)韌性提升上,旨在通過混沌工程幫助企業(yè)解決系統(tǒng)云原生化過程中高可用問題。

Chaosblade-box 是一個(gè)面向多集群、多環(huán)境、多語言的云原生混沌工程平臺(tái)。關(guān)鍵功能如下所示:

  • 實(shí)現(xiàn)了實(shí)驗(yàn)工具自動(dòng)化部署,無需用戶登錄到每臺(tái)機(jī)器部署實(shí)驗(yàn)工具,簡(jiǎn)化用戶部署成本。

  • 支持實(shí)驗(yàn)工具托管,現(xiàn)在已支持 litmuschaos ,后續(xù)會(huì)支持更多優(yōu)秀的實(shí)驗(yàn)工具來滿足各種實(shí)驗(yàn)場(chǎng)景需求。

  • 通過提供統(tǒng)一的混沌實(shí)驗(yàn)用戶界面,屏蔽底層故障注入方式,讓用戶在同一個(gè)平臺(tái)上實(shí)現(xiàn)不同工具的實(shí)驗(yàn)。

  • 支持實(shí)驗(yàn)?zāi)繕?biāo)自動(dòng)獲取、實(shí)驗(yàn)場(chǎng)景管理等等。

  • 支持多個(gè)實(shí)驗(yàn)維度,比如主機(jī)、Kubernetes、應(yīng)用,其中 Kubernetes 又包含 Container、Pod、Node 實(shí)驗(yàn)維度。

  • 后續(xù)會(huì)更進(jìn)一步支持混沌工程閉環(huán),實(shí)現(xiàn)穩(wěn)態(tài)定義、實(shí)驗(yàn)執(zhí)行、穩(wěn)態(tài)評(píng)估等,協(xié)助用戶構(gòu)建高可用的云原生系統(tǒng)。

下面通過頁面截圖來了解一下 chaosblade-box 平臺(tái)能力。

通過上述圖片可以看出 chaosblade-box 平臺(tái)整體功能,在托管更多工具場(chǎng)景的基礎(chǔ)上,標(biāo)準(zhǔn)化實(shí)驗(yàn)場(chǎng)景和實(shí)驗(yàn)管控界面,簡(jiǎn)化用戶操作,降低使用門檻,提供詳細(xì)的白屏化日志,便于問題跟蹤和排查。接下來我們看下平臺(tái)技術(shù)架構(gòu)圖。

通過控制臺(tái)頁面可實(shí)現(xiàn) chaosblade、litmus 等已托管的工具部署,按照社區(qū)的建立的混沌實(shí)驗(yàn)?zāi)P徒y(tǒng)一實(shí)驗(yàn)場(chǎng)景,根據(jù)主機(jī)、Kubernetes、應(yīng)用來劃分目標(biāo)資源,通過目標(biāo)管理器來控制,在實(shí)驗(yàn)創(chuàng)建頁面,可以實(shí)現(xiàn)白屏化的目標(biāo)資源選擇。平臺(tái)通過調(diào)用混沌實(shí)驗(yàn)執(zhí)行來執(zhí)行不同工具的實(shí)驗(yàn)場(chǎng)景,配合接入 prometheus 監(jiān)控,可以觀察實(shí)驗(yàn) metric 指標(biāo),后續(xù)會(huì)提供豐富的實(shí)驗(yàn)報(bào)告。
_
Chaosblade-box 的部署也非常簡(jiǎn)單,具體可以查看:https://github.com/chaosblade-io/chaosblade-box/releases。

下面我們通過一個(gè)殺 Pod 實(shí)驗(yàn)場(chǎng)景來介紹平臺(tái)的使用。

首先是部署 chaosblade-box,部署完成后,在實(shí)驗(yàn)列表頁面創(chuàng)建實(shí)驗(yàn),選擇 Kubernetes Pod 實(shí)驗(yàn)維度,實(shí)驗(yàn)創(chuàng)建共分為四步,前兩步資源選擇和場(chǎng)景選擇是必填項(xiàng),后兩步監(jiān)控接入和實(shí)驗(yàn)名稱是非必填項(xiàng)。在 Pods 列表中選擇多個(gè)目標(biāo) Pods,然后選擇殺 Pods 實(shí)驗(yàn)場(chǎng)景,對(duì)接 Prometheus Pod 監(jiān)控,完成實(shí)驗(yàn)創(chuàng)建。在實(shí)驗(yàn)詳情頁面可以點(diǎn)擊執(zhí)行實(shí)驗(yàn)進(jìn)入實(shí)驗(yàn)任務(wù)詳情頁面,查看實(shí)驗(yàn)詳細(xì)信息。

Chaosblade-box 后續(xù)規(guī)劃重點(diǎn)在托管更多的實(shí)驗(yàn)工具,實(shí)現(xiàn)更多工具自動(dòng)化部署,同時(shí)支持更多的語言應(yīng)用,添加更加復(fù)雜的調(diào)度策略和流程編排,生成實(shí)驗(yàn)報(bào)告,實(shí)驗(yàn)報(bào)告分三個(gè)階段,一是實(shí)驗(yàn)基礎(chǔ)報(bào)告,包含實(shí)驗(yàn)和監(jiān)控的基本信息,二是實(shí)驗(yàn)缺陷報(bào)告,包含實(shí)驗(yàn)中發(fā)現(xiàn)的問題,三是實(shí)驗(yàn)高可用建設(shè)報(bào)告,根據(jù)實(shí)驗(yàn)中發(fā)現(xiàn)的問題提出解決方案建議。

具體的 Roadmap 可詳見:https://github.com/chaosblade-io/chaosblade-box/wiki/Roadmap。

ChaosBlade 品牌升級(jí)后,項(xiàng)目才剛剛開始,還有很多不完善的地方,歡迎大家下載使用,參與到項(xiàng)目建設(shè)中,也可登記企業(yè)使用情況到 issue 中,我們線下交流,登記地址:https://github.com/chaosblade-io/chaosblade/issues/32。

  • chaosblade 項(xiàng)目地址
    https://github.com/chaosblade-io/chaosblade

  • chaosblade-box 項(xiàng)目地址
    https://github.com/chaosblade-io/chaosblade-box

總結(jié)

以上是生活随笔為你收集整理的面对不可避免的故障,我们造了一个“上帝视角”的控制台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。