混沌:軟體工程新趨勢?

2019-09-11 08:18:52

找份工作,工作內容就是不斷破壞東西,然後讓它們更好地運轉?聽起來像是每個好奇心重的六歲小孩的夢想,但又確實是 DevOps 向 DevSecOps 轉型過程中的一種新興軟體工程趨勢。其宗旨就是通過測試系統極限,來提升任何情況下的安全及效能。



這種趨勢就是混沌工程。其前提是,即使在一切正常的時候,現代分散式網路的本質仍舊意味著,系統中存在固有的混沌元素,可導致不可預知的結果。


混沌工程是主動型漏洞管理的一種形式,在受控環境中測試網路在最極端情況下的表現。其理論基礎是:當你做好了應對最壞情況的準備,就能輕鬆應付常規效能問題。


在受控環境中放任混沌肆虐,可使工程師運用收集來的資料設計出更健壯、更富彈性的系統。而且,聽起來就很有趣。


Netflix 為什麼選擇混沌


混沌工程這一概念成型於 2010 年,作為此前 Netflix 所遭嚴重宕機事件的應對之策。Netflix 在宕機事件後即從單一供應商內部部署網路,轉型至基於雲的全球分佈模式。那次宕機事件源於該公司主資料庫之一崩潰,造成公司掉線三天,數百萬客戶無服務可用。


在一小時宕機時間即可導致企業平均 10 萬美元以上損失的時代,就算掉線五分鐘也是不可接受的。宕機不僅影響企業聲譽和收益,還會令企業網路更易遭受攻擊和資料洩露。


為準備轉向去中心化全球網路,Netflix 團隊建立了 Chaos Monkey (混世猴子)工具。該工具用於在非預期時間和位置上製造隨機系統性故障,以確定系統能否抗住極端情況。其中邏輯在於,如果網路連這種極端情況都能對付,那肯定就能處理不那麼極端的情況。


自 Netflix 將混沌作為一種軟體工程 DevOps 工具,並把他們的 “猴子” 放到了開源社群,將近七年的時間裡,混沌工程已經成為 IBM、谷歌和亞馬遜等公司的標準測試過程。


混沌實戰:混沌工程的原則


混沌工程可簡單比作以網路為物件的接種防疫。人體接種失活疫苗後,身體會自然產生抗體,抵禦此後可能的感染。網路安全發展至今,有些方法開始利用機器學習預測、調適和對抗內部及外部威脅。混沌工程可與這些先進網路安全方法緊密協作。


混沌工程原理


混沌工程的目標之一,是通過直接解決特定謬論,糾正不熟悉分散式網路的那些人的偏見。


這些謬論是:


  • 網路可靠且安全

  • 零延遲

  • 頻寬是無限的

  • 拓撲是不變的

  • 管理員只有一個

  • 傳輸開銷為零

  • 網路是同質的


混沌工程實驗旨在解決全球網路分佈中範圍和結果的不確定性,發現可能影響效能和安全的系統性漏洞。絕大多數混沌工程實驗遵循以下四步:


1. 定義指徵正常系統性能的可衡量結果 “穩定狀態”。


2. 假設該穩定狀態將在控制和挑戰兩種環境中延續。


3. 引入模擬現實世界問題的變數,比如伺服器崩潰、惡意軟體注入、網路掉線和硬體故障等。


4. 通過對比控制組和挑戰組中網路行為的差異,試圖推翻原本穩定狀態將延續的假設。


實驗在受控設定下進行,以便了解分散式網路行為的更多特徵,尋求在發生系統性故障之前就修正問題。良好混沌實驗的核心,是可產生非預期變數的一系列創意。在試圖證偽先前假設的過程中,一次改變一個重要變數,打破陳規。


有很多種方式可以建立新的潛在破壞性變數。很多人都會用 VPN 加密網際網路連線,但未必考慮過使用其地理位置功能隱藏自身 IP 地址。該軟體就通過以中間計算機連線網際網路,來冒充其他國家的使用者,以此實現隱藏自身 IP 地址的目的。關鍵點就在於嘗試打破穩定狀態。造成伺服器崩潰。關閉虛擬機器。給網路製造的複雜情況越多,你對系統安全與效能的信心越足,而且人工智慧的發展也可以生成相當複雜的各種場景。


為確保混沌工程在理想狀況下執行,產生出可靠資料,以下原則是必須遵循的。


1. 圍繞基於可測輸出而非系統特徵的穩定狀態行為,形成一種假設。這將證明系統可抵禦不可預測的壓力因素,而不僅僅是確認其如何運作。


2. 變動現實世界事件,包含源自硬體故障、軟體漏洞及其他未必造成故障的事件,比如瞬時流量峰值或操作增加。


3. 在生產中實驗,以便囊括真實流量。這可確保測試的真實性與相關性,讓結果比僅僅依靠流量及壓力模擬來得更具現實意義。


4. 運用自動化技術,安排和執行持續實驗。自動化測試已編入混沌工程標準流程,目的是節省人工實現所耗費的時間和開銷。


5. 最小化衝擊範圍,提升控制與減少網路中斷。


企業運用混沌工程的優勢


混沌條件下實現測試比單純實驗室分析提供的好處更多。技術人員能獲得有關係統性漏洞的更深洞見,可減少有害事件及後果,縮短上市時間。業務人員能主動緩解盈利損失,減少停工時間,啟動更有意義的 IT 和工程培訓專案。


最重要的是,開發人員、工程師和業務人員可以支援更可靠的服務開發與交付,通過確保持續的服務可用性而增加客戶滿意度。


想要保護聯網系統,在整體效能與網路安全緩解計劃中融入混沌工程標準值得一試。


結語


網路越複雜,分佈範圍越廣,軟體開發人員和工程師就越想擁有適應各種情況的有效測試協議。


引入混沌工程,可以在不中斷關鍵系統功能的情況下,更好地應對非預期事件。這將提升幾乎所有挑戰性環境中的整體效能並增強系統安全性。


相關閱讀

 

28款DevSecOps工具助力安全開發

輕量級安全開發框架CLASP及應用於DevSecOps的探討



已同步到看一看
在看



熱點新聞