分布式事务一致性
数据库ACID(酸):原子性,一致性,隔离性,持久性。
CAP理论:一个分布式系统最多能满足一致性C,可用性A,分区容错性P,三项中的两个。
C:更新操作成功且返回请求方完成后,所有节点在同一时间的数据完全一致。
A:用户在访问数据时能得到及时地响应。
P:分布式系统在某节点或网络分区故障时,依然可以对外提供满足CA的服务。
BASE(碱)理论:做不到强一致性,但应该做到最终一致性。
BA:基本可用。分布式系统出现故障时,允许损失部分可用性,保证核心可用。
S:柔性状态。允许中间态,且不影响整体可用性。如MySQL主从复制有延时,就是柔性状态的体现。
E:最终一致性。所有数据副本经过一定时间后,最终达到一致。其必导致S。
Paxos协议:在多机间通信不存在伪造篡改的前提下,可通过Paxos协议达成一致性。成本是发给Paxos系统的信息,至少同步发给一半以上的机器确认后,才算成功。
柔性事务解决分布式事务问题:
1、引入日志和补偿机制。事物日志记录事物开始、结束状态、事务参与者信息。参与者节点根据需求做重试或回滚日志。
根据日志记录找回事务执行的当前状态,并据此决定是重试还是回滚。实践中,其问题在于对异常处理和回滚支持不够,出了问题,人力维护的成本高。
2、可靠消息传递。
网络通信危险期:请求发出后,响应返回前,网络发生了故障,请求方不知服务端是否已成功地处理了请求。
节点间网络通讯,其结果有三:成功、失败、未知。
为保证消息传递的可靠性,消息至少发一次,有可能发多次消息。消费者程序必须实现幂等。之前文章有述。
3、无锁。加锁会造成瓶颈,不加锁,又必须保证隔离性。
A:不回滚。事物发生异常也不回滚,通过各种补偿机制,继续走正向流程,即便中间状态对外可见。因为不回滚,也不会造成脏读。
脏读:读取未提交。
不可重复读:前后多次读取,数据不一致。读取已提交。
幻读:前后多次读取,数据总量不一致。
脏读和不可重复读针对的都是更新操作,幻读针对的是插入操作。
B:变化明细表。下单扣库存,不扣减商品表的库存数,而是增加一条预减记录。付款成功后再扣减商品表的库存数。付款前需要实际库存数的公式如下:
实际库存数=商品表库存数-商品预减记录的库存数总和。
C:乐观锁。版本号、时间戳。前文有述。
- 分布式事务一致性实现的方式总结
- 息中间件(一)分布式系统事务一致性解决方案大对比,谁最好使?
- 分布式系统(面向接口开发等)事务一致性解决方案(转)
- 分布式系统事务一致性解决方案(转)
- 分布式事务了解吗?如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?
- 分布式事务实践(四)--可靠消息的最终一致性方案(集成独立消息服务)
- 分布式系统的事务处理-- 一致性
- 分布式系统事务一致性解决方案
- 漫谈事务与分布式事务(4)- 最终一致性
- 分布式系统事务一致性
- 解决业务代码里的分布式事务一致性问题
- 分布式系统事务一致性解决方案
- 分布式系统事务一致性解决方案
- 分布式系统事务一致性解决方案
- 微服务~分布式事务里的最终一致性
- 分布式系统事务一致性
- 如何基于RocketMQ的事务消息特性实现分布式系统的最终一致性?
- 设计----【分布式事务】分布式系统事务一致性解决方案
- 分布式事务一致性,事务补偿实战
- 分布式系统漫谈【拾】_分布式事务一致性:阿里方案