zookeeper是我们的业务系统架构中常见的一个分布式协调框架中间件(中间件是部署在服务模块之间的组件,目的是实现服务之间的解耦),它的作用是为分布式系统提供一致性服务(下文会详细解释)。
zookeeper的特点:
zookeeper的部署方式为集群部署(分布式),通常集群的节点数量为奇数个(这和它的选举及高可用性有关)。既然它能作为中介,给其他服务模块提供公共功能,那么它应当是比较可靠的,特点如下:
1.高可用性:
集群只要有一半以上的节点存活,就能正常提供服务
2.全局数据一致性:
这对于集群来说至关重要,它通过zab协议确保了集群中的每个节点都保留了一份相同的数据
3.数据更新原子性:
确保数据要么更新成功,要么失败,不存在其他状态
4.实时性:
在一定时间范围内,客户端能够读到最新数据(zookeeper可以确保数据最终一致,但需要一定时间在节点间同步数据)
zookeeper的作用
为什么要使用zookeeper? -----为分布式系统提供一致性服务
什么是分布式系统的一致性?
分布式系统指部署在多台服务器上,通过协作来实现某种功能的系统。所谓的一致性就是共识和相同的状态,例如一个订单系统部署了5个实例节点,组成了一个集群提供服务,如何保障集群内的每个可用节点的服务配置一致,时间一致,数据一致?集群内部要选举出leader,怎么保证能够选举出leader,并且其他节点都认可这个leader?当有节点故障的时候,谁来更新集群的可用节点信息? 这就是分布式系统要解决的部分一致性问题。
再看看zookeeper集群自身有哪些功能:
1.存储数据
zookeeper可以存储数据,它的数据结构是层次化的多叉树,在节点上可以存储数据,节点容量上限为1M。并且存储的数据可靠不易丢失(zookeeper本身是高可用且能保证数据一致性的),读取速度快
2.监听机制
zookeeper可以监听节点数据的事件,包括节点数据的创建/删除/修改以及子节点的变化。当这些事件发生时,zookeeper可以主动通知客户端。
基于zookeeper的这两个功能,我们来看看zookeeper的作用。
数据发布和订阅
我们可以将少量数据存放在zookeeper上,其他服务可以从zookeeper集群读取数据。利用监听机制,让其他服务在zookeeper上注册一个监听器,当数据发生变化时主动通知其他服务
统一配置管理
可以作为一个公用的配置中心,存储各个服务模块所需的配置数据
集群选举
我们的业务中包含了各种各样的集群,这些集群通常由多个节点组成,需要选举出leader或者master角色。以前的选举机制由各个集群自行维护,现在可以由zookeeper实现。各个节点只需向zookeeper注册临时序列节点,谁先注册成功谁就成为集群leader。
负载均衡
如图所示,将所有可用的服务节点信息注册在zookeeper上,用户可以读取所有的可用节点信息,并根据自己的负载均衡策略选择节点来访问
服务发现
服务模块可以将自己的对外服务信息(如服务名称,连接地址,端口等)注册在zookeeper上,其他服务便可以获取信息并调用该服务,起到一个类似euraka这样的服务注册中心的作用
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。