引言

在微服务大行其道的今天,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主机中运行的服务端应用。

  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. 事件驱动架构

在由多个微服务组成的应用程序中,可以用不同方式实现每个微服务。每个微服务可能具有不同架构模式,并根据应用程序的性质、业务需求和优先级使用不同的语言和数据库。

这也就是微服务的灵活性与复杂性的源头。

代码结构

系列计划

对于微服务我也只是初步了解,该项目也将是我学习微服务的起点。所以我将以小白的视角(难免有所纰漏,请大家积极交流指正),尽量以通俗易懂的语言来梳理每一个知识点,并形成eShopOnContainers知多少系列,与大家共同学习进步。该系列会首发在我的个人订阅号『微服务知多少』上,请扫描下文二维码,关注更新!

参考资料

eShopOnContainers 官方文档
.NET 微服务:容器化 .NET 应用架构指南.pdf

eShopOnContainers 知多少[1]:总体概览的更多相关文章

  1. [转]eShopOnContainers 看微服务 ①:总体概览

    本文转自:https://www.cnblogs.com/tianyamoon/p/10081177.html 一.简介 eShopOnContainers是一个简化版的基于.NET Core和Doc ...

  2. eShopOnContainers 看微服务 ①:总体概览

    一.简介 eShopOnContainers是一个简化版的基于.NET Core和Docker等技术开发的面向微服务架构的参考应用. 该参考应用是一个简化版的在线商城/电子商务微服务参考示例应用. 其 ...

  3. eShopOnContainers 知多少[5]:EventBus With RabbitMQ

    1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需 ...

  4. eShopOnContainers 知多少[8]:Ordering microservice

    1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架 ...

  5. eShopOnContainers 知多少[10]:部署到 K8S | AKS

    1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我 ...

  6. eShopOnContainers 知多少[9]:Ocelot gateways

    引言 客户端与微服务的通信问题永远是一个绕不开的问题,对于小型微服务应用,客户端与微服务可以使用直连的方式进行通信,但对于对于大型的微服务应用我们将不得不面对以下问题: 如何降低客户端到后台的请求数量 ...

  7. eShopOnContainers 知多少[6]:持久化事件日志

    1. 引言 事件总线解决了微服务间如何基于集成事件进行异步通信的问题.然而只有事件总线正常运行,微服务之间基于事件的通信才得以运转. 而现实情况是,总有这样或那样的问题,导致事件总线不稳定或不可用,比 ...

  8. eShopOnContainers 知多少[4]:Catalog microservice

    引言 Catalog microservice(目录微服务)维护着所有产品信息,包括库存.价格.所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 如上图所示,本微服务采用简 ...

  9. eShopOnContainers 知多少[3]:Identity microservice

    首先感谢晓晨Master和EdisonChou的审稿!也感谢正在阅读的您! 引言 通常,服务所公开的资源和 API 必须仅限受信任的特定用户和客户端访问.那进行 API 级别信任决策的第一步就是身份认 ...

随机推荐

  1. Web开发:需收藏的JavaScript常用技巧

    原文来自:https://www.baidu.com/home/news/data/newspage?nid=4242707244478773456&n_type=0&p_from=1 ...

  2. Windows上使用Thunderbird与GPG发送和解密公钥加密的电子邮件

    作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=552 非对称加密的原理: 最先出现的加密方法是对称加密.在对称加密算法中是不区分公钥和私钥的,加密与解密使用的都是同一个 ...

  3. C#中DataGridView 对XML文档的使用

    窗体就只用添加一个DataGridView控件就可以了.详细解释请参照上一篇中的借鉴曲终人散博客园的文档. XML文档代码如下:test.xml <?xml version="1.0& ...

  4. 7. 整合shiro,搭建粗粒度权限管理

    shiro是一个易用的权限管理框架,只需提供一个Realm即可在项目中使用,本文就将结合上一篇中搭建的权限模块.角色模块和用户模块来搭建一个粗粒度的权限管理系统,具体如下:1. 添加shiro依赖和与 ...

  5. Python3.6安装报错 configure: error: no acceptable C compiler found in $PATH

    安装python的时候出现如下的错误: [root@master ~]#./configure --prefix=/usr/local/python3.6 checking build system ...

  6. [SQL Server]用 C# 在 LinqPad 建立 Linked Server 跨服务器数据库操作

    在涉及老项目数据迁移的时候,数据库结构已经完全发生变化,而且需要对老数据进行特殊字段的处理,而且数据量较大,使用Navicat导出单表之后,一个表数据大概在100多万的样子,直接导出SQL执行根本行不 ...

  7. Python-分支循环- if elif for while

    分支与循环 条件是分支与循环中最为核心的点,解决的问题场景是不同的问题有不同的处理逻辑.当满足单个或者多个条件或者不满足条件进入分支和循环,这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化, ...

  8. uuid.go

    package uuid import "time" func GenerateUUID() uint64 {     return uint64(time.Now().UnixN ...

  9. 【递推】Bzoj3612[Heoi2014]平衡

    Description 下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”.      这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具, 上面 摆着一个尺 ...

  10. iscc2018(一只猫的心思)

    由于这一个杂项类没有更新,所以今天特地来写一下博文.希望能够帮助到你们!!!! 其他关于杂项类的解析,可以查看(https://blog.csdn.net/qq_41187256/article/de ...