欢迎Java工程师关注简书专栏
Java架构技术进阶
本专栏收录各种Java相关技术,面试题,以及学习感悟,心得!
研究了事件采购/事件溯源,Saga和CQRS模式如何影响微服务的发展。
微服务架构风格现在在业界获得了极大的普及。越来越多的组织希望转向微服务架构。
但是,构建微服务并不容易。 在这篇文章中,我们将看看三个可以帮助您创建微服务的重要模式。
事件溯源/事件采购
EventSourcing事件溯源试图解决围绕原子更新数据库以及发布事件的问题。
这意味着当您在领域实体上执行某些操作时,可以将其视为领域事件。并且领域实体的状态存储为这些领域事件的序列集合。换句话说,只要插入新记录或在现有记录上更新某些内容,就会创建一个新事件。事件存储库会跟踪实体上发生的所有事件。
现在,让我们假设特定帐户发生以下交易:
- 创建账户,初始余额为100美元。
- 帐户设置为ACTIVE状态。
- 一位朋友支付了一些钱用于分享一顿饭。账户中存入55美元。
- 你为重要的其他人买了冰淇淋。提款20美元。
- 你的重要人物不喜欢冰淇淋,所以你不得不买另一个。提款50美元。
- 你忘了支付房租。你的房东判处了罚款。提款100美元。
- 由于余额为负,帐户设置为HOLD状态。
- 存入100美元的账户。叹了一口气。
- 帐户设置为ACTIVE状态。
以下是如何以事件溯源方式存储:
每当存在对领域对象的当前状态的请求时,重放事件并构造状态。
事件源实现可以使用标准Java框架(如Spring Boot和Axon)的组合来完成。
CQRS
CQRS代表Command-Query Responsibility Segregation。通常,CQRS与事件采购一起实施。
CQRS的主要用途是解决API组合产生的问题。
在典型的事件采购和CQRS设置中,CQRS应用程序侦听来自多个应用程序的域事件。使用这些事件更新和维护专门用于查询的数据库。根据业务案例,查询数据库可以聚合复杂查询。
Saga模式
Saga Pattern是在微服务架构中实现分布式事务的直接解决方案。
通常,在基于微服务的应用程序中,每个微服务都将拥有自己的数据库。但是,某些业务流程需要多个微服务之间的通信。这就是Saga Pattern的用武之地。典型的Saga实现可以看作是一系列本地事务交易,其中每笔交易只占Saga整体工作的一小部分。换句话说,Saga模式在微服务架构中几乎是必需的。
让我们看一个典型的食品配送应用程序流程中的一个简单示例。
当用户下订单时,可能发生的一系列操作是:
- 食品订购服务创建订单。 此时,订单处于PENDING状态。Saga管理着一系列事件。
- Saga通过餐厅服务与餐厅联系。
- 餐厅服务尝试与所选餐厅下订单。收到确认后,会发回回复。
- Saga收到回复。并且,根据回复,它可以批准订单或拒绝订单。
- 然后食品订单服务改变订单的状态。如果订单获得批准,它将通知客户并提供任何必要的详细信息。如果被拒绝,它还会通过道歉信息通知客户。
- Sagas也可以是不同类型的,例如基于有中心的编排或基于无中心的编排。可以使用Spring Boot和Axon框架实现基于编排的Saga。
(banq注:Saga模式是一种流程编排的回退事务,还需要专门的流程框架辅助,如Camunda)