使用 Azure Container Apps 和 Dapr 部署微服務
本文說明在 Azure Container Apps 上執行具有 10 個微服務之訂單管理系統的解決方案。 此解決方案也會透過分散式應用程式運行時間 (Dapr) 和使用 Kubernetes 事件驅動自動調整 (KEDA) 的事件驅動調整,使用微服務最佳做法。
Dapr 和 Traefik 是各自公司的商標。 使用這些標記時不會隱含任何背書。
架構
下載此架構的 PowerPoint 檔案。
資料流程
此解決方案描述虛構的 Red Dog 訂單管理系統及其支援的 Azure 基礎結構。 此架構是由裝載 10 個 .NET Core 微服務應用程式的單一 Container Apps 環境所組成。 解決方案會使用 Dapr SDK 透過發布-訂閱、狀態和系結建置組塊來與 Azure 資源整合。 這些服務也會使用 KEDA 調整規則,根據事件觸發程式和調整為零案例來進行調整。
下列數據流對應至上圖:
Traefik: 將使用者要求從 UI 路由至互動式儀錶板的會計和 Makeline 服務的基本 Proxy。
UI: 顯示 Red Dog 訂單管理系統即時訂單和匯總銷售數據的儀錶板。
虛擬客戶: 客戶模擬計劃,可模擬客戶透過訂單服務下訂單。
訂單服務: 建立、讀取、更新和刪除 API,以放置和管理訂單。
會計服務: 處理、儲存和匯總訂單數據的服務。 它會將客戶訂單轉換成UI所展示有意義的銷售計量。
收據服務: 一種封存計劃,可產生並儲存訂單收據以供稽核和歷程記錄之用。
忠誠服務: 根據訂單支出追蹤客戶獎勵點,以管理忠誠計劃的服務。
Makeline 服務: 服務,可管理等候完成之目前訂單的佇列。 它會追蹤虛擬背景工作角色服務訂單的處理和完成。
虛擬工作者: 模擬 客戶訂單完成的背景工作模擬 程式。
| 服務 | 輸入 | Dapr 元件 | KEDA 調整規則 |
|---|---|---|---|
| Traefik | 外部 | 未啟用 Dapr | HTTP |
| UI | 內部 | 未啟用 Dapr | HTTP |
| 虛擬客戶 | 無 | 服務對服務調用 | N/A |
| 訂單服務 | 內部 | 發佈訂閱:Azure 服務總線 | HTTP |
| 會計服務 | 內部 | 發佈-訂閱:服務總線 | 服務總線主題長度,HTTP |
| 收據服務 | 內部 | 發佈-訂閱:服務總線 系結:Azure Blob 記憶體 |
服務總線主題長度 |
| 忠誠服務 | 內部 | 發佈-訂閱:服務總線 狀態:Azure Cosmos DB |
服務總線主題長度 |
| Makeline 服務 | 內部 | 發佈-訂閱:服務總線 狀態:Azure Cache for Redis |
服務總線主題長度,HTTP |
| 虛擬背景工作角色 | 無 | 服務對服務調用 系結:Cron |
N/A |
注意
您也可以在容器應用程式中實作 Bootstrap。 不過,此服務會執行一次執行資料庫建立,然後在 Azure SQL Database 中建立必要對象之後調整為零。
元件
Application Insights 是可延伸的應用程式效能管理服務,可用來監視即時應用程式並自動偵測效能異常。 在此架構中,您會使用ApplicationInsights搭配 Azure 監視器來檢視容器記錄,並從微服務收集計量。
Blob 記憶體 是一種雲端式解決方案,用於儲存大量非結構化數據,例如文字或二進位檔。 在此架構中,收據服務會透過 Dapr 輸出系結使用 Blob 記憶體來儲存訂單收據。
Azure Cache for Redis 是分散式、記憶體內部、可調整的受控 Redis 快取。 在此架構中,它會作為Makeline服務的Dapr狀態存放區元件,以在所處理訂單上儲存數據。
Azure Cosmos DB 是 NoSQL、多模型受控資料庫服務。 在此架構中,它會作為 Dapr 狀態存放區元件,供忠誠服務用來儲存客戶的忠誠度數據。
Azure 監視器 是一個統一的平臺,可讓您從 Azure 基礎結構環境收集、分析及處理客戶內容數據。 在此架構中,您會使用 Azure 監視器搭配 Application Insights 來檢視容器記錄,並從微服務收集計量。
服務總線 是完全受控的企業訊息代理程式,其中包含佇列和發佈-訂閱主題。 在此架構中,您會使用服務總線來進行Dapr發佈-訂閱元件實作。 多個服務會使用此元件。 訂單服務會在總線上發佈訊息,而 Makeline、會計、忠誠和收據服務會訂閱這些訊息。
Container Apps 是完全受控、無伺服器容器服務,可用來大規模建置及部署新式應用程式。 在此架構中,您會在 Container Apps 上裝載所有 10 個微服務,並將其部署至單一 Container Apps 環境。 此環境可作為系統周圍的安全界限。
SQL Database 是專為雲端建置的智慧型、可調整關係資料庫服務。 在此架構中,它會做為會計服務的數據存放區,它會使用 Entity Framework Core 與資料庫進行介面。 啟動載入器服務負責在資料庫中設定 SQL 資料表。 然後,它會先執行一次,再建立與會計服務的連線。
Traefik 是一種反向代理和負載平衡器,用於將網路流量路由到微服務。 在此架構中,使用 Traefik 的動態設定功能,從 UI 執行路徑型路由,這是 Vue.js 單頁應用程式。 此組態也會啟用對後端服務的直接 API 呼叫,以進行測試。
替代項目
在此架構中,您會部署 Traefik Proxy,以啟用Vue.js API 的路徑型路由。 有許多可供您用於此用途的替代開放原始碼 Proxy。 另外兩個常見的專案是 NGINX 和 HAProxy。
SQL Database 以外的所有 Azure 基礎結構都會使用 Dapr 元件來進行互作性。 Dapr 的優點之一是您可以藉由變更容器應用程式部署設定來交換所有這些元件。 在此案例中,服務總線、Azure Cosmos DB、Azure Cache for Redis 和 Blob 記憶體展示了一些超過 70 個可用的 Dapr 元件。 Dapr 檔中提供替代的發行-訂閱訊息代理程式、狀態存放區和輸出系結清單。
案例詳細資料
微服務是廣泛採用的架構樣式。 它們提供延展性、靈活度和獨立部署等優點。 您可以使用容器作為部署微服務應用程式的機制,然後使用 Kubernetes 之類的容器協調器來簡化作業。 大規模微服務架構有許多需要考慮的因素。 一般而言,基礎結構平臺需要對容器協調器等複雜技術有相當瞭解。
Container Apps 是完全受控的無伺服器容器服務,可大規模執行新式應用程式。 它可讓您透過基礎平臺的抽象概念來部署容器化應用程式。 藉由使用此方法,您不需要管理複雜的基礎結構。
此架構會使用 Container Apps 與 受控版本的 Dapr 整合。 Dapr 是開放原始碼專案,可協助開發人員克服分散式應用程式中固有的挑戰,例如狀態管理和服務調用。
Container Apps 也提供受控版本的 KEDA。 KEDA 可讓您的容器根據來自服務總線和 Azure Cache for Redis 等外部服務的連入事件自動調整規模。
您也可以在容器應用程式中啟用 HTTPS 輸入,而不需建立更多 Azure 網路資源。 您可以使用 Envoy Proxy,這也可允許流量分割案例。
如需詳細資訊,請參閱 比較容器應用程式與其他 Azure 容器選項。
本文說明在 Container Apps 上執行具有 10 個微服務之訂單管理系統的解決方案。 此解決方案也會透過 Dapr 和使用 KEDA 的事件驅動調整,使用微服務最佳做法。
潛在使用案例
此解決方案適用於任何針對分散式系統使用無狀態和具狀態微服務的組織。 解決方案最適合具有訂購和履行系統的消費者包裝商品和製造業。
下列解決方案具有類似的設計:
- Azure Kubernetes Service (AKS) 的微服務架構
- Azure Functions 上的微服務架構
- 事件驅動架構
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Well-Architected Framework。
可靠性
可靠性有助於確保您的應用程式可以符合您對客戶的承諾。 如需詳細資訊,請參閱 可靠性的設計檢閱檢查清單。
Container Apps 建置在 Kubernetes 基礎之上,其運作方式為基礎結構。 復原機制內建在 Kubernetes 中,如果發生問題,可監視和重新啟動容器或 Pod。 復原機制包含內建負載平衡器,可將流量分散到每個容器應用程式的多個復本。 此備援可讓系統維持運作,即使一個複本無法使用也一樣。
安全性
安全性可提供針對蓄意攻擊和濫用寶貴數據和系統的保證。 如需詳細資訊,請參閱安全性的設計檢閱檢查清單。
下列清單概述此架構中省略的數個安全性功能,以及其他建議和考慮:
此架構不會使用 私人端點,藉由從虛擬網路指派IP位址,以允許對Azure服務進行更安全的私人連線。 使用私人端點時,可以停用公用網路存取。 此方法會將流量保留在Microsoft骨幹上,並增強安全性和合規性。
應持續監視網路活動,以偵測並防止濫用。 您可以使用 Azure 防火牆 和路由表來達成此方法。 路由表可讓讓虛擬網路先通過防火牆的流量。 此程式是確保架構不會容易受到數據外洩攻擊的重要步驟。
使用 Web 應用程式防火牆 (WAF) 來防範常見的弱點。 使用 Azure Front Door 或 Azure 應用程式閘道在此架構中 實作 WAF 。
請考慮使用容器應用程式的內建驗證和授權功能,稱為 Easy Auth。Easy Auth 處理與 Web 應用程式外部身分識別提供者的整合,這可以減少您需要維護的程式碼量。
請針對工作負載身分識別使用受控識別。 受控識別可免除開發人員管理驗證認證的需求。 例如,基本架構會透過連接字串中的密碼向 SQL Server 進行驗證。 可能的話,請使用 Microsoft Entra 識別符向 Azure SQL Server 進行驗證。
成本優化
成本優化著重於減少不必要的費用,並提升營運效率的方式。 如需詳細資訊,請參閱 成本優化的設計檢閱檢查清單。
使用 Azure 定價計算機來估計此架構中的服務成本。
卓越營運
卓越營運涵蓋部署應用程式並使其持續在生產環境中執行的作業流程。 如需詳細資訊,請參閱卓越營運的設計檢閱檢查清單。
您可以使用 Azure 監視器和 Application Insights 來監視 Container Apps。 您可以在入口網站中流覽至每個容器應用程式中的 [ 記錄 ] 窗格,然後執行下列 Kusto 查詢,以檢視容器記錄。 此範例顯示Makeline服務應用程式的記錄。
ContainerAppConsoleLogs_CL |
where ContainerAppName_s contains "make-line-service" |
project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
order by _timestamp_d asc
Application Insights 中的應用程式對應也會顯示服務如何實時通訊。 然後,您可以將它們用於偵錯案例。 流覽至 Application Insights 資源底下的應用程式對應,以檢視類似下列地圖的內容。
如需詳細資訊,請參閱 在容器應用程式中監視應用程式。
效能效率
效能效率是指工作負載能夠有效率地調整以符合使用者需求。 如需詳細資訊,請參閱 效能效率的設計檢閱檢查清單。
此解決方案嚴重依賴 Container Apps 中的 KEDA 實作,以進行事件驅動調整。 當您部署虛擬客戶服務時,它會持續下訂單。 此調整會導致訂單服務透過 HTTP KEDA 縮放程式相應增加。 當訂單服務在服務總線上發佈訂單時,服務總線 KEDA 縮放程式會導致會計、收據、Makeline 和忠誠服務相應增加。 UI 和 Traefik 容器應用程式也會設定 HTTP KEDA 縮放程式,讓應用程式隨著更多使用者存取儀錶板而進行調整。
當虛擬客戶未執行時,此解決方案中的所有微服務都會調整為零,但虛擬背景工作角色和Makeline服務除外。 虛擬工作者不會相應減少,因為它會持續檢查訂單履行情況。 如需詳細資訊,請參閱 在 Container Apps 中設定調整規則。
參與者
本文由 Microsoft 維護。 下列參與者撰寫本文。
主要作者:
- Alice Gibbons |雲端原生全域黑帶
其他投稿人:
- Lynn Orrell |主要解決方案專家 (GBB)
- Kendall Roden |資深項目經理
若要查看非公開的 LinkedIn 個人檔案,請登入 LinkedIn。