設計混沌實驗

已完成

您的任務關鍵性應用程式必須具備復原性,並準備好在失敗時做出回應。 不過,您很難預測雲端中的潛在失敗案例。 混沌工程可讓您在受控環境中進行失敗實驗,以識別開發與部署期間可能會發生的問題。 您將會刻意注射實際錯誤,並觀察系統如何回應。

在本單元中,您會使用 Azure Chaos Studio。 此服務可協助您測量、了解及改善雲端應用程式和服務復原能力。 如果在實際執行環境中發生失敗,其可讓您有萬全準備快速回應。

進行失敗模式分析

設計混沌實驗時,第一個動作是執行應用程式元件的失敗模式分析 (FMA),以識別潛在的失敗案例:

  1. 請列出與使用者流程相關,且必須可供使用和運作的所有元件。 例如,結帳使用者流程會使用 Azure App Services、Azure Functions 和 Azure Cosmos DB 資料庫。

  2. 請針對每個元件列出可能的失敗案例、影響,以及任何潛在的風險降低措施。

讓我們看看針對 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 管線的測試。

知識檢查

1.

混沌實驗的目標為何?

2.

Azure Chaos Studio 支援哪些服務?

3.

您必須先啟用哪些設定,才能從 Azure Chaos Studio 對 Azure 服務進行實驗?