ZooKeeper 常用应用场景原理详解

ZooKeeper 常用应用场景原理详解ZooKeeper 常用应用场景原理详解,zookepper存放数据的目录结构类似于标准的文件系统格式,如果使用过window或linux就能体会到其内部的数据结构

大家好,又见面了,我是你们的朋友全栈君。

          ZooKeeper 常用应用场景原理详解

             zookepper存放数据的目录结构类似于标准的文件系统格式,如果使用过window或linux就能体会到其内部的数据结构,简化结果如下:

           ZooKeeper 常用应用场景原理详解

       主要基本概念

             1.每个目录都被称为znode,如唯一标识分别为为“/org”,”/com/lance” 和 “/com/lance/zk”。
             2.每个znode可以存储数据,
             3.znode的类型
                    a. PERSISTENT    
                                   // 该znode不会在client断开时被zookepper自动删除,除非client端主动删除
                    b. PERSISTENT_SEQUENTIAL  
                                     // 该znode不会在client断开时被zookepper自动删除,除非client端主动删除, 
                                     // 且znode的名字后缀会添加上单调递增的数字,实现自动编号
                    c. EPHEMERAL        
                                     // 该znode会在client断开时被zookepper自动删除
                    d. EPHEMERAL_SEQUENTIAL      
                                     // 该znode会在client断开时被zookepper自动删除,
                                     // 且znode的名字后缀会添加上单调递增的数字,实现自动编号
              4.EPHEMERAL节点不能有子节点目录
              5.znode有版本概念
              6.znode可以被client监控,当该节点发生变化时,zookepper将向client发送通知(但不会把修改后的数据发给client,client要想获取修改后的数据,必须重新读取该目录下的数据)

              7. Watcher接口,Client向Zookepper注册某个znode节点的监控,并传入Watcher的实现类(如class WatcherImpl implments Watcher),当该znode节点发生变更时,Zookepper就会通过回调执行WatcherImpl.process()方法,以进行下一步的操作。

    1. 数据订阅/发布

              使用Zookepper的订阅/场景可以实现配置中心,即数据发布/订阅系统

               例如,项目的配置数据放在了/com/lance/zk目录下,n台机器实现对/com/lance/zk目录的监控,即注册一个Watcher监控(implments Watcher),当/com/lance/zk节点发生数据变更时,n台机器将获得变更通知,从而n台机器重新获取/com/lance/zk目录下的数据。

      2. 心跳检测

            在分布式系统中,各机器之间需要知道其他机器是否运行正常,最原始的方法是通过固定时间间隔的PING或建立长连接的方式检测心跳。如果基于Zookepper的话,在Zookeeper指定目录下每台机器都创建EPHEMERAL临时子节点,这样不同的机器就根据这些临时子节点判断其他机器是否正常,这样各机器之间不再直接耦合关联。

       3. 负载均衡

          假如我们在/com/lance/zk为域名节点,3个provider将自己的机器IP和端口号192.168.0.1:8001、192.168.0.2:8001、192.168.0.3:8001都注册到/com/lance/zk节点,当有一个consumer向zookepper获取/com/lance/zk目录下的IP列表,通过hash,轮询或随机方式获取其中一个IP,然后调用。

         心跳检测:client使用固定时间间隔,如3秒,向zookepper发送服务其状态是否正常信息,一旦超过3秒没有没有收到状态信息,那么就认为该IP不可用,于是该IP就会被清理。         

        典型的实现例子:alibaba的dubbo服务

       4.全局唯一ID生成服务

             每一个client根据自己的属性,如机器IP:172.17.110.2,通过create()接口创建EPHEMERAL_SEQUENTIAL 类型的znode,zookepper返回“172.17.110.2-00000000011”,client拿到返回值后,再添加具体的服务类型,如:createData,则就获取了全局唯一ID:createData-172.17.110.2-00000000011。

         5. 任务进度汇总

           各服务机器将自己的任务进行进度写入到Zookepper的指定临时节点中,这样系统中心和各台机器都能够获取其他任务的进度。

         6. 集群管理

                 集群管理中心在Zookepper的/com/lance/clusters节点上添加一个Watcher监听,所有被管理的机器都在/com/lance/clusters创建临时子节点,如/com/lance/clusters/hostName,被管理的机器需要在指定时间间隔,如3秒,内向/com/lance/clusters/hostName发起会话,如果超时这个时间间隔没有发起会话,者Zookepper认为该机器已经宕机,就会删除/com/lance/clusters/hostName这个临时子节点,这样管理中心就能够检测到每台机器的运行情况了。

        参考资料:1.《从PAXOS到ZOOKEEPER分布式一致性原理与实践》.作者:倪超

                            2. 分布式服务框架 Zookeeper — 管理分布式环境中的数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149568.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【算法】java 实现数组的反转

    【算法】java 实现数组的反转数组的反转原理跟冒泡排序有点像,都是通过交换位置,只不过数组的反转是交换第一个和最后一个的位置,第二个和倒数第二个的位置,冒泡排序是交互相邻两个的位置.下面看一下具体的代码实现packagetest;/***数组的反转*/publicclassTestDemo{publicstaticvoidmain(String[]args){…

    2022年5月27日
    42
  • Python3网络爬虫快速入门实战解析

    Python3网络爬虫快速入门实战解析请在电脑的陪同下,阅读本文。本文以实战为主,阅读过程如稍有不适,还望多加练习。本文的实战内容有:网络小说下载(静态网站)、优美壁纸下载(动态网站)、爱奇艺VIP视频下载PS:本文为Gitchat线上分享文章,该文章发布时间为2017年09月19日。

    2022年6月12日
    29
  • 职场上管理沟通工具的演化之路

    职场上管理沟通工具的演化之路

    2021年8月17日
    48
  • 5个最佳拖放式WordPress网页生成器比较(2018)

    5个最佳拖放式WordPress网页生成器比较(2018)你想要一个简单的方法来建立和定制你的WordPress网站?这就是拖放WordPress网页生成器插件派上用场的地方。这些WordPress网页生成器允许您在不编写任何代码的情况下创建、编辑和自定义您的网站布局。在本文中,我们将比较和回顾5个最好的WordPress拖放网页构建器。为什么使用拖放页面生成器的WordPress?当开始一个博客时,许多WordPress初学者发现很难在他们的网站上更改或自定义页面布局。虽然很多优质的WordPress主题都有不同的页面布局,但对于不懂HTML代码的人来说,

    2022年5月11日
    42
  • java查询数据导出excel并返回给浏览器下载

    java查询数据导出excel并返回给浏览器下载效果图:1.点击导出表按钮2.接着就会出现下图3.点击上图中的确定按钮再接着就会出现下图4.点击上图中的保存按钮接着就会出现下图,浏览器下载完成后的提示5.打开下载好的文件如下图好了,废话不多少,上代码jsp前端代码<divstyle="height:30px;"> <a>时间:</a>…

    2022年6月28日
    24
  • SpringCloud微服务架构分析

    SpringCloud微服务架构分析微服务框架微服务是一种架构风格,一个大型复杂软件应用应该由一个或多个微服务组成。系统中的各个微服务都可以被独立部署,每个服务仅关注于完成一件任务就行了,在所有情况下,每个任务都代表着一个小的业务能力。微服务架构其实就是一种架构风格,我们将整个项目划分为多个独立的小项目,也就是我们俗称的微服务,可以理解为每个微服务都单独处理某个功能模块,可以独立开发、测试、部署、监控和扩展,甚至可以用不同的编程语言开发它们。它有利于我们平时项目的开发,解决了一体化架构项目难以扩展,开发周期长,故障级联等问题…

    2022年6月15日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号