zookeeper与cap
1. 说一说cap
一个分布式系统最多只有同事满足一致性(Consistency),可用性(Availability)和分区容错性(Partition tolearance)这三项的两项。
①. Consistency一致性
一致性分为强一致性,弱一致性,最终一致性
比如有一个系统(MySQL-a,mysql-b),MySQL-a中有一份数据初始化为1,现在有一个user,user有两个步骤:
- 修改mysql集群中的数据为2;(假设,修改的mysql-a,mysql-b中的更改需要同步)
- 读取mysql集群中的数据;(假设,读取的是mysql-b)
如果:
强制要求步骤2读取的时候,一定要读取的是2,不能读取到的是1,那么要求mysql之间的同步非常迅速或者在步骤2上加锁以等待数据同步完成,那么这种叫强一致性;
允许步骤2读取的时候,可以读取1,那么这叫弱一致性,其实不就是不需要要一致;
允许步骤2读取的时候,可以先读到1,过一会儿再读到2,那么这种叫最终一致性,就是可以等待一段时间才一致。
cap中的一致说的是强一致性。
②. Availability可用性
可用性指的是服务可以一直可用,而且是正常响应时间。
好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。
一个分布式系统,上下游设计很多系统负载均衡,web服务器,应用代码,数据库服务器等,任何一个节点的不稳定都可以影响可用性。
③. Partition tolearance分区容错性
分区容错性指,即分布式系统在遇到某节点或网络分区故障的时候,仍然可以对外提供满足一致性和可用性的服务。
分区容错性和扩展性紧密相关。在分布式系统应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够
使应用虽然是一个分布式系统,而看上去仍然好些是一个可以正常运行的整体。比如现在的分布式系统中的某一个或者几个机器宕机了,其他剩下的机器
还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔为独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性
简单点说,就是网络中断,消息丢失的情况下,系统如果还能正常工作,就是有比较好的分区容错性。
④. cap证明
来证明一下cap,上图有两个节点服务,系统a和系统b,系统a对应的数据库中有一个v0的数据,系统b对应的系统也同理。这两个节点服务之间是可以通过网路连接的。
在满足一致性的条件下:
a中的v0与b中的v0是要保证相同。
在满足可用性的条件下:
用户不管是请求a或者b,都会得到立即响应。
在满足分区容错性的条件下:
a和b有一方宕机或者,他们之间的网路不通都不会影响两个系统的正常运作。
正常情况下,用户通过a系统修改数据,数据流程图如上图所示。第一步,a系统将数据库中的v0更新到v1,第二步,b系统与a系统同步数据,b系统数据库v0更新到v1,响应b系统。
v的数据是一致的定为一致性,a和b对外能提供服务是可用性,a和b之间的网路环境是分区容错性。
作为分布式系统,和单机系统最大的区别就是网络,现在加入a和b之间的网络断开了,我们要支持这种网路异常。
a和b网路断开的情况下,a数据库中的v1不能同步到b数据库中,那么b响应给用户的就只能是v0,这样就失去的一致性,保证了可用性。
还有一种情况,我们阻塞b服务,让它不能提供对外服务,一直等待a和b之间的网络连通,b中的数据同步到v1的时候,才响应请求数据v1,这样就保证了数据的一致性,失去了可用性。
这个过程也充分证明了,分布式系统中一致性和可用性不能兼得。
2. base理论
base理论是对cap理论的延伸,核心思想是及时无法做到强一致性(Strong Consistency),但是英语可以采用合适的方式达到最终一致性。
base是指基本可用(basically available),软状态(soft state),最终一致性( Eventual Consistency)
1. 基本可用
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用
电商大促时,为了应对访问量激增,部分用户可能会被引导降级页面,服务层也可能只提供降级服务,这就是损失部分可用性的体现
2. 软状态
软状态是指允许系统存在中间状态,而中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会用三个副本,
允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
3. 最终一致性
最终一致性是指系统中所有数据副本经过一段时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
由于base理论需要在一致性和可用性方面做出权衡,因此涌现了很多关于一致性的算法和协议:
- 两阶段提交
- 三阶段提交
- paxos算法
- zab协议
3. zookeeper是遵循cp,还是ap?
zookeeper至少满足了cp,牺牲了可用性,比如现在集群中有leader和follower两种角色,那么当其中任意一台服务器挂掉了,
都要重新进行选举,在选举的过程中,集群是不可用的,这就是牺牲的可用性。
但是,如果集群中有leader,follower,observer三种角色,那么如果挂掉的是observer,那么对于集群来说并没有什么
影响,集群还是可以用的,只是observer节点的数据不同了,从这个角度考虑,zookeeper又是牺牲了一致性满足了ap。
以上是 zookeeper与cap 的全部内容, 来源链接: utcz.com/z/512488.html