CAP理论

  |   0 评论   |   0 浏览

CAP理论

这是一个方法论,描述分布式系统中会遇到的一些问题。

Consistency,一致性

对于任何从客户端发达到分布式系统的数据读取请求,要么读到最新的数据要么失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确

Availability:可用性

对于任何求从客户端发达到分布式系统的数据读取请求,都一定会收到数据,不会收到错误,但不保证客户端收到的数据一定是最新的数据。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错

Partition tolerance:分区容忍性

分布式系统应该一直持续运行,即使在不同节点间同步数据的时候,出现了大量的数据丢失或者数据同步延迟。

(PS:^V^,您瞧瞧,包容度多高,简直是打不死的小强,现在应该能够理解为什么用tolerance容忍度这个词了吧。)

换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉

CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。

直观理解方式

按写入理解

出现网络问题时,是否允许写入:

  • 不允许:那么意味着降低了系统的可用性,但不同分区的数据能够保持一致,即选择了一致性。
  • 允许 :那么意味着不同分区之间的数据产生不一致,系统可用性得到保障,即选择可用性。

设计

单机关系数据库CA

关系型数据库同时保证CA时,指的并非是分布式环境下,简单地说就是单机环境下。

分布式数据库CP

如果在Master-Slave类复制式分布式环境下,默认保证的是CP,用过Mysql Master-Slave或者Mssql的复制-订阅模式的同仁应该知道,一旦主从机数据复制时出错,出现数据不一致的情况,必须人工干预或者重新同步。

NoSQL AP

最终一致性。

Paxos CP

使用 Paxos 进行数据复制的系统就是典型的 CP 系统,即使出现网络分区,主分区也能够提供服务,所以它是分区容忍的。

其它

col1col2col3
hbaseCP强一致性
ElasticSearchCP >> AP保持一致性,会脑裂。固定分区 + 精确UV计算插件
ClickhouseAlmost高可用,Not一致
hazelcastAP非强一致,会脑裂
DTSAP,最终一致

2PC(tow phase commit)两阶段提交 AP

再举个反例:使用 2PC 进行数据复制的系统没有分区容忍的特性,当出现网络分区时,整个系统都会阻塞。

深入话题

一致性分类

参考谈谈分布式系统的一致性

强一致模型:Strict Consistency,Sequential Consistency和Linearizable Consistency。

弱一致模型:Causal Consistency

col1col2col3col4
Strict Consistency强一致性任何读取操作都能读取到最新的值, aka 任何写入操作立即同步给所有进程牺牲可用性
Sequential Consistency
Linearizable Consistency
Causal Consistency

参考