• Zookeeper入门


    介绍

    1、何为Zookeeper?

      ZooKeeper 是 一个分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。(分布式协调服务:就是说zookeeper是专门用来协调和解决分布式的一些问题的)

    2、它可以用来做什么?
       配置中心
       分布式锁
       集群管理 等等…
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3、Zookeeper数据模型
      ZooKeeper 是一个树形目录服务(就是说zookeeper它的存储形式是一个目录的形式),其数据模型和Unix的文件系 统目录树很类似,拥有一个层次化结构。
      这里面的每一个节点都被称为:ZNode,每个节点上都会保存自己的数据和节点信息。
      节点可以拥有子节点,同时也允许少量(1MB)数据存储在该节点之下。

    节点可以分为四大类:
      •PERSISTENT 持久化节点
      •EPHEMERAL 临时节点:-e
      •PERSISTENT_SEQUENTIAL 持久化顺序节点:-s
      •EPHEMERAL_SEQUENTIAL 临时顺序节点:-es
    在这里插入图片描述

    4、操作方式

    4.1、ZooKeeper 命令操作
     答:简而言之就是通过命令行的方式对zookeeper进行操作…
    zookeeper又分为服务端和客户端…

    4.2、ZooKeeper Java Api操作
    1、Curator介绍
     Curator 是 Apache ZooKeeper 的Java客户端库,就是说它对zookeeper的底层接口进行了进一步的封装,更方便我们通过api的方式对zookeeper进行操作。
    常见的ZooKeeper Java API :
      1、原生Java API
      2、ZkClient
      3、Curator

    2、CuratorAPI 常用操作(Java方式操作zookeeper常用操作)(重点)
      •建立连接
      •添加节点
      •删除节点
      •修改节点
      •查询节点
      •Watch事件监听
      •分布式锁实现

    3、Curator实现分布式锁API
      •在Curator中有五种锁方案:
      •InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)
      •InterProcessMutex:分布式可重入排它锁
      •InterProcessReadWriteLock:分布式读写锁
      •InterProcessMultiLock:将多个锁作为单个实体管理的容器
      •InterProcessSemaphoreV2:共享信号量

    5、应用场景实现介绍

    5.1、配置中心

    5.1.1、介绍

     在分布式系统中,许多的服务被切分成了许多的模块(微服务)来独立运行,如果每次配置文件发生了变化,就需要把每个节点上的配置文件都修改一次,这是非常麻烦、不可忍受的。
     于是,我们把配置文件统一放在一个地方,配置文件修改了之后,能够及时通知所有节点重新加载。这样即使再多的节点,也只需要修改一次配置文件。这个管理统一配置的系统就是统一配置中心。
    常见的配置中心
      spring-cloud-config
      apollo
      zookeeper

    统一配置中心的核心功能之一就是配置变化后,及时通知所有的节点。zookeeper的watch机制正好可以满足这样的需求,所以可以通过利用zookeeper的watch机制来实现配置中心。

    5.1.2、具体实现思路

     1、连接zookeeper服务器;
     2、客户端创建watch监听器(实现watch接口),监听各个节点数据的变化(增删查改),从而做出对应的操作;
    (如果zookeeper是集群模式,leader节点还会将更改后的配置数据,先同步更新到其他flowwer节点上)
     3、当zookeeper中的配置信息发生变化时,通过watcher的回调方法捕获变换的配置数据,然后获取到本地,然后更新本地的配置信息;
    在这里插入图片描述

    5.2、分布式锁

    5.2.1、什么是分布式锁?

     看个场景:两个用户同时去抢购秒杀商品,当秒杀服务同时收到秒杀请求时,都去进行库存扣减,此时在没有做任何处理的情况下,就会导致库存数量变成负数从而导致超卖现象。
     答:这种情况下如果是单体项目,我们一般会选择加锁的方式来避免并发的问题。但是在分布式场景中,采用传统的锁并不能解决跨进程并发的问题,所以需要引入一个分布式锁,来解决多个节点之间的访问控制。

    5.2.2、Zookeeper如何实现分布式锁?(两种方式)

     1、通过 唯一节点特性 实现分布式锁(谁先创建一个节点,谁就获得锁)
    在这里插入图片描述

     2、通过 有序节点 实现分布式锁(在指定节点下创建一个临时有序节点,创建越早的节点的顺序编号越小,最先获得锁)
    在这里插入图片描述

    6、ZooKeeper 集群搭建

    1、Zookeeper集群角色
      在ZooKeeper集群服中务中有三个角色:
       Leader 领导者
         处理事务请求
        集群内部各服务器的调度者

        Follower 跟随者
        处理客户端非事务请求,转发事务请求给Leader服务器
        参与Leader选举投票

       Observer 观察者:
        处理客户端非事务请求,转发事务请求给Leader服务器
    在这里插入图片描述

  • 相关阅读:
    tslib_交叉编译_程序编写
    Redis 主从
    [Linux Review-1] Linux OS fundamental #101
    VSCode之C++ & CUDA极简环境配置
    24 DRF详细学习篇章一|Requests|Responses|View|Routers
    【GoWeb框架初探————XORM篇】
    DHTMLX Gantt PRO 7.1.12
    [数据结构]排序算法的性能比较
    【开题报告】基于SpringBoot的二手汽车交易平台的设计与实现
    Metis安装(5.0.1与4.0.3)
  • 原文地址:https://blog.csdn.net/qq_45738379/article/details/126350352