準備

已完成

您將新增自己的增強功能至符合組織高可用性需求的現有架構。 在這裡,我們將討論透過練習取得成功所需的背景內容。

問題內容

Contoso Shoes 必須準備好推出下一個高調產品,這預期會大大增加流量。 在過去兩年內,有數個事件導致網站離線長達半天。 該系統並未完全在開發/測試環境中進行測試,有些錯誤問題會進入生產環境。 疑難排解和補救需要很長的時間,因為操作員無法快速識別根本原因。

當某些元件無法使用時,便會有些挑戰。 當 Azure Key Vault 設定錯誤時,計算上的向外擴張作業便會受到影響。 此外,針對區域性停電也沒有任何應對策略。 在最近的事件中,整個西歐區域都停電了。 因為工作負載只在該區域中執行,所以公司必須承受財務損失,直到區域再度恢復電力為止。

目前架構

若要完成這項挑戰,您必須充分了解 Contoso Shoe 目前的架構。 讓我們專注於其 API 層。

圖表顯示 Web 應用程式的基本架構。

元件

此架構的所有元件皆部署到單一區域。

  • Azure App 服務方案 標準 S2 SKU 提供託管應用程式的計算平台。 已啟用自動調整。 開發環境會使用基本 B1 SKU。

  • Azure App 服務 提供在容器中執行 API 程式碼的應用程式平臺。 App Service 驗證功能已啟用授權。

  • 部署位置 可讓您您執行部署,並將之與生產部署交換。 它們僅用於生產環境。

  • Azure Container Registry 會儲存容器化的 API 程式碼,並透過工作負載小組所建立及管理的持續整合/持續傳遞 (CI/CD) 管線推送。 生產環境與開發/測試環境皆會使用容器登錄。

  • Azure Cosmos DB 與 SQL API 會儲存與工作負載相關的所有狀態。 Cosmos DB 資料庫帳戶具有單一資料庫,其中包含共用輸送量模型中的一些容器。 Azure Cosmos 帳戶會使用無伺服器產能模式。 生產環境有一個實例,開發/測試也有一個。

  • Azure Key Vault 會儲存 API 對外部、協力廠商 API 進行 HTTP POST 呼叫所需的秘密,做為要求流程的一部分。 應用程式會透過 Azure App 服務應用程式設定中的金鑰保存庫參考來存取秘密。 生產環境有一個金鑰保存庫,開發/測試也有一個。

  • Azure Log Analytics 用作統一接收器,用於儲存解決方案中使用的所有元件之所有 Azure 診斷設定的記錄和指標。 生產環境有一個工作區,開發/測試也有一個。

  • Azure Application Insights 用於從 API 擷取遙測和記錄。 Application Insights 使用獨立模式,而非寫入專用的記錄分析工作區。 生產與開發/測試不會共用通用實例。

  • Azure Pipelines 用於 CI/CD,可建置、測試及部署生產前和生產環境中的工作負載。 工作負載小組會管理管線,也會管理其解決方案中的所有基礎結構。 Bicep 是基礎結構即程式碼 (IaC) 的技術選擇。

設計選擇

在元件清單中,部署戳記是由參與處理要求的服務所組成。 這些服務包括 App Services 和 API 程式碼和 Cosmos DB。 戳記也包含非功能元件:Key Vault 和 Container Registry。 應用程式對效能和復原架構具有協力廠商相依性。 系統管理的識別會在戳記的元件之間使用。

在戳記中,App Services 會設定為根據負載自動調整。

個別的環境會用於生產與開發/測試。 生產環境會使用 App Service 方案的標準 SKU。 公司做出這個選擇,以便能夠在將應用程式部署至生產環境之前,將應用程式預先設定為位置的功能。 開發/測試環境會使用基本 SKU 進行成本最佳化。 這兩個環境都有自己的服務實例。 環境只會共用 Container Registry。

容器化的 API 程式碼會在單一容器映射中傳遞,該映射會在 App Service 中執行。 API 具有各種前端用於讀取及寫入的多個 HTTP 端點。 前端並不在此課程模組的範圍中,但在這種情況的任務關鍵性狀態的整體範圍中。 程式碼已使用 Application Insights 進行檢測,以擷取一些基本遙測。 開發此程式碼的小組也會管理 API 容器映射和 CI/CD 管線的 CI/CD 管線。

取捨

不過,如同所有項目,目前架構也會有取捨。 商務需求優先于可靠性和作業的成本優化。 為維持在成本限制內,架構尚未演進。 利用平台所提供的可靠性功能時,元件就會不足。 例如,選擇計算的 SKU 可防止工作負載使用可用性區域。 對於遙測,會使用舊版的 Application Insights,但未與 Log Analytics 整合。

此外,工作負載的存取權過於普遍。 例如,如果沒有任何虛擬網路整合,所有 Azure 服務都可以透過公用網際網路直接連線。

開發解決方案時,應用程式開發小組使用單一 Azure 訂用帳戶,並在同一個訂用帳戶中共置開發/測試和生產環境,讓 DevOps 小組輕鬆使用工具。 但是,生產資源和開發/測試資源不會完全隔離。 這兩個環境之間會共用一些資源,但其確實會從 Contoso Shoes 解決方案的其餘部分取得隔離的訂用帳戶。

此外,開發/測試環境是開發與 QA 小組所有成員共用的單一環境。 選擇合理,因為小組的大小,而且兩者之間的協調不需要更高程度的隔離。 隨著小組和解決方案演進,單一開發/測試環境逐漸造成整合複雜度,因為工作流程生命週期會發生衝突。 變換及其對可靠性的影響成本很高。

專案規格

該公司想要將功能新增至其解決方案架構,以便能夠處理預期的負載增加。 以下是商務需求:

  • 藉由將架構延伸至多個區域,建置可承受區域故障的功能
  • 在地理位置更接近客戶的區域中,更快速地為客戶提供服務,進而改善客戶體驗
  • 與 Azure 藍圖對齊,並利用 Azure 服務所提供的最新可靠性功能
  • 透過建置整體健康情況模型,提早攔截問題並偵測系統中的串聯影響

這些需求只是其改進計畫的優先順序清單。 應用程式小組注意到,必須考慮所有設計區域,才能讓此解決方案的可靠性符合任務關鍵性標準。 請放心,在您協助他們處理即將推出的練習中涵蓋的各個層面之後,他們不會停止改善其解決方案和作業。

歡迎加入小組! Contoso Shoes 希望聽到您的建議。

設定

在此 [挑戰專案] 中,您將擔任架構設計人員的角色,以協助 Contoso Shoes 獲得其可靠性結果,並從上一節的優先項目開始。

  • 建議您使用架構圖表工具來視覺化架構。
  • 如果您熟悉服務及其功能,則不需要 Azure 訂閱來進行這項挑戰。