ZooKeeper应用案例

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【2月更文挑战第24天】

使用ZooKeeper解决常见的分布式问题,包括leader选举、分布式队列、负载均衡等。


1、leader选举

基于ZooKeeper实现leader选举的基本思想是,让各个参与竞选的实例同时在ZooKeepeer上创建指定的znode,比如/current/leader,谁创建成功则谁竞选成功,并将自己的信息(host、port等)写入该znode数据域,之后其他竞选者向该znode注册watcher,以便当前leader出现故障时,第一时间再次参与竞选,具体如下图所示。

基于ZooKeeper的leader选举流程如下:

1)各实例启动后,尝试在ZooKeeper上创建ephemeral类型znode节点/current/leader,假设实例B创建成功,则将自己的信息写入该znode,并将自己的角色标注为leader,开始执行leader相关的初始化工作。

2)除B之外的实例得知创建znode失败,则向/current/ leader注册watcher,并将自己角色标注为follower,开始执行follower相关的初始化工作。

3)系统正常运行,直到实例B因故障退出,此时znode节点/current/leader被ZooKeeper删除,其他follower收到节点被删除的事情,重新转入步骤1,开始新一轮的leader选举。

在Hadoop生态系统中,HBase、YARN和HDFS等系统,采用了类似的机制解决leader选举问题。

2、分布式队列

在分布式计算系统中,常见的做法是,用户将作业提交给系统的Master,并由Master将之分解成子任务后,调度给各个Worker执行。该方法存在一个问题:Master维护了所有作业和Worker信息,一旦Master出现故障,则整个集群不可用。为了避免Master维护过多状态,一种改进方式是将所有信息保存到ZooKeeper上,进而让Master变得无状态,这使得leader选举过程更加容易,典型架构如下图所示。

该方案的关键是借助ZooKeeper实现一个分布式队列,并借助ZooKeeper自带的特性,维护作业提交顺序、作业优先级、各节点(Worker)负载情况等。借助ZooKeeper的PersistentSequentialZnode自动编号特性,可轻易实现一个简易的FIFO(First In First Out)队列,在这个队列中,编号小的作业总是先于编号大的作业提交。


Hadoop生态系统中Storm便借助ZooKeeper实现了分布式队列,以可靠地保存拓扑信息和任务调度信息。

3、负载均衡

分布式系统很容易通过ZooKeeper实现负载均衡,典型的应用场景是分布式消息队列,下图描述了Kafka是如何通过ZooKeeper解决负载均衡和服务发现问题的。在Kafka中,各个Broker和Consumer均会向ZooKeeper注册,保存自己的相关信息,组件之间可动态获取对方的信息。

Broker和Consumer主要在ZooKeeper中写入以下信息:

  • Broker节点注册信息:记录在ephemeral类型的znode路径/brokers/ids/[0...N]([0… N]是指0到N之间的某个数)下,保存了该Broker所在host以及对外开放的端口号。
  • Consumer注册信息:记录在ephemeral类型znode路径/consumers/[group_id]/ids/[consumer_id]下,保存了Consumer group中各个consumer当前正在读取的各个topic及对应的数据流。
  • Consumer Offset追踪信息:记录在persistent类型的znode路径/consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] 下,保存了特定Consumer group(ID为[group_id]))当前读到的特定主题([topic])中特定分片([broker_id-partition_id])的偏移量值。
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
23 0
|
1月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
|
3月前
|
消息中间件 存储 Java
ZooKeeper 在 Kafka 中的应用
ZooKeeper 在 Kafka 中的应用
67 0
|
6月前
|
存储 缓存 Java
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
`ZooKeeper `是一个**开放源码的分布式协调服务**,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于` Zookeeper` 实现诸如**数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列**等功能。
22535 11
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
|
8月前
|
Java Linux API
Zookeeper学习---3、服务器动态上下线监听案例、ZooKeeper 分布式锁案例、企业面试真题
Zookeeper学习---3、服务器动态上下线监听案例、ZooKeeper 分布式锁案例、企业面试真题
|
10月前
|
存储 消息中间件 分布式计算
Zookeeper 从安装到应用
Zookeeper 从安装到应用
80 0
Zookeeper 从安装到应用
|
10月前
|
存储 域名解析 负载均衡
Zookeeper—应用
前言 在前面的几篇文章中,我们讲解了ZooKeeper的组成,基本功能,集群选举,ZAB协议和数据一致性。所有的设计都因应用场景而生,不结合场景的方案都是耍流氓。在今天的文章中,我们将要去了解ZK的应用,加深对ZK的认识。
|
10月前
|
NoSQL API Redis
Zookeeper-应用-分布式锁以及和Redis实现对比
前言 因为分布式锁在分布式系统中非常重要,所以把分布式锁的实现从ZooKeeper应用中单独拿出来讲。 关于第二节ZooKeeper实现分布式锁的部分,主要借鉴的《从Paxos到Zookeeper(分布式一致性原理与实践)》—倪超 一书。结合我个人的理解,对内容有所精简。大家如果想了解更细节的内容,可以自行阅读这本书,书中还讲解了ZooKeeper在阿里巴巴的实践与应用,个人觉得不仅能加深对ZooKeeper的认识,还能扩宽知识面。相见恨晚!!!墙裂推荐!!!!为作者打Call
119 0
Zookeeper-应用-分布式锁以及和Redis实现对比
|
11月前
zookeeper入门到精通08——服务器节点动态上下线案例实战
zookeeper入门到精通08——服务器节点动态上下线案例实战
|
11月前
|
运维 Kubernetes Cloud Native
《云原生架构容器&微服务优秀案例集》——02 汽车/制造——致景科技 基于 MSE 一站式实现服务治理
《云原生架构容器&微服务优秀案例集》——02 汽车/制造——致景科技 基于 MSE 一站式实现服务治理
168 0