CAP理论:C一致性:数据一致更新,所有数据变动都是同步的。
A可用性:服务高可用,快速响应
P(分区容错性):可靠性。好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体
关于2PC和3PC原理和缺陷和区别参考以下:
http://blog.jobbole.com/95632/
2PC缺点
1、同步阻塞问题。执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。
2、单点故障。由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)
3、数据不一致。在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据部一致性的现象。
4、二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。
3PC改变
1、引入超时机制。同时在协调者和参与者中都引入超时机制。
2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
2PC与3PC的区别
相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。而不会一直持有事务资源并处于阻塞状态。但是这种机制也会导致数据一致性问题,因为,由于网络原因,协调者发送的abort响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作。这样就和其他接到abort命令并执行回滚的参与者之间存在数据不一致的情况。
2PC与3PC的共同缺点
都存在数据一致性问题
最终一致性:通过MQ和重试机制(保证接口幂等性,如insert、update等操作要特别注意),还可以通过同步回调
TCC:try confirm/cancel,
不同于二阶段提交使用2PC机制时——以提交为例——一个完整的事务生命周期是:begin -> 业务逻辑 -> prepare -> commit。
使用TCC机制时——以提交为例——一个完整的事务生命周期是:begin -> 业务逻辑(try业务) -> commit(comfirm业务)。