cap 中的 C 和 分布式、集群的关系 有点混淆 谢谢

2020-04-27 23:49:53 +08:00
 ruandao

看了些文章 然后发现 cap 中的 c 指的是 多节点中数据副本是否相同 那么这个其实和分布式没有关系,有关系的是集群

分布式,指的是多个系统,合作对外提供服务

分布式中的一致性,指的是业务上的一致性,譬如说扣减红包和下订单,要保证业务的一致性,但是两个系统不是在同一个应用程序中,无法处于同一个数据库事务中,没有 aid 的加持。于是需要引入像 2 阶段提交,TCC,本地消息表这类的方案。

是这样吗? 谢谢

933 次点击
所在节点    问与答
8 条回复
ruandao
2020-04-28 00:09:02 +08:00
另外有个问题是,最终一致性,r+w<=N, 配合上 TCC 会不会出现问题,譬如说,我有两个并发扣减的操作,如果想要不出现问题,那么只能在同一个节点写入对吧,然后扩散到其他节点,还是说,两个并发操作可以对不同的节点写入


cap 是必须选主对吧,然后从节点对外提供读服务,主进行写的串行化,然后扩散给从
ruandao
2020-04-28 00:15:10 +08:00
cap 中的 c 指的是集群中节点的数据复制
cap 需要选主,主对写进行序列化并且执行然后分发给从进行同步
从节点主要提供读的服务
ruandao
2020-04-28 00:42:07 +08:00
看了下,好像理解错了
cap 中的强一致性 好像是每个节点都有个副本,然后 保证 r+w>N

那么 cap 由谁来保证,
将写请求打到集群中的任一节点,然后由那个节点,对其他节点发起请求来保证一定数量的 w ?然后汇总所有的 w,并返回?
读的时候,同样是打到任一节点,然后这个节点对其他节点发起请求来保证一定数量的 w,最后把最新的值返回?

还是说,由客户端中间件来保证?
misaka19000
2020-04-28 00:52:21 +08:00
CAP 更加理论一点吧,不存在选不选主的问题,选主这些是一些更加工程化的实践了
ruandao
2020-04-28 00:55:58 +08:00
@misaka19000
我现在有点混淆,最终一致性,
是指一个业务中,不同数据譬如下单和扣钱这两个不同的数据,随着时间推移达到一致(即下单和扣钱都执行了,刚开始可能只是先扣钱,然后通过本地消息表来下单)
还是指,同一个数据,在不同节点中,随着时间的推移,如果没有新的写入的话,达到同一个值
misaka19000
2020-04-28 01:01:48 +08:00
最终一致性很简单啊,简单点来说就是两个系统中存在同一个变量 X,在某一个时刻 A 系统的 X 值为 1,一段时间之后(最终),B 系统中的 X 的值也会变为 1,这就是最终一致性
ruandao
2020-04-28 01:04:57 +08:00
@misaka19000 好的,那么这篇文章 https://juejin.im/post/5c9443406fb9a070fe0dd9a9#heading-23 感觉就有点奇怪,像两阶段、tcc 、补偿之类的应该和最终一致性没有关系
搜资料的时候,碰到这篇文章,然后疑惑了
misaka19000
2020-04-28 01:10:48 +08:00
你说的这些是实现最终一致性的手段或者说方式,与 CAP 理论本身无关

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

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

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

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

© 2021 V2EX