开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
Zookeeper
ZooKeeper 是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
使用场景
通常使用在分布式架构中。可以充当分布式锁,负载均衡,分布式协调,集群管理,分布式队列,注册中心等。
- 分布式锁:Redis也能做分布式锁,基于负载均衡下,通过创建唯一结点,使得集群上只会有唯一一把锁
- 全局唯一ID生成器:通过 ZooKeeper 的顺序节点生成全局唯一 ID实现优惠券的全局唯一ID
而且,Zookeeper跟Redis一样,数据是存储在内存中的,因此在性能上是十分优秀的。
特点
- 顺序性: 就像TCP连接,客户端发起的连接是严格遵守顺序的。
- 原子性: 要么都成功,要么都失败。
- 单一系统映像 : 负载均衡下,每个Zookeeper都是一致的,不会出现数据不一致。
- 可靠性: 基于内存的持久化。
ZooKeeper 不适合保存大量数据
相关技术
在今天系统的学习Zookeeper之前,我就得知很多技术都与之绑定,比如说Kafka,自制的RPC框架等等
ZooKeeper 主要为 Kafka 提供 Broker 和 Topic 的注册以及多个 Partition 的负载均衡等功能。
相关概念
数据模型(Data model)
Zookeeper采用的数据结构是多叉树,每个结点(称为znode)上都可以存储数据,需要注意的是,Zookeeper不是像Redis那样存储着业务数据,而是一些注册信息。
打个比方,Redis会记录你干了些什么事,说了什么话,而Zookeeper则是记录你的身份证,姓名,电话号码等等,因此Redis和Zookeeper更像是一对好兄弟
数据节点(znode)
znode有4种类别
- 持久节点 :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除。
- 临时节点 :临时节点的生命周期是与 客户端会话(session) 绑定的,会话消失则节点消失 。并且,临时节点只能做叶子节点 ,不能创建子节点。
- 持久顺序节点 :除了具有持久节点的特性之外, 子节点的名称还具有顺序性。
- 临时顺序节点 :除了具备临时节点的特性之外,子节点的名称还具有顺序性
每个znode由2部分组成,分别为状态信息(stat)和data(数据主体)