关于cap定理的思考

  1. cap中的c与a的理解
C:  Atomic consistency

在这里插入图片描述

对于满足atomic consitency的读写操作,我们都可以找到这样一个顺序,在这个顺序中所有的读写操作都是瞬时完成的。那么什么是写完成呢,
写操作完成意味着所有的后续读操作都会读到它写入的值,除非后续再有写操作发生。达到的等价效果就是好像一系列读写操作都是在一个single 
node上进行的【注意,单节点的读写也是有数据一致性问题的,见附记4】
举个例子:
  节点A,B,C中存储变量<K,V0>,写操作W1发生,更改了节点A,B中的值,改为<K,V1>,读操作R1发生读到C中的值为V0,随后节点A,B,C 
  发生了一次数据同步,C中的变量也变成了<K,V1>,然后读操作R2发生,读到变量值为V1.对于操作W1,R1,R2我们可以找到这样一个序列
  <T1,R1>,<T2,W1>,<T3,R2>,是满足在这个顺序中所有的读写操作都是瞬时完成的。我们注意到我们找到的这个序列和实际发生的顺序可能
  会出现不一致。即使对这个三个操作我们可以找到这样一个序列,但是并不意味着这个系统是满足atomic consistency的, 因为它没有证明
  对所有的操作都可以保证满足上面的约束。

反例:
   节点A,B,C中存储变量<K,V0>,写操作W1发生,更改了节点A,B中的值,改为<K,V1>,读操作R1发生读到A中的值为V1,然后读操作R2发生,
   读到节点C中变量值为V0. 对于写操作W1把它放在哪里都是不合适的。

附记:
1)事务有acid,分布式事务也有acid,但是分布式事务的c非老版事务的c.不要混淆。这里的c描述成了atomic consitency不要太纠结与
   atomic是否混淆,另外分布式的acid也没有研究过。这里的atomic consitency是强一致性的
2)如果让我给数据一致性下定义,我可能会表达为:在同一时刻,所有客户端读取到的数据必须相同。感觉没啥毛病,但是这个“同一时刻”有点模糊
   在时间不断细分的角度,实际上所有的两个操作都是不同时刻的。所以这个定义不容易对应到现实场景中。而上面那个定义明显可以推出“在同一
   时刻,所有客户端读取到的数据必须相同“ ,并且可以和现实场景进行对应。
3)对于同步写请求W,返回写成功即意味着在这个时间节点之前的某个时间写真的成功了,如果是异步请求,则意味着这个写操作会在未来的某个节点
   success at instant。可类比与单节点的同步写与异步写
4)单节点的数据一致性问题多与异步操作,缓存相关。比如客户端C1发送一个异步请求到S请求修改V v0->v1,然后返回成功, 然后在真正修改之前
   客户端B发送读请求到S读取该变量,并根据该值做了一些操作,这就可能带来问题。
   
A:服务可用,每个request并返回response.返回Exception不算,因为这代表着不是request失败了,代表着刚才那个服务是不可用的。评价服务可用程度
  的一个维度是消耗时间的长短,越短代表可用性越高。整体来说,多次请求只有少量失败也代表着可用性高。可用性不关心返回数据的新旧及正确性那是
  consistency该关心的。
  1. 为什么cap定理采用反证法证明时,假定客户进行读写请求时只会访问一个节点
首先,让我们回想下CAP定理,是指一个webService可以在网络分区的情形下,依然可以满足Avaliable和Consistency,这样的webService是不存在的.不
要局限思想,联系实际这里的网络分区并不局限于webService各个节点之间发生网络不通还包括Client与webService各个节点之间的节点不通。只不过作者在
证明CAP定理时,假定客户进行读写请求时只会访问一个节点,所以将客户端与webService之间网络不通的情况省去了。

那么我们来考虑下允许客户端访问多个节点的情况,以W+R>N的类似协议为例。每次写操作W个节点写成功视为成功,每次读操作读R个节点,并取最新的数据。这个
协议看起来似乎没有什么毛病,但是如果发生了网络不通呢,写操作时,有N-W+1个节点不通,如果返回失败即是不满足A,如果返回成功,那么接下来的R操作可能
会读到脏数据。即不满足C。

让我们再拓宽下思路,我们举的这个例子,其实就是把部分webService的工作转移到客户端了,让我们再转移回去,让那个节点去做这些事。我们会发现这两种
情形对于cap定理来说是一样的,一种是客户端只进行读写请求, 我们只考虑webService各个节点之间的网络分区来证明cap定理;另一种情况是,客户端还承担
一部分webservice的功能,那么我们只需要把客户端当作webService的一个特殊节点,并考虑client与webService各个节点的网络不通也考虑进去就可以类
比前面一种情况进行证明了。

参考:cap原始论文
分布式定理cap图解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值