解決方案構想
本文是解決方案概念。 如果您想要以更多資訊擴充內容,例如潛在的使用案例、替代服務、實作考慮或定價指引,請提供 GitHub 意見反應讓我們知道。
微服務架構會將應用程式設計為鬆散結合服務的集合。 在微服務架構中,服務會更精細,且通訊協定是輕量型的。 微服務提供優點,例如清楚區分考慮和分離相依性。
相較于傳統整合型應用程式,微服務會在開發週期中引進複雜度。 傳統上,開發會在應用程式堆疊的本機或虛擬複本中進行,以隔離方式在本機設定和執行計算和儲存體元件。 在微服務模型中,開發人員必須針對現有的架構測試其服務、提早攔截整合問題以節省組建和部署時間,並讓整合式組建在應用程式的生命週期中保持乾淨。
開發測試 (DevTest) 是一種軟體發展方法,可在開發階段早期整合測試以加速開發。 DevOps 是結合軟體發展和 IT 作業的一組做法,可縮短開發週期並提供高品質的持續傳遞。 Kubernetes 是開放原始碼容器協調流程系統,用於自動化應用程式部署。
此解決方案架構會建立開發和部署環境的模型,以在 DevTest 中使用 DevOps 快速反復開發Azure Kubernetes Service (AKS) 微服務應用程式。
潛在使用案例
- 繼承應用程式現代化
- 需要即時處理 (銀行/財務或資料串流/媒體) 的解決方案
- 應用程式的 RAM 或 CPU 密集部分 (原生語言處理)
架構
下載這個架構的 Visio 檔案 。
資料流程
開發人員使用 本機進程搭配 Kubernetes,在開發 Kubernetes 叢集的內容中執行其本機微服務版本。 在偵錯服務時連線到叢集,可在完整的應用程式內容中快速測試和開發。
每個微服務程式代碼基底都會使用個別的 GitHub 程式碼存放庫進行原始檔控制。
GitHub Actions會建置微服務容器映射,並將其推送至Azure Container Registries。 GitHub Actions也會更新存放庫的最新標籤,以便持續整合 (CI) ,或發行的標記存放庫。
GitHub Actions自動化測試會產生Azure Boards的工作專案,讓所有工作專案都能在單一位置管理。
Visual Studio Code擴充功能支援Azure Boards和 GitHub 整合。 將Azure Boards工作專案與 GitHub 存放庫建立關聯,會將需求系結至程式碼,推動開發迴圈向前。
認可合併至整合分支觸發程式,GitHub Actions組建和Docker推送至 DevTest 容器登錄。 每個微服務在容器登錄中都有自己的存放庫,並平行處理 GitHub 存放庫。 CI 組建會以 最新標記,代表最新的成功微服務組建。
Azure Pipelines 會 執行 Kubernetes
apply
命令,以觸發將更新的 Container Registry 映射部署至 DevTest Kubernetes 叢集。 Azure 可以驗證 AKS 以執行自動容器登錄提取,以簡化 CD) 程式的連續部署 (。Azure Pipelines 會使用Azure 金鑰保存庫安全地取用秘密,例如發行和部署組態所需的認證和連接字串。
當應用程式的版本準備好進行品質保證 (QA) 測試時,Azure Pipelines 會觸發 QA 版本。 管線會使用下一個累加版本戳記所有適當的映射、更新 Kubernetes 資訊清單以反映映射標籤,然後執行
apply
命令。 在此範例中,雖然開發人員可能會以隔離方式逐一查看服務,但只會將透過 CI/CD 整合的組建移至部署。測試核准部署的服務版本之後,GitHub Actions將發行從 DevTest Container Registry 升級至生產容器登錄。 GitHub Actions使用適當的版本戳記映射,並將其推送至生產容器登錄,遵循容器登錄最佳做法。
Azure Pipelines 會建立生產環境的發行。 管線會強制核准閘道和階段前和階段後條件,以保護生產環境免于意外或不正確的部署。
應用程式會針對其全域分散式資料庫層使用 Azure Cosmos DB 。
所有服務和環境都會向 Azure 監視器報告計量。
在此解決方案中,單一 Azure Active Directory (Azure AD) 管理 DevTest 和 Production 訂用帳戶的身分識別。 Azure 角色型存取控制 (Azure RBAC) 會限制受保護資源的存取權,以防止未經授權或不小心修改生產資源。 開發人員在生產環境中沒有與 DevTest 沙箱相同的存取控制層級。
單元
Azure DevTest Labs提供具備建立環境之所有必要工具和軟體的實驗室。 開發人員可以有效率地自行管理資源,而不需要等待核准。 使用 DevTest Labs,小組可以控制每個實驗室的成本並規範資源,授與開發人員在成本限制內操作其沙箱的許可權和彈性。
GitHub 是用於進行版本控制和共同作業的程式碼裝載平台。 GitHub 原始檔控制 存放庫 包含所有專案檔及其修訂歷程記錄。 開發人員可以共同合作,在存放庫中參與、討論及管理程式碼。
GitHub Actions提供一套組建和發行工作流程,涵蓋 CI、自動化測試和容器部署。
Azure Boards是管理軟體專案工作的服務。 Azure Boards提供一組豐富的功能,包括 Scrum 和工作流程看板方法的原生支援、可自訂的儀表板,以及整合式報告。
Azure Pipelines 是一項功能完整的 CI/CD 服務,可自動將更新的 Container Registry 映射部署至 Kubernetes 叢集。
Azure 金鑰保存庫安全地儲存並嚴格控制對 API 金鑰、密碼和憑證等秘密的存取。 如需 DevOps 案例中金鑰保存庫的詳細資訊,請參閱 GitHub 中的AKS 上的 DevSecOps和DevSecOps。
Azure Container Registry支援針對所有類型的容器部署,在私人登錄中建置、儲存和管理容器映射和成品。
Azure Kubernetes Service藉由卸載 Azure 的複雜度、責任和作業額外負荷,讓部署受控 Kubernetes 叢集變得簡單。
Azure Active Directory (Azure AD) 企業身分識別平臺提供單一登入和多重要素驗證來管理使用者存取權。 單一 Azure AD 可以跨訂用帳戶管理所有環境的身分識別。 Azure 角色型存取控制 (Azure RBAC) 會限制對受保護資源的存取,以防止未經授權或不小心修改生產資源。
Azure Cosmos DB 是完全受控、廣泛分散式的資料庫即服務,可支援高可用性、多區域應用程式,以及 SQL 和 NoSQL API。 Azure Cosmos DB 包含 DevTest 功能,例如本機 Azure Cosmos DB 模擬器,可與 Azure DevOps 整合,以及在 DevTest 沙箱中管理成本的低成本層。
Azure 監視器 可以監視 Production 和 DevTest 環境。 Azure 監視器會從 VM 作業系統和損毀傾印檔案收集記錄資料,並匯總它們以在雲端Microsoft Defender中檢視。
替代方案
Azure Repos是 GitHub 的 Git 存放庫裝載替代方案。 有了Azure Repos、Azure Boards和 Azure Pipelines,所有Azure DevOps Services都使用相同的入口網站和使用者介面,合併 DevOps 活動所需的服務開發人員。
Azure Pipelines 中提供的一些整合,例如直接將服務連線或驗證直接整合到 Azure 骨幹中,目前不存在於GitHub Actions中。 針對這些需求,請考慮使用 Azure Pipelines,而不是針對 CI 和建置活動GitHub Actions。
在廣泛分散式系統中,將微服務分成個別存放庫有好處。 擁有權和許可權的分隔比較簡單,而且不同語言的專案比使用單一存放庫更容易維護。 不過,在具有相同語言或執行時間的微服務較少解決方案中,為專案維護單一 Git 存放庫可能會比較容易。