最近在看Apache下的一个开源项目ZooKeeper(http://zookeeper.apache.org/doc/trunk/),用百度百科介绍的来说,Zookeeper是一个针对大型分布式系统的可靠协调系统,其提供的功能主要包括:naming,configuration
management,synchronization,and group services。

Zookeeper是google的chubby的一个开源实现,是高效和可靠的协同工作系统,能够用来进行leader选举,配置信息维护等,它提供了分布式独享锁、选举和队列的接口,有Java和C两个版本。

来简单说说原理:Zookeeper是以Fast Paxos算法为基础的,paxos算法存在活锁问题,即当用多个proposer交错提交时,有可能出现相互排斥导致没有一个proposer能够提交成功的情况,而Fast Poxos则做了优化,通过选举产生一个leader,只有leader才能提交proposal。

先来说一下最基本的paxos算法,其实算法的核心就两个阶段,作者Lamport在论文用直白的英语给出了很好的解释:

Zookeeper的一下特点:

1、在ZooKeeper中,znode是一个跟Unix文件系统路径相似的结点,并且具有唯一的路径标识。

2、Znode可以有子znode,并且可以存放数据,但是EPHEMERAL类型的节点不能有子节点。

3、对于EPHEMERAL类型的znode节点,一旦创建这个znode的客户端与服务器失去联系,这个znode也会自动删除,ZooKeeper的客户端和服务器通信采用长连接的方式,每个客户端和服务器通过心跳来保持这个连接,这个连接状态被称为session。

4、Znode中的数据可以有多个版本。

5、Znode可以被监控,下次更新这个被监控的znode的时候,服务器就会通知客户端这个znode发生了变化,但是只会通知一次,再次更新时就不会通知了,除非再次设置监控。这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理以及分布式锁等等。

初识ZooKeeper的更多相关文章

  1. 初识zookeeper(1)之zookeeper的安装及配置

    初识zookeeper(一)之zookeeper的安装及配置 1.简要介绍 zookeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件,是一个树型的目录服务,支持变更推送. ...

  2. 初识zookeeper以及安装和集群部署

    初识zookeeper以及安装和集群部署     一.Zookeeper单体版安装     在安装zookeeper之前要先安装jdk环境,具体在linux环境安装jdk1.8请参照linux笔记. ...

  3. 初识zookeeper(二)之与Dubbo-admin关联

    1.简介:dubbo-admin,即dubbo管理控制台,管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能,主要是用于Dubbo服务的 ...

  4. 初识zookeeper(一)之zookeeper的安装及配置

    1.简要介绍 zookeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件,是一个树型的目录服务,支持变更推送.除此还可以用作dubbo服务的注册中心. 2.安装 2.1 下 ...

  5. Zookeeper笔记(一)初识Zookeeper

    为什么需要Zookeeper Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举 ...

  6. zookeeper(1)初识zookeeper

    一.zookeeper的安装 1.下载zookeeper(当然在安装zookeeper之前得先装好jdk,这里就不说了),版本自己随便选一个(后面我再说版本的问题),点击这里下载. 2.然后在usr下 ...

  7. 初识ZooKeeper与集群搭建实例

    原文链接:http://www.linuxidc.com/Linux/2015-02/114230.htm zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Ch ...

  8. 读<分布式一致性原理>初识zookeeper

    zookeeper是什么 zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如:数据发布/订阅,负载均衡,命名服务,分布式协调/通知 ,集群管理,Master选举 ...

  9. 初识 Zookeeper

    云计算越来越流行的今天,单一机器处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,这些信息如何推送到各个节点?并且保 ...

随机推荐

  1. rabbitmq python

    import pika connection = pika.BlockingConnection(pika.ConnectionParameters( 'localhost',9672)) chann ...

  2. sql 的实用函数(包含日期函数、截取字符串函数)

    CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(data_type(length),data_to_b ...

  3. 【转载】Java反射: 数组

    原创链接:http://czj4451.iteye.com/blog/1479486 java.lang.reflect.Array Java反射机制通过Array类来处理数组,结合java.lang ...

  4. sphinx 配置文件全解析

    sphinx的配置文件是在配置的时候最容易出错的了: 我们先要明白几个概念: source:数据源,数据是从什么地方来的. index:索引,当有数据源之后,从数据源处构建索引.索引实际上就是相当于一 ...

  5. yield和send的执行循序彻底搞清

    yield: 对于yield方法和Generator的send同时使用时的执行顺序一直搞不清,今天看到这篇 理解PHP中的Generator 加上测试,终于搞清了. 总结一下上文中的结论: Gener ...

  6. JS 加载html 在IE7 IE8下 可调试

    实际背景 就是都是HTML 公共头部底部  然后中间部分加载不同的HTML文件 有点跟模板引擎一样 jQuery 有个load函数 加载html文件的路径 获取html内容 到中间部分 正常下是不能用 ...

  7. python 3编码

    python 3和2很大区别就是python本身改为默认用unicode编码. 字符串不再区分"abc"和u"abc", 字符串"abc"默 ...

  8. 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用j ...

  9. 如何查看、修改Linux的系统时间

    如题: 如何修改Linux的系统时间? date -s 05/27/2011 date -s 10:24:00 clock -w 就这三条命令就OK了! 查看/修改Linux时区和时间 一.时区 1. ...

  10. Nginx反向代理+keepalived

    环境两台LB(nginx).两台web(nginx/apache都行) 安装httpd web01 [root@web01 /]# /etc/init.d/iptables stop iptables ...