需求推动事物的前进,所有相关技术都是在某些需求的驱动下才孕育而出,而且不断的为了满足需求,不得不进一步加强完善,上来就说zookeeper是啥,作用是啥,干了什么,是开源的分布式应用协调系统”blabla,到底什么是分布式协调,为什么分布式就需要协调。不懂,也不见得好理解、好记忆,还是从需求分析来了解他的由来和作用,了解这个过程,在自己后期设计实现产品的时候,也会想的多一点。
为什么需要 Zookeeper
举个例子,来说明说明需求驱动技术不断升级完善加强。
一个团队里面,需要一个leader,leader是干嘛用的?管理什么的咱不说,就说如果外面的人,想问关于这个团队的一切事情,首先就会去找这个leader,因为他知道的最多,而且他的回答最靠谱。
比如产品经理小饼过来要人,作为leader,老吕发现小耀最近没有项目安排,于是把小耀安排给了小饼的项目;
过了一会,另一个产品小西也过来要人,老吕发现刚刚把小耀安排走了,已经没人,于是就跟小西说,人都被你们产品要走了,你们产品自己去协调去。
如果老吕这时候忘了小耀已经被安排走了,把小耀也分配给小西,那到时两个产品就要打架了。
这就是leader在团队里的协调作用。
同样的,在分布式系统中,也需要这样的协调者,来回答系统下各个节点的提问。
比如我们搭建了一个数据库集群,里面有一个Master,多个Slave,Master负责写,Slave只读,我们需要一个系统,来告诉客户端,哪个是Master。
直观的想法,我们把这个信息写到一个Java服务器的内存就好了,用一个map,<master, master机器对应的ip>
但是别忘了,这是个单机,一旦这个机器挂了,就完蛋了,客户端将无法知道到底哪个是Master。
于是开始进行拓展,拓展成三台服务器的集群。
这下问题来了,如果我在其中一台机器修改了Master的ip,数据还没同步到其他两台,这时候客户端过来查询,如果查询走的是另外两台还没有同步到的机器,就会拿到旧的数据,往已经不是master的机器写数据。
所以我们需要这个存储master信息的服务器集群,做到当信息还没同步完成时,不对外提供服务,阻塞住查询请求,等待信息同步完成,再给查询请求返回信息。
这样一来,请求就会变慢,变慢的时间取决于什么时候这个集群认为数据同步完成了。
假设这个数据同步时间无限短,比如是1微妙,可以忽略不计,那么其实这个分布式系统,就和我们之前单机的系统一样,既可以保证数据的一致,又让外界感知不到请求阻塞,同时,又不会有SPOF(Single Point of Failure)的风险,即不会因为一台机器的宕机,导致整个系统不可用。
这样的系统,就叫分布式协调系统。谁能把这个数据同步的时间压缩的更短,谁的请求响应就更快,谁就更出色,Zookeeper就是其中的佼佼者。
它用起来像单机一样,能够提供数据强一致性,但是其实背后是多台机器构成的集群,不会有SPOF。
如果把各个节点比作各种小动物,那协调者,就是动物园管理员,这也就是Zookeeper名称的由来了,从名字就可以看出来它的雄心勃勃。
ZooKeeper: A Distributed Coordination Service for Distributed Applications
翻译一下:一个分布式应用的分布式协调服务
本文就只说zookeeper的由来和作用。具体实现原理以及内部实现的设计等,还再查具体的。
专业精简描述
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架, 它负责存储和管理大家 都关心的数据, 然后接受观察者的注册, 一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在 Zookeeper上注册的那些观察者做出 相应 的反 应 , 从而 实现集群中类似Master/Slave管理模式
动物园管理者就是那个拿铁锹的男人,里面的大象蜜蜂啥的都是弟弟。