"白" 说 zookeeper

  1. zookeeper是什么鬼?
    • 相当于协调身体运作的大脑
    • 负责协调,联络分布式环境中子系统(胳膊腿)的功能
  2. 在哪个鬼地方用?
    • 维护配置信息
      • 当在一个集群规模的环境中,多台同类型的应用使用同样的配置文件,为了避免麻烦的登陆每台机器修改配置,为了减少人为的修改导致配置失误,为了实现配置文件的统一管理、版本控制,那么就有必要实现一个配置管理中心的应用–> zookeeper提供的这个配置管理,就是把这公用的配置文件提取出来放到一个地方,对这个地方(目录节点)进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好,项目不需要重启,这样上面一开始讲的问题就解决了.
    • 命名
      • 方便了分布式个个项目之间的联系
      • 一般的框架通过URL来获取远方服务器上的对象来调用服务
      • 但到集群,和分布式环境下,
        • 如何做到子项目之间调用的关系不会很复杂,
        • 如何不会到时候出现问题都不知道哪个服务调用的哪个,
        • 所以这里就需要一个服务器专门替我们管理这里服务的信息和调节,管理这些服务 – 命名功能
        • 当集群的时候,相同的一个服务有很多个提供者,这些提供者启动时,提供者服务器的相关信息,包括服务接口,地址,端口等一下连接提供者的信息注册到zookeeper中,当消费者要消费某服务的时候,从zookeeper中拿改服务的所有提供者信息目录,再根据dubbo的负载均衡机制从地图中选择一个提供者。

          负载均衡机制–如有对个服务器存这个东西,调一个最闲的来消费

    • 分布式同步(分布式锁)
      • 作用

        • 分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。
      • 实现

        • 获取分布式锁
        • 客户端在locker节点下创建自己的临时顺序节点
        • 谁的临时顺序节点最小谁获得锁
          • 锁用完之后, 删除自己的临时顺序节点
        • 发现自己的临时顺序节点并非最小的
          • 找到比自己次小的那个节点
          • 监视它
          • 他获得锁且释放后 立刻判断自己是不是最小的了
            • 是 : 获得锁
            • 不是 : 重复 4
      • 抢占分布式锁核心算法流程图 :
        "白" 说 zookeeper

      • 注意哦

        • 使用EPHEMERAL会引出一个风险:在非正常情况下,网络延迟比较大会出现session timeout,zookeeper就会认为该client已关闭,从而销毁其id标示,竞争资源的下一个id就可以获取锁。这时可能会有两个process同时拿到锁在跑任务,所以设置好session timeout很重要。
        • 同样使用PERSISTENT同样会存在一个死锁的风险,进程异常退出后,对应的竞争资源id一直没有删除,下一个id一直无法获取到锁对象。
    • 提供组服务
      • 这个组服务即集群管理,如服务注册或者获取服务都是在zookeeper上操作的.
    • 提供组服务也就包括
      • 创建组、加入组成员、列出组成员和删除组成员
    • zookeeper心跳机制
      • 作用
        • 检测与其连接的一些服务器的数量,以及信息
        • 检测什么时候连上zookeeper
        • 检测什么时候断开
        • 注 : 心跳机制:没事就跳(经一定时间就会发送信息提醒程序正常)告诉你他还活着,不跳了说明出问题了(检测到断开之类)

参考 :https://blog.****.net/qq_18416057/article/details/54927189
参考 : https://www.cnblogs.com/linjiqin/p/6052031.html