翻译自
Building Event-driven Microservices Using CQRS and Serverless-January 31, 2017
什么是事件驱动架构[
事件驱动架构将领域事件看作为顶级元素,这其实并不是什么新鲜概念,自有软件起就已经存在了。现在,随着微服务的流行,人们对事件驱动在分布式系统中的应用越来越感兴趣。
CQRS
CQRS是Command Query Responsibility Segregation
的缩写,是事件驱动架构领域中一个应用比较广泛的概念。是一种关注读写分享的架构方式。
CQRS中,作为输入的领域事件与领域模型在结构上是不同的。
Example 1. Account aggregate
{
"createdAt": 1481351048967,
"lastModified": 1481351049385,
"userId": 1,
"accountNumber": "123456",
"defaultAccount": true,
"status": "ACCOUNT_ACTIVE"
}
如果我们要想改变account的状态,一般我们是直接修改对象的status字段,但在CQRS中我们可以发送如下的一个事件
Example 2. Account event
{
"createdAt": 1481353397395,
"lastModified": 1481353397395,
"type": "ACCOUNT_SUSPENDED",
"accountNumber": "123456"
}
修改完成后,可以将这种变更反应到查询模型上
此处输入图片的描述
以上是对CQRS的一个简单说明
CQRS和微服务
CQRS和微服务结合后会变得复杂,下图是一个实现系统。
此处输入图片的描述上图中,将一个微服务分成了command-side
query-side
event-processor
三部分,每个部分都可以独立部署。
command-side
command-side
开放rest api给用户,用户请求触发command
, command
触发action
,action
触发domain event
; domain event
存储在event store
中。Event store是一个结合数据库和消息网关的概念(典型的实现如Eventuate)。领域事件保存事件的时间序列,通过历史事件重放能够重建系统的当前状态。
event-processor
事件处理器是无状态的,监听来自event store的事件,并处理。
此处输入图片的描述query-side
此处输入图片的描述分布式的单体应用还是微服务
两者最大的区别是微服务中的单个服务是能够独立进化的。
Serverless
无服务,一般是指FaaS(Function as a Service),直接将逻辑部署为函数,不需要安全与管理专门的服务器或容器。使用无服务函数的一个好处是其将事件作为顶级元素的概念。
微服务与Serverless
微服务可以由一组Serverless来构建。
此处输入图片的描述Cloud-native CQRS
我们来构建一个云原生CQRS应用,包括事件驱动微服务和无服务函数。
此处输入图片的描述
网友评论