• 好处: 一台 Master 挂掉,另外一台照样可以提供读写服务。当数据没有被
赋值到别的 Master 上时,数据会丢失。
• 对同一数据的处理问题:Dynamo 的 Vector Clock 的设计(记录数据的版本
号和修改者),当数据发生冲突时,要开发者自己来处理
3.两阶段提交 Two Phase Commit _ 2PC
1.第一阶段:针对准备工作
1. 协调者问所有节点是否可以执行提交;
2. 参与者开始事务,执行准备工作:锁定资源(获取锁操作);
3. 参与者响应协调者,如果事务的准备工作成功,则回应"可以提交",否则,
拒绝提交;
2. 第二阶段:
1. 若都响应可以提交,则协调者向参与者发送正式提交的命令(更新值),参
与者完成正式提交,释放资源,回应完成。协调者收到所有节点的完成响应
后结束这个全局事务.。若参与者回应拒绝提交,则协调者向所有的参与者发
送回滚操作,并释放资源,当收到全部节点的回滚回应后,取消全局事务。
3. 存在的问题:若一个没提交,就会进行回滚
• 第一阶段:若消息的传递未接收到,则需要协调者作超时处理,要么当做失
败,要么重载;
• 第二阶段:若参与者的回应超时,要么重试,要么把那个参与者即为问题节
点,踢出整个集群;
• 在第二阶段中,参与者未收到协调者的指示(也许协调者挂掉),则所有参
与者会进入“不知所措” 的状态(但是已经锁定了资源),所以引入了三段
提交;