Microsoft與領先的社群專家合作,產生了完整的雲端原生微服務參考應用程式 eShopOnContainers。 此應用程式旨在展示如何使用 .NET 和 Docker 建置在線店面,同時也提供選擇性地使用 Azure、Kubernetes 和 Visual Studio。
圖 2-1。 eShopOnContainers 範例應用程式螢幕快照。
開始本章之前,建議您先下載 eShopOnContainers 參考應用程式。 如果您這樣做,應該更容易理解所呈現的資訊。
功能和需求
讓我們從檢閱應用程式的功能和需求開始。 eShopOnContainers 應用程式代表一家在線商店,銷售各種實體產品,例如 T 恤和咖啡杯。 如果你以前在網上買過任何東西,使用商店的體驗應該比較熟悉。 以下是市集實作的一些基本功能:
- 列出目錄項目
- 依類型篩選項目
- 依品牌篩選項目
- 將商品新增至購物籃
- 編輯或移除購物籃中的商品
- 結帳
- 註冊帳戶
- 登錄
- 登出
- 檢閱訂單
應用程式也有下列非功能性需求:
- 它必須具有高可用性,而且必須自動縮放以適應增加的流量(並在流量減少時自動縮減)。
- 它應該提供易於操作的健康狀態和診斷日誌監控機制,以協助排除所遇到的任何問題。
- 它應該支援敏捷式開發程式,包括持續整合和部署的支援(CI/CD)。
- 除了兩個 Web 前端(傳統和單頁應用程式),應用程式也必須支援執行不同作系統的行動用戶端應用程式。
- 它應該支援跨平台裝載和跨平台開發。
圖 2-2。 eShopOnContainers 參考應用程式開發的架構。
eShopOnContainers 應用程式可由網路或行動用戶端透過 HTTPS 存取,以 ASP.NET Core MVC 伺服器應用程式或適用的 API 閘道為目標。 API 閘道提供數個優點,例如將後端服務與個別前端用戶端分離,並提供更佳的安全性。 應用程式也會使用稱為Backends-for-Frontends (BFF) 的相關模式,建議為每個前端用戶端建立個別的API閘道。 參考架構示範如何根據要求來自 Web 或行動用戶端來分拆 API 閘道。
應用程式的功能會分成許多不同的微服務。 有服務負責驗證和身份識別、列出產品目錄中的項目、管理使用者的購物籃,以及下訂單。 每個個別服務都有自己的永續性記憶體。 沒有所有服務互動的單一主要數據存放區。 相反地,服務之間的協調和通訊會視需要使用訊息總線來完成。
每個不同的微服務都根據個別需求以不同的方式設計。 這個層面表示其技術堆疊可能會有所不同,不過它們全都使用 .NET 建置,並專為雲端設計。 更簡單的服務提供基礎資料存儲的基本 Create-Read-Update-Delete(CRUD)存取權,而更進階的服務則使用 Domain-Driven 設計方法和模式來管理商務複雜度。
圖 2-3。 不同類型的微服務。
程序代碼概觀
因為其使用微服務,所以 eShopOnContainers 應用程式在其 GitHub 存放庫中包含相當多不同的項目和解決方案。 除了個別的解決方案和可執行檔之外,各種服務的設計目的是在本地開發期間及生產環境的運行階段,都能在自己的容器內執行。 圖 2-4 顯示完整的 Visual Studio 解決方案,其中會組織各種不同的專案。
圖 2-4。 Visual Studio 方案中的專案。
程式代碼會組織以支援不同的微服務,而且在每個微服務內,程式代碼會分成網域邏輯、基礎結構考慮,以及使用者介面或服務端點。 在許多情況下,每個服務的依賴項可以在生產環境中由 Azure 服務滿足,並且也有適合本地開發的替代選項。 讓我們來檢查應用程式的需求如何對應至 Azure 服務。
瞭解微服務
本書著重於使用 Azure 技術建置的雲端原生應用程式。 若要深入瞭解微服務最佳做法以及如何建構微服務型應用程式,請閱讀隨附書籍 .NET 微服務:容器化 .NET 應用程式的架構。