分布式理论(一)——一致性理论基础

CAP 理论

2000 年 7 月,加州大学伯克利分校的 Eric Brewer 教授在 ACM PODC 会议上提出 CAP 猜想。2 年后,麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP。之后,CAP 理论正式成为分布式计算领域的公认定理。

CAP理论

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

但是在真实环境中,网络是不可能做到100%可靠的,所以,对于一个分布式系统来说,P 是一个基本要求,CAP 三者中,只能在 CA 两者之间做权衡,并且要想尽办法提升 P。

BASE 理论

2008年,eBay 的架构师 Dan Pritchett 源于对大规模分布式系统的实践总结,在 ACM 上发表文章提出 BASE 理论,BASE 理论是对 CAP 理论的延伸,是对 CAP 中一致性和可用性权衡的结果,核心思想是即使无法做到强一致性(Strong Consistency,CAP 的一致性就是强一致性),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consitency)。

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)三个短语的缩写。BASE 理论允许不同节点之间的数据同步存在延时,降低一定的可用性要求,但数据要达到最终一致。

一致性是分布式理论中的根本性问题,在分布式系统中,进行数据库事务提交(commit transaction)、Leader 选举、序列号生成等都会遇到一致性问题。为了在相互独立的节点之间达成一项统一的决议,保证数据的高可用,在长期的研究探索过程中,业界涌现出了许多典型的理论协议和算法。下面我们从特定条件下解决一致性问题的两种方法(2PC、3PC)入门,了解最基础的分布式系统理论。

二阶段提交协议(2PC)

2PC(two phase commit) 顾名思义分成两个阶段,先由一方进行提议(propose)并收集其他节点的反馈(vote),再根据反馈决定提交(commit)或中止(abort)事务。我们将提议的节点称为协调者(coordinator),其他参与决议节点称为参与者(participants)。

2PC

改进

相比一次性提交,分两步可以让事务先执行然后再提交,让事务在提交前尽可能地完成所有能完成的工作,这样,最后的提交阶段将耗时极短,耗时极短意味着操作失败的可能性也就降低。

缺陷

  • 同步阻塞
    整个过程中,所有参与节点都是事务阻塞型的,都在等待其他节点的响应,无法进行其他操作。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态,这种同步阻塞极大的限制了分布式系统的性能。

  • 单点故障
    协调者是整个提交过程的核心,一旦协调者发生故障,参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。尽管协调者挂掉后可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题。

  • 数据不一致
    在 P2A 阶段,当协调者向参与者发送 commit 请求之后,发生了局部网络异常或者在发送 commit 请求过程中协调者发生了故障,这会导致只有一部分参与者接受到 commit 请求。参与者接到 commit 请求之后就会执行 commit 操作,但是其他部分未接到 commit 请求的机器则无法执行事务提交,于是整个分布式系统便出现了数据不一致性的问题。

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

三阶段提交(3PC)

3PC 是 2PC 的改进版本,在两阶段提交的基础上增加了 CanCommit 阶段,并引入了超时机制。

3PC

改进

  • 减少阻塞
    第一阶段 canCommit 并不执行事务,这样当第一阶段失败或者 timeout 时,不占用事务资源不需要回滚(提高效率减少事务阻塞)。参与者返回 PreCommit 请求的响应后,等待第三阶段指令,若等待超时,则自动 commit 事务,也降低了阻塞。

  • 引入超时机制
    在 2PC 中,只有协调者拥有超时机制,3PC 同时在协调者和参与者中都引入超时机制, 主要是避免了参与者在长时间无法与协调者节点通讯(协调者挂掉了)的情况下,无法释放资源的问题,因为参与者自身拥有超时机制会在超时后主动提交释放资源,降低了阻塞时间。参与者返回 CanCommit 请求的响应后,等待第二阶段指令时,若协调者宕机,等待超时后自动 abort。由于有第一阶段 canCommit 的 yes 才会进入第三阶段,因而该阶段极大概率是 commit 而不是 rollback,当第三阶段开始前协调者挂掉,参与者等待超时后默认执行 commit 是最接近正确的行为。

缺陷

和 2PC 一样,3PC 还是可能会存在不一致性问题,比如第三阶段协调者发出了 abort 请求,这时网络故障,有些参与者没有收到 abort,那么就会自动 commit,造成数据不一致,因而适合本地(无网络情况)或者网络非常好的情况。

小结

可以看到,无论是 2PC 还是 3PC 都没有完美解决分布式系统中的一致性问题,但是它们原理简单、实现方便,对业务的侵入性小,在低并发、网络稳定、规模有限的特定场景下,能够严格保障分布式系统的强一致性,所以在关系型数据库的分布式事务、大数据流式计算中的 exactly once 语义下都有很好地运用。

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

推荐阅读更多精彩内容