越來越多使用者希望企業業務能7×24不間斷執行,同時企業卻面臨越來越多業務中斷的風險,如企業系統複雜性的增加,頻繁的功能更新和釋出等。如何確保業務連續性,提升韌性,成為企業急需解決的問題。
韌性是應用程式抵禦中斷或從中恢復的能力,包括與基礎設施、依賴服務、錯誤配置、網路問題和負載激增相關的中斷。在亞馬遜雲科技,構建雲韌性是一項最基礎的工作。亞馬遜雲科技從一開始並持續在其基礎設施、服務設計與部署、運營模式和機制中將韌性考慮其中。在此基礎上,亞馬遜雲科技還提供一套全面的服務、最佳實踐等,進一步幫助客戶提升自身的韌性。
亞馬遜雲科技的韌性始於全球基礎設施
亞馬遜雲科技全球基礎設施地理位置分散,遍及34個地理區域的108個可用區。為了避免單點故障的影響範圍,亞馬遜雲科技最小化全球基礎設施之間的互聯性。每個區域都獨立於其他區域,區域之間的這種隔離機制確保單個區域發生服務故障時,其他區域不受影響仍正常運營。每個區域由三個或更多個相互獨立,且在物理上分隔的可用區組成。每個可用區都有獨立的電力、製冷和物理安全設施,同一區域內的可用區之間的物理距離也經過精心計算——通常是100公里以內。可用區的這種隔離機制,既能防止如供電、冷卻等常見故障點,也能避免同時受到如地震、洪水等大規模災害的影響。可用區之間又透過冗餘的超低延遲網路連線,可實現可用區間單位毫秒級延遲的資料同步複製。為了獲得高可用性的同時可以實現更大的容錯能力,客戶可以將他們的應用程式設計為在多個可用區中執行。
亞馬遜雲科技將韌性根植於服務及架構設計中
亞馬遜雲科技構建的服務均滿足極高的可用性目標。在服務/系統設計時,亞馬遜雲科技使用透過對服務的控制平面和資料平面進行隔離設計,並採用 “單元架構”設計模式,減少故障發生的可能,並儘可能降低故障發生時的影響範圍。
亞馬遜雲科技服務分為控制平面和資料平面,並對他們進行分離設計,即資料平面不依賴於控制平面而獨立執行,當控制平面發生故障的情況下資料平面仍能繼續正常執行。其中,控制平面提供用於建立、讀取/描述、更新、刪除和列出(CRUDL)資源的管理 API,例如啟動新的 Amazon EC2 例項、建立 Amazon S3 儲存桶以及描述 Amazon SQS 佇列等。資料平面是提供服務的主要功能,例如正在執行的Amazon EC2 例項本身、讀取和寫入Amazon EBS 卷、在 Amazon S3 儲存桶中獲取和放置物件等。控制平面往往是複雜的協調和聚合系統,會執行多項任務;資料平面則沒那麼複雜,相比控制平面其發生故障事件的可能性要小。這類似於火車系統,控制平面相當於指揮中心,資料平面則是鐵路線路,當指揮中心如通訊系統出現臨時故障時,火車仍然能按照既定線路執行。
亞馬遜雲科技根據區域和可用區的隔離機制以及控制平面和資料平面分離的原則,提供三種服務型別:全域性(Global)服務、區域級(Region)服務、可用區級(AZ)服務。全域性服務的控制平面和資料平面不是在每個區域中獨立存在。全域性服務以Amazon Identity and Access Management(Amazon IAM)為例,該服務是全域性服務,它的資料平面獨立存在於每個區域(Region),該區域中的每個雲服務都直接與Amazon IAM資料平面互動。Amazon IAM 有獨立的控制平面,客戶可以使用它來管理身份和策略等IAM 資源。當 IAM 控制平面故障的情況下,無需任何更改,每個區域的身份驗證和授權(即IAM的資料平面)都可以繼續正常執行。
區域級服務是建立在多個可用區域之上的服務,資料平面和控制平面都是區域級別。以Amazon S3 為例,將請求和資料分佈在多個可用區之間,可以自動從可用區故障中恢復。
可用區級服務可在一個區域內的每個可用區中獨立執行,不依賴於其他可用區中的元件,可用區服務可以指定將資源部署到哪個可用區,如Amazon EC2屬於可用區級服務。客戶可以透過部署多可用區架構執行具有更高可用性、容錯能力和可擴充套件性的生產級工作負載。當工作負載使用多個可用區架構時,可以更好地隔離和保護客戶免受影響單個可用區物理基礎設施問題的影響,即使一個可用區出現故障,工作負載也能保持執行。
此外,為了進一步降低故障發生時的影響範圍即“爆炸半徑”,亞馬遜雲科技還採用了“單元架構”設計模式。該模式將服務切分為多個部署堆疊,每個部署堆疊稱為“單元” ,每個單元之間都是互相獨立的,不共享任何內容,包括資料庫,每個單元服務於一個或多個客戶。採用了單元架構後,以可用區級別的服務為例,服務發生故障的影響範圍就限制在單元內,而不是整個可用區。
“經驗沒有壓縮演算法”——透過卓越的運營和機制確保雲服務的韌性
亞馬遜雲科技還建立內部運營機制,透過服務責任模型、運營就緒審查、安全/持續部署以及錯誤流程糾錯來確保雲服務的韌性。其中,亞馬遜雲科技的工程和產品管理工作由小型多學科團隊領導,他們對所提供的服務擁有強大的所有權——不僅負責設計和釋出服務,還負責在生產過程中運營服務,並在出現問題時隨時待命。
在一項服務釋出之前,亞馬遜雲科技還會使用“運營就緒審查”流程來稽核所有新服務的運營準備情況。當對部署軟體進行服務更新或推出新服務時,亞馬遜雲科技會使用安全、持續的部署管道。為了最大限度地減少錯誤部署對生產造成的潛在影響,亞馬遜雲科技透過使用廣泛的預生產測試、自動回滾和交錯生產部署,將自動化部署安全構建到釋出過程中。例如,一項服務的更新會從小處開始,首先部署到可用區內的單個最小單元,並經過指定的等待期以驗證沒有出現問題,再逐步部署到整個可用區的其餘部分、其他可用區、單個區域,最後部署到其餘區域。
此外,亞馬遜雲科技還利用“糾錯流程”,對客戶事件進行分析、研究,找出根本原因,減少其他服務發生類似問題的可能性,防患於未然。
亞馬遜雲科技賦能客戶利用“雲韌性”提升“雲中韌性”
構建韌性是一個持續的過程,而不是一次性的努力。為了幫助客戶更輕鬆地提升雲中應用的韌性,亞馬遜雲科技基於自身以及多年服務客戶的廣泛經驗,總結了一套包含了服務、策略和架構最佳實踐的“韌性系統建設生命週期框架”。該框架包含五個階段:設定目標、設計和實施、驗證和測試、持續運營以及響應和改進。
亞馬遜雲科技在每個階段都為客戶提供了適用的工具和服務。例如,客戶可以使用Amazon Resilience Hub來設定目標,根據這些目標評估韌性狀況,並根據Amazon Well-Architected Framework和Amazon Trusted Advisor的建議實施改進措施。在Resilience Hub中,客戶可以建立和執行Amazon Fault Injection Service實驗,這些實驗允許客戶測試其應用程式將如何響應某些型別的中斷。其他服務,如Amazon Backup、Amazon Elastic Disaster Recovery (Amazon DRS)和Amazon Route53 Application Recovery Controller (Route 53 ARC),可以幫助客戶快速響應和從中斷中恢復。
結語
正如亞馬遜資訊長 Werner Vogels曾說過“Everything fails all the time”(故障總在情理之中、意料之外),這也是亞馬遜雲科技從開始並始終加強和發展韌性的原因。亞馬遜雲科技將持續為客戶提供廣泛、深入的架構及運營最佳實踐服務、工具和指導,幫助客戶在雲中構建和執行韌性的應用程式。