2016年1月14日星期四

Zookeeper_001:基本特点与原理 (摘录+整理)


ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

Zookeeper is a service for coordinating processes of distributed applications.


1. 使用场景
(1)配置管理
(2)名称服务
(3)分布式同步
(4)集群管理

2. 一致性协议:Zab(Zookeeper atomic broadcast protocol)
以数据库配置为例,一般我们都是使用配置文件的方式,在代码中引入这些配置文件。
当我们只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法,但是如果我们配置非常多,有很多服务器都需要这个配置,而且还可能是动态的话使用配置文件就不是个好主意了。
这个时候往往需要寻找一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。
你肯定想到了,可以把配置放在数据库里,然后所有需要配置的服务都去这个数据库读取配置。
但是,因为很多服务的正常运行都非常依赖这个配置,所以需要这个集中提供配置服务的服务具备很高的可靠性。
一般我们可以用一个集群来提供这个配置服务,但是用集群提升可靠性,那如何保证配置在集群中的一致性呢? 这个时候就需要使用一种实现了一致性协议的服务了。

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。
实现这个机制的协议叫做Zab协议。
Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和Leader的状态同步以后,恢复模式就结束了。
状态同步保证了Leader和Server具有相同的系统状态。



3. Zookeeper为何要使用选举功能呢?
假设Zookeeper集群没有选举的功能,有好几个节点。每个节点 都可以接收请求,处理请求。
那么,如果这个时候分别有两个客户端向两个节点发起请求,请求的内容是修改同一个数据。
比如客户端c1,请求节点n1,请求是 set a = 1; 而客户端c2,请求节点n2,请求内容是set a = 2;
那么最后a是等于1还是等于2呢? 这在一个分布式环境里是很难确定的。

解决这个问题有很多办法,而Zookeeper的办法是,我们选一个Leader出来,所有的这类决策都提交给Leader决策。

4. Zookeeper的Leader是怎么选举出来的?
这里只介绍原理,不介绍具体算法和流程。
(1)每个节点开始只提名自己。
(2)选举会经过好多轮,每轮都会计数。
(3)比较的是每个节点拥有的信息量大小、新旧程度;大的和新的排名靠前。

5. Server的角色与状态
Zookeeper Server 有三种角色:
(1)领导者 Leader:负责投票的发起和决议,负责更新状态。
(2)跟随者 Follower:负责接收客户端请求并返回结果,负责选主过程中的投票。
(3)观察者 Observer:负责接收客户端请求并转发给Leader处理。不负责选主过程中的投票,只是同步Leader的状态。

Zookeeper Server 有四种状态:
(1)LOOKING:当前Server不知道Leader是谁,正在搜寻。
(2)LEADING:当前Server即为选举出来的Leader。
(3)FOLLOWING:Leader已经选举出来,当前Server与之同步。
(4)OBSERVING:当前Server不参与选举。

参考文献:
1. http://www.cnblogs.com/yuyijq/p/3391945.html Zookeeper是什么
2. http://www.cnblogs.com/yuyijq/p/3424473.html Zookeeper可以干什么
3. http://www.cnblogs.com/yuyijq/p/3438829.html Zookeeper的配置
4. http://www.cnblogs.com/yuyijq/p/4115589.html Zookeeper启动过程
5. http://www.cnblogs.com/yuyijq/p/4116365.html Zookeeper leader选举
6. http://cailin.iteye.com/blog/2014486/
7. http://blog.csdn.net/xinguan1267/article/details/38422149

没有评论: