分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
3639 人已学习
课程目录
已更新 4 讲 / 共 22 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (3讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
分布式协议与算法实战
登录|注册

02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度

韩健 2020-02-10
你好,我是韩健。
很多同学可能都有这样的感觉,每次要开发分布式系统的时候,就会遇到一个非常棘手的问题,那就是如何根据业务特点,为系统设计合适的分区容错一致性模型,以实现集群能力。这个问题棘手在当发生分区错误时,应该如何保障系统稳定运行,不影响业务。
这和我之前经历的一件事比较像,当时,我负责自研 InfluxDB 系统的项目,接手这个项目后,我遇到的第一个问题就是如何为单机开源版的 InfluxDB 设计分区容错一致性模型。 因为 InfluxDB 有 META 和 DATA 两个节点,它们的功能和数据特点不同,所以我还需要考虑这两个逻辑单元的特点,然后分别设计分区容错一致性模型。
那个时候,我想到了 CAP 理论,并且在 CAP 理论的帮助下,成功地解决了问题。讲到这儿,你可能会问了:为什么 CAP 理论可以解决这个问题呢?
因为在我看来,CAP 理论是一个很好的思考框架,它对分布式系统的特性做了高度抽象,比如抽象成了一致性、可用性和分区容错性,并对特性间的冲突(也就是 CAP 不可能三角)做了总结。一旦掌握它,你就像拥有了引路人,自然而然就能根据业务场景的特点进行权衡,设计出适合的分区容错一致性模型。
那么问题来了:我说的一致性、可用性和分区容错性是什么呢?它们之间有什么关系?你又该如何使用 CAP 理论来思考和设计分区容错一致性模型呢?这些问题就是我们本节课所要讲的重点了。我建议你集中注意力,认真学习内容,学以致用,把 CAP 理论应用到日常工作中。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(22)

  • zjm_tmac
    这里的节点1同步给节点2指的是日志复制还是等待节点2的事务提交完成?
    如果是日志复制的话,会不会两边提交事务的时间不一致,造成读取不一致。
    如果是等待事务提交的话,是不是变成了完全阻塞的,性能很低还有各种各样问题。

    作者回复: 加一颗星:)。这里是简化表示,比如你可以理解成二阶段提交的事务。关于第一个“如果”,多节点的副本是无法做到完全同时完成提交的,但能保证写完成后,读取都是一致的;如果需要实现读取的严格一致性,比如,可以通过实现“Master-Slave”模型,读写只访问Master节点,实现读取的严格一致性;第二个“如果”,就是常见事务型系统的缺点。

    2020-02-10
    9
  • enjoylearning
    还是不太明白分区容错性P和可用性A的区别,不都是随时可以提供服务吗?

    作者回复: 可以这么理解,分布式系统是必须要考虑分区容错性的,也就是说,出现分区错误时,比如节点间通讯丢消息了,系统要能正常运行,那么,这时候如何运行呢?是选择一致性呢,还是选择可用性呢。

    2020-02-11
    4
    4
  • Sinclairs
    CP模型的KV存储,适合用于提供基础服务,保存少量数据,作用类似zookeeper。
    AP模型的KV存储,适合查询量大的场景,不要求数据的强一致性,目前广泛应用于分布式缓存系统。
    一点思考,不知道对不对?

    作者回复: 加一颗星:),能否容忍的可能的短暂的一致性延迟,是关键。

    2020-02-10
    1
    3
  • cp模型适合要求acid场景,比如银行转账。ap模型适合只要求base的场景,比如网页cdn场景,不知道理解得对不对。

    作者回复: 加一颗星:)

    2020-02-14
    2
  • 大漠胡萝卜
    网络分区,怎么理解?

    作者回复: 网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。其实,你可以这么理解,节点之间的网络通讯出现了消息丢失、高延迟的问题。

    2020-02-11
    1
    2
  • 约书亚
    有个问题想不通,求助一下》
    在如何使用CAP理论一节,但就文中定义来说: 选择C时拒绝的是"写入"。选择A时,讨论的是"返回"相对新的信息。
    请问,根据这样的定义,某些基于raft的系统中(比如consul),在分区后,在少数分区一方的拒绝写入,就满足了C,而任何一个节点都支持读取陈旧的数据,又满足了A。CAP齐全,这不是矛盾了么?
    我查阅了些资料包括维基百科,对C和A的定义也都如此。
    我发现<<designing data-intensive applications>>这本书里有简单的用写入或读取这样的字样,而是一直用"线性一致性"(p336)。

    CP的KV存储一般都被借助用于提供给次级应用做严格的一致性的保障。
    AP的KV存储一般都被用于海量数据高并发需求下的数据操作,或者是多可用区高延迟的场景下的最终一致性保障。

    作者回复: 这里,是从大家在日常实践中,最直观感受的角度,进行表述的,一致性,最直观的,是影响到写,可用性,最直观的,是还能读到相对新的数据。你可以这么理解,当发生分区错误是,选择了C,新数据,都无法写入了,那就可能也不能读取了;选择了A,新数据,在部分节点上,能写入,也能被业务读取。

    另外,Raft是一个共识算法,“大多数的约定”赋予了它容错能力,也就是少部分节点故障时,集群是正常运营和写入的。但需要你注意的是,Raft实现的是大多数节点间的数据的共识,不是数据副本的强一致性,分布式事务是实现强一致性的,你可以想象下,分区错误了,分布式事务是无法提交的,也就是新数据,是无法写入的。

    2020-02-11
    7
    2
  • 胡鹏
    大佬快更新
    2020-02-12
    1
  • fcb的鱼
    您好,请教个问题。假设有这么种情况,当前单节点的mysql数据库有某张表因为写入量极大而导致写入延迟很高(暂时先忽略读的量),现在想将其扩充为集群部署。但是扩充为集群后,这个写入要怎么做,因为只是单张表的写入量大,也没法拆分表,想问下业内现在对这种场景分布式下怎么进行数据写入的。
    2020-02-17
  • 盘胧
    CP要求强一致性场景,如各种金融银行等交易系统。分布式事务性比较强。
    AP要求不断提供服务可用,现在感觉最贴切的就是12306购票了,在最后存储端才做一致性检验,还没抢到票。整体购票只要求最终一致性吧。

    作者回复: 加一颗星:)

    2020-02-17
  • Geek_bc461b
    如果META节点采用AP的策略,假如出现网络通信故障导致多个META节点之间的元数据不一致的,这种情况下,如果外部系统访问这个集群,每次集群返回的结果可能都不一样。

    作者回复: 加一颗星:)

    2020-02-17
  • 洛奇
    可以从常识去理解CAP理论,而不用过分拘泥于弄明白CAP理论的定义。
    2020-02-16
  • zmysang
    如果meta节点采用ap架构,在网络分隔的情况下,分隔的节点之间独立,各自接收到请求后自行处理,不会进行数据同步,导致不同meta节点上的元数据信息不一致。那么在数据请求的过程,可能会出现对不同节点发送请求有的可以成功有的不能成功的情况,这其实也会造成一种不可用的情况。
    针对CP 模型的 KV 存储和 AP 模型的 KV 存储,分别适合怎样的业务场景呢?
    针对cp模型的kv存储,适用于对数据的一致性以及可靠性要求比较高的情况;
    针对ap模型的kv存储,适用于对延迟要求比较高,对数据一致性要求没有那么高的情况。

    作者回复: 加一颗星:)

    2020-02-15
  • lucky_joseph
    下一篇什么时候更新,课程很好,通俗易懂。
    2020-02-15
  • 小晏子
    适合使用CP模型的场景: 需要保持分布式系统中所有节点的一致性,比如文中influxDB的元信息。
    适合使用AP模型的场景:那些服务会被访问频繁的信息,需要更关注系统的水平扩展、性能、可用性。
    2020-02-15
  • 小跑
    怎么觉得etcd-raft不是严格意义上的一致性,是线性的,只要满足大多数的情况下,哪怕个别节点挂掉,也能对外提供读写服务,所以从这个角度看,它其实一种ap模型吧。

    作者回复: Raft是具有容错能力的共识算法,可以用来实现一致性,比如,类似Google Chubby,读写操作都在领导者节点上执行。
    可以这么理解,分布式事务实现的是一致性,不能容忍任何节点出问题;只要集群中有一个节点,都能继续提供服务,可以把这个理解为可用性。而Raft等共识算法,能容忍少数节点的故障,但通过读写操作都在领导者节点上执行,也能为业务提供一致性的数据服务,可以将共识算法理解为对分布式事务型算法的改进,既有容错能力,又能提供一致性。

    2020-02-14
  • 此方彼方Francis
    老师自研的这个influxDB项目开源了吗?

    作者回复: 内部系统。

    2020-02-14
  • 汤小高
    可用性应该是指在适当的时间返回客户端响应结果
    2020-02-14
  • 明才
    坐等下一集
    2020-02-14
  • Joe Black
    这里C是指强一致性吧?用户无论写入到哪个节点,该节点要把数据变化同步到其它一定数目的节点,都成功后才给用户返回写入成功。如果同步过程失败,可用节点不够,那么直接给用户返回错误。一致性可以这么理解吗?

    作者回复: 加一颗星:)

    2020-02-14
    1
  • Geek_eaa8cc
    cp模型的kv系统适合处理重要的业务数据,类比原来的关系型数据库。 ap模型的kv一般作为查询,大数据分析,监控之类

    作者回复: 加一颗星:)

    2020-02-13
收起评论
22
返回
顶部