分布式理论(三)—— 一致性协议之 2PC

前言

为了使系统尽量能够达到 CAP,于是有了 BASE 协议,而 BASE 协议是在可用性和一致性之间做的取舍和妥协。

人们往往需要在系统的可用性和数据一致性之间反复的权衡。于是呢,就产生我们标题中的一致性协议,而且还不止一个呢。

为了解决分布式问题,涌现了很多经典的算法和协议,最著名的就是二阶段提交协议,三阶段提交协议,Paxos 算法。

本文重点介绍二阶段提交协议,简称 2PC。

1. 什么是 2PC

在分布式系统中,会有多个机器节点,因此需要一个 “协调者” ,而各个节点就是 “参与者”,协调者统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点就是 “参与者”。

协调者最终决定这些参与者是否要把事务真正进行提交。正式基于这个思想,有了二阶段提交和 三阶段提交。

2PC ,不是 2 个 pc 机的意思,而是 Two-Phase Commit 。可以认为是一种算法,也可以认为是一种协议,主要目的就是为了保证分布式系统数据的一致性。

协议说明:顾名思义,二阶段提交就是讲事务的提交过程分成了两个阶段来进行处理。流程如下:

2. 2PC 阶段一

1. 事务询问

协调者向所有的参与者询问,是否准备好了执行事务,并开始等待各参与者的响应。

2. 执行事务

各参与者节点执行事务操作,并将 Undo 和 Redo 信息记入事务日志中

3. 各参与者向协调者反馈事务询问的响应

如果参与者成功执行了事务操作,那么就反馈给协调者 Yes 响应,表示事务可以执行;如果参与者没有成功执行事务,就返回 No 给协调者,表示事务不可以执行。

从上面可以感觉到,这个一个 所谓的 “投票阶段”,什么意思呢?所有的节点都投票决定是否执行事务操作。

3. 2PC 阶段二

在阶段二中,会根据阶段一的投票结果执行 2 种操作:执行事务提交,中断事务。

执行事务提交步骤如下:

  1. 发送提交请求:协调者向所有参与者发出 commit 请求。
  2. 事务提交:参与者收到 commit 请求后,会正式执行事务提交操作,并在完成提交之后释放整个事务执行期间占用的事务资源。
  3. 反馈事务提交结果:参与者在完成事务提交之后,向协调者发送 Ack 信息。
  4. 协调者接收到所有参与者反馈的 Ack 信息后,完成事务。

中断事务步骤如下:

  1. 发送回滚请求:协调者向所有参与者发出 Rollback 请求。
  2. 事务回滚:参与者接收到 Rollback 请求后,会利用其在阶段一种记录的 Undo 信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源。
  3. 反馈事务回滚结果:参与者在完成事务回滚之后,想协调者发送 Ack 信息。
  4. 中断事务:协调者接收到所有参与者反馈的 Ack 信息后,完成事务中断。

从上面的逻辑可以看出,二阶段提交就做了2个事情:投票,执行。

核心是对每个事务都采用先尝试后提交的处理方式,因此也可以将二阶段提交看成一个强一致性的算法。

整个事务的执行过程如图(可能不是太直观。。。。)

image.png

4. 优点缺点

优点:原理简单,实现方便
缺点:同步阻塞,单点问题,数据不一致,过于保守

  1. 同步阻塞:

在二阶段提交的过程中,所有的节点都在等待其他节点的响应,无法进行其他操作。这种同步阻塞极大的限制了分布式系统的性能。

  1. 单点问题:

协调者在整个二阶段提交过程中很重要,如果协调者在提交阶段出现问题,那么整个流程将无法运转,更重要的是:其他参与者将会处于一直锁定事务资源的状态中,而无法继续完成事务操作。

  1. 数据不一致:

假设当协调者向所有的参与者发送 commti 请求之后,发生了局部网络异常或者是协调者在尚未发送完所有 commit 请求之前自身发生了崩溃,导致最终只有部分参与者收到了 commit 请求。这将导致严重的数据不一致问题。

  1. 过于保守:

如果在二阶段提交的提交询问阶段中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的化,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务,显然,这种策略过于保守。换句话说,二阶段提交协议没有设计较为完善的容错机制,任意一个节点是失败都会导致整个事务的失败

5. 总结

由于 Base 理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法或者说协议,这些协议设计的目的,就是能让分布式系统能够在可用性和一致性之间取得一个很好的平衡,能够基本可用。 比如 2PC,two-phase commit,分为两个阶段提交一个事务:投票,执行。通过协调者和各个参与者的配合,实现一致性协议。

当然,他也是有去缺点的,比如同步阻塞的时候性能较低,协调者的单点问题,网络故障可能引起的数据不一致的问题,执行策略过于保守的问题等等。

这些问题,将在另一个算法 3PC 中解决。我们将在下一篇文章中详细说明。

good luck!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 我有爱人,孩子,家, 有生存的使命。 我歌唱的一切源于完整与完美, 彼此不必遭到冷落与遗弃, 没有伤痕留在心里。 ...
    龙青阅读 238评论 0 4
  • 引宫刻羽郁轮袍, 咀徴含商云水谣。 仙曲声姿超众异, 寻常格调动吾曹。
    A_master阅读 225评论 6 7