ZooKeeper是Hadoop的正式子项目,它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Zookeeper是Google的Chubby一个开源的实现.是高有效和可靠的协同工作系统.Zookeeper能够用来leader选举,配置信息维护等.在一个分布式的环境中,我们需要一个Master实例或存储一些配置信息,确保文件写入的一致性等.Zookeeper能够保证如下3点:

  • Watches are ordered with respect to other events, other watches, and
    asynchronous replies. The ZooKeeper client libraries ensures that
    everything is dispatched in order.

  • A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode.

  • The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service.

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据.如果在创建znode时Flag设置 为EPHEMERAL,那么当这个创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper 里.Zookeeper使用Watcher察觉事件信息,当客户端接收到事件信息,比如连接超时,节点数据改变,子节点改变,可以调用相应的行为来处理数 据.Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交.

那么Zookeeper能帮我们作什么事情呢?简单的例子:假设我们我们有个20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个 总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的 cgi(向总服务器发出搜索请求).搜索引擎的服务器中的15个服务器现在提供搜索服务,5个服务器正在生成索引.这20个搜索引擎的服务器经常要让正在 提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以搜索提供服务了.使用Zookeeper可以保证总服务器自动 感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,备用的总服务器宕机时自动启用备用的总服务器,web的cgi能够自动地获知总服务器的网络 地址变化.这些又如何做到呢?

  1. 提供搜索引擎的服务器都在Zookeeper中创建znode,zk.create("/search/nodes/node1",
    "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);

  2. 总服务器可以从Zookeeper中获取一个znode的子节点的列表,zk.getChildren("/search/nodes", true);

  3. 总服务器遍历这些子节点,并获取子节点的数据生成提供搜索引擎的服务器列表.

  4. 当总服务器接收到子节点改变的事件信息,重新返回第二步.

  5. 总服务器在Zookeeper中创建节点,zk.create("/search/master", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);

  6. 备用的总服务器监控Zookeeper中的"/search/master"节点.当这个znode的节点数据改变时,把自己启动变成总服务器,并把自己的网络地址数据放进这个节点.

  7. web的cgi从Zookeeper中"/search/master"节点获取总服务器的网络地址数据并向其发送搜索请求.

  8. web的cgi监控Zookeeper中的"/search/master"节点,当这个znode的节点数据改变时,从这个节点获取总服务器的网络地址数据,并改变当前的总服务器的网络地址.

转载于:https://www.cnblogs.com/haore147/p/5103079.html

apache开源项目--ZooKeeper相关推荐

  1. apache开源项目_众筹开源笔记本电脑,新的Apache项目等

    apache开源项目 开源新闻让您阅读愉快 2014年3月29日至4月4日 在本周的开放源代码新闻摘要中,我们介绍了完全开放的笔记本电脑Ubuntu One的发布,微软最近向开放迈进的步伐等等. Mi ...

  2. Apache开源项目分类列表

    Apache开源项目分类列表 分类 项目名 说明 开发语言 服务器 (共20) Apache HTTP Server 全球第一HTTP服务器 C/C++ Tomcat Java的Web服务器 Java ...

  3. Apache开源项目

    tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun 和其他一些公司及个人共同开发 ...

  4. 连续三年蝉联第一,Flink 荣膺全球最活跃的 Apache 开源项目

    简介:Apache 软件基金会 2020 年度总结发布,Flink 多项排名领先! 2020年,一个注定会被历史铭记的一年.在全球化合作受到挑战的大环境下,作为全球最大的开源软件基金会,Apache ...

  5. apache开源项目--nutch

    Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting,他同时也是Lucene.Hado ...

  6. 15个具有高度影响力的Apache开源项目

    Apache还提供更为宽容的开源许可证. 下面是15个多年来非常重要的Apache项目,这些项目不仅对开源运动来说非常重要,对于与一般的技术世界来说也是非常重要的. Cassandra Cassand ...

  7. 中国高校首个Apache开源项目 清华数为物联网时序数据库IoTDB 及可自由组装的大数据软件栈系列组件发布...

    四月的清华园,百花冠冕,春意盎然. 4月25日,清华软件学院师生校友相约云端,共贺清华大学109周年校庆,软件学院建院19周年. 由于疫情防控需要,软件学院通过腾讯会议和学堂在线在线直播方式,举办&q ...

  8. apache开源项目--Lens

    Lens 提供了一个统一数据分析接口.通过提供一个跨多个数据存储的单一视图来实现数据分析任务切分,同时优化了执行的环境.无缝的集成 Hadoop 实现类似传统数据仓库的功能. 该项目主要特性: 简单元 ...

  9. apache开源项目--ApacheDS

    ApacheDS (Apache Directory Server)的核心是目录服务,可以保存数据,并对不同类型的数据进行搜索操作.协议的实现在目录服务器顶层工作,提供与数据存储.搜索和检索有关的 I ...

最新文章

  1. 再见 for 循环!pandas 提速 315 倍~
  2. Oracle中的数据字典技术及常用数据字典总结
  3. 又一款基于BCH开发出来的社交软件BlockPress
  4. python restful服务部署_用python为mysql实现restful接口
  5. cocos2d-x游戏实例(3)-获得地图索引
  6. python二维数组去重复_php二维数组去重,array_unique出除重复数据
  7. 基于C#.NET的--Windows进程管理工具
  8. 图神经网络让预估到达准确率提升50%,谷歌地图实现新突破
  9. windows 安装docker_Windows下docker安装 postgresql12.0
  10. ORA-01157报错cannot identify/lock data file
  11. codeforces 212E IT Restaurants(树形dp+背包思想)
  12. keras实现声音二分类
  13. 随意切换双卡流量,立即获取对应卡的SMIS
  14. 编程课程_您可以从今天开始的300项免费在线编程课程
  15. COLLADAMaxNew插件,opencollada导出DAE文件格式 for 3dmax2019
  16. 递推法 c语言,递推法
  17. 数据结构Python版--线性结构
  18. java hasnext_java – hasNext() – 什么时候阻止,为什么?
  19. Binutils 相关工具记录
  20. 森林防火无线监控系统解决方案

热门文章

  1. nginx启动不了_nginx 变量与监控
  2. 升级鸿蒙系统效果,鸿蒙系统初体验 全方位体验升级[多图]
  3. android 相机路径,android – 如何获取刚从相机捕获的图像路径
  4. mac mysql ip访问不了_解决mysql中只能通过localhost访问不能通过ip访问的问题
  5. 网站的服务器角色选哪个,原神平民开服选什么角色最好-开服必备角色推荐_好特网...
  6. python字符串之查找与替换_Python字符串操作(查找,替换,分割和连接)方法及其使用...
  7. 软件测试oracle问题,数据库基础:Oracle数据库中时间问题比较
  8. linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
  9. 单元测试 applicationinfomanager bean无法注入_你真的会用Spring吗?如何在单例Bean中注入原型Bean...
  10. 交叉路口红绿灯控制程序linux,PLC十字路口的交通灯控制编程实例!