Zookeeper:

是一个分布式的,为分布式应用提供数据一致性服务的程序.

Zookeeper是怎么来的?

分布式系统:是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

在这个消息传递的过程中遇到的问题:传输中数据被篡改,数据丢失处理,数据超时处理,数据的事务控制,可以统称为数据的一致性问题.

解决分布式系统中数据传输的一致性问题的理论基础:CAID,CAP(一致性,可用性,分区容错性),BASE等一致性方面的理论

结合理论基础,演变出分布式数据一致性协议算法,如2PC,3PC,Raft ,Paxos算法等.

解决消息传递过程中的两个问题:

1,消息传递中的消息篡改,消息容错机制

拜占庭将军问题:

拜占庭帝国有许多支军队,不同军队的将军之间必须制定一个统一的行动计划,从而做出进攻或者撤退的决定,同时,各个将军在地理上都是被分隔开来的,只能依靠军队的通讯员来进行通讯。然而,在所有的通讯员中可能会存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。

解决方式:比如系统中的数字签名,数据加密

2,消息在分布式中的数据一致性问题

故事描述一致性遇到的问题:

在古希腊有一个Paxos小岛,岛上以议会的形式通过法令。议会中的议员通过信使传递消息,议员和信使都是兼职的,随时可能离开议会厅,并且信使可能重复投递消息,也可能一去不返。议会协议要保证在这种情况下法令仍然能够正确的产生,并且不会出现冲突。

故事来自于Paxos算法论文,该论文通篇用故事的形式讲述了小岛议会是如何解决这个问题的.

基于算法的应用实践:

Google Chubby:分布式锁服务,以Paxos算法为基础

雅虎  ZooKeeper: 分布式协调服务 , 以ZAB算法为基础

Zookeeper介绍

官网:http://zookeeper.apache.org/

源码地址: https://github.com/apache/zookeeper

Zookeeper提供的特性:

1,         顺序一致性 :同一个客户端连续的请求能够被ZooKeeper顺序的处理,尤其是写命令的顺序执行

2,         原子性  :Zookeeper集群上的数据操作具有原子性

3,         单一视图 :Zookeeper集群上的数据一致

4,         可靠性:保证被修改的数据持久不变,提供了数据的可靠性

5,         实时性:Zookeeper仅仅能保证最终一致性,而不是实时的(CAP定理)

Zookeeper的几个基本概念:

1,         集群:zookeeper采用leader(写),follower(读,推举leader),observer(读)的方式实现集群

2,         会话:客户端与zookeeper的连接会话

3,         数据节点:树形结构的节点,每个节点可以存储信息

4,         版本:每个节点维护的版本信息

5,         事件监听器:可以为用户在节点上注册事件,节点改动触发注册的事件(监听者模式)

6,         ACL:权限控制,控制节点操作访问的权限

应用场景:

在分布式的场景中,Zookeeper可应用于数据发布/订阅负载均衡命名服务分布式协调/通知集群管理等

Zookeeper使用

下载地址:http://zookeeper.apache.org/releases.html

要求:

JAVA1.6+

系统多平台支持

目录解释

支持三种模式:单机模式,集群模式,伪集群模式

配置文件:

tickTime= : 服务器或者客户端与服务器之间维持心跳的时间间隔

dataDir=/var/lib/zookeeper : 数据存放目录

clientPort= : 监听的端口

dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log : 日志目录

集群相关配置

initLimit=  : 集群初始化连接超时时间

syncLimit=  :集群心跳超时时间

server.=127.0.0.1:: 

server.=127.0.0.2::

IP:程序通讯监听端口:选举端口

当使用集群模式时

在DataDir目录下创建myid文件,里面是集群编号

单机模式配置:

tickTime=

dataDir=/var/lib/zookeeper

clientPort=

dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit=

syncLimit= 

server.=127.0.0.1:: 

集群模式配置:

tickTime=

dataDir=/var/lib/zookeeper

clientPort=

dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit=

syncLimit= 

server.=127.0.0.1:: 

server.=127.0.0.2::

伪集群模式配置:

tickTime=

dataDir=/var/lib/zookeeper

clientPort=

dataLogDir=E:\\test-tool\\zookeeper-3.4.\\log initLimit=

syncLimit= 

server.=127.0.0.1::

server.=127.0.0.1::     //多进程运作

启动方式有两种:

1,         bin脚本

2,         jar包Main方法

命令解释:

zkCleanup清理ZooKeeper历史数据,包括shiwu日志文件和快照数据文件

zkCliZooKeeper的一个简易客户端,可以做一些简易操作

zkEnv设置ZooKeeper的环境变量

zkServerZooKeeper服务器的启动,停止和重启脚本

启动:zkServer.Sh

停止:zkServer.sh  stop

客户端连接:zkCli –server ip:port

zkCli操作Zookeeper基本命令:

(1)创建节点

Create [-s] [-e] path data acl

-s顺序   -e临时节点   path节点路径和名称   data节点存储的数据    acl权限控制

(2)列出节点列表

ls path [watch]

path节点路径和名称  watch事件监听器

(3)查看节点数据和信息

get path [watch]

(4)设置节点数据

get path data [version]

(5)删除

Delete path [version]

查看日志

基于Zookeeper API的开发提供了更加丰富的接口,如创建会话,创建节点,删除节点,读取数据,更新数据,检测节点是否存在,权限控制,事件监听等

对zookeeper API封装的工具,他们提供了更方便的调用方式:

Zkclient:地址https://github.com/sgroschupf/zkclient

Curator:地址https://github.com/Netflix/curator

Dubbo如何在zookeeper上工作

Zookeeper在Dubbo的整个体系中充当服务注册中心的作用.

通常的服务注册中心可以有多种形式去实现,比如:数据库,zookeeper,redis,文件系统等

Dubbo数据信息在Zookeeper中的存储方式:

/dubbo dubbo根节点

/dubbo/com.foo.BarService 服务节点

/dubbo/com.foo.BarService/providers 提供者根节点

/dubbo/com.foo.BarService/consumers 消费者根节点

1,服务提供者

在/dubbo/com.foo.BarService/providers节点下创建提供者节点

2,服务消费者

在/dubbo/com.foo.BarService/consumers节点下创建提供者节点

注册与消费过程:

1,dubbo服务提供者启动,向Zookeeper上的提供者根节点下创建服务提供临时节点,包括地址类型等信息

2,dubbo服务消费者启动,向Zookeeper请求服务提供列表,并向服务消费根节点下创建消费者临时节点

3,启动dubbo监控中心,向Zookeeper中获取提供者与消费者的节点列表,并在节点上注册事件监听器进行变化监控.

Zookeeper分享的更多相关文章

  1. Zookeeper技术分享

    内容整理自组内分享PPT 一.概述 ZooKeeper 遵循一个简单的客户端-服务器模型,其中客户端 是使用服务的节点(即机器),而服务器 是提供服务的节点.ZooKeeper 服务器的集合形成了一个 ...

  2. 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下(转)

    本文转自http://blog.csdn.net/gs80140/article/details/51496925 一直对zookeeper的应用和原理比较迷糊,今天看一篇文章,讲得很通透,分享如下: ...

  3. zookeeper 实战案例分享:cruator客户端编程

    上两篇介绍了zookeeper服务器端的安装和配置,今天分享下利用zookeeper客户端编程来实现配置文件的统一管理,包括文件添加.删除.更新的同步. 比如,连接数据库信息的配置文件,一般每个应用服 ...

  4. 分享java常用技术教程:dubbo、zookeeper、ActiveMq、多线程、Redis、PowerDesigner等

    游戏是自己整理的邮箱来源于网上,下面是我的有道云的分享地址: https://note.youdao.com/share/?id=c5f258fa9efd1b28b2d8f0d37e59b194&am ...

  5. 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失

    kafka_2.8.0-0.8.1 一 现象 生产环境一组kafka集群经常发生问题,现象是kafka在zookeeper上的broker节点消失,此时kafka进程和端口都在,然后每个broker都 ...

  6. Zookeeper笔记分享

    Zookeeper采用zap协议来保证数据的一致性 常见的数据一致性协议采用raft协议   参数解读: tickTime=2000:心跳包发送间隔时长 initLimit=10:leader与fol ...

  7. 【很好的分享】zookeeper系列

    http://blog.csdn.net/tswisdom/article/details/41522069

  8. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  9. [资料分享]dubbo视频教程流行版

    一.基础篇 第001节–课程介绍 第01节–使用Dubbo对传统工程进行服务化改造的思路介绍 第02节–使用Dubbo对传统工程进行服务化改造 第03节–ZooKeeper注册中心安装 第04节–使用 ...

随机推荐

  1. fck编辑器的使用

    FCK编辑器的使用 注意:编辑器有浏览器缓存,所以修改配置后,一定要删一下缓存 这个编辑器是采用 html+javascript 开发出来的 通常作为插件来使用: 1,下载插件包 2,解压,加压之后看 ...

  2. ORA-00376:file x cannot be read at this time

    之前出现过机房断电情况,重启数据库后发现出现ORA-00376的错误. 通过查询数据文件状态: SQL> select file_id,online_status from dba_data_f ...

  3. FMCG行业是什么行业?

    FMCG行业是什么行业?_百度知道 FMCG行业是什么行业?    2008-05-21 20:03 搏浪峰 | 分类:创业投资 | 浏览13089次 在网上看到搜狐公司招聘“FMCG行业(高级)客户 ...

  4. 使用Ajax以及Jquery.form异步上传图片

    一.前言 之前做图片上传一直用的第三方插件,Uploadify  这个应该是用的比較多的,相同也用过别的,在方便了自己的同一时候也非常赞叹人家的功能. 思来想去,仅仅会用别的人东西,始终自己学到的少, ...

  5. EA强大功能之代码凝视

    前面讲了EA怎样方便我们生成代码,这次讲一下,怎样生成具体的凝视. 1.文件表头凝视 (1)点击工具----选项 在常规项里改动作者: 在代码project中改动代码project的默认语言. (2) ...

  6. ExtJS4.2学习(7)——基础知识之Reader&Writer篇

    Reader: 主要用于将proxy数据代理读取的数据按照不同的规则进行解析,将解析好的数据保存到Modle中. 结构图 Ext.data.reader.Reader 读取器的根类(很少直接实例化这个 ...

  7. [linux]ubuntu apt-get安装软件失败

    1.首先查看 dns 配置 sudo vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8 2.修改 apt-get 源 ...

  8. 在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused

    在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused [原创]在RHEL上安装Thrift(支持C++)的若干问题    2010年12月1 ...

  9. HDU 4643 GSM 简单计算几何

    今天比赛的时候略坑, admin告诉我询问Q的个数不超过n^2, 赛后敲了个 O(Q*m^3)的复杂度,但这个复杂度常数比较低,可能在除以个小常数, 300ms过了,真心无语,数据应该水了吧,比赛的时 ...

  10. document.write()相关

    原文地址:http://www.cnblogs.com/dh616854836/articles/2140349.html document.write()脚本向窗口(不管是本窗口或其他窗口)写完内容 ...