基于Zookeeper的使用详解


Posted in PHP onMay 02, 2013

更多内容请查看zookeeper官网

Zookper: 一种分布式应用的协作服务

Zookper是一种分布式的,开源的,应用于分布式应用的协作服务。它提供了一些简单的操作,使得分布式应用可以基于这些接口实现诸如同步、配置维护和分集群或者命名的服务。Zookper很容易编程接入,它使用了一个和文件树结构相似的数据模型。可以使用Java或者C来进行编程接入。

众所周知,分布式的系统协作服务很难有让人满意的产品。这些协作服务产品很容易陷入一些诸如竞争选择条件或者死锁的陷阱中。Zookper的目的就是将分布式服务不再需要由于协作冲突而另外实现协作服务。

设计目标 Zookeeper是简易的

Zookeeper通过一种和文件系统很像的层级命名空间来让分布式进程互相协同工作。这些命名空间由一系列数据寄存器组成,我们也叫这些数据寄存器为znodes。这些znodes就有点像是文件系统中的文件和文件夹。和文件系统不一样的是,文件系统的文件是存储在存储区上的,而zookeeper的数据是存储在内存上的。同时,这就意味着zookeeper有着高吞吐和低延迟。

Zookeeper实现了高性能,高可靠性,和有序的访问。高性能保证了zookeeper能应用在大型的分布式系统上。高可靠性保证它不会由于单一节点的故障而造成任何问题。有序的访问能保证客户端可以实现较为复杂的同步操作。

Zookeeper是可重用的

ZooKeeper Service

基于Zookeeper的使用详解

组成Zookeeper的各个服务器必须要能相互通信。他们在内存中保存了服务器状态,也保存了操作的日志,并且持久化快照。只要大多数的服务器是可用的,那么Zookeeper就是可用的。

客户端连接到一个Zookeeper服务器,并且维持TCP连接。并且发送请求,获取回复,获取事件,并且发送连接信号。如果这个TCP连接断掉了,那么客户端可以连接另外一个服务器。

Zookeeper是有序的

Zookeeper使用数字来对每一个更新进行标记。这样能保证Zookeeper交互的有序。后续的操作可以根据这个顺序实现诸如同步操作这样更高更抽象的服务。

Zookeeper是高效的

Zookeeper的高效更表现在以读为主的系统上。Zookeeper可以在千台服务器组成的读写比例大约为10:1的分布系统上表现优异。

数据结构和分等级的命名空间

Zookeeper的命名空间的结构和文件系统很像。一个名字和文件一样使用/的路径表现,zookeeper的每个节点都是被路径唯一标识

ZooKeeper's Hierarchical Namespace

基于Zookeeper的使用详解

实现

下图显示了ZooKeeper服务的高级组件服务。除了请求处理器,Zookeeper服务器组的每个服务器复制他们自己的每个组件。

ZooKeeper Components

基于Zookeeper的使用详解

replicated database是一个存储在内存中的包含整个数据树的结构。所有的更新操作都做日志到硬盘上了。并且写操作在作用在数据库的时候会序列化存储到硬盘上。

每个ZooKeeper服务器都连接了许多个客户端。客户端连接到一个服务器来提交请求。

PHP 相关文章推荐
用PHP实现小型站点广告管理
Oct 09 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
UCenter Home二次开发指南
May 28 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
php快递单号查询接口使用示例
May 05 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 03 PHP
关于尾递归的使用详解
May 02 #PHP
基于Zend的Config机制的应用分析
May 02 #PHP
Zend的Registry机制的使用说明
May 02 #PHP
Zend的MVC机制使用分析(二)
May 02 #PHP
Zend的MVC机制使用分析(一)
May 02 #PHP
基于Zend的Captcha机制的应用
May 02 #PHP
PHP静态调用非静态方法的应用分析
May 02 #PHP
You might like
大师制作的中短波矿石收音机
2020/04/02 无线电
php 正则 过滤html 的超链接
2009/06/02 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
[原创]图片分页查看
2006/08/28 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
js日期联动示例
2014/05/02 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
python实现内存监控系统
2021/03/07 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
致铅球运动员广播稿精选
2014/01/12 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
2015年技术员工作总结
2015/04/10 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
移除Selenium中window.navigator.webdriver值
2022/06/10 Python