今天在公司看了看zookeeper,虽然之前使用的是Eureka满足的是AP原则,但是也一直没有关注过P,现在换工作了,新公司用的是zookeeper,而zookeeper满足的是CP,就想着把知识补全一下.
注:本博客内容均为本人的个人理解,如有错漏,恳请留言指正,谢谢!
CAP理论
- C:一致性
也就是说,无论什么时候截取一段数据,它和其他的子模块中的同一数据,都是一致的. - A:可用性
举个例子,拿Eureka来说,可用性可以表现在心跳上.没有更改的情况下,eureka的所有子服务,每隔30S就会给eureka发送一次心跳,如果这个心跳一致不断的被eureka接收到,eureka就仍然认为你活着,但是如果超过90S没有接收到心跳,那eureka就会认为服务down了,就会把该服务从列表中剔除.(也就是说,60秒内,如果网络障碍,或者其他原因,服务down了,而后又重启成功了,那么eureka就不会管) - P:分区容忍性
分区容忍性就是,当两个服务之间的链接断裂了,他们互相都还可以正常运行.(在比如之前,先假设lol所有服务器账号通用,且总服务在美服),比如LOL,国服和美服,它们本质上都是服务器(集群).那么如果国服和美服之间的网络链接断了,且没有分区容忍性,那么,国服正在lol的玩家将集体砸键盘,毕竟总服务器是在美国,通信一断,那么国服直接瘫痪,如果存在分区容忍性,那么国内将设置一个服务器,此时国服和美服链接如果断开了,那么没关系,国内的工程师们可以慢慢解决(等待网络恢复),因为国内玩家可以正常在国服进行游戏,等到问题解决后,再将出问题期间的游戏记录,充值等信息(缓存),同步到美服总服务器即可.
综上,分区容忍性几乎就是默认必须存在的.那么为什么不能CAP三个都存在呢?因为AC本身就是矛盾的,
举个栗子:C的高一致,分区的情况下,我网络没有没有联通,那么,如果我想保证高一致,那么就必须等到网络恢复.这个时间可能是几个小时,那几个小时不能使用系统,何谈A高可用呢?保证A同理
base理论
base理论是eBay的架构师提出的,是经过长期大量的实践总结出来的,base理论认为上述的CA不可共存是伪理论,它有一种软方法,中和了CA的对立:因为p,并不是时时存在的,相反,它很少出现,我们只要能监控到P出现的时间,那么就可以在P出现时,允许数据在运行过程中可以短暂的不一致,但是最终结果必须一致,这样就缓和了有你没我的矛盾.
当然base理论不止我说的这些,但是所有的一切都是围绕刚刚那句:p,并不是时时存在的,相反,它很少出现,我们只要能监控到P的出现,那么就可以在P出现时我们可以做相应的处理.至于怎么做相应的处理,那么根据具体的情况不一而足,这里就不多逼逼了.
来源:CSDN
作者:LanceQiPing
链接:https://blog.csdn.net/weixin_44083609/article/details/104048353