看了些文章 然后发现 cap 中的 c 指的是 多节点中数据副本是否相同 那么这个其实和分布式没有关系,有关系的是集群
分布式,指的是多个系统,合作对外提供服务
分布式中的一致性,指的是业务上的一致性,譬如说扣减红包和下订单,要保证业务的一致性,但是两个系统不是在同一个应用程序中,无法处于同一个数据库事务中,没有 aid 的加持。于是需要引入像 2 阶段提交,TCC,本地消息表这类的方案。
是这样吗? 谢谢
1
ruandao OP 另外有个问题是,最终一致性,r+w<=N, 配合上 TCC 会不会出现问题,譬如说,我有两个并发扣减的操作,如果想要不出现问题,那么只能在同一个节点写入对吧,然后扩散到其他节点,还是说,两个并发操作可以对不同的节点写入
cap 是必须选主对吧,然后从节点对外提供读服务,主进行写的串行化,然后扩散给从 |
2
ruandao OP cap 中的 c 指的是集群中节点的数据复制
cap 需要选主,主对写进行序列化并且执行然后分发给从进行同步 从节点主要提供读的服务 |
3
ruandao OP 看了下,好像理解错了
cap 中的强一致性 好像是每个节点都有个副本,然后 保证 r+w>N 那么 cap 由谁来保证, 将写请求打到集群中的任一节点,然后由那个节点,对其他节点发起请求来保证一定数量的 w ?然后汇总所有的 w,并返回? 读的时候,同样是打到任一节点,然后这个节点对其他节点发起请求来保证一定数量的 w,最后把最新的值返回? 还是说,由客户端中间件来保证? |
4
misaka19000 2020-04-28 00:52:21 +08:00
CAP 更加理论一点吧,不存在选不选主的问题,选主这些是一些更加工程化的实践了
|
5
ruandao OP @misaka19000
我现在有点混淆,最终一致性, 是指一个业务中,不同数据譬如下单和扣钱这两个不同的数据,随着时间推移达到一致(即下单和扣钱都执行了,刚开始可能只是先扣钱,然后通过本地消息表来下单) 还是指,同一个数据,在不同节点中,随着时间的推移,如果没有新的写入的话,达到同一个值 |
6
misaka19000 2020-04-28 01:01:48 +08:00 1
最终一致性很简单啊,简单点来说就是两个系统中存在同一个变量 X,在某一个时刻 A 系统的 X 值为 1,一段时间之后(最终),B 系统中的 X 的值也会变为 1,这就是最终一致性
|
7
ruandao OP @misaka19000 好的,那么这篇文章 https://juejin.im/post/5c9443406fb9a070fe0dd9a9#heading-23 感觉就有点奇怪,像两阶段、tcc 、补偿之类的应该和最终一致性没有关系
搜资料的时候,碰到这篇文章,然后疑惑了 |
8
misaka19000 2020-04-28 01:10:48 +08:00
你说的这些是实现最终一致性的手段或者说方式,与 CAP 理论本身无关
|