ZooKeeper详解

Zookeeper简介

分布式系统定义及面临的问题

ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务。我们将分布式系统定义为:分布式系统是同时跨越多个物理主机,独立运行的多个软件所组成系统。
类比一下,分布式系统就是一群人一起干活。人多力量大,每个服务器的算力是有限的,但是通过分布式系统,由n个服务器组成起来的集群,算力是可以无限扩张的。
优点显而易见,人多干活快,并且互为备份。但是缺点也很明显。我们可以想象下,以一个小研发团
队开发软件为例,假设我们有一个5人的项目组,要开始一 一个系统的开发,项目组将面临如”下问题:
ZooKeeper详解
图中列举的就是项目组将要面临到的问题,这些问题在我们日常工作中也是天天发生,并没感觉有多么
复杂,但是这是因为我们人类的大脑是个超级计算机,能够灵活应对这些问题,而且现实中信息的交换
不依赖网络,不会因网络延迟或者中断,出现信息不对等,而且现实中对以,上问题的处理其实并不严
谨,从而也引发了很多问题。想想,项目中是不是出现过沟通不畅造成任务分配有歧义?是否由于人员离职造成任务进行不下去,甚至要联系离职人员协助?是不是出现过任务分配不合理?类似这样的各种问题,肯定会发生于你的项目组中。在现实世界,我们可以人为去协调,即使出错了,人工去补错,加加班搞定就好。但在计算机的世界,这样做是行不通的,一切都要保证严谨,以上问题要做到尽可能不要发生。因此,分布式系统必须采用合理的方式解决掉以上的问题

实际上要想解决这些问题并没有那么复杂,我们仅需要做-件事就可以万事无—让信息在项目组成员同步。如果能做到信息同步,那么每个人在干什么,大家都是清楚的,干到什么程度也是清晰的,无论谁离职也不会产生问题。分配的工作,能够及时清晰的同步给每个组员,确保每个组员收到的任务分
配没有冲突。

分布式系统的协调工作就是通过某种方式,让每个节点的信息能够同步和共享。这依赖于服务进程之间
的通信。通信方式有两种:

● 通过网络进行信息共享
这就像现实中,开发leader在会上把任务传达下去,组员通过听leader命令或者看leader的邮件知道自
己要干什么。当任务分配有变化时,leader会单 独告诉组员,或者再次召开会议。信息通过人与人之间
的直接沟通,完成传递。
● 通过共享存储
这就好比开发leader按照约定的时间和路径,把任务分配表放到了svn上,组员每天去svn.上拉取最新的
任务分配表,然后干活。其中svn就是共享存储。更好一点的做法是,当svn文件 版本更新时,触发邮件通知,每个组员再去拉取最新的任务分配表。这样做更好,因为每次更新,组员都能第一时间得到消
息,从而让自己手中的任务分配表永远是最新的。此种方式依赖于*存储。整个过程如下图所示:
ZooKeeper详解