深入了解Zookeeper【一】概述与工作机制
1、概述
Zookeeper提供分布式应用协调服务,集群架构如图:
- Zookeeper中有一个Leader,多个Follower。
- 集群中只要有半数以上节点存活,Zookeeper就能正常服务,这一点和Kafka集群的区别就是:Zookeeper并不存储大量数据,所以多台机器冗余,成本不是很高,即可以做到分布式系统的可用性。
- Zookeeper能保证数据一致性,客户端连接到集群中哪一台服务器,数据都是一致的。
- 数据更新原子性。
- 在一定的时间范围内,能提供实时性,客户端能读取到最新的数据。
2、数据结构
Zookeeper采用类似文件系统的层级树状结构进行数据的管理,树的节点称为ZNode,每个节点都是唯一的。
Zookeeper的数据存储可以通过客户端ZooInspector来查看,可以通过关注微信公众号ClawHub,回复关键字“zooInspector”获取。
3、应用场景
Zookeeper的应用场景非常的多,包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线监控、软负载均衡、分布式锁等。
3.1、统一命名服务
比如Dubbo可以通过Zookeeper来存储生产者与消费者信息,根据指定名字来获取资源或服务的地址,提供者等信息。
3.2、统一配置管理
我们的一个系统,因为定制化的东西过多,所以采用自研的配置管理模块,其底层就是采用Zookeeper,架构逻辑图:
Kafka集群中,也是使用Zookeeper作为配置管理使用。
3.3、统一集群管理
在分布式环境中,实时掌握每个节点的状态是必要的,可以根据节点的实时状态做出一定的调整,在Kafka集群中,通过Zookeeper来管理ISR(动态同步副本),当副本节点挂掉时,会通过Zookeeper中存储的ISR来进行选举。
3.4、服务器节点动态上下线监控
通过Zookeeper的监听机制可以做到服务器节点动态上下线监控:
- 服务启动时注册信息。
- 获取当前在线的服务器列表,并注册监听。
- 服务器节点下线。
- 服务器节点下线事件通知.
- 重新获取在线服务器列表,并注册监听。
3.5、软负载均衡
软负载均衡就比较常见了,比如:
- Dubbo根据负载均衡算法获取提供者调用服务;
- Kafka的Producer负载均衡
对于同一个Topic的不同Partition,Kafak会尽力将这些Partition分配到不同的Broker上; - Kafka的Consumer负载均衡
在消费时,只需指定Topic,Kafka会借助Zookeeper,根据Partition的数量和Consumer的数量做到负载均衡的动态配置。
3.6、分布式锁
zookeeper也会用来做分布式锁,也是Zookeeper的一致性文件系统的应用,这部分内容比较多,会单独写一篇。
4、工作机制
通过上述几种Zookeeper的使用情景,已经能看出来Zookeeper的工作机制:充分利用一致性文件树形结构与监听机制。
章节3.4的例子就是一个很好的说明:Zookeeper=文件系统+监听机制。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!