聊聊Zookeeper的数据一致性解决方案

我的认为Zookeeper就是一个数据库,一个分布式数据库,一个具备文件系统特征的分布式数据库,一个提供监听机制的具备文件系统特质的分布式数据库。数据库

若是跟你们聊Zookeeper,那就避不开领导者选举CAPZAB协议数据一致性这些概念。但事实上,这些概念中最核心的是数据一致性,CAP中的C表明的就是强一致性,ZAB协议就是用来保证数据一致性的,而你们熟知的领导者选举只是ZAB协议中的一个阶段而已。分布式

因此,咱们直接开门见山,来直接聊一聊Zookeeper是如何保证数据一致性的。源码分析

关于Zookeeper的数据一致性的场景演示,本文就不演示了,读者能够直接搭一个Zookeeper集群,而后用多个客户端连不通的ZkServer,经过不一样的客户端,去操做的不一样的ZkServer,你会发现,直接被操做的ZkServer上的数据变化会被同步到集群里的其余ZkServer上,这就是一致性的表现。cdn

那么问题是,Zookeeper的这种数据一致性是怎么实现的呢同步

其实,咱们平常生活中涉及到不少关于数据一致性的场景,好比你和你公司的小伙伴,大家多是组员,多是部门同事,假如大家是组员,因此大家会有组长,假设你就是组长,那么颇有可能你须要把从客户那里,或产品经理那里得到的信息经过开会的形式告诉给你的组员,好比今天,你决定今天下午3点给组员开会,那么你可能今天上午在大家群里先会通知一下,会发一条信息:“今天下午3点,开会说一下产品经理的新需求,收到请回复”,若是你看到组员都回复了,那么你就能够准备准备下午3点正式开会了,那么这个场景其实就是一个一致性问题,你得到的信息须要同步给其余组员。源码

好了,咱们认真的来想一下这个场景。产品

  • 首先,咱们的目标是:信息同步,信息一致
  • 其次,咱们的方法是:先在群里预先通知,而后正式开会
  • 最后,咱们的结果是:组内全部的组员都得到了一样的信息

这个场景中有两个角色:it

  1. 组长
  2. 组员 所用的方法有两个阶段:
  3. 预先通知(注意,这里组长须要看到组员的回复,可是他并不须要去统计是否是全部组员都回复了,他只须要看到大部分组员回复了,他就认为这个会能够开了)
  4. 正式执行

因此,咱们能够想到,对于保证数据的一致性,其实有三个要素io

  1. 须要一个领导(组长),因此须要一个领导者选举机制
  2. 须要一个数据同步方法,其实就是2PC(1. 预提交,2. 收到ACK,3. 提交)
  3. 须要一个回复验证机制,过半机制验证

这么一分析下来,不知道你们对于一致性的解决方案有没有本身的理解了,这里没有涉及到Zookeeper的源码分析,存理论分析,你们能够把本身的理解评论出来,一块儿讨论。class

相关文章
相关标签/搜索