cap 理论中,感觉没法牺牲分区容忍性,而保证可用性和一致性啊。牺牲分区容忍性的话,那么一旦分区,可用性就无法保证。是我理解的有偏差吗,求 v 友纠正

2020-03-06 21:51:49 +08:00
 jdz
4395 次点击
所在节点    程序员
26 条回复
hantsy
2020-03-07 12:41:07 +08:00
Microservices 理论设计中常常选择 A 优先,保持 [最终] 一致性( C 允许某个时刻不一致,这种情况很应用中很常见,电商中状态更新并不是及时的等)。
Aresxue
2020-03-07 14:09:28 +08:00
P 不能保证的话那这个分布式还有什么意义,想想一台机器坏了所有服务都不可用,还不如单机呢
mreasonyang
2020-03-07 15:00:51 +08:00
现实中只要是分布式系统,分区问题必然存在,那么为了保证系统可用就必须保证分区一致性
xuanbg
2020-03-07 15:54:03 +08:00
一致性其实是和分区可用性相关且互斥的。可用性其实和其他两者没啥关系,而且你必须选择它。可用性都不存在了,还要什么自行车……
所以,如果你要分布式,就必须牺牲一致性。要搞一致性,就不能搞分布式。
xuanbg
2020-03-07 16:01:20 +08:00
@xuanbg 补充一下,所以可以推断出所谓的「分布式事务」就是扯淡。CAP 你都要,可能吗?
ujued
2020-03-08 10:42:50 +08:00
分布式即为多台计算机一起运算对外提供服务。

CA 系统,
1. 可以满足 C。各计算机节点不进行网络通信交换数据,只使用自己的数据。各节点数据是一致的。
2. 可以满足 A。某特节点故障,我们还可以使用其他节点的服务。

AP 系统,
1. 可以满足 P。系统可能在一段时间出现了网络分区,这时系统会有一定机制持续保持数据一致性,到最终一致。即我们不容忍分区错误,可以用手段消除分区。(有限时间内一定可以消除分区)
2. 可以满足 A。系统依然可以提供服务,但可能是在数据不一致的情况下提供的,即在服务数据最终一致性前提供的是含错误数据的服务。

CP 系统,
1. 可以满足 P。系统可能在一段时间出现了网络分区,这时系统会有一定机制持续保持数据一致性,到最终一致。即我们不容忍分区错误,可以用手段消除分区。(有限时间内一定可以消除分区)
2. 可以满足 C。在消除分区前牺牲可用性,即系统要么不提供服务,要么就是在数据一致后提供服务。


以我的经验看,分布式系统中,最多用的还是 AP 系统,在一些特殊服务中需要 CP 系统,不会使用 CA 系统。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/650546

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX