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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
5月前
|
分布式计算 安全 Java
ZooKeeper【实际案例】
ZooKeeper【实际案例】
|
6月前
|
Java
分布式系列教程(24) -Zookeeper数据查看工具ZooInspector
分布式系列教程(24) -Zookeeper数据查看工具ZooInspector
81 0
|
12月前
|
存储 分布式计算 Java
Apache ZooKeeper - ZK的基本特性与节点&应用场景一览
Apache ZooKeeper - ZK的基本特性与节点&应用场景一览
85 0
|
监控 Dubbo 应用服务中间件
Zookeeper(三)典型使用场景
Zookeeper(三)典型使用场景
87 0
|
存储 分布式计算 关系型数据库
【ZooKeeper】① 分布式的基本概念
一个 SpringBoot 项目(apple.jar)被部署到了服务器上运行。可向其发送网络请求获取网络资源。随着请求数量的逐渐增多,服务器宕机(死机)的可能性也越来越高。 若一个服务器宕机会导致该服务器上的某个系统直接无法被访问,则不是高可用的项目,便产生了单点故障。单点故障:服务器与项目共生。服务器生,项目活;服务器挂,项目死。
185 0
【ZooKeeper】① 分布式的基本概念
|
消息中间件 存储 设计模式
Zookeeper从入门到放弃之Zookeeper典型应用场景
Zookeeper从入门到放弃之Zookeeper典型应用场景
182 0
Zookeeper从入门到放弃之Zookeeper典型应用场景
|
消息中间件 域名解析 监控
【分布式】Zookeeper应用场景
 在上一篇博客已经介绍了Zookeeper开源客户端的简单实用,本篇讲解Zookeeper的应用场景。
153 0
【分布式】Zookeeper应用场景
|
SQL 存储 分布式计算
ZooKeeper介绍及典型使用场景
ZooKeeper(动物园管理员),顾名思义,是用来管理Hadoop(大象)、Hive(蜜蜂)、Pig(小猪)的管理员,同时Apache HBase、Apache Solr、LinkedIn Sensei等众多项目中都采用了ZooKeeper。
150 0
|
消息中间件 分布式计算 资源调度

相关实验场景

更多