博客
关于我
分布式事务解决方案,中间件 Seata 的设计原理详解
阅读量:240 次
发布时间:2019-02-28

本文共 981 字,大约阅读时间需要 3 分钟。

Seata是一个开源的分布式事务中间件,旨在解决微服务架构中分布式事务的痛点。以下是优化后的文章内容:


前言

在微服务架构中,业务模块的分层设计和独立部署显著减轻了服务部署压力,解耦了业务耦合,支持了业务扩展且在单个服务故障时不影响其他服务的运行。然而,微服务并非十全十美,分布式事务问题是其必然面临的挑战,CAP和BASE理论为此提供了指导。阿里开源的Seata因其无侵入性和高性能而备受关注。


分布式事务解决方案

目前分布式事务方案主要分为对业务无入侵和有入侵两种类型。无入侵方案以两段式提交(2PC)为代表,依赖数据库XA协议,优点是无侵入业务代码,但存在锁定周期长、性能差等问题,因此不受欢迎。入侵方案如TCC和可靠消息方案虽能解决问题,但代码臃肿,维护成本高。


Seata模块关系

Seata通过三个模块实现全局事务管理:**Transaction Coordinator (TC)**负责协调全局事务的运行状态;**Transaction Manager (TM)**控制全局事务边界;**Resource Manager (RM)**管理分支事务,负责注册、状态汇报和资源操作。全局事务流程为:TM申请全局事务,TC生成XID;RM注册分支,等待指令;TM决定提交或回滚,TC调度分支完成操作。


与XA方案的区别

XA方案依赖数据库XA协议,导致锁定周期长,性能差。Seata通过在应用层代理数据库操作,剥离了对数据库协议的依赖。RM代理数据源,解析SQL生成回滚日志,确保本地事务锁定时间短,提升性能。


分支事务提交与回滚

分支事务利用RM代理,解析SQL生成回滚日志,镜像数据变化,利用ACID特性保证一致性。全局提交时,TC异步删除undo log;回滚时,利用日志恢复数据,释放资源,减少锁定时间。


其他方案补充

Seata提供AT和MT模式。AT模式对业务无入侵,依赖ACID数据库;MT模式需业务定义Prepare/Commit/Rollback,适用于特定场景。Seata目标是无入侵方案,MT作为补充。


总结

Seata通过将事务协调层移到应用层,避免了XA协议的限制,提升性能并减少对业务的侵入,成为微服务架构下的理想选择。其AT模式在ACID数据库中有效,MT模式适用于特定场景。Seata的设计使其在分布式事务中发挥重要作用。

转载地址:http://fvbp.baihongyu.com/

你可能感兴趣的文章
Openlayers高级交互(1/20): 控制功能综合展示(版权、坐标显示、放缩、比例尺、测量等)
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(12/20):利用高德逆地理编码,点击位置,显示坐标和地址
查看>>
Openlayers高级交互(13/20):选择左右两部分的地图内容,横向卷帘
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>
Openlayers高级交互(18/20):根据feature,将图形适配到最可视化窗口
查看>>
Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
查看>>
Openlayers高级交互(2/20):清除所有图层的有效方法
查看>>
Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
查看>>
Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
查看>>