主要流程
阶段一:事务执行
协调者向所有参与者发出事务执行请求,并等待所有参与者的ACK响应;
阶段二:提交或回滚
如果协调者收到了所有参与者的ACK响应,并且为Yes,则参与者向所有参与者发送commit请求,且自身也提交事务;否则,发送rollback请求,自身回滚事务;
问题分析
阶段一问题
- 数据一致性:不会造成数据不一致,事务还没有提交;
- 性能问题:需要等待所有参与者的ACK响应;
阶段二问题
- 数据一致性:任意一个节点宕机都会造成数据不一致;
ZAB解决方案
- 性能问题:过半机制;
- 数据一致性问题:增加数据同步阶段;
参考: