zhanggao / learnNotes

2 stars 2 forks source link

ACID CAP BASE 2PC 3PC TCC #29

Open zhanggao opened 4 years ago

zhanggao commented 4 years ago

A Atomicity 原子性 一个事务操作不可分割,要么都失败,要么都成功; C Consistency 一致性 事务完成之前读取的是之前的数据,事务完成之后读取的是之后的数据,不存在一个点用户可以读取到执行过程中更改的数据; I Isolation 隔离性 一个事务的执行不能被其它事务干扰; D Durability 持久性 事务一旦提交,后续的操作和故障都不影响该事务。

AID的目的是C

zhanggao commented 4 years ago

分布式事务之深入理解什么是2PC、3PC及TCC协议?

zhanggao commented 4 years ago

2PC 二阶段提交 一个中心协调者和N个参与者。

  1. 协调者收到了请求后,向所有参与者发送prepare,此时一般协调者会打开本地数据库,进行事务,但不commit;
  2. 如果所有参与者都回复了可以处理,那协调者会向所有参与者发送确认通知,协调者收到了commit通知后就会进行本地的事务提交,并回复协调者,协调者就会向调用方返回结果;

异常情况:

  1. 如果有参与者回复自己不能处理,那协调者就会向所有参与者发送回滚通知,参与者回滚本地事务,协调者返给调用方失败的结果;

问题:

  1. 如果协调者在收到所有参与者确认可以处理后挂掉,那参与者本地事务就会长时间挂起影响性能;
  2. 如果一部分参与者收到了提交通知,一部分参与者没收到提交通知,那就会导致节点间数据不一致的情况;
zhanggao commented 4 years ago

3PC 三阶段提交

  1. 协调者询问所有参与者是否可以完成本次事务;
  2. 协调者得到了所有确认后,向所有参与者发送perCommit,收到任何参与者的no回复或者超时,协调者就向所有参与者发送取消;
  3. 协调者向所有参与者发送doCommit消息,任何一个失败就向所有参与者发送回滚;

3PC 相比 2PC,增加了1CanCommit阶段,并且加入了超时机制,如果超时,参与者会自动提交,避免了协调者单点故障。

zhanggao commented 4 years ago

TCC 补偿事务

  1. try 预留 应用通知所有参与者预留资源;
  2. confirm 确认 参与者收到确认后,通知所有参与者执行业务操作;
  3. cancel 取消业务操作;

2PC是协调者控制的,TCC是业务中实现的。

zhanggao commented 4 years ago

C Consistency 一致性、 A Availability 可用性、 P Partitiontolerance 分区容错性。

zhanggao commented 4 years ago