Skip to content

Zookeeper入门

什么是zookeeper?

想象这样一种场景,微服务模式里面,微服务服务地址和接口信息的存储有几个特点

  1. 需要被多机器非常频繁地访问,一旦出现问题影响整个系统的运作
  2. 需要经常变动,变动是确定的
  3. 数据量不大

基于第一点用db貌似不太合适,用redis的话要保证可靠只能做成集群的模式,但是redis集群并不保证数据的一致性。

以上场景,我们需求的是,一个分布式的,强一致性的存储系统,也就是zookeeper所做的事情。

zookeeper的特点

分布式

distributed_application

zookeeper进程支持分布式部署,分布式系统具有以下的好处:

可靠性:进程部署在多个机器上,只要所有进程的一半以上正常,就能保证zookeeper集群的正常

扩展性:进程和机器的数量可以根据实际业务动态扩展

黑盒子:系统隐藏了内部分布式的细节,对外只提供就像单体应用一样的接口。

一致性

zookeeper_ensemble

zookeeper集群的节点在经过一个选主过程后会分为一个leader和多个follower的角色。所有的节点都可以直接接受客户端请求,读操作直接返回本节点保存的数据,写操作会转发给leader节点,leader节点群发通知,收集各节点的意见,取得过半数回复则写操作被认可。

监听

zookeeper可以提供对某个数据变化的监听,一旦监听的事件发生会通知到注册的节点。

监听具有以下特点:

  1. 所有的监听只通知一次

  2. 通知和查询的次序保证

a client will never see a change for which it has set a watch until it first sees the watch event.

  1. 支持数据监听和子节点监听

zookeeper的数据结构

hierarchical_namespace

所有zookeeper节点维护的是一个Tree,Tree的每个node称为一个ZNode。

每一个ZNode除了name,还内建了一个stat结构,存储了一些内建的数据。包括Version Number,ACL, Timestamp,Data length。

这个Tree,zookeeper习惯用目录的方式来表示。

ACL(ACCESS CONTROL LIST)

你可以为每个节点设置以下权限:create, read, write, delete,admin