分布式事务一致性

数据库ACID(酸):原子性,一致性,隔离性,持久性。数据库

CAP理论:一个分布式系统最多能知足一致性C,可用性A,分区容错性P,三项中的两个。网络

C:更新操做成功且返回请求方完成后,全部节点在同一时间的数据彻底一致。分布式

A:用户在访问数据时能获得及时地响应。ide

P:分布式系统在某节点或网络分区故障时,依然能够对外提供知足CA的服务。日志

BASE(碱)理论:作不到强一致性,但应该作到最终一致性。事务

BA:基本可用。分布式系统出现故障时,容许损失部分可用性,保证核心可用。同步

S:柔性状态。容许中间态,且不影响总体可用性。如MySQL主从复制有延时,就是柔性状态的体现。it

E:最终一致性。全部数据副本通过必定时间后,最终达到一致。其必致使S。class

Paxos协议:在多机间通讯不存在伪造篡改的前提下,可经过Paxos协议达成一致性。成本是发给Paxos系统的信息,至少同步发给一半以上的机器确认后,才算成功。请求

柔性事务解决分布式事务问题:

一、引入日志和补偿机制。事物日志记录事物开始、结束状态、事务参与者信息。参与者节点根据需求作重试或回滚日志。

根据日志记录找回事务执行的当前状态,并据此决定是重试仍是回滚。实践中,其问题在于对异常处理和回滚支持不够,出了问题,人力维护的成本高。

二、可靠消息传递。

网络通讯危险期:请求发出后,响应返回前,网络发生了故障,请求方不知服务端是否已成功地处理了请求。

节点间网络通信,其结果有三:成功、失败、未知。

为保证消息传递的可靠性,消息至少发一次,有可能发屡次消息。消费者程序必须实现幂等。以前文章有述。

三、无锁。加锁会形成瓶颈,不加锁,又必须保证隔离性。

A:不回滚。事物发生异常也不回滚,经过各类补偿机制,继续走正向流程,即使中间状态对外可见。由于不回滚,也不会形成脏读。

脏读:读取未提交。

不可重复读:先后屡次读取,数据不一致。读取已提交。

幻读:先后屡次读取,数据总量不一致。

脏读和不可重复读针对的都是更新操做,幻读针对的是插入操做。

B:变化明细表。下单扣库存,不扣减商品表的库存数,而是增长一条预减记录。付款成功后再扣减商品表的库存数。付款前须要实际库存数的公式以下:

实际库存数=商品表库存数-商品预减记录的库存数总和。

C:乐观锁。版本号、时间戳。前文有述。

相关文章
相关标签/搜索