系統和混沌測試:實現云彈性的一種方法
譯文【51CTO.com快譯】在當今數字技術時代,停機意味著企業的業務中斷和收入損失,因此構建彈性云計算架構勢在必行。例如在新冠疫情期間,由于發布出行禁令,IT維護團隊難以本地重新啟動和維護數據中心中的服務器。這可能會導致用戶訪問數據或軟件的巨大障礙,導致生產率下降,并在內部部署設施停機時造成業務中斷。
此時行之有效的解決方案是將企業的業務遷移到云計算基礎設施,IT員工可以通過遠程工作來提供全天候的技術支持以確保安全運營。云計算在這里扮演了救世主的角色。很多企業希望充分利用云計算的潛力,因此,云計算操作的可觀察性和彈性變得勢在必行。
在技術驅動的商業經濟中,云計算服務中斷面臨的后果將是災難性的。任何故障和中斷都會導致多米諾骨牌效應,阻礙系統性能。因此,企業必須通過系統和混沌測試在其云計算架構中構建彈性。
混沌測試是一種可以處理大規模分布式系統中的混亂問題的可試驗的、基于系統的方法。人們需要了解彈性和可觀察性的含義,以及系統和混沌測試對于避免停機和業務中斷來說至關重要的原因。
為避免云計算服務中斷,企業必須通過以連續和混亂的方式對其進行測試,在其云架構中構建彈性。
1.可觀察性
可觀察性可以通過兩個方面來理解:一方面是通過控制理論將可觀察性解釋為通過對其外部輸出的推斷來理解系統狀態的過程。另一方面將可觀察性的學科和方法解釋為旨在衡量不確定性和未知數。
它有助于了解系統或應用程序的屬性。云計算的可觀察性是利用不同的域、規模和服務的端到端監控的先決條件??捎^察性不應與監控混淆,因為監控用于了解應用程序中問題和異常的根本原因。監控會告訴IT人員什么時候出現了問題,而可觀察性可以幫助他們了解為什么會出錯。它們的目的不同,但卻是相互補充的。
云計算系統需要可觀察性和彈性,以確保更少的停機時間、更快的應用程序速度等。
2.彈性
而遷移到云平臺的企業都應確保并測試其系統的穩定性、可靠性、可用性和彈性,其中彈性位于層次結構的最高層。穩定性是保證系統和服務器不會經常崩潰;可用性通過將應用程序分布在不同位置以減輕工作負載來確保系統正常運行;可靠性確保云計算系統有效運行和可用。但是,如果企業想要解決不可預見的問題,那么不斷測試彈性就變得必不可少。
彈性是指預期會出現問題,并且系統經過測試以解決和調整自身以解決該問題。系統的彈性并不是自動實現的。彈性系統承認復雜的系統和問題,并努力逐步采取措施應對錯誤。它需要不斷測試以減少問題或故障的影響。而持續測試可以避免云計算服務故障,以確保更高的性能和效率。
可以通過現場彈性設計和利用混沌測試等系統測試方法實現彈性。
傳統測試及其不足的原因
傳統測試可以確保應用程序的無縫設置和遷移到云計算系統,并額外監控它們的執行和工作效率。這足以確保云計算系統不會根據設計考慮改變應用程序的性能和功能。
采用傳統測試是不夠的,因為它在發現潛在的隱藏架構問題和異常方面效率低下。一些故障似乎處于休眠狀態,因為它們僅在觸發特定條件時才變得可見。
云計算的高可用性承諾
微軟公司云計算業務主管Scott Guthrie在談到云計算的未來和發展前景時說,“我們看到數字空間的發展速度加快。云計算讓我們能夠按照摩爾定律的速度進行擴展,而且還能快速擴展并使用更少的基礎設施。”由于新冠疫情導致企業員工被迫在家遠程工作,云計算投資并沒有激增。但是,由于這種前所未有的需求,所有超大規模廠商都不得不采取節流和優先級控制措施,這違背了公共云的按需彈性原則。
在中斷和停機方面,公共云也會出錯。例如,谷歌公司最近發生的宕機事件使Gmail和Youtube等多個谷歌服務停止,這表明公共云也會出現系統宕機。因此,這場疫情為彈性云計算系統增加了幾個視角:
1.系統必須平穩運行,即使在線流量的意外激增也不會改變。
2.系統必須尋找替代方法來管理功能和資源池,以防額外的資源分配請求被云計算提供商拒絕或限制。
3.系統應該是可訪問和安全的,以處理未知位置并轉移到混合工作環境(可能是網絡防火墻之外的多個端點)。
新冠疫情凸顯了對彈性云系統進行連續和混沌測試的價值。一個具有彈性且經過全面測試的系統將能夠以安全、無縫、穩定的方式管理額外的擁塞流量。為了檢測未知流量,需要混沌測試和混沌工程。
僅靠云原生應用程序設計不足以實現彈性
在公共云中,由于云計算提供商提供的基本功能、多層/多技術基礎設施以及云計算系統的分布式特性存在差距,應用程序彈性架構變得更加重要。即使底層基礎設施的可用性和彈性由云計算提供商提供,這也可能導致云計算應用程序以不可預測的方式失敗。
為建立良好的應用程序彈性基礎,在設計過程中,云計算工程師應采用以下策略來測試、評估和表征應用程序層彈性:
1.利用架構良好的整體解決方案架構框架,并采用云原生能力實現可用性和災難恢復。
2.與云計算架構師和技術架構師合作,定義可用性目標,并推導出應用程序和數據庫層彈性屬性。
在建模的同時,根據預期或觀察到的使用模式定義假設的故障模型,并根據業務影響為這些故障模式制定測試計劃。
通過采用架構驅動的測試方法,企業可以在上線之前深入了解云計算應用程序彈性的基本級別,并且可以為性能修復活動分配足夠的時間,但仍然需要在云原生應用程序設計中測試應用程序的未知故障和多個方面的故障點。
混沌測試與站點可靠性工程
混沌測試是一種有意將壓力和異常引入云計算架構中的方法,以系統地測試系統的彈性。
首先明確指出的是,混沌測試并不能替代實際的測試系統,這只是衡量錯誤的另一種方法。通過混沌測試,IT團隊可以看到發生了什么情況以及如何反應。但是,最重要的是,它可以幫助他們衡量系統在可觀察性和彈性方面的差距,而這是最初被忽視的事情。
Netflix公司在2011年遷移到云計算系統時率先采用了這種強大的測試方法,混沌測試揭示低效率,并引導開發團隊進行更改、測量和提高彈性,幫助云計算架構師更好地理解和更改他們的設計。
持續、系統和混沌的測試增加了云計算基礎設施的彈性,有效地增強了系統的彈性,并最終增強了管理和運營團隊對其正在構建的系統的信心。
而企業必須部分或完全在云計算基礎設施上創建彈性IT系統。
使用混沌測試和站點可靠性工程可以幫助企業在以下方面保持彈性:
- 云計算和基礎設施彈性。
- 通過持續監控實現數據彈性。
- 通過確保用戶界面在高壓力條件下保持穩定,用戶和客戶體驗彈性。
- 通過將安全與治理和控制機制相結合來實現彈性網絡安全。
- 對基礎設施、應用程序和數據的彈性支持。
為了建立完整的應用程序彈性,除了前面提到的云計算應用程序設計方面,解決方案架構師還需要采用架構模式,允許注入特定故障以觸發內部錯誤,從而在開發和測試階段模擬故障。
故障觸發器的一些常見示例是響應延遲、資源占用、網絡中斷、瞬態條件、用戶的極端操作等等。
- 為常見的已識別場景制定持續監控、管理和自動化事件響應的計劃。
- 建立混沌測試框架和環境。
- 注入不同嚴重程度和組合的故障并監控應用層行為。
- 識別異常行為并重復上述步驟以確認關鍵性。
如何進行混沌測試
混沌測試可以通過在云計算結構的任何七層中引入異常來完成,幫助評估對彈性的影響。
當Netflix公司在2011年成功發布其彈性工具Chaos Monkey時,許多開發團隊將其用于混沌工程測試系統。還有另一個由軟件工程師開發的工具測試系統Gremlin,它也在做同樣的事情。但是,如果想在當前新冠疫情背景下執行混沌測試,則可以使用GameDay來實現。這會刺激流量突然增加而出現的異常現象;例如,客戶同時訪問一個移動應用程序。GameDay的目標不僅是測試彈性,還要增強系統的可靠性。
為確?;煦鐪y試成功,需要采取以下步驟:
1.識別:識別系統中的關鍵弱點,并創建一個假設以及預期結果。工程師需要識別和評估在假設框架內注入什么樣的故障。
2.模擬:根據真實事件在生產過程中注入異常。這可確保將系統中可能發生的情況包括在內。這可能會導致應用程序或網絡中斷或節點故障。
3.自動化:需要這些實驗實現自動化,可能是每小時或每周等。這確保了連續性,這是混沌工程中的一個不利因素。
4.持續反饋和完善:這些實驗有兩個結果,可以確保彈性或檢測需要解決的問題,可以從中獲得反饋以改進系統。
在系統上引發錯誤攻擊和序列的其他具體方法可能是:
- 增加網絡延遲。
- 切斷預定任務。
- 切斷微服務。
- 斷開系統與數據中心的連接。
結語
在當今云遷移和云計算使用量激增的數字時代,增強云計算彈性以提高應用程序的有效性能變得勢在必行。而在項目的生命周期中,持續和系統的測試是必不可少的,而且在公共云負擔過重的情況下,也要確保云計算架構的彈性。通過防止長時間的中斷,企業可以節省大量成本并避免損失,此外,還可以確保為客戶提供服務的持久性。因此,混沌測試成為采用大規模分布式系統的必要條件。
原文標題:Systematic and Chaotic Testing: A Way to Achieve Cloud Resilience,作者:Gaurav Aggarwal
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】