首先感谢晓晨Master和EdisonChou的审稿!也感谢正在阅读的您! 引言 通常,服务所公开的资源和 API 必须仅限受信任的特定用户和客户端访问.那进行 API 级别信任决策的第一步就是身份认证--确定用户身份是否可靠. 在微服务场景中,身份认证通常统一处理.一般有两种实现形式: 基于API 网关中心化认证:要求客户端必须都通过网关访问微服务.(这就要求提供一种安全机制来认证请求是来自于网关.) 基于安全令牌服务(STS)认证:所有的客户端先从STS获取令牌,然后请求时携带令牌完成认证.…
引言 Basket microservice(购物车微服务)主要用于处理购物车的业务逻辑,包括: 购物车商品的CRUD 订阅商品价格更新事件,进行购物车商品同步处理 购物车结算事件发布 订阅订单成功创建事件,进行购物车的清空操作 架构模式 如上图所示,本微服务采用数据驱动的CRUD微服务架构,来执行购物车商品的维护操作.并使用Redis数据库进行持久化. 这种类型的服务在单个 ASP.NET Core Web API 项目中即可实现所有功能,该项目包括数据模型类.业务逻辑类及其数据访问类.其项目…
引言 在微服务大行其道的今天,Java阵营的Spring Boot.Spring Cloud.Dubbo微服务框架可谓是风水水起,也不得不感慨Java的生态圈的火爆.反观国内.NET阵营,微服务却不愠不火. 微软在其官网的架构体系上推出了eShopOnContainers微服务参考应用,用来推广基于.NET Core的微服务架构.我也将基于此来学习研究微服务,并分享自己的所学所得,形成一个系列,为.NET社区微服务的推广略尽绵薄之力. eShopOnContainers 简介 Easy to g…
环境准备 Win10(开启Hyper-V) .NET Core SDK Docker for Windows VS2017 or VS Code Git SQL Server Management Studio(可选) Redis Desktop Manager(可选) Node.js(可选) Bower(可选) Clone代码到本地 执行命令git clone https://github.com/dotnet/eShopOnContainers.gitclone代码到本地.使用默认DEV分支…
1. 引言 Ordering microservice(订单微服务)就是处理订单的了,它与前面讲到的几个微服务相比要复杂的多.主要涉及以下业务逻辑: 订单的创建.取消.支付.发货 库存的扣减 2. 架构模式 如上图所示,该服务基于CQRS 和DDD来实现. 从项目结构来看,主要包括7个项目: Ordering.API:应用层 Ordering.Domain:领域层 Ordering.Infrastructure:基础设施层 Ordering.BackgroundTasks:后台任务 Orderi…
引言 Catalog microservice(目录微服务)维护着所有产品信息,包括库存.价格.所以该微服务的核心业务为: 产品信息的维护 库存的更新 价格的维护 架构模式 如上图所示,本微服务采用简单的数据驱动的CRUD微服务架构,来执行产品信息的创建.读取.更新和删除(CRUD)操作. 这种类型的服务在单个 ASP.NET Core Web API 项目中即可实现所有功能,该项目包括数据模型类.业务逻辑类及其数据访问类.其项目结构如下: 核心技术选型: ASP.NET Core Web AP…
1. 引言 断断续续,感觉这个系列又要半途而废了.趁着假期,赶紧再更一篇,介绍下如何将eShopOnContainers部署到K8S上,进而实现大家常说的微服务上云. 2. 先了解下 Helm 读过我上篇文章ASP.NET Core 借助 K8S 玩转容器编排的同学,想必对K8S有了个大致了解.K8S引入了Pod.Service.ReplicationSet等概念,来简化容器的编排工作.然而,发布一个应用,依旧很繁琐,比如要定义Pod,要关心如何暴露Service,如何自动伸缩.更不用说一个包括…
引言 客户端与微服务的通信问题永远是一个绕不开的问题,对于小型微服务应用,客户端与微服务可以使用直连的方式进行通信,但对于对于大型的微服务应用我们将不得不面对以下问题: 如何降低客户端到后台的请求数量,并减少与多个微服务的无效交互? 如何处理微服务间的交叉问题,比如授权.数据转换和动态请求派发? 客户端如何与使用非互联网友好协议的服务进行交互? 如何打造移动端友好的服务? 而解决这一问题的方法之一就是借助API网关,其允许我们按需组合某些微服务以提供单一入口. 接下来,本文就来梳理一下eShop…
1. 引言 事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉.事件总线是对发布-订阅模式的一种实现.它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的. 从上图可知,核心就4个角色: 事件(事件源+事件处理) 事件发布者 事件订阅者 事件总线 实现事件总线的关键是: 事件总线维护一个事件源与事件处理的映射字典: 通过单例模式,确保事件总线的唯一入口: 利用反射完成事件源与事件处理的初始化绑定: 提供统一的事件注册.取…
1. 引言 事件总线解决了微服务间如何基于集成事件进行异步通信的问题.然而只有事件总线正常运行,微服务之间基于事件的通信才得以运转. 而现实情况是,总有这样或那样的问题,导致事件总线不稳定或不可用,比如:网络中断,系统断电等等,这都可能导致微服务间的不一致性问题. 那如何解决事件总线故障导致的不一致问题呢? 事件溯源 事件日志挖掘 发件箱模式 2. 问题 既然上面提到了一致性问题,那具体的问题是什么呢,在什么情况才会发生呢?我想我有必要简单举例.上代码: var oldPrice = item.…