转自:http://blog.csdn.net/colorant/article/details/8444283

== 是什么 ==

目标Scope(解决什么问题)

为分布式系统提供高可靠性的协同工作机制

官方定义

ZooKeeper is acentralized service for maintaining configuration information, naming,providing distributed synchronization, and providing group services.

个人理解

基本上ZooKeeper提供了一个简化并支持特定功能的分布式文件系统接口,加上数据同步,变更通知,客户端Cache等辅助机制。基于这样的接口,用户可以自己在此之上构建逻辑,来实现各种分布式系统系统工作所需的各种功能,如配置管理,名称服务,Master选举,同步,锁等,类似于google的Chubby,但是没有内建锁的支持。

== 如何实现 ==

核心思路,架构

zookeeper的核心思想是提供一个非锁机制的Wait Free的用于分布式系统同步的核心服务,提供简单的文件创建读写操作接口,其系统核心本身对文件读写并不提供加锁互斥的服务,但是提供基于版本比对的更新操作,客户端可以基于此自己实现加锁逻辑。客户端可以连接任意zookeeper服务节点来读写数据,zookeeper内部会分为Leader和Follower角色。

Zookeeper使用简单的同步策略,通过以下两条基本保证来实现数据的一致性:

  • 全局串行化所有的写操作
  • 保证同一客户端的指令被FIFO执行(以及消息通知的FIFO)

客户端尽可能通过Cache和消息通知机制来减少与服务器之间不必要的信息沟通,来减轻服务器负担

数据更新操作需要服务器Leader节点协同Slave节点通过ZAB协议(基本就是两阶段提交)进行全局广播来实现,因此随着Slave节点增加,性能是下降的。

数据读操作可以由任意服务器节点提供,如果不是Lead节点,读操作本身不保证数据是最新的,但是可以通过一个Sync(大概就是一个空的写操作)+read的模式来实现对最新数据的读取(由前述两条基本保证可推得)

Zookeeper自身文件系统维护在内存中,通过定期Snapshot和Log记录来实现灾难恢复

zookeeper对用户暴露简单的API接口,读写创建Znode数据节点,Znode节点分为普通节点和临时节点,零时节点当创建它的客户端连接结束/丢失以后会自动删除。API主要包括

Create : 创建node

Delete : 删除node

Exists : 判断node是否存在

get data : 读取node内存储的数据

set data : 向node写数据

get children : 获取一个node的子node列表

Sync : 等待数据更新的同步完成

适用领域

需要一个中心服务提供协同工作原语支持的分布式系统。能够将协同工作部分简单的剥离(或者添加)使用外部服务的场合。

细节

Snapshot创建时不Block数据更新操作,因此不保证精确再现zookepper某一个特定时间点的状态,不过由于串行化更新操作和数据更新的幂等特性,只要完整数量的LOG被顺序更新(可以重复),由非精确状态再现的Snapshot是可以恢复得到精确的最新状态的。

== 相关项目 ==

上下游项目

Hbase : 使用Zookeeper做Master选举等

Hadoop2.0 (YARN)

BookKeeper: Zookeeper内置项目,基于Zookeeper实现的一个Log记录系统

类似项目

chubby

== 相关文献 ==

项目主页

http://zookeeper.apache.org

Paper 论文

ZooKeeper: Wait-freecoordination for Internet-scale systems

A simple totallyordered broadcast protocol

Zookeeper 快速理解的更多相关文章

  1. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  2. Storm快速理解

    转自:http://blog.csdn.net/colorant/article/details/8256039 更多云计算相关项目快速理解文档  http://blog.csdn.net/color ...

  3. Spark机器学习 Day2 快速理解机器学习

    Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...

  4. 快速理解web语义化

    什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...

  5. zookeeper快速入门

    一.zookeeper简介 zookeeper 是apache旗下的hadoop子项目,它一个开源的,分布式的服务协调器.同样通过zookeeper可以实现服务间的同步与配置维护.通常情况下,在分布式 ...

  6. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  7. 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...

  8. 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

    原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...

  9. [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!

    十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...

随机推荐

  1. SQL Server 的动态语句(SQLServer 的String.format用法)(SQLServer的调用SQL占位符的使用)

    直接上代码好了: --建表语句if exists(select 1 from [你的测试数据库名字].sys.tables where name='TDepartment') BEGIN print ...

  2. 腾讯云服务器 - 安装redis3.2.9以及集群

    redis大家都知道,服务器上必不可少的,那么在生产环境下安装的步骤和虚拟机里也是差不多的 官网上最新稳定版是3.2.9,而4.0的更新比较大,但是比几个还是beta版嘛 下载并且上传压缩包至云服务器 ...

  3. Atitit 快速开发的推荐技术标准化 规范 大原则

    Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高  4gl  dsl> 3.5gl &g ...

  4. 基于Django的独立运行的python脚本开发

    Django框架很方便,比如其方便的ORM,如果写基于Django的独立运行脚本,主要在脚本前面加上以下代码: import sys,os,django sys.path.append(os.path ...

  5. docker 安装MySQL远程连接

    1. 下载Mysql的Docker镜像: $ docker search mysql (搜索mysql镜像) $ docker pull mysql (下载mysql镜像,默认最新版本) 2. 运行镜 ...

  6. Fluent UDF【5】:第一个UDF

    这里以一个简单的初始化案例来描述UDF的使用过程. 0 Fluent中的Patch Fluent中提供了全域初始化以及局部Patch功能.对于整体区域的全局初始化可以采用starndard及hybri ...

  7. FLINK 案例分析

    基于Flink流处理的动态实时超大规模用户行为分析 https://zhuanlan.zhihu.com/p/31548501 基于Flink流处理的动态实时超大规模用户行为分析 https://zh ...

  8. (转)如何修复ubuntu的UEFI引导

    (转自: http://jingyan.baidu.com/article/335530da883e0b19cb41c325.html)(ps: 完美的解决了我的问题.) 最近有些手贱,偏偏要进入BI ...

  9. 【内核】嵌入式linux内核的五个子系统

    Perface Linux内核主要由进程调度(SCHED).内存管理(MM).虚拟文件系统(VFS).网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示. 图1 Linux内核的组成部 ...

  10. frame自适应

    <html> <head> <title>frame自适应</title> </head> <frameset rows=" ...