eShopOnContainers 知多少[1]:整體概覽

引言

在微服務大行其道的今天,Java陣營的Spring Boot、Spring Cloud、Dubbo微服務框架可謂是風水水起,也不得不感慨Java的生態圈的火爆。反觀國內.NET陣營,微服務卻不慍不火。git

微軟在其官網的架構體系上推出了eShopOnContainers微服務參考應用,用來推廣基於.NET Core的微服務架構。我也將基於此來學習研究微服務,並分享本身的所學所得,造成一個系列,爲.NET社區微服務的推廣略盡綿薄之力。github

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、IdentityServer四、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(事件總線)進行數據更新傳播。app

開發環境架構

針對開發環境的eShopOnContainers 示例應用程序架構

一圖勝千言,從上圖可知,該架構主要包括兩個部分:客戶端應用和Docker主機中運行的服務端應用。框架

  1. 客戶端應用:基於瀏覽器的Web應用;基於Xamarin開發的Android、IOS、UWP移動應用。
  2. 服務端應用:部署在在Doker主機的系列微服務。

其中服務端主要包括六大微服務:異步

  1. Identity Micsroservice(身份微服務):用於身份認證和受權。使用SQL Server數據庫。
  2. Catalog microservice(產品目錄微服務):用於產品資料的維護。使用SQL Server數據庫。
  3. Ordering microservice(訂單微服務):用於訂單邏輯的處理。使用SQL Server數據庫。
  4. Basket microservice(購物車微服務):用於購物車邏輯的處理。使用Redis數據庫。
  5. Marketing microservice(市場營銷微服務):用於市場營銷邏輯的處理。使用MongoDB/CosmosDB 和SQL Server數據庫。
  6. Locations microservice (位置微服務):用於提供位置服務。使用MongoDB/CosmosDB 數據庫。
  7. [New] Payment microservice (支付微服務):用於處理支付邏輯。

另外從上圖咱們還能夠清晰看出其通訊架構微服務

  1. 客戶端與微服務經過API網關通訊:用於查詢和接收來自客戶端應用程序的更新或事務命令。
  2. 異步事件通訊:經過事件總線傳播來自微服務的更新或與外部應用程序集成。事件總線可以使用任何消息代理架構技術(如 RabbitMQ)來實現,也可以使用諸如 Azure 服務總線、NServiceBus、MassTransit 或 Brighter 等更高級的服務總線。

微服務架構模式

微服務的不一樣實現形式

上圖列舉的四個微服務主要使用了兩種架構模式:

  1. 基於數據驅動的CURD微服務
  2. 基於DDD的微服務

而實際上,軟件架構師和開發人員會使用不一樣的架構模式,好比(混合架構風格和架構模式):

  1. 簡單的 CRUD,單層
  2. 傳統N層
  3. DDD N層
  4. 整潔架構
  5. 命令和查詢分離(CQRS)
  6. 事件驅動架構

多種架構模式和多語言的微服務世界

在由多個微服務組成的應用程序中,能夠用不一樣方式實現每一個微服務。每一個微服務可能具備不一樣架構模式,並根據應用程序的性質、業務需求和優先級使用不一樣的語言和數據庫。

這也就是微服務的靈活性與複雜性的源頭。

代碼結構

image.png

系列計劃

對於微服務我也只是初步瞭解,該項目也將是我學習微服務的起點。因此我將以小白的視角(不免有所紕漏,請你們積極交流指正),儘可能以通俗易懂的語言來梳理每個知識點,並造成eShopOnContainers知多少系列,與你們共同窗習進步。該系列會首發在個人我的訂閱號『微服務知多少』上,請掃描下文二維碼,關注更新!

參考資料

eShopOnContainers 官方文檔
.NET 微服務:容器化 .NET 應用架構指南.pdf

相關文章
相關標籤/搜索