Zookeeper从入门到放弃之Zookeeper典型应用场景

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Zookeeper从入门到放弃之Zookeeper典型应用场景

前言

今天来聊一下,Zookeeper的典型应用场景。

本文将从以下场景,来进行描述:

  • 数据发布订阅(配置中心)
  • 命名服务
  • Master选举
  • 分布式队列
  • 分布式锁

数据发布订阅(配置中心)

何为配置中心

当系统架构由单机架构进入分布式架构之后,系统的复杂性大幅度上升,针对分布式应用的配置内容,很难以管理。为了更好地管理,分布式系统内各应用的配置项,采用配置中心化,使用一个中间件配置中心来进行统一配置的管理。

zookeeper实现配置中心

Zookeeper用来实现配置中心,因为我们之前讲过的,Zookeeper具有的一些特殊性

  • znode能够存储数据
  • watch能够监听数据改变

znode能够按照要求,定制化保存所有的配置内容,同时使用watch监听机制,能够实时刷新客户端的配置获取,保证各客户端应用,能够实时获取到最新的配置。

常用的,可以采用两种配置形式来实现:

  1. 一个配置项一个znode
    更适合于配置项比较少的,可以采用此方式,实现快速配置存储、实时获取。当配置项比较多,如果采用此,可能会造成zookeeper节点非常多
  2. 一个配置文件一个znode
    可以通过将整个配置,写入一个znode的数据中,比如采用byte形式写入,客户端完成读取之后,转成客户端需要的格式,然后进行相关处理。

命名服务

何为命名服务

命名服务,即动态的维护服务地址,保证调用可用性。

Zookeeper实现命名服务

场景:

工程师小明 负责A服务的开发,工程师小丽 负责B服务的开发,A服务其中有业务逻辑,需要依赖B服务,调用B服务,完成功能实现。当小明已经完成A服务开发之后,被安排开发别的项目,但是此时B服务仍未完成。思考,小明如何实现不停机,上线A服务?

如图所示,我们可以通过zookeeper来实现

image.png

A服务客户端,注册一个watch监听到节点znode(/ServiceB),B服务完成节点znode(/ServiceB)的创建,当B服务完成上线后,节点发生数据变化,激活监听机制,A服务收到数据变化,进行刷新B服务地址,从而实现不停机,上线A服务。

Master选举

何为Master选举

在集群方案中,无法保证Master是一直可用的,当Master失去可用性,挂掉,那么slave实例必须能够进行Master的选举,保证整个系统的可用,这就是Master选举。

Zookeeper实现Master选举

实现Master选举,市面上有很多成熟的方案。那么,我们主要聊一下,采用Zookeeper实现Master选举。其实,采用Zookeeper实现Master选举非常简单。

如下图所示:

image.png

我们需要将所有slave客户端应用都使用watch机制,监听Master注册的临时节点znode(/Master),当Master发生故障,宕机之后,节点znode(/Master)因为是临时节点,因此发生session失效。各slave客户端,监听到变化,争抢创建临时主节点znode(/Master),当一个slave创建成功之后,便成为新的Master,其他slave就还进入等待中。同时,获取Master的实时信息,进行数据同步。

与此同时,我们可以将所有的客户端实例,都注册临时或者临时顺序节点,在一个集群节点znode(/servers)下,因此,我们可以通过,获取(/servers)可以查看分布式应用中,所有应用的健康状态,可以进行心跳检测。同时,采用最小节点为Master方式,也能实现Master选举

分布式队列

何为分布式队列

在分布式系统应用中,我们可以采用生产者-消费者的设计模式,来实现异步数据传输,完成各种队列功能。市面上,常见的分布式队列中间件,包括RabbitMQ、RocketMQ、ActiveMQ、Kafka等,那么zookeeper同样可以实现分布式队列。

Zookeeper实现分布式队列

Zookeeper实现分布式队列,因为我们之前讲核心概念中的特性,FIFO。

如下图所示:

image.png

生产者客户端应用,可以创建顺序节点 在一个集群节点znode(/Queue)下,然后消费者,监听集群节点znode(/Queue),读取最新的子节点信息,消费最小号节点的数据值。

此处,重点在于创建的是顺序节点。

同时,队列分为有界队列,无界队列。无界队列,生产者,可以争抢创建顺序节点,有界队列,则需要进行控制生产者的创建,此时,就需要分布式锁的出现,来控制生产者创建节点。

分布式锁

何为分布式锁

分布式应用中,对于集群中应用的业务操作,有所控制,需要有机制来进行管理,即为分布式锁,通过对资源加锁,实现,管理。

Zookeeper实现分布式锁

实现分布式锁,存在两种实现方式

  1. 创建临时节点

如下图所示,可以通过创建临时节点znode(/Lock),争抢创建,当创建成功后,获得锁,然后删除临时节点

image.png

实现逻辑如下图所示:

image.png

缺点是会发生惊群效应,当锁被释放,会一波激起千层浪,引发大范围的通知,如果高并发的系统,可能会引发灾难性的问题。

  1. 创建顺序临时节点

场景:

小明在医院中治疗感冒,来到医院,先需要进行取号操作,完成取号后,按照号码顺序,进行医疗室。如果前边的号码病人因为某些原因,提前离开,不就诊,小明无需再次取号,可以直接递进。

Zookeeper实现分布式锁,就可以采用场景中类似的实现。

如下图所示,可以通过创建临时顺序节点,到一个集群节点znode(/Lock)上,实现锁的实现。每个实例,通过watch监听前一个顺序节点实例状态。

image.png

实现逻辑如下图所示:

image.png

总结

以上就是今天我们聊的内容,Zookeeper作为分布式协调服务,因其一些特性,有非常丰富的使用场景。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
7月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper应用案例
【2月更文挑战第24天】
|
7月前
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
116 0
|
6月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
129 38
|
2月前
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
25 4
|
2月前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释
102 0
|
7月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
191 2
|
7月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
184 0
|
6月前
|
Java Spring
Spring Boot与Zookeeper的集成应用
Spring Boot与Zookeeper的集成应用
|
7月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
942 22
|
7月前
|
存储 负载均衡 网络协议
ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
【4月更文挑战第10天】ZooKeeper【基础 01】简介+设计目标+核心概念+ZAB协议+典型应用场景
96 1