观点丨??基于异步通信的微服务分布式事务管理机制研究分析( 二 )
1.事件编排模式 。 事件编排 , 顾名思义把分布式事务通过编排好的Sagas序列进行管理 。 事件编排模式支持事件消息 。 以简化的转账业务为例 , 事件编排实现过程如下 。
(1)服务A接收转账请求 , 记录数据库表 , 并将其设置为pengding状态或加语义锁 , 同时发布事件记录插入消息表 。
(2)数据库日志记录了插入消息表的相应操作 , CDC服务读取和消息插入记录有关的数据库日志 , 并将事件消息记录发送给消息代理 。
(3)服务B获取消息 , 进行资金结算并发布成功或失败的事件消息记录插入消息表 。
(4)CDC服务读取和插入事件消息记录有关的数据库日志 , 并将消息记录发送给消息代理 。
(5)服务A读取事件消息并更新转账pending状态为成功 / 失败 。 从而保证了数据的一致性 。
这里数据库更新操作和事件发布作为一个事务 , 具有ACID事务属性 , 这由Eventuate Tram框架保证 。 这个过程是一个利用Sagas补偿事务来进行数据一致性管理的过程 , 第(5)步是对第(1)步转账请求的补偿 。 可以看出 , Saga的补偿交易不像数据库回滚交易那样 , 好像什么都没发生 , 补偿交易是对之前的操作做了一次类似冲正的处理 。 由于Sagas缺乏隔离性 , 通过设置pengding状态 , 当有其他Sagas需要读取转账请求数据时 , 知道它处于一个中间状态 。
2.命令协调器模式 。 命令协调器模式支持命令消息 , 有一个核心协调器进行分布式事务的集中管理 。
下面介绍Eventuate Tram Sagas协调器的工作原理 。 微服务定义Saga序列 , 通过调用SagaManager的接口SimpleSaga创建Saga定义 , 即 Sagadefinition , 实际上相当于实例化了一个Saga协调器 。 实例化内容包括设置交易Pengding状态、唤醒服务B、发布命令、读取回执并根据回执设置交易结果等保障服务有效的逻辑内容 。 这里的Eventuate Tram框架是保障对于数据库操作处理和命令消息发布处理作为一个事务处理机制 。
以简化的转账业务为例 , 命令协调器的实现过程如下 。
(1)服务A接受转账请求 , 记录转账请求并设置为pending状态 。
(2)服务A实例化Saga来协调转账 。
(3)Saga协调器发送转账命令给服务B 。
(4)服务B接收到命令进行转账操作 , 并将转账结果以命令回复 。
(5)Saga协调器接收到回复命令 , 并发送处理成功或失败命令给服务A 。
(6)服务A接收命令进行更新转账状态 。
上述实现步骤中 , 服务A实例化Saga协调器、设置转账状态 , 以及服务A和服务B发送和接收转账命令均是通过Eventuate Tram Sagas完 成 。 利用Eventuate Tram框架 , CDC服务读取和消息插入记录有关的数据库日志 , 并将命令消息记录发送给消息代理 , 保证数据库操作和命令消息在一个本地事务中处理 。
通过上述两种实现方式看 , 基于Sagas的分布式事务管理机制的正确性不取决于是否预先序列化或补偿事务处理 , 而是取决于事务序列化和补偿之后 , 对数据库状态的最终影响是否等效 。 经过补偿后 , 数据库最终是否会在与子事务从未执行过的相同的地方有相同的结果 , 最终影响主要是指系统整体外部效果 。 这里注意区分 Eventuate Tram Sagas和Eventuate Tram框架 。 事件编排模式利用了消息代理和 Eventuate Tram 框架 。 命令协调模式利用了消息代理、Eventuate Tram框架和 Eventuate Tram Sagas框架 。
总 结由于微服务架构间服务松耦合的特征 , XA协议并不适合微服务架构 , 基于异步方式的Sagas架构更贴合微服务技术架构发展方向 。 架构师可根据自身技术储备选择基于同步的实现方式还是异步的实现方式 。 同步调用简单但会降低系统整体可用性 , 异步方式需要一些消息或消息代理知识 , 但系统整体可用性高 。 同时 , 建议正确对待单体架构和微服务架构 。 软件工程从来就没有银弹 , 架构总是在特定需求和组织框架下取舍 。 如果利用微服务架构的技术 , 采用单体架构的设计思想失去了微服务架构的技术意义 , 不仅增加了系统的架构复杂度 , 又没有享用到微服务架构带来的便利 。
- 出海|出海日报丨短视频生产服务商小影科技完成近4亿元 C 轮融资;华为成为俄罗斯在线出售智能手机的第一品牌
- 正确|新昌消防丨听说,这才是微信新表情的正确打开方式
- 协议|喜讯丨热烈祝贺众科联与顺笑拍、喜到家签订合作协议
- 茶颜悦色|科技神回复丨QQ可以设置ID了,网友:逐渐“微信化”?
- 公众|66兔家说防控丨公众接收快递安全提醒
- 耽误|被阿里耽误的虾米的一生
- 改版|产品观察丨手淘又又又改版了,“逛逛”不买也可以
- 中国|相对论Vol.48丨一个“歪果仁”,为什么要在海外电商平台直播带中国货
- 科技成果|“基于第三代半导体光源的低投射比投影仪关键技术”通过科技成果评价
- 无人车|市场要闻丨京东公布无人驾驶专利,无人配送暗战打响?
