<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          灰度黑洞:零風(fēng)險(xiǎn)的混沌工程實(shí)驗(yàn) | IDCF

          共 3134字,需瀏覽 7分鐘

           ·

          2021-06-24 22:53

          來源:混沌工程實(shí)踐
          作者:碼六賈

          Netflix使用了灰度部署進(jìn)行混沌實(shí)驗(yàn),但仍會(huì)有小部分用戶可能會(huì)受到影響。灰度黑洞,為混沌工程測(cè)試的安全性提供了理想的環(huán)境,對(duì)用戶的影響則完全為零。


          一、又快又穩(wěn)的新挑戰(zhàn)



          人總有完美主義傾向,而現(xiàn)實(shí)是:寫的代碼不會(huì)沒有Bug,所有的測(cè)試不可能完備,生產(chǎn)的構(gòu)建部署不會(huì)沒有缺陷,用戶永遠(yuǎn)都會(huì)遇到問題。不過,我們革新和改變的動(dòng)力,往往來自慘痛的生產(chǎn)事件:

          • 2019年7月CloudFlare的大宕機(jī),是由錯(cuò)誤配置的Web應(yīng)用防火墻造成的。
          • Facebook的反垃圾郵件系統(tǒng),意外地折疊了指向合法來源的鏈接。
          • 由于臨床記錄管理系統(tǒng)的軟件更新,錯(cuò)誤地為超過10,000名的患者開了藥。

          采用DevOps實(shí)踐已經(jīng)成為共識(shí),發(fā)布周期的縮短,新功能推向生產(chǎn)的速度比以往更快。同時(shí),微服務(wù)和云原生架構(gòu)正在增加應(yīng)用的復(fù)雜性。當(dāng)速度和復(fù)雜性增加時(shí),軟件缺陷進(jìn)入生產(chǎn)的機(jī)會(huì)也在增加。

          為了解決這一風(fēng)險(xiǎn),我們需要加強(qiáng)在生產(chǎn)中的測(cè)試實(shí)踐,這一過程常常稱為“測(cè)試右移”。


          測(cè)試右移,從后期生產(chǎn)階段開始測(cè)試任務(wù)。這些測(cè)試是為了確保穩(wěn)定性、性能和可用性標(biāo)準(zhǔn)。這樣,就可以從目標(biāo)用戶那里收集反饋和評(píng)論,以了解在現(xiàn)實(shí)世界中的應(yīng)用行為。這有助于進(jìn)一步提高質(zhì)量。

          二、生產(chǎn)中測(cè)試的迫切性



          在新產(chǎn)品投產(chǎn)之前,單元測(cè)試、功能測(cè)試、集成測(cè)試和非功能性測(cè)試等多種測(cè)試類型,對(duì)質(zhì)量保障至關(guān)重要。下面這個(gè)圖非常有意思,從測(cè)試對(duì)象的范圍(從單個(gè)組件到系統(tǒng)層面)以及是否獲得新知識(shí)這兩個(gè)維度,對(duì)上述測(cè)試類型進(jìn)行分類。 

          ( “混沌工程”在圖的右上角)
          一般而言,測(cè)試都在隔離的環(huán)境中進(jìn)行。這些環(huán)境盡可能復(fù)制生產(chǎn),以便為測(cè)試人員提供相當(dāng)?shù)臏y(cè)試環(huán)境,而不在生產(chǎn)環(huán)境直接測(cè)試,避免用戶因?yàn)闇y(cè)試面臨風(fēng)險(xiǎn)。
          但是,僅進(jìn)入生產(chǎn)之前的測(cè)試不足以解決所有問題,原因有以下幾種:
          2.1 生產(chǎn)是一個(gè)獨(dú)特環(huán)境
          生產(chǎn)不可替代。我們可以構(gòu)建測(cè)試環(huán)境,使用與生產(chǎn)相同的基礎(chǔ)設(shè)施和數(shù)據(jù)(基礎(chǔ)設(shè)施即代碼的方法等等),但是永遠(yuǎn)無法完全復(fù)制生產(chǎn)。環(huán)境具有其獨(dú)特的配置,這會(huì)影響應(yīng)用的行為方式,而且難以重現(xiàn)。當(dāng)我們需要投入大量的時(shí)間和金錢,來達(dá)到環(huán)境之間的均等性。隨著生產(chǎn)的不斷變化,這種企圖幾乎是癡心妄想。
          2.2 生產(chǎn)是用戶在的地方
          生產(chǎn)之前的測(cè)試受到時(shí)間、資金和人員技能的影響,無法做到完備測(cè)試。生產(chǎn)中的測(cè)試為測(cè)試人員提供了額外的機(jī)會(huì)來發(fā)現(xiàn)缺陷,以免對(duì)用戶體驗(yàn)產(chǎn)生負(fù)面影響。

          三、生產(chǎn)中測(cè)試的風(fēng)險(xiǎn)



          在測(cè)試環(huán)境中進(jìn)行測(cè)試的一個(gè)好處是,測(cè)試人員可以安全地運(yùn)行侵入性測(cè)試,例如壓力測(cè)試、壓力測(cè)試和災(zāi)難恢復(fù)測(cè)試。
          在生產(chǎn)中運(yùn)行這些測(cè)試存在以下風(fēng)險(xiǎn):
          • 影響性能或穩(wěn)定性,損害用戶體驗(yàn);
          • 產(chǎn)生用戶數(shù)據(jù)泄漏、修改或丟失;
          • 影響營(yíng)銷分析和運(yùn)營(yíng)指標(biāo),例如用戶流量或錯(cuò)誤率;
          • 引起違反法規(guī)或標(biāo)準(zhǔn)的事件(遵循GDPR、PCI、HIPAA等標(biāo)準(zhǔn)的個(gè)人身份信息 PII的使用)。
          因此,與在測(cè)試環(huán)境中進(jìn)行測(cè)試相比,在生產(chǎn)中進(jìn)行測(cè)試需要一種更加受控的方法。

          四、生產(chǎn)中安全的部署策略



          許多應(yīng)用部署策略非常適合生產(chǎn)測(cè)試:
          • 測(cè)試在生產(chǎn)的基礎(chǔ)設(shè)施上上運(yùn)行;
          • 將風(fēng)險(xiǎn)控制在相對(duì)較少的用戶中;
          • 在重大缺陷或故障的情況下回滾。
          4.1 藍(lán)綠部署
          藍(lán)綠部署(Blue/Green Deployment)是一種發(fā)布策略,本質(zhì)上就是并排運(yùn)行兩個(gè)相同的生產(chǎn)環(huán)境。一個(gè)環(huán)境(藍(lán)色)托管應(yīng)用的當(dāng)前版本,而另一個(gè)環(huán)境(綠色)托管新版本。綠色環(huán)境開始保持閑置狀態(tài),不提供任何用戶訪問量,逐步將用戶流量從藍(lán)色環(huán)境切換到綠色環(huán)境中,不會(huì)產(chǎn)生停機(jī)時(shí)間。

          藍(lán)綠部署的主要好處是,可助力DevOps團(tuán)隊(duì)驗(yàn)證生產(chǎn)中的更改,不會(huì)給用戶帶來風(fēng)險(xiǎn)。通過將用戶路由到以前的版本來回滾任何有問題的變更,DevOps團(tuán)隊(duì)始終擁有可靠安全的生產(chǎn)環(huán)境。
          最大的問題是,在切換流量之前,綠色環(huán)境沒有用戶流量,很難測(cè)試應(yīng)用剛上線時(shí)的行為。此外,維護(hù)兩個(gè)獨(dú)立的生產(chǎn)環(huán)境會(huì)增加成本和運(yùn)營(yíng)開銷。
          4.2 灰度部署
          在灰度部署(Canary Deployment)中,新的更改最初會(huì)部署到一小部分用戶,然后逐步推廣到所有用戶。藍(lán)綠部署由兩個(gè)單獨(dú)的生產(chǎn)環(huán)境組成,灰度部署則是一個(gè)生產(chǎn)環(huán)境,托管著應(yīng)用的兩個(gè)不同版本。穩(wěn)定版會(huì)繼續(xù)處理大部分用戶流量,而灰度所占的用戶流量比例要小得多。
          灰度部署的主要好處是:
          • 在實(shí)際的生產(chǎn)系統(tǒng)上運(yùn)行;
          • 面向少量用戶,減少缺陷帶來的潛在影響;
          • 便捷地向所有用戶推出經(jīng)灰度驗(yàn)證的新版本。
          例如,Netflix使用灰度部署來進(jìn)行混沌實(shí)驗(yàn)、負(fù)載測(cè)試和回歸測(cè)試。其中一個(gè)實(shí)驗(yàn)可能涉及部署一個(gè)API失效的服務(wù)版本,將一小部分用戶路由到該服務(wù),隨著失敗請(qǐng)求的增加,觀察系統(tǒng)行為。測(cè)試完成后,可以刪除灰度部署,并將這小部分用戶重新路由到該服務(wù)的穩(wěn)定版本。

          不過,灰度部署仍可能存在有問題的服務(wù),有影響小部分用戶的風(fēng)險(xiǎn),但是這種風(fēng)險(xiǎn)相對(duì)較小。 
          4.3 黑洞啟用
          在黑洞啟用(Dark Launch)中,實(shí)時(shí)用戶流量將被復(fù)制并發(fā)送到應(yīng)用的穩(wěn)定版本和新版本中。穩(wěn)定版本將繼續(xù)響應(yīng)用戶請(qǐng)求,而新版本將沒收其所有響應(yīng),不讓用戶可見,類似只進(jìn)不出,俗稱“黑洞啟用”。
          黑洞啟用,可全面測(cè)試新版本的端到端功能,以及在實(shí)際負(fù)載下的性能。和灰度部署類似,黑洞部署可以逐漸擴(kuò)大規(guī)模,以處理隨著時(shí)間推移不斷增長(zhǎng)的流量,所以有時(shí)候也稱之為“灰度黑洞(Dark Canary)”。

          上圖中,服務(wù)A擁有多個(gè)實(shí)例來接收用戶請(qǐng)求,并調(diào)用服務(wù)B檢索必要的信息。這是一個(gè)典型的分層系統(tǒng),其中服務(wù)A是中間層服務(wù),服務(wù)B是后端服務(wù)。而服務(wù)A是我們要驗(yàn)證的服務(wù),則需要啟用服務(wù)A的灰度黑洞群集。
          LinkedIn使用Rest.li中的動(dòng)態(tài)發(fā)現(xiàn)(D2)服務(wù)發(fā)現(xiàn)機(jī)制,D2庫(kù)安裝在每個(gè)服務(wù)實(shí)例中,向Zookeeper查詢擁有該服務(wù)的集群,負(fù)責(zé)將服務(wù)A中的請(qǐng)求轉(zhuǎn)發(fā)。灰度黑洞群集的流量就是這么來的。(https://linkedin.github.io/rest.li/Dynamic_Discovery )
          灰度黑洞集群的響應(yīng)會(huì)忽略,不會(huì)返回給用戶。
          一旦對(duì)新版本進(jìn)行了完整的測(cè)試并進(jìn)行了審核,如果要發(fā)布該新版本,只需啟用新版本的返回響應(yīng),并禁用原始版本的響應(yīng)即可。
          當(dāng)然,這需要一次運(yùn)行兩個(gè)版本的應(yīng)用,會(huì)有成本的開銷,但這比藍(lán)綠部署要低得多。
          灰度黑洞,為混沌工程測(cè)試的可靠性提供了理想的環(huán)境。Netflix使用了灰度部署進(jìn)行混沌實(shí)驗(yàn),但仍然會(huì)有小部分用戶可能會(huì)受到影響。如果是灰度黑洞的方法,我們可以在與生產(chǎn)相同規(guī)模上運(yùn)行這些實(shí)驗(yàn),而對(duì)用戶的影響則完全為零。
          我們可以在基礎(chǔ)架構(gòu)的不同點(diǎn)引入故障,衡量對(duì)實(shí)際用戶請(qǐng)求的影響,并解決直接影響用戶的風(fēng)險(xiǎn)點(diǎn)。同時(shí)還可以發(fā)現(xiàn),測(cè)試環(huán)境中的功能測(cè)試或端到端測(cè)試無法發(fā)現(xiàn)的問題。
          灰度黑洞,可以做到這一點(diǎn)而不會(huì)影響任何用戶。

          五、結(jié)論



          完美無缺的應(yīng)用是一種奢望,我們不得不面對(duì)現(xiàn)實(shí),在任何可能出現(xiàn)問題的地方檢查應(yīng)用行為。
          在生產(chǎn)中測(cè)試,助力DevOps團(tuán)隊(duì)更好地了解應(yīng)用行為及其基礎(chǔ)設(shè)施,降低故障風(fēng)險(xiǎn),改善用戶體驗(yàn),這是有巨大價(jià)值的。
          藍(lán)綠部署、灰度部署和黑洞啟用,可以從只在測(cè)試環(huán)境中的檢查,擴(kuò)展到生產(chǎn)中的測(cè)試,使用受控的方法,控制用戶風(fēng)險(xiǎn)。我相信,它們會(huì)使你的系統(tǒng)變得更加可靠,生產(chǎn)缺陷率將持續(xù)下降,用戶體驗(yàn)將變得更好。
          “有過DevOps黑客馬拉松的人生,才算完整!
          7月24-25日,IDCF DevOps黑客馬拉松·北京,等你來挑戰(zhàn)!!??


          瀏覽 32
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一级无码 | 国产性爱自拍视频 | 久久亚洲AV成人无码国产人妖 | 亚洲人成影视 | 日本免费aaaaaa |