CAP理论

谁说我不能喝 提交于 2019-11-30 01:40:05

这个怎么说呢???网上说的天花乱坠,说什么的都有,很早以前我感觉我理解了,现在回过头完全不知....

首先我先描述下CAP,然后再详细解释。

1、可用性,也就是所谓的A(Consistency)

是指系统中任何一个节点宕机,其他节点也可以继续对外正常(此处待议)提供服务。

2、一致性,也就是所谓的C(Availability)

这个是比较好理解的,是指数据在任何时候,读取数据都是一致的,此处一致性指的是强一致性。

3、分区容忍性,也就是所谓的P(Partition tolerance)

这个是比较抽象点,分区容忍性强调是指系统中的节点因网络原因中断连接,导致出现分区现象,可以理解原本是整体,节点之间相互交互。出现这个现象和可用性不同地方在于,都可对外提供服务,但因出现分区,如果数据分区存储,就会出现对外提供数据异常。

 

争议问题

可用性:

什么算可用?什么算不可用?我程序出现异常,返回一个程序异常提示,算可用?如果算,那这个可用性就好处理了,处理不了我就都返回,那我就可以说我的程序是可用的???还是说可用指的是可以正常的业务场景处理,A、B两节点,A节点宕掉,B节点可以继续处理请求。所以,理解不同导致网上说法也大不一样。

一致性:

一致性是指强一致性,虽然时间差距在毫秒也不可否认有差距。大部分主从结构都是这样的,写入主节点后,会有线程会将数据写一份给从库。但是你写完数据马上去读取依然感觉不出有不一致现象。所以按照强一致性来算。

分区容错性:

这个说法就更奇怪了,有的说:一个数据库所在的机器坏了,如硬盘坏了,数据丢失了,可以添加一台机器,然后从其他正常的机器把备份的数据同步过来。也有的说:以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。甚至还有的说:即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

我是有点晕乎了,都说的感觉好像很对的样子。

但我觉得有位说的我感觉挺对的(https://blog.csdn.net/lihao21/article/details/81051631)。

那么CAP到底怎么个说法,我也不知道了。。。。只能说我们设计系统不能过于偏执于这个理论。

一致性???如要保证真正的一致性,那么在写数据时,只有所有节点都存储完成,才可响应完成,如果上百服务器,同步时间会多久?所以只要超过几台写入成功就可以认为写入成功。

可用性???如果我节点死掉了,还依然响应着服务响应失败,我要这样的可用性有何用???

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!