設計混沌實驗
您的任務關鍵性應用程式必須具備復原性,並準備好在失敗時做出回應。 不過,您很難預測雲端中的潛在失敗案例。 混沌工程可讓您在受控環境中進行失敗實驗,以識別開發與部署期間可能會發生的問題。 您將會刻意注射實際錯誤,並觀察系統如何回應。
在本單元中,您會使用 Azure Chaos Studio。 此服務可協助您測量、了解及改善雲端應用程式和服務復原能力。 如果在實際執行環境中發生失敗,其可讓您有萬全準備快速回應。
進行失敗模式分析
設計混沌實驗時,第一個動作是執行應用程式元件的失敗模式分析 (FMA),以識別潛在的失敗案例:
請列出與使用者流程相關,且必須可供使用和運作的所有元件。 例如,結帳使用者流程會使用 Azure App Services、Azure Functions 和 Azure Cosmos DB 資料庫。
請針對每個元件列出可能的失敗案例、影響,以及任何潛在的風險降低措施。
讓我們看看針對 Contoso Shoes 結帳使用者流程範例元件所完成的 FMA 結果。
用於裝載前端應用程式的 Azure App Service
風險 | 影響 | 可採取的風險降低措施 |
---|---|---|
可用性區域中斷 | 該區域中的執行個體可能會變成無法使用。 由於 App Service 方案上已啟用區域備援,因此預期不會發生完全中斷。 |
允許剩餘執行個體承擔額外負載和為此案例提供足夠的空餘空間,同時仍達到效能目標。 |
SNAT 連接埠耗盡 | 無法建立輸出連線。 因此,下游呼叫 (例如對資料庫的呼叫) 就會錯誤。 | 使用私人端點連線到下游元件。 |
個別執行個體變成狀況不良 | 使用者流量路由至狀況不良執行個體,可能會導致效能不佳,甚至完全錯誤。 | 使用 App Service 健康情況檢查功能。 這項功能會自動識別狀況不良的執行個體,並取代為全新且狀況良好的執行個體。 |
適用於結帳邏輯的 Azure Functions
風險 | 影響 | 可採取的風險降低措施 |
---|---|---|
(冷) 啟動效能緩慢 | 因為已採用 Azure Functions 使用量方案,所以新的執行個體不提供效能保證。 對服務的高需求 (來自「擾鄰」情況) 可能會導致結帳功能的啟動期間較長,進而影響效能目標。 |
請升級至 Azure Functions 進階方案。 |
基礎儲存體中斷 | 如果無法使用基礎儲存體帳戶,則該功能會停止運作。 | 使用區域儲存體進行負載平衡計算,或使用 GRS 共用儲存體進行負載平衡計算。 |
Azure Cosmos DB 資料庫
風險 | 影響 | 可採取的風險降低措施 |
---|---|---|
重新命名資料庫或集合 | 由於設定不相符,因此可能會遺失資料。 除非更新設定並重新啟動相關元件,否則應用程式無法存取任何資料。 | 您可以使用資料庫和集合層級鎖定來避免這種情況。 |
寫入區域中斷 | 如果主要區域 (或寫入區域) 發生中斷,當 Azure Cosmos DB 帳戶上已設定自動 (服務受控) 容錯移轉時,Azure Cosmos DB 帳戶會自動將次要區域升級為新的主要寫入區域。 系統會依照您指定的區域優先順序,容錯移轉到另一個區域。 | 設定資料庫帳戶以使用多個區域和自動容錯移轉。 如果發生失敗,服務會自動容錯移轉,並防止應用程式出現任何持續發生的問題。 |
由於缺少要求單位 (RU) 而進行大量節流 | 某些戳記可能會讓 Azure Cosmos DB 的使用率大幅提高,但其他戳記仍可處理要求。 | 請使用較佳的負載分佈以使用更多戳記,或新增更多 RU。 |
設計混沌實驗
若要設計混沌實驗,請挑選幾個失敗案例。 您可根據失敗發生的可能性,或可能會造成的影響進行挑選。
實驗的目標是要驗證您在應用程式中實作的復原措施。 例如,假設您在 App Service 上執行您的應用程式並啟用區域備援。 若區域中的所有基礎執行個體皆受到中斷,請預期您的應用程式仍會繼續執行。
使用 Chaos Studio 將錯誤注射至相關元件。 Chaos Studio 提供錯誤程式庫供您選擇。 不過,由於錯誤程式庫並未涵蓋所有情況,因此您可能需要調整案例。 或者,您可能需要尋找更多工具來協助您注射失敗。
重要
在實驗期間,請僅以非實際執行環境為目標。 將錯誤注射至實際執行環境不但具有高風險,而且還需要經驗和計畫。
範例:Azure Cosmos DB 中斷和容錯移轉
若您挑選資料表中所列 Azure Cosmos DB 的「寫入區域中斷」失敗案例。 假設為:服務起始的容錯移轉不應對應用程式造成任何持續的影響。 如果此假設證明成立,表示您驗證您複寫至多個區域的復原措施,對應用程式的可靠性會有理想中的正面影響。
若要模擬此失敗,請使用來自 Chaos Studio 失敗程式庫的 Azure Cosmos DB 失敗。
此範例適用於執行 10 分鐘 (PT10M
) 的 Azure Cosmos DB 容錯移轉,並使用 West US 2
作為新的寫入區域。 這會假設 West US 2
已設定為其中一個讀取複寫區域。
{
"name": "branchOne",
"actions": [
{
"type": "continuous",
"name": "urn:csci:microsoft:cosmosDB:failover/1.0",
"parameters": [
{
"key": "readRegion",
"value": "West US 2"
}
],
"duration": "PT10M",
"selectorid": "myCosmosDbResource"
}
]
}
實驗結束時,Chaos Studio 會將寫入區域切換回其原始值。
您必須先啟用該資源所對應的目標和功能設定,才能對 Azure 資源注射錯誤。 此設定會控制針對已啟用錯誤注射的資源,可執行的錯誤。 同時使用目標和功能並搭配其他安全性措施時,您就可以避免在使用 Chaos Studio 時發生意外或惡意的錯誤注射。
現在您已完成負載測試和混亂實驗的設計,您需要自動化到管道中,以便透過一致的方式定期執行。 在下一個單元中,您會了解如何新增 CI/CD 管線的測試。