本文說明在 Azure Container Apps 上使用 10 個微服務執行訂單管理系統的解決方案。 此解決方案也會透過 Dapr 和使用 KEDA 的事件驅動調整,使用微服務最佳做法。
Dapr 和 Traefik 是各自公司的商標。 使用這些標記時不會隱含任何背書。
架構
下載此架構的 PowerPoint 檔案。
資料流程
此解決方案會使用 Bicep 範本來執行 Reddog 訂單管理系統及其支援的 Azure 基礎結構部署。 此架構是由裝載 10 個 .NET Core 微服務應用程式的單一 Azure Container Apps 環境所組成。 您將使用 .NET Core Dapr SDK 透過發佈-訂閱(pub/sub)和狀態和系結建置組塊來與 Azure 資源整合。 雖然 Dapr 通常會在實作元件時提供彈性,但此解決方案是以意見為基礎。 這些服務也會使用KEDA調整規則,以根據事件觸發程式進行調整,並調整為零案例。
下列清單描述其所部署的每個微服務和 Azure Container Apps 組態。 請參閱 GitHub 上的 reddog-code 存放庫,以檢視程序代碼。
Traefik: 將使用者要求從 UI 路由至互動式儀錶板的會計和 Makeline 服務的基本 Proxy。
UI: 儀錶板,顯示 Reddog 訂單管理系統的即時訂單和匯總銷售數據。
虛擬客戶: 客戶模擬計劃,可模擬客戶透過訂單服務下訂單。
訂單服務: 要放置和管理訂單的 CRUD API。
會計服務: 處理、儲存和匯總訂單數據的服務。 它會將客戶訂單轉換成UI所展示有意義的銷售計量。
收據服務: 一種封存計劃,可產生並儲存訂單收據以供稽核和歷程記錄之用。
忠誠服務: 根據訂單支出追蹤客戶獎勵點,以管理忠誠計劃的服務。
Makeline 服務: 負責管理目前訂單等候履行的佇列的服務。 它會追蹤虛擬背景工作角色服務訂單的處理和完成。
虛擬工作者: 模擬 客戶訂單完成的背景工作模擬 程式。
啟動載入器(未顯示):使用 Entity Framework Core 來初始化 Azure 內數據表的服務 SQL 資料庫,以便與會計服務搭配使用。
服務 | 輸入 | Dapr 元件 | KEDA 調整規則 |
---|---|---|---|
Traefik | 外部 | 未啟用 Dapr | HTTP |
UI | 內部 | 未啟用 Dapr | HTTP |
虛擬客戶 | 無 | 服務對服務調用 | N/A |
訂單服務 | 內部 | 發佈/訂閱:Azure 服務匯流排 | HTTP |
會計服務 | 內部 | 發佈/訂閱:Azure 服務匯流排 | Azure 服務匯流排 主題長度,HTTP |
收據服務 | 內部 | 發佈/訂閱:Azure 服務匯流排 系結:Azure Blob |
Azure 服務匯流排 主題長度 |
忠誠服務 | 內部 | 發佈/訂閱:Azure 服務匯流排 狀態:Azure Cosmos DB |
Azure 服務匯流排 主題長度 |
Makeline 服務 | 內部 | 發佈/訂閱:Azure 服務匯流排 狀態:Azure Redis |
Azure 服務匯流排 主題長度,HTTP |
虛擬背景工作角色 | 無 | 服務對服務調用 系結:Cron |
N/A |
注意
您也可以在容器應用程式中執行 Bootstrapper。 不過,此服務會執行一次以執行資料庫建立,然後在 Azure SQL 資料庫 中建立必要的對象之後調整為零。
元件
此解決方案使用以下組件:
- Azure 資源群組 是適用於 Azure 資源的邏輯容器。 您可以使用單一資源群組來建構與 Azure 入口網站 中此解決方案相關的所有專案。
- Azure Container Apps 是完全受控、無伺服器容器服務,可用來大規模建置及部署新式應用程式。 在此解決方案中,您會在 Azure Container Apps 上裝載所有 10 個微服務,並將其部署至單一容器應用程式環境。 此環境可作為系統周圍的安全界限。
- Azure 服務匯流排 是完全受控的企業訊息代理程式,其中包含佇列和發佈-訂閱主題。 在此解決方案中,將它用於 Dapr pub/sub 元件實作。 多個服務會使用此元件。 訂單服務會在總線上發佈訊息,而 Makeline、會計、忠誠和收據服務會訂閱這些訊息。
- Azure Cosmos DB 是 NoSQL、多模型受控資料庫服務。 將它當做 Dapr 狀態存放區元件,供忠誠服務用來儲存客戶的忠誠度數據。
- Azure Cache for Redis 是分散式、記憶體內部、可調整的受控 Redis 快取。 它用來做為Makeline Service的 Dapr 狀態存放區元件,以在所處理訂單上儲存數據。
- Azure SQL 資料庫 是專為雲端建置的智慧型、可調整關係資料庫服務。 為會計服務建立它,該服務會使用 Entity Framework Core 與資料庫進行介面。 Bootstrapper 服務負責在資料庫中設定 SQL 數據表,然後在建立與會計服務的連線之前執行一次。
- Azure Blob 儲存體 儲存大量非結構化數據,例如文字或二進位檔。 收據服務會透過 Dapr 輸出系結使用 Blob 記憶體來儲存訂單收據。
- Traefik 是領先的新式反向 Proxy 和負載平衡器,可讓您輕鬆地部署微服務。 在此解決方案中,使用 Traefik 的動態設定功能從 UI 執行路徑型路由,這是Vue.js單頁應用程式 (SPA)。 此組態也會啟用對後端服務的直接 API 呼叫,以進行測試。
- Azure 監視器 可讓您從 Azure 基礎結構環境收集、分析及處理客戶內容數據。 您將與 Application Insights 搭配使用,以檢視容器記錄,並從微服務收集計量。
替代項目
在此架構中,您會部署 Traefik Proxy,以啟用Vue.js API 的路徑型路由。 有許多可供您用於此用途的替代開放原始碼 Proxy。 另外兩個熱門專案是 NGINX 和 HAProxy。
除了 Azure SQL 資料庫 之外,所有 Azure 基礎結構都會使用 Dapr 元件來保持互操作性。 Dapr 的優點之一是您可以藉由變更容器應用程式部署設定來交換所有這些元件。 在此情況下,已選擇 Azure 服務匯流排、Azure Cosmos DB、Cache for Redis 和 Blob 記憶體來展示一些可用的 70 個 Dapr 元件。 Dapr 檔中有替代發行/子代理程式、狀態存放區和輸出系結的清單。
案例詳細資料
微服務是越來越受歡迎的架構樣式,可以有許多優點,包括高延展性、較短的開發週期,以及提高簡化性。 您可以使用容器作為部署微服務應用程式的機制,然後使用 Kubernetes 之類的容器協調器來簡化作業。 大規模微服務架構有許多需要考慮的因素。 一般而言,基礎結構平臺需要對容器協調器等複雜技術有相當瞭解。
Azure Container Apps 是完全受控的無伺服器容器服務,可大規模執行新式應用程式。 它可讓您透過基礎平臺的抽象概念來部署容器化應用程式。 如此一來,您就不需要管理複雜的基礎結構。 Azure Container Apps 是由開放原始碼技術所提供。
此架構會使用 Azure Container Apps 與分散式應用程式運行時間 (Dapr) 的受控版本整合。 Dapr 是一個 開放原始碼 專案,可協助開發人員面對分散式應用程式中固有的挑戰,例如狀態管理和服務調用。
Azure Container Apps 也提供 Kubernetes 事件驅動自動調整 (KEDA) 的受控版本。 KEDA 可讓您的容器根據來自外部服務的傳入事件自動調整,例如 Azure 服務匯流排 和 Azure Cache for Redis。
您也可以在 Azure Container Apps 中啟用 HTTPS 輸入,而不需建立更多 Azure 網路資源。 您可以使用 Envoy Proxy,這也可允許流量分割案例。
若要探索 Azure Container Apps 與 Azure 中其他容器裝載平台的比較方式,請參閱 比較 Container Apps 與其他 Azure 容器選項。
本文說明在 Azure Container Apps 上使用 10 個微服務執行訂單管理系統的解決方案。 此解決方案也會透過 Dapr 和使用 KEDA 的事件驅動調整,使用微服務最佳做法。
潛在使用案例
此解決方案適用於任何針對分散式系統使用無狀態和具狀態微服務的組織。 解決方案最適合具有訂購和履行系統的消費者包裝商品和製造業。
這些其他解決方案具有類似的設計:
- Azure Kubernetes Service (AKS) 的微服務架構
- Azure Functions 上的微服務架構
- 事件驅動架構
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
可靠性
可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱可靠性支柱的概觀 (部分機器翻譯)。
Azure Container Apps 會在幕後在 Kubernetes 上執行。 復原機制內建在 Kubernetes 中,如果發生問題,可監視和重新啟動容器或 Pod。 復原機制會結合內建負載平衡器來執行每個容器應用程式的多個複本。 透過此備援,解決方案可以容許實例無法使用。
您可以使用 Azure 監視器和 Application Insights 來監視 Azure 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 資源底下的應用程式對應,以檢視類似下列內容。
如需監視 Azure Container Apps 的詳細資訊,請參閱 在 Azure Container Apps 中監視應用程式。
成本最佳化
藉由查看減少不必要的費用並提升營運效率的方式,將成本優化。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
使用 Azure 定價計算機來估計此架構中的服務成本。
效能效益
效能效率是工作負載調整以符合您以有效率方式放置的需求的能力。 如需詳細資訊,請參閱效能效率支柱概觀。
此解決方案嚴重依賴 Azure Container Apps 中的 KEDA 實作,以進行事件驅動調整。 當您部署虛擬客戶服務時,它會持續下單,這會導致訂單服務透過 HTTP KEDA 縮放程式相應增加。 當訂單服務在服務總線上發佈訂單時,服務總線 KEDA 縮放程式會導致會計、收據、Makeline 和忠誠服務相應增加。 UI 和 Traefik 容器應用程式也會設定 HTTP KEDA 縮放程式,讓應用程式隨著更多使用者存取儀錶板而進行調整。
當虛擬客戶未執行時,此解決方案中的所有微服務都會調整為零,但虛擬背景工作角色和Makeline服務除外。 虛擬工作者不會相應減少,因為它會持續檢查訂單履行情況。 如需容器應用程式中調整的詳細資訊,請參閱 在 Azure Container Apps 中設定調整規則。 如需 KEDA Scalers 的詳細資訊,請參閱 Scalers 上的 KEDA 檔。
部署此案例
如需部署指示,請參閱 Red Dog Demo:GitHub 上的 Azure Container Apps 部署 。
Red Dog Demo:微服務整合是一個封裝的應用程式範本,建置在上述程式代碼資產之上,以示範 Azure Container Apps、App Service、Functions 和 API 管理 整合,以及布建基礎結構,使用 GitHub Actions 部署程式代碼。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Alice Gibbons |雲端原生全域黑帶
其他投稿人:
- Kendall Roden |資深項目經理
- Lynn Orrell |主要解決方案專家 (GBB)
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
下一步
- Azure Container Apps 檔
- 比較 Azure 中的容器供應專案
- 其他 Reddog 訂單管理系統實作: