不懂 ZooKeeper?这给你讲的明明白白

论坛 期权论坛     
选择匿名的用户   2021-5-23 00:55   109   0
<div id="js_content">
<h2>前言</h2>
<p style="text-align: justify">面试常常被要求「熟悉分布式技术」,当年搞 “XXX管理系统” 的时候,我都不知道分布式系统是个啥。<strong>分布式系统是一个硬件或软件组件分布在不同的网络计算机中上,彼此之间仅仅通过消息传递进行通信和协调的系统</strong>。</p>
<p style="text-align: justify">计算机系统从集中式到分布式的变革伴随着包括<strong>分布式网络</strong>、<strong>分布式事务</strong>、<strong>分布式数据一致性</strong>等在内的一系列问题和挑战,同时也催生了一大批诸如<code>ACID</code>、<code>CAP</code>和 <code>BASE</code> 等经典理论的快速发展。</p>
<p style="text-align: justify">为了解决分布式一致性问题,涌现出了一大批经典的一致性协议和算法,最为著名的就是二阶段提交协议(2PC),三阶段提交协议(3PC)和<code>Paxos</code>算法。<code>Zookeeper</code>的一致性是通过基于 <code>Paxos</code> 算法的 <code>ZAB</code> 协议完成的。</p>
<h2>1. 概述</h2>
<h3>1.1 定义</h3>
<p style="text-align: justify">ZooKeeper 官网是这么介绍的:”<strong>Apache ZooKeeper 致力于开发和维护一个支持高度可靠的分布式协调的开源服务器</strong>“</p>
<h3>1.2 ZooKeeper是个啥</h3>
<p style="text-align: justify">ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型「<strong>分布式计算</strong>」提供开源的分布式配置服务、同步服务和命名注册。</p>
<p style="text-align: justify">Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的<strong>分布式协调框架</strong>,以便让开发人员将精力集中在处理业务逻辑上,Zookeeper 就这样诞生了。后来捐赠给了 <code>Apache</code> ,现已成为 <code>Apache</code> 顶级项目。</p>
<blockquote>
  <p style="text-align: justify">关于“ZooKeeper”这个项目的名字,其实也有一段趣闻。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的Pig项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家 RaghuRamakrishnan 开玩笑地说:“再这样下去,我们这儿就变成动物园了!”此话一出,大家纷纷表示就叫动物园管理员吧一一一因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了,而 Zookeeper 正好要用来进行分布式环境的协调一一于是,Zookeeper 的名字也就由此诞生了。</p>
</blockquote>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-e0b1abae0a4cdd7f8edf136a7cd14726">
<p style="text-align: justify">ZooKeeper 是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。所有这些类型的服务都以某种形式被分布式应用程序使用。每次实施它们时,都会进行很多工作来修复不可避免的 bug 和竞争条件。由于难以实现这类服务,因此应用程序最初通常会跳过它们,这会使它们在存在更改的情况下变得脆弱并且难以管理。即使部署正确,这些服务的不同实现也会导致管理复杂。</p>
<p style="text-align: justify">ZooKeeper 的目标是将这些不同服务的精华提炼为一个非常简单的接口,用于集中协调服务。服务本身是分布式的,并且高度可靠。服务将实现共识,组管理和状态协议,因此应用程序不需要自己实现它们。</p>
<h3>1.3 ZooKeeper工作机制</h3>
<p style="text-align: justify">ZooKeeper 从设计模式角度来理解:就是一个基于<strong>观察者模式</strong>设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,ZK 就将负责通知已经在 ZK 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式。</p>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-6dbf1d26cfcd4d9c474bbc584b6865c9">
<h3>1.4 特性</h3>
<img src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-44aa06ddf27157816e1e3d581eac3196">
<figcaption>
  图片来源:官网wiki
</figcaption>
<ol><li><p style="text-align: justify">ZooKeeper:一个领导者(leader),多个跟随者(follower)组成的集群。</p></li><li><p style="text-align: justify">Leader 负责进行投票的发起和决议,更新系统状态。</p></li><li><p style="text-align: justify">Follower 用于接收客户请
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP