zoukankan      html  css  js  c++  java
  • 两阶段提交协议

    在两阶段提交协议(Two Phase Commitment Protocol,2PC)中,把分布式事务的某一个代理指定为协调者(Coordinator),所有其他代理称为参与者(Participant)。这里的代理是指完成各个子事务的进程。只有协调者才拥有提交或撤销事务的决定权,而其他参与者各自负责在其本地数据库中执行写操作,并向协调者提出撤销或提交事务的意向。一般一个站点唯一地对应一个子事务,如果某一参与者与协调者在同一站点,虽然它们不需要使用网络来通信,但仍逻辑地认为它与协调者不在同一站点。
    2PC把事务的提交过程分为两个阶段:
    第一阶段是表决阶段,目的是形成一个共同的决定。开始时,协调者在它的日志中写入一条开始提交的记录,再给所有参与者发送“准备提交”消息,并进入等待状态。当参与者收到“准备提交”消息后,它检查是否能提交本地事务。如果能提交,参与者在日志中写入一条就绪记录,并给协调发送“建议提交”消息,然后进入就绪状态:否则,参与者写入撤销记录,并给协调者发送“建议撤销”消息。如果某个站点做出“建议撤销”提议,由于撤销决定具有否决权(即单方面撤销),发出“建议撤销”的站点就可以直接忽略这个事务。协调者收到所有参与者的回答后,它就做出是否提交事务的决定。只要有一个参与者建议撤销,协调者就必须从整体上撤销整个分布式事务,因此它写入一条撤销记录,并给所有参与者发送“全局撤销”消息,然后进入撤销状态;否则,它写入提交记录,给所有的参与者发送“全局提交”消息,然后进入提交状态。
    第二阶段是执行阶段,目的是实现这个协调者的决定。根据协调者的指令,参与者或者提交事务,或者撤销事务,并给协调者发送确认消息。此时,协调者在日志中写入一条事务结束记录并终止事务。

  • 相关阅读:
    c++中重载、重写、覆盖的区别
    c++值传递,指针传递,引用传递以及指针与引用的区别
    c/c++中static与extern关键字介绍
    Typedef和#define之间的区别
    c++中sizeof()的用法介绍
    c++笔试题:不使用第三个变量来交换俩个变量的数值
    c++位运算符介绍
    3.高并发教程-基础篇-之分布式全文搜索引擎elasticsearch的搭建
    2.高并发教程-基础篇-之nginx+mysql实现负载均衡和读写分离
    1.高并发教程-基础篇-之nginx负载均衡的搭建
  • 原文地址:https://www.cnblogs.com/TimeIsChoice/p/8888282.html
Copyright © 2011-2022 走看看