了解了解你自己的话zookeeper(从那时起,纠正了一些说法在线)


1,先看看官方的定义吧:

ZooKeeper is a distributed, open-source coordination service for distributed applications. It exposes a simple set of primitives that distributed applications can build upon to implement higher level services for synchronization, configuration maintenance, and groups and naming. It is designed to be easy to program to, and uses a data model styled after the familiar directory tree structure of file systems. 


zookeeper 是一个分布式应用程序提供的分布式的开源的协调服务。

他提供了一个简单的原语集,通过这些原语集能够实现更高层次的同步服务,配置管理,集群管理和命名服务。他被设计为易于编程和以一种和文件系统很类似的数据模型来实现编程。


通过定义能够了解到zookeeper都有哪些作用,无非就是一句话:能够为分布式应用程序提供同步服务,命名服务等功能。可是了解到这里马上就会产生疑问----还有好多开源项目都能够为分布式应用程序提供这些服务啊,为什么要用zookeeper呢?


举两个样例:

能够用redis实现分布式锁啊,或是不用redis随便用个什么其它的什么东西都能够作为分布式应用程序的锁啊;

配置管理好像就更扯了。我随便能够把配置放到什么地方仅仅要让分布式应用去读就能够了。

事实上。zookeeper不过只能提供这些功能也确实就没什么存在的必要了,关键是他可以提高可用的高一致性的这些服务。


提到高可用的这几个字,这时或许我们就会想到採用集群的方式(如今server部署的主流方式)。那么不过由于这个redis相同也能够达到这个标准。可是zookeeper还有高一致性的特性。

整体上来讲。zookeeper作为分布式应用的协调服务拥有一下特性:

高可用性。高一致性,高性能  (是不是对于分布式理论中的cap呢  Consistency Availability Partition Tolerance 事实上cap理论也是受到争议的


以下主要说一说zookeeper的高一致性

Zookeeper使用了一种称为Zab(Zookeeper Atomic Broadcast)的协议作为其一致性复制的核心,Zookeeper的实现是有Client、Server构成,Server端提供了一个一致性复制、存储服务。

Server端很多其它的是存储一些数据的状态,而非数据内容本身,因此Zookeeper能够作为一个小文件系统使用。数据状态的存储量相对不大。全然能够所有载入到内存中,从而极大地消除了通信延迟。 


对于分布式系统的一致性问题,事实上也就是在分布式环境下更新操作的顺序问题。相应于学术术语也就是全序(她是集合其中的一个概念)
 
那么怎样保证分布式环境下更新操作的顺序呢?这个问题在在全然的分布式环境下是不可能的,可是能够通过限定环境条件来解决问题。

例如以下:

 
1。通过物理时钟(即绝对參照系)能够实现,可是前提是在不同地方的物理时钟没有误差 
这个差点儿是不可能的, 由于全部的物理时钟同步。古代关于时钟另一个故事(參见罗辑思维-击溃牛顿的钟表匠)。只是现代google公布的spanner的核心技术中包括用卫星进行全球的datacenter之间的时钟同步
 
2。通过严格的因果关系来确定顺序。对于參照系, 选取不同的參照系可能会有不同的顺序的推断, 可是对于严格的因果关系, 不管在什么參照系下都不会改变的。
 
有人用狭义相对论来解释感觉非常形象,狭义告诉我们时空中的事件并不存在一个始终如一的全序关系, 不同的观察者对两个事件谁先发生可能具有不同的看法. 当且仅当事件e2是由事件e1引起的时候, 事件e1和e2之间才存在一个先后关系
 
对于进程间的事件, 假设两个进程没有关联或通信, 是无法推断顺序的 
仅仅有当两个进程间产生通信后, 产生因果关系, 从而来确定顺序 
如p1为发消息给Q事件, 而q2为从P收到消息事件, 则p1和q2间有明白的因果关系, 故能够说p1 "happen before" q2, 即p1 –> q2
 
对于没有明白的因果关系的事件, 无法推断其顺序, 仅仅能觉得他们属于并发。

 
总结:
    对于zookeeper来说,由于其是master-slave结构。

所以在存在leader正常工作的情况下。由leader作为唯一的參照物就可以。可是当leader down掉选举发生的过程中。或者出现多个leader的情况下就没有办法了。

而zookeeper正是运用fastpaxos和zab来保证这中一致性。总之,zookeeper利用在全序列的思想下利用以ZAB为协议的fastpaxos算法实现了强一致性。


參考:



版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/mengfanrong/p/4840617.html