1.1 产生背景

当今是个分布式、集群、云计算等名词满天飞的时代。造成这种局面的一个重要因素就是,单一机器的处理能力已经不能满足我们的需求,不得不采用由多台机器组成的服务集群。服务集群对外提供服务的过程中,可以分解处理压力,在一定程度上打破性能瓶颈,并提高服务的可用性(不会因为一台机器宕机而造成服务不可用)。

上图中有三台机器,每台机器跑同样的一个应用程序。然后我们将这三台机器通过网络将其连接起来,构成一个系统来为用户提供服务,对用户来说这个系统的架构是透明的,他感觉不到这个系统是一个什么样的架构。那么我们就可以把这种系统称作一个分布式系统

那么,问题来了:

(1)程序的运行往往依赖很多配置文件,比如数据库地址、黑名单控制、服务地址列表等,而且有些配置信息需要频繁地进行动态变更,这时候怎么保证所有机器共享的配置信息保持一致?

(2)如果有一台机器挂掉了,其他机器如何感知到这一变化并接管任务?如果用户激增,需要增加机器来缓解压力,如何做到不重启集群而完成机器的添加?

(3)用户数量增加或者减少,会出现有的机器资源使用率繁忙,有的却空闲,如何让每台机器感知到其他机器的负载状态从而实现负载均衡?

(4)在一台机器上要多个进程或者多个线程操作同一资源比较简单,因为可以有大量的状态信息或者日志信息提供保证,比如两个A和B进程同时写一个文件,加锁就可以实现。但是分布式系统怎么办?需要一个三方的分配锁的机制,几百台worker都对同一个网络中的文件写操作,怎么协同?还有怎么保证高效的运行?

除了上面列举的几种,还有很多细思极恐的问题,分布式系统到底有多然人抓狂,可以想想你第一次接触多线程的感觉;

计划中的多线程


现实中的多线程


分布式系统可以看作多线程的N级加强版……

1.2 ZooKeeper的前世今生

分布式系统的很多难题,都是由于缺少协调机制造成的。

目前,在分布式协调技术方面做得比较好的就是Google的Chubby还有Apache的ZooKeeper。有人会问既然有了Chubby为什么还要弄一个ZooKeeper,难道Chubby做得不够好吗?主要是Chubby是非开源的,Google自家用。

后来雅虎模仿Chubby开发出了ZooKeeper,也实现了类似的分布式锁的功能,并且将ZooKeeper作为一种开源的程序捐献给了Apache,那么这样就可以使用ZooKeeper所提供锁服务。而且在分布式领域久经考验,它的可靠性,可用性都是经过理论和实践的验证的。

至于这个神器为什么叫ZooKeeper,与外国人一贯的幽默精神有关。

众所周知,外国人喜欢给用一个动物作为吉祥物,在IT界也不例外。比如,负责大数据工作的Hadoop是一个黄色的大象;负责数据仓库的Hive是一个虚拟蜂巢;负责数据分析的Apache Pig是一头聪明的猪;负责管理web容器的tomcat是一只雄猫……那好,负责分布式协调工作的角色就叫ZooKeeper(动物园饲养员)吧。

1.3 ZooKeeper能干什么

官方说辞是:

ZooKeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper的目标就是封装好复杂 易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper在一致性、可用性、容错性的保证,也是ZooKeeper的成功之处,它获得的一切成功都与它采用的协议——Zab协议是密不可分的,这些内容将会在后面介绍。

为了实现前面提到的各种服务,比如分布式锁、配置维护、组服务等,ZooKeeper设计了一种新的数据结构——Znode,然后在该数据结构的基础上定义了一些原语,也就是一些关于该数据结构的一些操作。有了这些数据结构和原语还不够,因为ZooKeeper工作在分布式环境下,服务是通过消息以网络的形式发送给分布式应用程序,所以还需要一个通知机制——Watcher机制。总结一下,ZooKeeper所提供的服务主要是通过:数据结构+原语+watcher机制,三个部分来实现的。

转载于:https://www.cnblogs.com/duadu/p/6335753.html

ZooKeeper之(一)ZooKeeper是什么相关推荐

  1. 【Zookeeper实战】Zookeeper入门到实战看这篇就够了

    1. 前言 在上一篇[Zookeeper入门]相关概念总结 中已经完美的讲解了 Zookeeper入门 相关概念总结,接下来讲讲ZooKeeper 实战使用. 这篇文章简单给演示一下 ZooKeepe ...

  2. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)

    原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...

  3. Kafka Without ZooKeeper ---- 不使用zookeeper的kafka集群

    不使用zookeeper的kafka集群 前言 ZooKeeper的缺点 Kakfa Without ZooKeeper简介 Kakfa Without ZooKeeper的优势 总结 参考链接 前言 ...

  4. Zookeeper:基于Zookeeper的分布式锁与领导选举

    本文转发自技术世界,原文链接 http://www.jasongj.com/zookeeper/distributedlock/ 1.Zookeeper特点 1.1 Zookeeper节点类型 如上文 ...

  5. ZooKeeper(五) 使用Zookeeper有序临时节点实现分布式锁

    当使用zookeeper实现分布式锁时,当有新的请求需要进入需要同步加锁代码时,在zookeeper加锁代码中会在加锁的共同父节点下创建一个新的临时有需节点.创建完成后会获取加锁父节点下所有子节点.判 ...

  6. zookeeper专题:zookeeper的节点类型,数据持久化机制

    文章目录 1. zookeeper的安装 2. zookeeper的节点类型 3. zookeeper命令解析 4.zookeeper的监听通知机制 5. zookeeper的常规配置 6. zook ...

  7. Zookeeper安装,Zookeeper单机模式安装

    http://zookeeper.apache.org/releases.html#download 下载解压到(我自己的)解压到 /usr/local 下 把名字改成 zookeeper 进入zoo ...

  8. Zookeeper 教程:Zookeeper作为Hadoop和Hbase的重要组件,为分布式应用程序协调服务

    目录 Zookeeper 教程 适用人群 学习前提 Zookeeper 概述 分布式应用 分布式应用的优点 分布式应用的挑战 什么是Apache ZooKeeper? ZooKeeper的好处 Zoo ...

  9. linux 查看zookeeper目录,查看zookeeper注册中心是否有注册服务

    查看zookeeper注册中心是否有注册服务可以在服务器上看,也可以在dubboadmin看哦~ 1.在服务器上看: 1)查找zookeeper的目录: find / -name zookeeper ...

  10. 【zookeeper+Dubbo】zookeeper和Dubbo安装

    Dubbo是什么? https://blog.csdn.net/cxh6863/article/details/105980696 zookeeper是什么? https://blog.csdn.ne ...

最新文章

  1. Linux上怎么查询sql,Linux上的文本文件的SQL查询引擎?
  2. flex for java_Java和Flex整合报错(四)
  3. 【博客话题】我与Linux的不解情缘
  4. 1.5 Double类
  5. VTK:相互作用之ObserverMemberFunction
  6. 【转载】JAVA内存模型和线程安全
  7. 线程间的通信方式1--共享变量(内存)
  8. LA 4254 贪心
  9. 20210224:力扣第229周周赛
  10. glassfish 是oracle的,GlassFish“百天”小版本 彰显Oracle的大功力
  11. XMind 2022 使用教程
  12. 魔兽世界怀旧服务器最新,魔兽世界怀旧服夏一可在哪个服务器 魔兽世界怀旧服夏一可去哪个区玩...
  13. Vuforia Vumark初探
  14. Amcharts4使用笔记
  15. SC8701 120W DC TO DC 电源模块的设计
  16. python等比例压缩图片_python图片等比例压缩
  17. (Ubuntu)Firefox网页切换快捷键
  18. 调音台docker教程_Docker Hello World
  19. ImageButton点击按钮改变图片
  20. ELP界的苹果:太奇pad开创教育电子产品新时代

热门文章

  1. python数据库去重_python redis连接 有序集合去重的代码
  2. by mybatis 自定义order_MyBatis动态SQL实现ORDER BY和LIMIT的控制?
  3. 小红书笔记_小红书推广如何打造爆文笔记?
  4. kotlin_Kotlin阵列
  5. scala 访问修饰符_Scala访问修饰符–私有,受保护的和公共的
  6. MacBook取消自启动程序
  7. Java面试题:String 和 StringBuffer、StringBuilder 的区别是什么?
  8. C++基础教程之数组
  9. [存]超酷JS拖拽翻页效果
  10. 工具 - 怎么看微信h5的源码?