了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与发现的。

使用Zookeeper实现服务注册与发现,主要应用的是Zookeeper的Znode数据模型和Watcher机制,因此咱们先从Zookeeper的数据模型说起。

1、Zookeeper数据模型

Zookeeper的数据模型,有点类似咱们数据结构中的树形结构,也有点类似我们操作系统的目录结构,数据模型结构图大致如下;

树由节点组成,Zookeeper的数据存储也是基于节点,数据模型中的每一个节点,Zookeeper称之为Znode。但是与树的节点不同的是,Zookeeper中Znode的引用方式是路径引用,即是通过类似于目录文件访问的形式引用节点数据。

如上图要在“汽车”节点下再创建一个“奥迪”节点,创建方式为:

create /汽车/奥迪

要获取“汽车”节点下的节点“宝马”的数据,获取方式为:

get /汽车/宝马

基于目录的结构让每一个Znode节点拥有了唯一的路径,就像我们Java中的命名空间一样,对不同的信息就做出了清晰的隔离。

一个Znode里面主要包含了如下的一些数据:

  • data : Znode存储的数据;
  • ACL:记录 Znode 的访问权限,即哪些人或哪些 IP 可以访问本节点;
  • stat:包含Znode的各种源数据,包括ZXID、版本号、时间戳、数据长度等;
  • child:子节点引用;

2、Zookeeper的Watch机制

我们可以将Watch理解成是一个和指定Znode所绑定的监听器,当这个Znode发生变化,也就是在这个Znode上进行了数据的写操作(create、delete、setData),这个监听器监听到这些写操作之后会异步向请求Watch的客户端发送通知。

具体交互流程大致如下:

  • 客户端调用getData方法向服务器获取某个Znode节点的数据时,设置watch为true。服务端接到请求后,返回节点的数据,并在维护的WatchTable中插入被Watch的Znode路径以及Watcher(watch该Znode的客户端);
  • 当被Watch的Znode被删除或者更新之后,Zookeeper服务器会查找Watch Table,找到在Znode上对应的所有Watcher,异步通知对应的客户端,并且删除Watch Table中对应的Key:Value;

    3、Zookeeper服务注册与发现流程浅析

Zookeeper的服务注册与发现,主要应用的是Zookeeper的Znode数据模型和Watcher机制,主要分为如下几个步骤:

  • 服务注册:服务提供者(Provider)启动时,会向Zookeeper服务端注册服务信息,即会在Zookeeper服务器上创建一个服务节点,并在节点上存储服务的相关数据(如服务提供者的ip地址、端口等),比如注册一个用户注册服务(user/register):
  • 服务发现:服务消费者(Consumer)启动时,会根据本身依赖的服务信息,向Zookeeper服务端获取注册的服务信息并设置Watch,获取到注册的服务信息之后将服务提供者信息缓存在本地,调用服务时直接根据从Zookeeper注册中心获取到的服务注册信息调用服务,比如发现用户注册服务(user/register)并调用。
  • 服务通知:当服务提供者因为某种原因宕机或不提供服务之后,Zookeeper服务注册中心的对应服务节点会被删除,因为服务消费者在获取服务信息的时候在对应节点上设置了Watch,因此节点删除之后会触发对应的Watcher,Zookeeper注册中心会异步向服务所关联的所有服务消费者发出节点删除的通知,服务消费者根据收到的通知更新缓存的服务列表。

    4、小结

本文我们简单介绍了Zookeeper实现服务注册与发现的简单原理,利用 Znode 和 Watcher,可以实现分布式服务的注册和发现。最著名的应用就是阿里的分布式 RPC 框架 Dubbo,希望对大家有帮助。

8、Zookeeper服务注册与发现原理浅析相关推荐

  1. SpringBoot系列:9. 分布式系统,Dubbo,Zookeeper服务注册与发现

    前言 本章主要对分布式系统,RPC的实现方式和Zookeeper实现做一个详细的概述并通过实战代码加深对他们的了解. 1. 分布式 什么是分布式系统? :"分布式系统是若干独立计算机的集合, ...

  2. Nacos 服务注册与发现原理分析

    Nacos 另一个非常重要的特性就是服务注册与发现,说到服务的注册与发现相信大家应该都不陌生,在微服务盛行的今天,服务是非常重要的,而在 Nacos 中服务更被称为他的一等公民. Nacos 支持几乎 ...

  3. Zookeeper服务注册与发现

    Zookeeper作为服务注册与发现的解决方案,它有如下优点: 1. 它提供的简单API 2. 已有互联网公司(例如:Pinterest,Airbnb)使用它来进行服务注册与发现 3. 支持多语言的客 ...

  4. Eureka 服务注册与发现原理剖析

    1.介绍 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务.主要用于定位运行在 AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它 ...

  5. Zookeeper 服务注册与发现01——服务提供者

    <!-- SpringBoot整合zookeeper客户端 --><dependency><groupId>org.springframework.cloud< ...

  6. Zookeeper 服务注册与发现02——服务消费者

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  7. 如何实现服务注册与发现?

    在分布式服务中,服务注册和发现是一个特别重要的概念,为什么需要服务注册和发现?常用的服务发现组件有哪些?服务注册和发现对一致性有哪些要求呢?下面我们就来学习服务发现相关的知识. 文章目录 为什么需要服 ...

  8. Nacos服务注册与发现源码剖析

    文章目录 前提介绍 Nacos源码下载 Nacos客户端源码 Spring Cloud Starter Nacos 源码 Nacos服务端源码 前提介绍 服务注册与发现作用主要是为了更好的管理众多的服 ...

  9. 微服务系列:服务注册与发现的实现原理、及实现优劣势比较

    服务注册与发现的来源 首先,服务注册与发现是来自于微服务架构的产物. 在传统的服务架构中,服务的规模处于运维人员的可控范围内.当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定.而在微服 ...

最新文章

  1. Java高并发编程(五):Java中的锁Lock
  2. plsql删除大量数据_一次oracle大量数据删除经历
  3. Centos7完全卸载MySQL 安装 启动
  4. json html api文档,插件 jQuery.jsonview 中文 API 文档
  5. DoS攻击原理与实战(LOIC+Hping3)
  6. 三菱PLC定位控制2
  7. Android系统优化
  8. 一个高速公路交警的救命忠告
  9. excel更改日期格式无效_Excel日期不会更改格式
  10. C++中函数的重载,重写,重定义
  11. 基于STM32的ESP8266模块控制多路继电器
  12. 爬取NBA球员生涯数据,并在Excel中可视化显示
  13. 线程的一生(通俗易懂)
  14. 以学生使用计算机写一篇英语作文,学英语的感受作文200:《学习心得》英语作文100字...
  15. jdk8函数式接口——Consumer介绍
  16. 获取腾讯微博信息API
  17. 手持式信号综合分析仪 天馈线驻波比频谱分析仪 天馈线+频谱+干扰分析仪 4.4GHZ无线综合测试仪
  18. 【浅刷Java数据结构】Leetcode 606 根据二叉树创建字符串
  19. 关于Access to register of unclocked peripheral at 0x40010800 cause BUS_FAULT [U1_CM3CORE]的错误
  20. git与gitee的基础使用方法

热门文章

  1. i7-1065g7和i7-10710u的区别哪个好
  2. linux udev 命令,Linux下udev详细介绍
  3. YOLOX的深入理解
  4. awstats linux日志分析,Linux/Centos服务器安装配置日志分析Awstats
  5. Microsoft Office 无法找到此应用程序的许可证,修复尝试失败或者已被取消
  6. springboot+mysql+建筑造价师资格考试应试网站设计与实现 毕业设计-附源码260839
  7. vue实现HTML转PDF
  8. 抖音下拉框词如何做?
  9. 什么是Selenium?
  10. IM即时通讯设计----聊天服务(附源码)