分布式系统保证数据一致性的事务机制

2016-1-7 diaba 分布式

分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制

1.分布式事务XA
XA是分布式事务的规范,定义了事务管理器和资源管理器之间的接口。XA接口是双向的,在事务管理器和资源管理器之间形成通信桥梁。事务管理器控制着全局事务,管理事务的生命周期,协调资源。资源管理器负责控制和管理实际资源(e.g. 数据库或JMS队列)

2.JTA
定义了java事务规范,具体实现由供应商负责提供

3.两阶段提交
a)准备阶段  b)提交阶段  两阶段保证分布式事务原子性,要么全做,要么全部做。
准备阶段
事务管理器(事务协调者)给每个资源管理器(参与者)发送Prepare消息,参与者要么直接返回失败,要么本地执行事务,写本地redo和undo日志,但是不提交,只保留最后一步耗时非常短暂的正式提交操作给提交阶段。
提交阶段
如果接收到参与者的失败消息或超时,直接给每个参与者发送RollBack消息,否则发送Commit消息,参与者根据协调者指令执行提交或回滚操作,释放所有事务处理过程的锁资源。

优缺点:失败概率非常小,但是耗时,如果事务爆发时可能会引起事务积压甚至死锁,性能会严重下滑。

4.一阶段提交(Best Efforts 1PC模式)
相比两阶段不需要协调者角色,比较简单,从应用程序想数据库发出提交请求到数据库完成提交或回滚之后将结果返回给应用程序。

优缺点:提交时间消耗短,提交危险期是每个事务实际提交时间,不一致的概率比两阶段更大,当然只有出现网络中断、宕机等问题时才会出现不一致现象。

5.事务补偿机制
Best Efforts 1PC模式实现的前提是应用程序能获得所有数据源,使用同一个事务管理器(如spring的事务管理)管理事务,典型应用场景是数据库sharding。但是对于web service/rpc/jms等构建的分布式系统接口,该模式无能为力,此场景下可以使用事务补偿机制实现最终一致性。

标签: 分布式一致性

发表评论:

Powered by emlog 京ICP备15045175号-1 Copyright © 2022