eshoponcontainers知多少[1]:总体概览

sheng-jie sheng-jie     2023-01-08     633

关键词:

引言

在微服务大行其道的今天,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知多少[8]:orderingmicroservice(代码片段)

1.引言Orderingmicroservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多。主要涉及以下业务逻辑:订单的创建、取消、支付、发货库存的扣减2.架构模式如上图所示,该服务基于CQRS和DDD来实现。从... 查看详情

eshoponcontainers知多少[10]:部署到k8s|aks(代码片段)

...要半途而废了。趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云。2.先了解下Helm读过我上篇文章ASP.NETCore借助K8S玩转容器编排的同学,想必对K8S有了个大致了解。K8S引入了Pod、Se... 查看详情

第一讲测试知多少

1.1计算机基础1.1.1计算机相关定义◆软件和硬件:软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道云,有道翻译)、系统、网页、驱动(看得见、摸不着)硬件:计算机的硬件是计算机的各种设备的总称,分为五个... 查看详情

产品开发知多少一

为什么要进行产品开发?1.市场需求使然,获取商业价值;2.公司战略需要,为公司的战略目标打基础;3.技术发展需求,做公司核心技术积累;开发产品依据?1.企业目标2.战略部署3.技术积累4.市场需求组织中谁来进行产品开发... 查看详情

趣味分析系列|文胸品牌知多少

一年一度的圣诞节马上就快到了,各位男神是不是又在劳神费力地给女神们准备圣诞节礼物?今年送啥呢?送脑白金怎么样?NO,NO,NO!脑白金是送给大妈的!!!直接给MONEY?NO,NO,NO!太俗气!!!送鲜花与巧克力?NO,NO,NO!不实在!!!按我说,直... 查看详情

服务治理1.注册中心知多少

古人说好的开始是成功的一半,古人又说千里之行始于足下,服务注册就是服务治理这台戏的开场和第一步。这一节,将向大家介绍注册中心的运作模式、任务,以及服务节点是如何找到注册中心的。注册中心漫谈前面我们讲到... 查看详情

overflow知多少

本文地址: http://www.hicss.net/some-overflow-knowledge/最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂。。。。。。以下就是OOCSS下的template.css第一行代码:12.body{overflow:hidden;_overflow:visible;_zoom:1;}.main{overflo 查看详情

借书方案知多少

 源码:#include<iostream>usingnamespacestd;intmain()inta,b,c,count=0;for(a=1;a<=5;a++)for(b=1;b<=5;b++)for(c=1;c<=5;c++)if(a!=b&&a!=c&&b!=c)count++;cout<<count;return0;运行结果60 优化:#include<iostream>usingnamespacestd;intmain()inta,b,... 查看详情

ffmpeg知多少~~~

一、ffmpeg安装:​​https://jingyan.baidu.com/article/f7ff0bfcd64cea2e26bb1334.html​​ 二、ffmpeg视频处理(包括各种视频流处理~):三、ffmpeg推流步骤:1)通过ffmpeg截取指定长度的视频流:ffmpeg-t10-irtsp://xxx:xxxxx1234@172.20.xx.xxx:55410s_out 查看详情

overflow知多少(转)

最近在研究OOCSS,当打开template.css阅读第一行时,震惊了,第一眼居然没看懂。。。。。。以下就是OOCSS下的template.css第一行代码:12.bodyoverflow:hidden;_overflow:visible;_zoom:1;.mainoverflow:hidden;_overflow:visible;_zoo 查看详情

sql递归查询知多少

sql递归查询的方法:方法一:T-SQL递归查询withDepas(selectId,DeptCode,DeptNamefromDepartmentwhereId=1unionallselectd.Id,d.DeptCode,d.DeptNamefromDepinnerjoinDepartmentdondep.Id=d.ParentDeptId)select*fromDep方法二:PL/SQL递归查询selectId,DeptCode,DeptNamefromDepartmentstartwithI... 查看详情

关于函数,你知多少?

我们都知道,JS中没有的类的概念。而函数则是JS中很重要,很重要,很重要的一点。理解函数也是非常有必要的。先来看看函数的定义。如下:1//函数声明2//函数声明不会立即调用,可以在你需要的时候调用它3functiondemo(){45}67//... 查看详情

css知多少(11)——position

1.引言  本文将用一篇文章介绍position(定位),在学习position之前,我们应该去思考一个问题:什么情况下我们需要定位?如果没有定位将无法满足我们怎样的需求?我们要知道,被人类创造出来的每一个知识,都有它的用途... 查看详情

gtk4listmodel知多少?(代码片段)

【GTK4】LISTMODEL总结文章目录【GTK4】LISTMODEL总结一、LISTMODEL创建、管理工具1️⃣GtkSliceListModel2️⃣GtkFlattenListModel3️⃣GtkMapListModel二、LISTMODEL的具体应用1️⃣Pangoobjects2️⃣GtkDirectoryList和GtkBookmarkList3️⃣GtkDropDown三、LI 查看详情

gtk4listmodel知多少?(代码片段)

【GTK4】LISTMODEL总结文章目录【GTK4】LISTMODEL总结一、LISTMODEL创建、管理工具1️⃣GtkSliceListModel2️⃣GtkFlattenListModel3️⃣GtkMapListModel二、LISTMODEL的具体应用1️⃣Pangoobjects2️⃣GtkDirectoryList和GtkBookmarkList3️⃣GtkDropDown三、LI 查看详情

typescriptinterfacevstype知多少(代码片段)

接口和类型别名非常相似,在大多情况下二者可以互换。在写TS的时候,想必大家都问过自己这个问题,我到底应该用哪个呢?希望看完本文会给你一个答案。知道什么时候应该用哪个,首先应该了解二者之间的相同点和不同点... 查看详情

css知多少(10)——display(转)

1.引言  网页的所有元素,除了“块”就是“流”,而且“流”都是包含在“块”里面的(最外层的body就是一个“块”)。在本系列一开始讲《浏览器默认样式》的时候,大家也都看到了浏览器默认样式中规定了html元素哪些... 查看详情

java继承知多少,本文详细告诉你

1.继承众所周知,我们Java语言是一种面向对象的编程语言,每当我们提到Java的特性,大家一定会在脑海里浮现出Java中的​继承、多态以及封装​。我们在日常的开发中经常会用到这三种特性,本文首先给大家介绍这三大特性之... 查看详情