用自己的话理解理解zookeeper(自认为纠正了网上的一些说法)

标签: 理解 理解 zookeeper | 发表时间:2014-10-18 05:42 | 作者:cuidongdong1234
出处:http://blog.csdn.net


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仅仅是只能提供这些功能也确实就没什么存在的必要了,关键是他能够提高可用的高一致性的这些服务。


提到高可用的这几个字,这时也许我们就会想到采用集群的方式(现在服务器部署的主流方式)。那么仅仅是因为这个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算法实现了强一致性。


参考:



作者:cuidongdong1234 发表于2014-10-17 21:42:20 原文链接
阅读:37 评论:0 查看评论

相关 [理解 理解 zookeeper] 推荐:

用自己的话理解理解zookeeper(自认为纠正了网上的一些说法)

- - CSDN博客推荐文章
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.

zookeeper( 转)

- - 企业架构 - ITeye博客
转自:http://qindongliang.iteye.com/category/299318. 分布式助手Zookeeper(一). Zookeeper最早是Hadoop的一个子项目,主要为Hadoop生态系统中一些列组件提供统一的分布式协作服务,在2010年10月升级成Apache Software .

ZooKeeper监控

- - 淘宝网通用产品团队博客
        在公司内部,有不少应用已经强依赖zookeeper,比如meta和精卫系统,zookeeper的工作状态直接影响它们的正常工作. 目前开源世界中暂没有一个比较成熟的zk-monitor,公司内部的各个zookeeper运行也都是无监控,无报表状态. 目前zookeeper-monitor能做哪些事情,讲到这个,首先来看看哪些因素对zookeeper正常工作比较大的影响:.

zookeeper原理

- - CSDN博客云计算推荐文章
1.为了解决分布式事务性一致的问题. 2.文件系统也是一个树形的文件系统,但比linux系统简单,不区分文件和文件夹,所有的文件统一称为znode. 3.znode的作用:存放数据,但上限是1M ;存放ACL(access control list)访问控制列表,每个znode被创建的时候,都会带有一个ACL,身份验证方式有三种:digest(用户名密码验证),host(主机名验证),ip(ip验证) ,ACL到底有哪些权限呢.

Zookeeper Client简介

- - zzm
直接使用zk的api实现业务功能比较繁琐. 因为要处理session loss,session expire等异常,在发生这些异常后进行重连. 又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅. 另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举等,还要自己额外做很多事情.

zookeeper 理论

- - zzm
引用官方的说法:“Zookeeper是一个高性能,分布式的,开源分布式应用协调服务. 它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务,比如同步,配置管理,集群管理,名空间. 它被设计为易于编程,使用文件系统目录树作为数据模型. 服务端跑在java上,提供java和C的客户端 API”.

ZooKeeper 入门

- - 企业架构 - ITeye博客
ZooKeeper是一个高可用的分布式数据管理与系统协调框架. 基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得ZooKeeper解决很多分布式问题. 网上对ZK的应用场景也有不少介绍,本文将结合作者身边的项目例子,系统地对ZK的应用场景进行一个分门归类的介绍.

zookeeper场景

- - 企业架构 - ITeye博客
发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新. 例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用. 应用中用到的一些配置信息放到ZK上进行集中管理. 这类场景通常是这样:应用在启动的时候会主动来获取一次配置,同时,在节点上注册一个Watcher,这样一来,以后每次配置有更新的时候,都会实时通知到订阅的客户端,从来达到获取最新配置信息的目的.

Zookeeper的Session

- - 行业应用 - ITeye博客
介绍一下基于zookeeper的一些API的编程. 在此之前,我们先来熟悉一下相关知识:. Zookeeper的Session:. (1)客户端和server间采用长连接. (2)连接建立后,server产生session ID(64位)返还给客户端. (3)客户端定期发送ping包来检查和保持和server的连接.

Paxos与zookeeper

- - 互联网 - ITeye博客
1,什么是Paxos算法. Paxos算法是分布式计算领域中一个非常重要的算法,主要解决分布式系统如何就某个值(决议)达成一致的问题. 一个典型的场景是分布式数据库的一致问题:如果分布式数据库的各个节点初始状态一致,又能执行相同的操作序列,那么最后能达到一个一致的状态. 但是如何保证在每个节点上执行相同的命令序列呢.