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主机中运行的服务端应用。

  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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

JuiceSSH:超好用的安卓移动端Linux系统运维终端工具

去年年底,我考虑到回老家之后可能会有工作上的紧急运维事务需要处理,家里没电脑网络,又不想背笔记本,所以考虑入手一个平板。安卓、IOS、Win8 板子,考虑良久之...

7778
来自专栏FreeBuf

移动渗透测试平台搭建 – NetHunter 3.0

* 本文原创作者:gowabby,本文属FreeBuf原创奖励计划,未经许可禁止转载 NetHunter是一款专为渗透测试人员打造的基于CyanogenMod...

2606
来自专栏机器人网

牛人教你DIY!用树莓派 Zero做飞控图传

虽然可以买到商品成品,且会比我们做出来的东西更美观,性能指标更强,但是在折腾中学习,按照自己的需求进行优化改动,享受创造的喜悦,不正是创客精神嘛。 本项目使用手...

5578
来自专栏walterlv - 吕毅的博客

用 AppContext 解决类库的更新兼容问题

2017-09-30 15:45

1751
来自专栏程序猿DD

阿里巴巴硅谷 Istio 专家解读Istio 1.0 发布

Istio 1.0 于北京时间8月1日0点正式发布!虽然比原本官网公布的发布时间晚了9个小时,但这并未影响到Istio在社区的热度。

1523
来自专栏.NET技术

MVC系列之开始

   4月5号晚本来应该写出来的,这几天迷上了炉石传说,打得有点疯,明天又得上班了,收拾心情还是得写出来。上星期5晚上回家的时候,不得不吐槽一下的确有点背。6点...

972
来自专栏Guangdong Qi

iOS开发常用之测试调试、动态更新

1592
来自专栏施炯的IoT开发专栏

利用SDF2.3获取Windows Mobile上的IP地址和MAC地址

OpenNETCF的Smart Device Framework为开发者提供了许多开发捷径,其SDF1.x系列提供了完全的源代码,即Full Source,从...

1889
来自专栏java一日一条

在 Visual Studio 上更好开发 Python 的六大功能!

Visual Studio 2013/2015 搭配 Python Tools for Visual Studio 扩充套件让 Visual Studio 能提...

861
来自专栏黑白安全

利用手机指纹解锁电脑???

前几天偶然看到了一个国外大神开发的手机应用,在手机上装上这款应用之后就可以使用手机的指纹解锁来解锁PC电脑的密码,效果如下图。

1383

扫码关注云+社区