一.zookeeper是什么
zookeeper是一个高效的分布式协调服务,它暴露了一些公共服务,比如命名/配置管理/同步服务/群组服务等等。我们可以使用zk来实现比如达成共识/集群管理/leader选举等。(不用于大量数据的存储)
协调:多个节点一起完成的一个动作
zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中的数据一致性。也整死基于这样的特性,使得zookeeper成为了解决分布式一致性问题的利器。
顺序一致性:从一个客户端发起的事务请求,最终将会严格地按照其发起的顺序被应用到zookeeper中去。
原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况都是一致的。也就是说要么整个集群的所有机器都成功应用了某一事务,要么都没有应用。一定不存在某些机器应用了该事务,而另一部分机器没有应用的情况。
单一视图:无论客户端连接的是哪个zookeeper服务器,其看到的服务端的数据模型都是一致的
可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器端状态将会被一致保留下来,除非有另一个事务对其进行修改
实时性:一旦事务被应用成功,客户端能立刻从服务器上获取变更后的新数据,zookeeper仅仅能保证在一段时间内,客户端最终一定能从服务端读取最新的数据状态
二.zookeeper设计目标
1.简单的数据结构
zookeeper就是以简单的树形结构来进行相互协调的(也叫树形名字空间)
2.可以构建集群
一般zookeeper集群有一组机器构成,通常3-5台机器就能组成一个zookeeper集群了。只要集群中超过半数以上的机器能正常工作,那么整个集群就能正常对外提供服务
ps:至少3台服务器的原因是,zookeeper要至少n/2+1台服务器正常时才能使用,如果只有2台服务器,假设有1台服务器宕掉了,整个集群就不能用了
3.顺序访问
队友来自每一个客户端的每一个请求,zookeeper都会分配一个全局唯一的递增编号,这个变化反映了所有事务操作的先后顺序,应用程序可以使用zookeeper的这个特性来实现更高层次的同步
4.高性能
由于zookeeper将全量数据存储在内存中,并直接服务于所有非事务请求 ,因此尤其是在读操作为主的场景下性能非常突出。在jmater压测下(100%读请求),其结果大约在12w-13w的QPS
三.zookeeper的结构
zookeeper会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统
四.zookeeper的组成
zk server根据其身份特性分为3种:leader/follower/observer,其中follower和observer又统称为learner(学习者)
leader:负责客户端的writer类型请求
follower:负责客户端的reader请求,参与leader选举等
observer:特殊的follower,可接收客户端reader请求,但不参与选举
五.zookeeper应用场景
zookeeper从设计模式来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据发生变化,zookeeper就将负责通知已经在zookeeper上注册的那些观察者做出相应的反应,从而实现急群众类似master/slave管理模式。下面列举一些常用的场景
配置管理、集群管理、发布与订阅、数据库切换、分布式日志的收集、分布式锁/队列的管理
六.会话
– Zk的客户端与zk的服务端之间的连接
– 通过心跳检测保持客户端连接的孓活
– 接收来自服务端的watch事件通知
– 可以设置超时时间