微服務架構
提示
本內容節錄自《容器化 .NET 應用程式的 .NET 微服務架構》(.NET Microservices Architecture for Containerized .NET Applications) 電子書,可以在 .NET Docs 上取得,或免費下載可供離線閱讀的 PDF。
如名稱所指,微服務架構是將伺服器應用程式建置為一組小型服務的方法。 這表示微服務架構主要是導向至後端 (儘管此方法也會用於前端)。 每個服務會在自己的處理序中執行,並使用 HTTP/HTTPS、WebSocket 或 AMQP 等通訊協定與其他處理序通訊。 每個微服務都會在特定的內容界限內實作特定的端對端網域或商務功能,且每項服務都必須獨立開發,並且可以獨立部署。 最後,每個微服務都應該擁有其相關的領域資料模型和領域邏輯 (主權和非集中式資料管理),而且可以根據不同的資料儲存技術 (SQL、NoSQL) 及不同的程式設計語言。
微服務的大小應該為何? 開發微服務時,大小不應該是重點。 相反地,重點應該是建立鬆散結合的服務,以便每個服務都能自主開發、部署及擴充。 當然,識別及設計微服務時,只要與其他微服務沒有太多直接相依性,都應該嘗試使其越小越好。 比微服務大小更重要的是,它必須有內部凝聚力,而且獨立於其他服務。
為什麼選擇微服務架構? 簡單來說,它提供長期靈活度。 微服務可讓您根據許多獨立可部署並具有細微且自發生命週期的服務來建立應用程式,並藉此在複雜、大型和高可調整性的系統中提供更好的可維護性。
另一個優點是微服務可以獨立擴增。 您可以擴增特定微服務,而不需以單位擴增單一的整合型應用程式。 如此一來,您只調整需要更高處理能力或網路頻寬的功能區域就能支援需求,而不需擴增應用程式其他不需要擴增的區域。 這代表您能節省成本,因為需要的硬體減少了。
圖 4-6: 整合型部署與微服務方法
如圖 4-6 所示,在傳統整合型方法中,應用程式擴縮要在數部伺服器/VM 中複製整個應用程式。 在微服務方法中,會以較小的服務隔離功能,因此每個服務都可以獨立調整。 微服務方法允許靈活的變更和每個微服務的快速反覆項目,因為您可以變更複雜、大型且可擴充應用程式的特定小型區域。
建造精細的微服務型應用程式可啟用持續整合與持續傳遞作法。 也能加速將新功能傳遞至應用程式。 精細撰寫的應用程式也可讓您獨立執行和測試微服務,並自發地進行發展,同時維護雙方清楚的合約關係。 只要不變更介面或合約,您可以變更任何微服務的內部實作,或在不中斷其他微服務的情況下新增新功能。
以下是使用微服務架構系統成功進入生產環境的重點:
服務和基礎結構的監視和健康情況檢查。
服務 (也就是雲端和協調器) 的可擴充基礎結構。
多個層級的安全性設計和實作:驗證、授權、秘密管理、安全通訊等等。
快速傳遞應用程式,通常有不同的小組著重於不同的微服務。
DevOps 與 CI/CD 的實務和基礎結構。
本指南只會涵蓋或介紹其中的前三點。 最後兩點與應用程式生命週期相關,其他電子書 Containerized Docker Application Lifecycle with Microsoft Platform and Tools (利用 Microsoft 平台和工具的容器化 Docker 應用程式生命週期) 中會提供說明。
其他資源
Mark Russinovich: Microservices: An application revolution powered by the cloud (微服務:採用雲端技術的應用程式變革)
https://azure.microsoft.com/blog/microservices-an-application-revolution-powered-by-the-cloud/Martin Fowler。 微服務
https://www.martinfowler.com/articles/microservices.htmlMartin Fowler。 微服務先決條件
https://martinfowler.com/bliki/MicroservicePrerequisites.htmlJimmy Nilsson: 區塊雲端運算
https://www.infoq.com/articles/CCC-Jimmy-NilssonCesar de la Torre: Microsoft 平台和工具的容器化 Docker 應用程式生命週期 (可下載的電子書)
https://aka.ms/dockerlifecycleebook