自学内容网 自学内容网

zookeeper

1.zookeeper是什么

              简介:是一个开放源码的分布式协调服务,主要为了解决分布式架构下数据一致性问题,是集群的管理者,监视着集群中各个节点的状态,根据节点的反馈进行下一步合理操作。

              最终将简单易用的接口和性能高效、功能稳定的系统提供给用户

              应用场景:分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发育/订阅等场景

     2.zookeeper数据结构

              简介:   zookeeper数据模型类似于文件系统,是树状结构,每个树节点(目录)对应一个Znode节点。这些目录节点和普通的目录节点一样,可新建、删除、修改

              常用数据格式,常用有以下四种类型的Znode

                     持久化目录节点,PERSISTENT,客户端与zookeeper断开连接后,该节点依旧存在,除非手动删除节点

                     持久化顺序编号目录节点,PERSISTENT_SEQUENTIAL,客户端与zookeeper断开连接后,节点依然存在,只是zookeeper给该节点名称进行顺序编号

                     临时目录节点,EPHEMERAL,客户端与zookeeper断开连接后,删除节点

                     临时顺序编号目录节点,EPHEMERAL_SEQUENTIAL,客户端与zookeeper断开连接后,删除节点,只是zookeeper给该节点名称进行顺序编号

              zookeeper客户端常用命令:

                     ./zkCli.sh -server ip:host #连接zookeeper服务端

                     quit #断开zookeeper服务器连接

                     help #查看帮助

                     ls / #查询所有目录节点

                     create 节点名 值(写不写都行) #创建目录节点

                     set 节点名 值 #设置目录节点的值

                     delete 节点名 #删除节点

                     deleteall 节点名 #删除节点及其子节点

                     create -e /节点名 值(可写可不写) #创建临时目录节点

                     create -s /节点名 值(可写可不写) #创建持久化目录节点

                     ls -s /节点名 #查看目录节点的详细信息

     3.zookeeper java api(Curator)

              简介:apache Curator 是一个用于apache zookeeper的java客户端框架。Curator提供了一组易于使用的api和工具,简化了与zookeeper的交互,同时提供更高级别的抽象和功能

              搭建和使用cluator

                     pom.xml引入cluator支持(org.apache.curator.curator-recipes,org.apache.curator.curator-framework)

                     连接zookeeper客户端,通过CuratorFrameworkFactory.newClient

                     创建节点、查询节点、更新节点、删除节点

                     watch事件监听

                            zookeper允许用户在指定节点上注册一些watcher,并且在一些特定事件触发的时候,zookeeper服务端会将事件通知到感兴趣的客户端,该机制是zookeeper实现分布式协调服务的重要特性

                            zookeeper中引入了watcher机制来实现了发布/订阅功能,可让多个订阅者同时监听某一个对象,当一个对象自身状态发生变化时,会通知所有订阅者

                            zookeeper提供了三种watcher:

                                   NodeCache:只是监听某一个特定的节点

                                   PathChildrenCache:监听一个Znode的子节点

                                   TreeCache:监听整个树上的所有节点,类似于 NodeCache和 PathChildrenCache的组合

                     分布式锁实现

                            在进行单机应用开发时,涉及并发同步的问题,往往采用synchronized或lock的方式来解决多线程的代码同步问题,此时多线程运行在一个JVM上,没问题

                            但是当应用是分布式集群工作的情况下,属于多JVM下的工作环境,跨JVM已经无法通过多线程的锁同步来解决线程安全问题,

                            便需要一种更高级的锁机制,来处理跨服务器的进程之间的同步问题,这就是分布式锁。

                            分布式锁原理

                                   核心思想:当客户端获取锁时,创建节点,释放锁时,删除节点

                                   当客户端获取锁时,在lock节点下创建临时顺序节点

                                   然后获取lock下所有的子节点,客户端获取到所有的子节点后,发现如果自己创建的子节点序号最小,那么便认为客户端获取到了锁,使用完锁后,将节点删除

                                   如果发现自己创建的子节点序号并非最小,说明还未获取到锁,此时客户端需要找到比自己小的节点,同时对其注册事件监听器,监听删除事件

                                   如果发现比自己小的子节点被删除,则客户端的watcher会收到通知,此时再次判断自己创建的子节点是否是序号最小的,如果是则获取锁,

                                   否则继续监听比自己小的一个节点并注册监听

                            Curator中有五种锁方案

                                   InterProcessSemaphoreMutex:分布式排它锁(非可重入锁)

                                   InterProcessMutex:分布式可重入排它锁

                                   InterProcessReadWriteLock:分布式读写锁

                                   InterProcessMultiLock:将多个锁作为单个实体管理的容器

                                   InterProcessSemaphoreV2:共享信号量

     4.zookeeper集群搭建

              zookeeper集群介绍:

                     leader选举:

                            ServerId:服务器ID,编号越大在算法中的权重越大

                            Zxid:数据ID,服务器中存放的最大数据ID,值越大说明数据越新,在数据算法中数据越新,数据权重越大

                            在leader选举过程中,如果某台zookeeper获取超过半票的票数,则此zookeeper就可以称为leader了

       5.zookeeper核心理论

              zookeeper集群服务中有三个角色

                     leader:领导者:处理事务请求,集群内部各服务器的调度者

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

                     Observer:观察者:处理客户端非事务请求,转发事务请求各leader服务器


原文地址:https://blog.csdn.net/qq_48501521/article/details/142464769

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!