• [转]10分钟了解分布式CAP、BASE理论


    原文: https://www.cnblogs.com/chengtian/p/11278072.html

    ---------------------------------------------------------------------------------------------------------------

    CAP理论

    2000年7月,Eric Brewer教授提出CAP猜想;2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP;之后,CAP理论正式成为分布式计算领域的公认定理。 CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。 CAP:C :Consistency(一致性)A:(Availability)可用性P:(Partition Tolerance)分区容错性

    让我们构造一个非常简单的分布式系统。

    • 两台服务器G1和G2
    • 两台服务器可以相互通讯
    • 客户端可以随机访问任何一台服务器 

    Consistency(一致性)

    Gilbert and Lynch 这样描述的一致性.

    any read operation that begins after a write operation completes must return that value, or the result of a later write operation

    在写操作完成之后的任何读操作都必须返回该值。

    客户端向G1服务器发起一个写操作,把变量初始值v0 改为v1,接下来客户端可能向节点G1读取也可能向节点G2读取;

    • 向G1发起一个读操作,得到更改后的值V1。这就是满足了一致性 

    • 向G2发起一个读操作,此时G1向G2发送同步消息

    1. 如果同步完成 ,那么读到的结果是v1,这样也满足了一致性 

    2. 还未同步完成,这是G2还是v0,这就不满足一致性。

    (Partition Tolerance)分区容错

    Gilbert and Lynch 这样描述的分区容错.

    the network will be allowed to lose arbitrarily many messages sent from one node to another

    网络允许丢失任意多的消息从一个节点发送到另外一个节点

    在分布式环境中,节点之间的通信可能出现问题,整个系统就产生所谓的分区。所以我们在设计的时候需要考虑这种情况;剩下来的 A和C满足好,我们就可以说我们的系统有很好的分区容错性。

    (Availability)可用性

    Gilbert and Lynch 对 availability的描述原文. every request received by a non-failing node in the system must result in a response 系统中非失败节点收到的每个请求都必须导致响应 在可用性系统中,只要服务器没有奔溃,客户端发送请求,服务器必须返回一个相应给客户端。

    为什么要CAP不能同时满足

    通过上述的定义和描述知道分区无法避免,p总是要考虑的。为什么c和a无法同时做到呢?其实都是分区惹的祸。

    如果我们保证一致性;那么G1写入操作之后,必须保证数据同步给G2之后,G2才能对外提供响应,这显然就没有可用性了。

    反之 我们保证可用性,那就没法保证一致性了,既生瑜何生亮的悲剧。

    小结

    经过上面分析,在分布式系统中,我们一般会选择AP而牺牲一致性。牺牲并不意味着不关心一致性,而是首先满足A和P,如何解决C的问题。参考以下BASE理论

    BASE 理论

    eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(StrongConsistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

    (Basically Available)基本可用

    在分布式系统出现故障的时候,允许损失部分可用性,即保证核心可用。

    (Soft State)软状态

    接受一段时间的状态不同步,及中间状态,而改中间状态不影响系统整体可用性。这里的中间状态就是CAP理论中的数据不一致性。

    (Eventually Consistent)最终一致性

    上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。

    总结

    CAP是分布式系统设计理论,BASE是CAP理论中AP方案的延伸,对于C我们采用的方式和策略就是保证最终一致性;

    参考

    英文版的:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

    CAP 理论十二年回顾:"规则"变了:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed

    CAP 定理的含义:http://www.ruanyifeng.com/blog/2018/07/cap.html

    从零开始学架构PDF

  • 相关阅读:
    paip.提升效率僵尸代码的迷思
    paip.输入法编程词库多意义条目分割 python实现.
    paip.提升效率提升绑定层次form绑定取代field绑定
    paip.提升效率调试日志系统日志参数含义python
    paip.自定义java 泛型类与泛型方法的实现总结
    paip.提升效率request自动绑定domain object
    paip.提升效率filter map reduce 的java 函数式编程实现
    paip.php 5.0 5.3 5.4 5.5 6.0的新特性总结与比较
    paip.解决中文url路径的问题图片文件不能显示
    paip.判断字符是否中文与以及判读是否是汉字uapi python java php
  • 原文地址:https://www.cnblogs.com/oxspirt/p/11280494.html
Copyright © 2020-2023  润新知