1
liprais 2020-03-06 21:59:26 +08:00 via iPhone
为啥
|
3
hobochen 2020-03-06 22:10:43 +08:00
"cap 理论中,感觉没法牺牲分区容忍性,而保证可用性和一致性啊"
对;这就是 CA 系统 |
4
hobochen 2020-03-06 22:12:44 +08:00
hmmm 原谅我读了两遍你的问题
不对 简单的例子:有一个 service 是强一致 cache,只读不写;显然它们是一致的,并且分区不会影响可用性(只要读请求 hit 到任何一台机器都可以) |
5
ethego 2020-03-06 22:29:08 +08:00
是的,对于分布式系统来说一般必须容忍出现分区,剩下的只能在 C 和 A 中权衡。
|
6
neoblackcap 2020-03-06 22:37:00 +08:00
@hobochen 不行的,分区容忍性是必然存在的。你所说的只读不写。你想想存在这样的应用吗?整个集群就返回一个常量表?
现实生活中必然有写的操作,一旦不将分区容忍性考虑进去。强一致性就无从谈起了。CAP 实际上只有 CA 可以选,P 是必然存在的,不存在 CA 系统 |
7
lhx2008 2020-03-06 22:56:23 +08:00 via Android
如果出现分区问题,保可用性的方法一般就是 cache,像 dns 这种,一个分区的数据可能都是旧的。
如果要保一致性,那么就是小的那个分区不可用,大的分区还能用,像 zookeeper |
8
lhx2008 2020-03-06 23:00:34 +08:00 via Android
像 zookeeper 的话,5 个节点,现在变成 3 2 两个分区,小的分区两个都是不能用,3 个的那个分区还能用
|
9
lcdtyph 2020-03-06 23:04:40 +08:00
对,P 是默认的,可选的只有 C 和 A
|
10
az467 2020-03-06 23:45:35 +08:00
你想的没错,一个 CA 的分布式系统,如果没有分区容错性,那么一旦出现分区,这个系统就会崩溃,一个崩溃的系统当然什么都无法提供。
不过,还是有办法保证 CA 的,只要想办法让分区不发生就好。 至于分区能不能避免,这个就不是 CAP 理论的内容了。 现实生活中我们一般都是认为不能。 个人觉得 CAP 理论的描述挺烂的,给人一种硬往「不可能三角」上凑的感觉。 |
11
littlefatpaper 2020-03-07 01:43:04 +08:00 1
本人刚学的时候也是各种翻资料,下面说下我的理解,希望对你有帮助:
先把每个拆分得概念理解清楚,然后依赖一些生活场景加以联想 C 一致性:保证同一时间访问所有节点的数据都是一致的 A 可用性:在系统中一部分节点故障后,系统是否还能响应客户端的读写请求。 P 分区容错:系统不能在时限内达成数据一致性,就是发生了分区(以上是 Wiki 的解释)。由于计算机中没有百分百可靠的通信协议(通信原理、计算机网络的内容),所以系统内肯定会存在部分节点在时限内无法通信,而造成数据不一致的问题。所以 P 是肯定是满足的。 一致性其实细分还可分为:强一致性(一个节点更新,其他节点也要更新),最终一致性(只要保证后续某一时刻访问,系统) 假设分布式系统中,由于 P 的客观存在,一个节点挂了(短时间内无法和系统内其他节点同步数据),而其他节点数据有更新。要满足一致性,必须等其他数据必须要同步数据到该节点,才允许客户端访问。要是满足可用性,系统在向客户端提供服务的时候,已经无法保证系统内的数据一致了。 综上,分布式系统 CAP 最多只能满足两个条件,其中 P 是必须有的,无法同时满足 CAP。 剩下有种情况 CA 也是讨论很多的,既然排除了 P,那系统需在时限内保证数据一致,那单体架构单节点是最稳的了。那还要保证一致性,单节点就一份数据,完全一致。而可用性,要么继续服务,要么整个挂。 |
12
mcfog 2020-03-07 05:06:04 +08:00 via Android 1
“牺牲分区容忍性”的意思是不支持分区,而不是分区后会怎样
cap 是三个互相独立的维度,可用性和是否分区无关,一个系统不分区也不一定默认就是可用的,例如磁带机只能顺序读取且寻道时间很长,那么在业务是十个消费者一起随机读写数据,单台磁带机就是不具备分区容忍性的同时没有可用性 |
13
inwar 2020-03-07 07:58:07 +08:00 via Android
理论的完整在于它包含所有可能情况的假设
|
14
q447643445 2020-03-07 08:51:53 +08:00
这个要看从什么角度来看吧. 分两个情况, 数据是否可用 和 服务是否可用
1.如果从数据可用的角度来看.丢掉分区容错 p 即可满足 数据一致性 c 可用性 a 2.如果从服务可用的角度来看.丢掉分区容错 p 可用性 a 也没有了 只能满足 数据一致性 c. 如果描述的是数据是否可用 也分两种情况: 1.如果描述的分布式系统 分区容错 p 就注定存在 只能 数据一致性 c 和数据可用性 a 二选一 2.如果描述的是系统架构 分区容错 p 就可以丢掉 成为数据可用数据一致的单点系统, 数据无法保证可用的 cp 分布式系统 ,数据无法保证一致的 ap 分布式系统, 在讨论这个 cap 的时候 我觉得很容易谈混淆 |
15
hobochen 2020-03-07 10:26:04 +08:00 via iPhone
@neoblackcap 所以 zookeeper 这样的系统只有 C ?居然不是 AC ?
|
16
clrss 2020-03-07 10:28:23 +08:00 via iPhone
只要保证不分区就可以了,但显然一般都不能保证
|
17
hobochen 2020-03-07 10:34:01 +08:00 via iPhone
@neoblackcap 看起来是我对 AC 的理解有些问题...
|
18
lewis89 2020-03-07 10:41:15 +08:00 2
@hobochen #15 他表述有问题,实际上就 CP AP 两个可以选,没有 CA CA 是单体不能严格算作分布式系统
AP 高可用就是 redis 集群模式,每次写副本都是异步同步,通常在副本实例里面读到历史版本也是可以容忍的,但是最终会读到最新的版本 CP 不高可用就是 zookeeper 每次写完,要所有的副本同步完此次写才算是成功写完,此时其它的请求想读这条数据没门,因为数据压根没同步完,在请求方看来 这就是一个强一致性的系统,虽然系统内部可能节点状态不一定统一,但是对外,会看到一个一致性的集群。 要理解 CAP 首先要理解强一致性,CP AP 其实本质上就是 系统内部节点的数据同步的两种形式,AP 系统可以容忍读取到历史版本数据(在互联网行业通常如此,C 端用户并没有太高的数据一致性需求),CP 不能容忍读取到历史版本数据 就这么简单,不要搞复杂了。 |
19
neoblackcap 2020-03-07 11:17:51 +08:00
|
20
mtrec 2020-03-07 11:36:03 +08:00 via Android
cap 的粒度可以很小 不是说一个 cp 系统就所有操作都是 cp 大部分时间系统都可以保持 cap 只是某些异常时刻要做出抉择牺牲一个
|
21
hantsy 2020-03-07 12:41:07 +08:00
Microservices 理论设计中常常选择 A 优先,保持 [最终] 一致性( C 允许某个时刻不一致,这种情况很应用中很常见,电商中状态更新并不是及时的等)。
|
22
Aresxue 2020-03-07 14:09:28 +08:00
P 不能保证的话那这个分布式还有什么意义,想想一台机器坏了所有服务都不可用,还不如单机呢
|
23
mreasonyang 2020-03-07 15:00:51 +08:00 via iPhone
现实中只要是分布式系统,分区问题必然存在,那么为了保证系统可用就必须保证分区一致性
|
24
xuanbg 2020-03-07 15:54:03 +08:00
一致性其实是和分区可用性相关且互斥的。可用性其实和其他两者没啥关系,而且你必须选择它。可用性都不存在了,还要什么自行车……
所以,如果你要分布式,就必须牺牲一致性。要搞一致性,就不能搞分布式。 |
26
ujued 2020-03-08 10:42:50 +08:00 via iPhone
分布式即为多台计算机一起运算对外提供服务。
CA 系统, 1. 可以满足 C。各计算机节点不进行网络通信交换数据,只使用自己的数据。各节点数据是一致的。 2. 可以满足 A。某特节点故障,我们还可以使用其他节点的服务。 AP 系统, 1. 可以满足 P。系统可能在一段时间出现了网络分区,这时系统会有一定机制持续保持数据一致性,到最终一致。即我们不容忍分区错误,可以用手段消除分区。(有限时间内一定可以消除分区) 2. 可以满足 A。系统依然可以提供服务,但可能是在数据不一致的情况下提供的,即在服务数据最终一致性前提供的是含错误数据的服务。 CP 系统, 1. 可以满足 P。系统可能在一段时间出现了网络分区,这时系统会有一定机制持续保持数据一致性,到最终一致。即我们不容忍分区错误,可以用手段消除分区。(有限时间内一定可以消除分区) 2. 可以满足 C。在消除分区前牺牲可用性,即系统要么不提供服务,要么就是在数据一致后提供服务。 以我的经验看,分布式系统中,最多用的还是 AP 系统,在一些特殊服务中需要 CP 系统,不会使用 CA 系统。 |