支援可靠性的架構設計模式

當您設計工作負載架構時,您應該使用解決常見挑戰的產業模式。 模式可協助您在工作負載內進行有意的取捨,並針對您想要的結果進行最佳化。 它們還可以幫助減輕源自特定問題的風險,這些問題可能會影響安全性、效能、成本和營運。 如果不加以緩解,這些風險最終將導致可靠性問題。 這些模式以實際經驗為後盾,專為雲端規模和營運模型而設計,而且本質上與供應商無關。 使用已知模式作為標準化工作負載設計的方式,是卓越營運的組成部分。

許多設計模式直接支援一或多個架構支柱。 支援可靠性支柱的設計模式會優先處理工作負載可用性、自我保護、復原、資料和處理完整性,以及故障的遏制。

下表摘要說明支援可靠性目標的架構設計模式。

樣式 總結
大使 透過卸載與網路通訊相關的跨領域工作來封裝和管理網路通訊。 產生的協助程式服務會代表用戶端起始通訊。 此調解點提供機會,將可靠性模式新增至網路通訊,例如重試或緩衝。
前端專用後端 透過建立特定前端介面獨有的個別服務,將工作負載的服務層個人化。 由於這種分離,支援一個用戶端的服務層中的故障可能不會影響另一個用戶端存取的可用性。 當您以不同的方式處理各種用戶端時,您可以根據預期的用戶端存取模式來排定可靠性工作的優先順序。
艙壁 在組件之間引入有意且完整的區隔,以隔離故障的影響範圍。 此故障隔離策略會嘗試僅將故障控制在遇到問題的艙壁上,從而防止對其他艙壁產生影響。
緩存側 透過引入按需填入的快取來優化對經常讀取資料的存取。 之後,快取將用於對相同資料的後續請求中。 快取會建立資料複寫,而且如果原始資料存放區暫時無法使用,則可用來以有限的方式保留經常存取的資料的可用性。 此外,如果快取發生故障,工作負載可以回復到原始資料存放區。
斷路器 防止對發生故障或不可用的依賴項提出連續請求。 如此一來,此模式可防止錯誤相依性過載。 您也可以使用此模式來觸發工作負載中的正常降級。 斷路器通常與自動恢復相結合,以提供自我保護和自我修復。
索賠檢查 將資料與傳訊流程分開,提供一種單獨擷取與訊息相關的資料的方法。 訊息匯流排無法提供專用資料存放區中常見的相同可靠性和災害復原,因此將資料與訊息分開可以提高底層資料的可靠性。 這種分離也允許在災難發生後使用訊息佇列復原方法。
補償交易 提供一種機制,透過反轉先前套用動作的效果來從失敗中復原。 此模式透過使用補償動作來解決關鍵工作負載路徑中的故障,這可能涉及直接復原資料變更、中斷交易鎖定,甚至執行本機系統行為來逆轉效果等程式。
競爭消費者 套用分散式及並行處理程序,以有效率地處理佇列中的項目。 此模型透過將取用者視為複本來建立佇列處理中的備援,因此執行個體失敗不會阻止其他取用者處理佇列訊息。
邊緣工作負載配置 透過將雲端視為期望的真實來源,管理分散式邊緣工作負載的配置,同時確保在連線中斷時配置仍能在本地提供。 此模式透過支援設定對應、偏移偵測及回滾,以從部分更新或無效配置中恢復,提升可靠性。
活動採購 將狀態變更視為一系列事件,並將它們擷取在不可變且僅可附加的記錄中。 當可靠的變更歷程記錄在複雜的商業程序中至關重要時,您可以使用此模式。 如果您需要恢復州存儲,它還有助於國家重建。
部署戳記 將租戶或工作負載單位隔離成獨立的區域,這些區域在運作時不共享資源或命運。 一枚郵票的故障僅限於該郵票,不會影響其他郵票的租戶。 跨區域部署印章也為冗餘與回收規劃奠定基礎。
聯合身分識別 將信任委派給工作負載外部的身分識別提供者,以管理使用者並為您的應用程式提供驗證。 卸載使用者管理和驗證會將這些元件的可靠性轉移至身分識別提供者,而身分識別提供者通常具有較高的 SLA。 此外,在工作負載災害復原期間,驗證元件可能不需要在工作負載復原計劃中進行處理。
閘道聚合 透過在單一請求中彙總對多個後端服務的呼叫,簡化用戶端與工作負載的互動。 此拓蹼可讓您將暫時性錯誤處理從跨用戶端的分散式實作移至集中式實作。
閘道卸載 在將要求轉送至後端節點之前和之後,將要求處理卸載至閘道裝置。 將此責任卸載至閘道可降低後端節點上應用程式程式碼的複雜性。 在某些情況下,將某些功能分配到可靠的平台提供的功能上會完全取代原有功能。
網關路由 根據請求意圖、業務邏輯和後端可用性,將傳入的網路請求路由到各種後端系統。 閘道路由可讓您將流量僅路由至系統中狀況良好的節點。
晶洞 部署跨多個地理位置以主動-主動可用性模式運作的系統。 此型樣使用資料抄寫來支援任何用戶端都可以連接至任何地理實例的理想。 它可以幫助您的工作負載承受一或多個區域中斷。
健康端點監控 提供一種方法,藉由公開專為該目的設計的端點來監視系統的健康情況或狀態。 您可以使用此 API 端點來管理工作負載的健康狀況,並設定警報及儀表板功能。 您也可以將其用作自我修復補救的訊號。
冪等消費者 確保同一訊息多次處理時,效果與處理一次時相同。 保證至少一次送達的訊息系統可能會送達重複訊息,因此這種模式讓工作負載能在不損壞資料的情況下使用重試。
索引表 透過使客戶端能夠查詢元數據以便可以直接檢索數據,從而優化分佈式數據存儲中的數據檢索,從而避免進行完整的數據存儲掃描。 因為用戶端會透過查閱程序指向其分區、分割區或端點,所以您可以使用此模式來促進資料存取的容錯移轉方法。
領導人選舉 建立分散式應用程式實例的領袖。 領導者協調與實現目標相關的責任。 此模式透過可靠地重新導向工作來減輕節點故障的影響。 當領導者發生故障時,它還通過共識算法實現故障轉移。
管道和過濾器 將複雜的資料處理分解為一系列獨立的階段,以達到特定的結果。 每個階段的單一職責可以集中註意力,並避免混合資料處理的干擾。
優先隊列 確保在較低優先順序的項目之前處理和完成較高優先順序的項目。 根據業務優先順序來區分項目,可讓您將可靠性工作集中在最關鍵的工作上。
發布者/訂閱者 透過中繼訊息代理程式或事件匯流排取代直接用戶端與服務或用戶端與多個服務的通訊,以分離架構的元件。
基於佇列的負載調整 透過將傳入的請求或任務緩衝在佇列中,並讓佇列處理器以受控的速度處理它們來控制傳入請求或任務的數量。 這種方法可以透過將任務的到達與其處理過程分離,來提供應對需求突然激增的彈性能力。 它還可以隔離佇列處理中的故障,使其不會影響接收。
速率限制 控制用戶端要求的速率,以減少節流錯誤,並避免無限制的錯誤重試案例。 此策略會透過確認與服務通訊的限制和成本來保護用戶端,因為服務的設計目的是避免達到指定的限制。 它的工作原理是控制在特定時間段內傳送到服務的操作數量和/或大小。
重試 透過以受控方式重試某些作業,解決可能暫時性或間歇性的失敗。 減輕分散式系統中的暫時性故障是提高工作負載彈性的關鍵技術。
Saga 分散式交易 透過將工作分解為較小的獨立交易序列來協調長時間執行且可能複雜的交易。 每筆交易還必須具有補償操作,以逆轉執行失敗並保持完整性。 由於跨多個分散式系統的整合式事務通常是不可能的,因此此模式透過實作原子性和補償來提供一致性和可靠性。
排程代理人主管 根據系統中可觀察到的因素,在整個系統中有效地分配和重新分配任務。 此模式使用性能指標來偵測故障並將任務重新路由到狀況良好的代理程式,以減輕故障的影響。
順序車隊 維護並行傳訊輸入,同時也支援以定義的順序進行處理。 此模式可以消除難以疑難排解的競爭狀況、有爭議的訊息處理,或其他解決可能導致故障的錯誤排序訊息的因應措施。
分片 將載入導向至特定的邏輯目的地以處理特定請求,從而啟用共置以進行最佳化。 因為將資料或處理隔離至分片,因此一個分片中的故障將限制在該分片內。
絞殺者無花果 提供一種方法,以系統地將執行中的系統元件替換為新元件,通常是在系統的移轉或現代化期間。 此模式的累加方法有助於降低轉換期間的風險。
節流 對資源或元件的傳入請求的速率或輸送量施加限制。 您可以設計限制,以協助防止可能導致故障的資源耗盡。 您也可以使用此模式作為正常降級計劃中的控制機制。

後續步驟

檢視支持其他Azure Well-Architected框架支柱的架構設計模式: