在應用程式中建置備援,以避免發生單一失敗點
具韌性的應用程式會繞過故障。 識別應用程式中的重要路徑。 路徑中的每個點是否有備援? 當子系統失敗時,應用程式會切換到其他系統嗎?
在完美的實作中,新增統一備援可能會以指數方式增加系統的可用性。 例如,假設您有 N 相等且同樣平衡的元件,其如下:
- 可以獨立發生故障,並同時從資源池中移除
- 具有相同狀態或沒有狀態
- 故障期間沒有任何正在進行中的工作會永久遺失
- 具備相同功能
- 彼此沒有相依性
- 處理容量減少而不發生額外故障
如果每個個別元件都有的可用性 A,則可以使用 公式 1 - (1 - A)^N來計算整體系統可用性。
建議
請考慮商務需求。 系統內建的備援數量可能會影響成本和複雜性。 您的架構應透過商務需求來通知,例如復原時間目標 (RTO) 和恢復點目標 (RPO)。 您也應該考慮您的效能需求,以及小組管理複雜資源集的能力。
請考慮多分區和多區域架構。 請確定您瞭解 可用性區域和區域 如何提供復原能力,以及不同的架構取捨。
Azure 可用性區域是由在某一區域中隔離的數據中心組成。 藉由使用可用性區域,您可以抵抗單一數據中心或整個可用性區域的故障。 您可以使用可用性區域來權衡成本、風險降低、效能和復原能力。 例如,當您在架構中使用區域備援服務時,Azure 會在異地分隔的實例之間提供自動數據復寫和故障轉移,以降低許多不同類型的風險。
如果您有任務關鍵性工作負載,且需要降低全區域中斷的風險,請考慮多區域部署。 雖然多區域部署會隔離您免受區域災害的影響,但會付出代價。 多區域部署比單一區域部署更昂貴,而且管理更為複雜。 您需要作業程序來處理故障轉移和回復作業。 根據您的 RPO 需求,您可能需要接受稍微較低的效能,才能啟用跨區域數據複寫。 在某些商業情境中,額外的成本和複雜性可能是合理的。
提示
對於許多工作負載,區域備援架構會提供最佳取捨集。 如果您的商務需求指出您需要降低全區域中斷不太可能的風險,而且您已準備好接受這類方法所涉及的取捨,請考慮多區域架構。
若要深入瞭解如何設計解決方案以使用可用性區域和區域,請參閱 使用可用性區域和區域的建議。
將 VM 放在負載平衡器後面。 請勿將單一 VM 用於任務關鍵性工作負載。 相反地,將多個 VM 放在負載平衡器後面。 如果有任何 VM 無法使用,負載平衡器會將流量分散到其餘狀況良好的 VM。
複寫資料庫。 Azure SQL 資料庫 和 Azure Cosmos DB 會自動復寫區域內的數據,並可設定為跨可用性區域複寫,以提升復原能力。 您也可以選擇在跨區域啟用異地複寫的功能。 Azure SQL Database 和 Azure Cosmos DB 的異地復寫會在一或多個次要區域中建立數據的次要可讀取複本。 如果主要區域發生故障,資料庫可以切換至次要區域以進行寫入。 視復寫組態而定,您可能會因為未復寫的交易而遺失一些數據。
如果您使用 IaaS 資料庫解決方案,請選擇支援複寫和故障轉移的解決方案,例如 SQL Server Always On 可用性群組。
為提高可用性而分區。 資料庫分割通常用來改善延展性,但也可以改善可用性。 如果某個分區關閉,仍然可以連線到其他分區。 一個分片發生故障只會影響到整體交易中的一個子集。
測試並驗證您的備援元件。 簡單性可以在許多方面提升可靠性,但增加備援可能會增加複雜度。 為了確保新增冗餘真的能提升可用性,你應該驗證以下因素:
- 您的系統是否可以 可靠地 偵測狀況不良且狀況不良的備援元件,並安全地且迅速地從元件集區中移除它們?
- 您的系統是否可以 可靠地 擴展和縮減冗余元件?
- 您的例程、臨機操作和緊急工作負載作業可以處理備援嗎?
多區域解決方案
下圖顯示使用 Azure 流量管理員 來處理故障轉移的多區域應用程式。
如果您在多區域解決方案中使用 流量管理員 或 Azure Front Door 作為故障轉移路由機制,請考慮下列建議:
同步處理前端和後端故障轉移。 使用您的路由機制來故障轉移前端。 如果一個區域中無法連線到前端,則進行故障轉移,將新的請求路由至次要區域。 根據您的後端元件和資料庫解決方案的不同,您可能需要協調您的資料庫與後端服務的故障轉移。
使用自動故障轉移,但手動容錯回復。 使用自動化進行故障轉移,但不適用於容錯回復。 自動容錯回復可能會讓您在區域完全狀況良好之前切換至主要區域的風險。 請在手動故障切換之前,確認所有應用程式子系統都運行良好。 此外,您應該在回切前先檢查數據的一致性。
若要達成此目的,請在故障轉移之後停用主要端點。 若探測器的監控間隔較短且容忍的故障次數較少,故障切換與故障回撥會在短時間內發生。 在某些情況下,停用將無法及時完成。 為避免未經驗證的故障回復,請考慮實作一個健康檢查端點,以確認所有子系統運行正常。 如需詳細資訊,請參閱 健康端點監控模式。
在你的路由解決方案中包括備援。 請考慮為任務關鍵性 Web 應用程式設計 全域路由備援解決方案 。