我的认为Zookeeper就是一个数据库,一个分布式数据库,一个具备文件系统特征的分布式数据库,一个提供监听机制的具备文件系统特质的分布式数据库。数据库
若是跟你们聊Zookeeper,那就避不开领导者选举、CAP、ZAB协议、数据一致性这些概念。但事实上,这些概念中最核心的是数据一致性,CAP中的C表明的就是强一致性,ZAB协议就是用来保证数据一致性的,而你们熟知的领导者选举只是ZAB协议中的一个阶段而已。分布式
因此,咱们直接开门见山,来直接聊一聊Zookeeper是如何保证数据一致性的。源码分析
关于Zookeeper的数据一致性的场景演示,本文就不演示了,读者能够直接搭一个Zookeeper集群,而后用多个客户端连不通的ZkServer,经过不一样的客户端,去操做的不一样的ZkServer,你会发现,直接被操做的ZkServer上的数据变化会被同步到集群里的其余ZkServer上,这就是一致性的表现。cdn
那么问题是,Zookeeper的这种数据一致性是怎么实现的呢?同步
其实,咱们平常生活中涉及到不少关于数据一致性的场景,好比你和你公司的小伙伴,大家多是组员,多是部门同事,假如大家是组员,因此大家会有组长,假设你就是组长,那么颇有可能你须要把从客户那里,或产品经理那里得到的信息经过开会的形式告诉给你的组员,好比今天,你决定今天下午3点给组员开会,那么你可能今天上午在大家群里先会通知一下,会发一条信息:“今天下午3点,开会说一下产品经理的新需求,收到请回复”,若是你看到组员都回复了,那么你就能够准备准备下午3点正式开会了,那么这个场景其实就是一个一致性问题,你得到的信息须要同步给其余组员。源码
好了,咱们认真的来想一下这个场景。产品
这个场景中有两个角色:it
因此,咱们能够想到,对于保证数据的一致性,其实有三个要素io
这么一分析下来,不知道你们对于一致性的解决方案有没有本身的理解了,这里没有涉及到Zookeeper的源码分析,存理论分析,你们能够把本身的理解评论出来,一块儿讨论。class