如何實現彈性架構
為了管理大規模的系統,你必須把系統推向強度極限,但仍然有能力在故障中恢復,並且擁抱失敗,Adrian Hornsby 寫了兩篇部落格,分享了自己在大規模系統工作中十多年的經驗,以及他發現的有用的模式。
\\Hornsby是AWS的技術專員,他指出,對於較小的系統,最多幾十個例項,完全執行模式通常是正常狀態,很少出現故障。在大規模系統中實現這一點幾乎是不可能的;相反,部分失敗是常態,他指出,對於大多數web應用程式來說,這並不是一個大問題,儘管這當然會影響收入。為了應對這一點,他的建議是在彈性成本和可能的收入損失之間找到一個很好的平衡。
\\Hornsby描述了幾種他認為有助於構建彈性體系結構的模式,但他強調彈性不僅僅與軟體有關。基礎設施層、網路和應用程式設計以及人員和文化也很重要。
\\冗餘
\\對於Hornsby來說,在雲中部署應用程式時最重要的事就是冗餘了,通過部署多個例項(可能在不同的區域或地區)來增加可用性。
\\自動伸縮
\\Hornsby的下一步是根據需求自動調整應用程式的容量,這是目前常見的機制。不同的自動縮放技術以不同的速度運作,因此,選擇一種適合應用程式需求的非常重要。他還指出,由於容器平臺和功能的存在,如今的擴充套件速度要快得多。
\\基礎設施即程式碼
\\在使用基礎架構即程式碼時,可重複性是一個重要的收益點,他比較了使用一個模版針對多套環境手工配置資料中心的工作和多次自動執行模板的工作。
\\如果,環境遭到某種方式的破壞,甚至被刪除時,您可以從備份中恢復所有資料,並使用模板重新構建所有內容。這比手工完成這些工作要快得多,風險也小得多。
\\Hornsby還將基礎架構即程式碼視為知識共享。團隊可以像處理其他程式碼一樣對待這類程式碼,也可以使用拉請求來驗證更改。
\\不可變的基礎設施
\\不可變的基礎設施意味著對於每次部署來說,所有元件都是可替換的,不做任何更新,Hornsby notes提到兩條基於不可變伺服器模式的規則:
\\- 不應該在實時系統上進行任何更新。\
- 必須始終從供應資源的新例項開始著手。\
在處理不可變的基礎設施時,Hornsby建議使用金絲雀部署,以減少部署新版本應用程式時出現故障的風險。使用這種技術,您可以在真實的生產環境中進行測試,並在需要時進行非常快速的回滾。
\\無狀態應用程式
\\為了能夠使用自動伸縮和不可變的基礎設施,應用程式必須是無狀態的。這意味著所有請求都必須獨立於先前的請求或會話處理,不能將任何資訊儲存在本地磁碟或記憶體中。在自動縮放組中共享狀態只能使用記憶體物件快取系統,比如Memcached或類似的產品。
\\避免級聯故障
\\按照Hornby的經驗,導致停機的一個常見原因是級聯故障,在這種情況下,通過不同型別的依賴關係發生的區域性故障有時會導致整個系統崩潰。一個常見的例子是過載,例如當一個叢集當機時,所有的流量都轉移到另一個叢集。為了避免這些型別的失敗,他推薦了一些模式,包括:
\\- 超時。資料庫速度減慢時,如果仍有相同數量的傳入流量可能很快使系統失敗。超時的速度越快,可能意味著服務的質量下降而不至於崩潰。\
- 冪等操作。由於暫時的錯誤,客戶端可能多次傳送相同的請求,這可能導致錯誤。為了避免這種情況,Hornsby傾向於使用冪等請求,使這些請求可被反覆處理而不會出現問題。\
- 服務降級和回退。在處理高負載時,一種選擇是提供要求較低的服務變體。比如說,返回通用的資訊列表,而不是個性化的列表。\
- 拒絕。自衛的最後一步是開始放棄請求,最好是先放棄不那麼重要的請求。\
Hornsby最後指出,在處理雲中的大規模分散式系統時,間歇性錯誤是一種常態。可能很難一下子搞清楚如何及時響應這些錯誤,但他建議可以收集統計資料,並根據這些資料建立處理錯誤的閾值。最後,他強調了自動化的重要性。要得到彈性和可靠的應用程式,它們經過了充分測試過的部署並具有快速自旋時間,您必須儘可能地自動化。
\\相關文章
- 如何利用容器與中介軟體實現微服務架構下的高可用性和彈性擴充套件微服務架構套件
- 分散式架構篇 | 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- Kotlin如何實現MVP架構KotlinMVP架構
- 彈性伸縮:高可用架構利器(架構+演算法+思維)架構演算法
- 唯品會架構師是如何實現架構重構的架構
- 如何用 Swift 實現一個好玩的彈性動畫Swift動畫
- 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- iOS架構:AOP實現區域性模組化iOS架構
- 百萬線上的美拍直播彈幕系統架構實現架構
- 彈性架構設計之運維技術棧架構運維
- 簡單實現具有彈性的ListViewView
- WKViewManager iOS 彈窗架構ViewiOS架構
- 帶你瞭解極具彈性的Spark架構的原理Spark架構
- 如何使用 Kubernetes 實現應用程式的彈性伸縮
- TencentHub的架構實現架構
- 鴻蒙系統(HarmonyOS)全域性彈窗實現鴻蒙
- 79、概述struts,以及struts如何實現MVC架構的?MVC架構
- 如何在SSR架構中實現離線可用?(一)架構
- ASP.NET安全架構--如何實現.NET安全ASP.NET架構
- 百億資料個性化推薦:彈幕工程架構演進架構
- 【轉載】實現軟體架構質量屬性的戰術架構
- 包教包會 - 彈性動畫的原理與實現動畫
- SVG 動畫實現彈性的頁面元素效果SVG動畫
- 如何基於COLA架構快速實現一個CRUD操作架構
- 微服務架構如何實現客戶端負載均衡微服務架構客戶端負載
- 悠然亂彈:我的架構觀架構
- CoLAKE: 如何實現非結構性語言和結構性知識表徵的同步訓練
- 彈性探索與實踐
- 六邊形架構 Java 實現架構Java
- RESTful架構和實現級別REST架構
- CA 雲架構的實現之路架構
- 微服務在彈性雲實現無損釋出實踐微服務
- 完美實現賬戶踢出時的全域性彈窗
- 含ppt下載|解析支付寶移動端彈性動態架構架構
- 如何基於LSM-tree架構實現一寫多讀架構
- 如何在Java中實現事件驅動的微服務架構Java事件微服務架構
- Android MVP架構從入門到精通-真槍實彈AndroidMVP架構
- 人人都是 Serverless 架構師 | 彈幕應用開發實戰Server架構