eShopOnContainers 知多少[1]:總體概覽
引言
在微服務大行其道的今天,Java陣營的Spring Boot、Spring Cloud、Dubbo微服務框架可謂是風水水起,也不得不感慨Java的生態圈的火爆。反觀國內.NET陣營,微服務卻不慍不火。
微軟在其官網的架構體系上推出了eShopOnContainers微服務參考應用,用來推廣基於.NET Core的微服務架構。我也將基於此來學習研究微服務,並分享自己的所學所得,形成一個系列,為.NET社群微服務的推廣略盡綿薄之力。
eShopOnContainers 簡介
Easy to get started sample reference microservice and container based application. Cross-platform on Linux and Windows Docker Containers, powered by .NET Core 2.1, Docker engine and optionally Azure, Kubernetes or Service Fabric. Supports Visual Studio 2017, VS for Mac and CLI based environments with Docker CLI, dotnet CLI, VS Code or any other...
簡單來說:eShopOnContainers是一個簡化版的基於.NET Core和Docker等技術開發的面向微服務架構的參考應用。
該參考應用是一個簡化版的線上商城/電子商務應用。
雖然是簡化版的微服務參考示例,但對沒接觸過Docker、DDD、微服務的同學來說,並不簡單。其中不僅包含了很多術語、設計模式、架構風格,還使用了一系列的常見技術(RabbitMQ、EventBus、IdentityServer4、Polly、Api Gateway、Redis、CQRS、CAP、CI/CD等),還有一些相關工具(Docker、K8S等)。所以這將是一個難啃的骨頭。
總體介紹
eShopOnContainers作為跨平臺的微服務架構,得益於.NET Core能夠在Linux或Windows容器上執行。其包含基於瀏覽器的Web應用、基於Xamarin的Android、IOS、Windows/UWP 移動應用,以及服務端應用。其中服務端包含多個自治微服務(每個都擁有自己的資料/ db),並且每個微服務都有不同的實現形式(簡單的CRUD與DDD / CQRS模式)。使用Http作為客戶端應用程式之間的通訊協議。支援非同步通訊,使用Integration Events(整合事件)和Event Bus(事件匯流排)進行資料更新傳播。
開發環境架構
一圖勝千言,從上圖可知,該架構主要包括兩個部分:客戶端應用和Docker主機中執行的服務端應用。
- 客戶端應用:基於瀏覽器的Web應用;基於Xamarin開發的Android、IOS、UWP移動應用。
- 服務端應用:部署在在Doker主機的系列微服務。
其中服務端主要包括六大微服務:
- Identity Micsroservice(身份微服務):用於身份認證和授權。使用SQL Server資料庫。
- Catalog microservice(產品目錄微服務):用於產品資料的維護。使用SQL Server資料庫。
- Ordering microservice(訂單微服務):用於訂單邏輯的處理。使用SQL Server資料庫。
- Basket microservice(購物車微服務):用於購物車邏輯的處理。使用Redis資料庫。
- Marketing microservice(市場營銷微服務):用於市場營銷邏輯的處理。使用MongoDB/CosmosDB 和SQL Server資料庫。
- Locations microservice (位置微服務):用於提供位置服務。使用MongoDB/CosmosDB 資料庫。
- [New] Payment microservice (支付微服務):用於處理支付邏輯。
另外從上圖我們還可以清晰看出其通訊架構:
- 客戶端與微服務通過API閘道器通訊:用於查詢和接收來自客戶端應用程式的更新或事務命令。
- 非同步事件通訊:通過事件匯流排傳播來自微服務的更新或與外部應用程式整合。事件匯流排可使用任何訊息代理架構技術(如 RabbitMQ)來實現,也可使用諸如 Azure 服務匯流排、NServiceBus、MassTransit 或 Brighter 等更高階的服務匯流排。
微服務架構模式
上圖列舉的四個微服務主要使用了兩種架構模式:
- 基於資料驅動的CURD微服務
- 基於DDD的微服務
而實際上,軟體架構師和開發人員會使用不同的架構模式,比如(混合架構風格和架構模式):
- 簡單的 CRUD,單層
- 傳統N層
- DDD N層
- 整潔架構
- 命令和查詢分離(CQRS)
- 事件驅動架構
在由多個微服務組成的應用程式中,可以用不同方式實現每個微服務。每個微服務可能具有不同架構模式,並根據應用程式的性質、業務需求和優先順序使用不同的語言和資料庫。
這也就是微服務的靈活性與複雜性的源頭。
程式碼結構
系列計劃
對於微服務我也只是初步瞭解,該專案也將是我學習微服務的起點。所以我將以小白的視角(難免有所紕漏,請大家積極交流指正),儘量以通俗易懂的語言來梳理每一個知識點,並形成eShopOnContainers知多少系列,與大家共同學習進步。該系列會首發在我的個人訂閱號『微服務知多少』上,請掃描下文二維碼,關注更新!