• 2020暑假第4周


      这周开始学习Zookeeper。

      一个开源的分布式协调服务框架,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题。

      Zookeeper本质上是一个分布式文件系统,适合存放小文件,也可以理解为一个数据库。Znode是有路径的,也可以携带数据,所以Zookeeper可以对外提供出一个类似于文件系统的视图,可以通过操作文件系统的方法操作Zookeeper,使用路径获取Znode、获取Znode携带的数据、修改Znode携带的数据、删除Znode、添加Znode……

      Zookeeper集群是一个基于主从架构的高可用集群。每个服务器承担一种角色:Leader或Follower或Obsever。

      Zookeeper应用场景:数据发布和订阅、命名服务、分布式协调和通知(心跳检测、工作进度汇报、系统调度)、分布式锁(排它锁即写锁即独占锁、共享锁即读锁)、分布式队列。

      选举机制(Leader选举):服务器启动时:每个sever发出一个投票、接受来自各个服务器的投票、处理投票、统计投票、改变服务器状态。服务器运行时选举Leader。

      Zookeeper环境搭建。

      Zookeeper的数据模型,在结构上和标准文件系统的非常相似,拥有一个层次的命名空间,都是采用树形层次结构。Zookeeper树中的每个节点就是一个znode,并且每个节点可以拥有子节点。Znode存储数据大小有限制、Znode通过路径引用(绝对路径)、一个Znode由stat、data、childen组成。

      Znode有临时节点和永久节点两种,Znode还有一个序列化的特征。故Znode节点共有四种:临时节点、永久节点、临时节点序列化、永久节点序列化。

      登录Zookeeper客户端:# cd /安装目录/.../

                                             # bin/zkCli.sh -server node01:2181

                                             quit  (退出)

      创建永久节点:create /hello

      创建临时节点:create -e /abc 123

      创建永久序列化节点:create -s /zhangsan boy

      创建临时序列化节点:create -e -s /lisi boy

      修改节点数据:set /hello zookeeper

      删除节点,如果要删除的节点有子Znode则无法删除:delete /hello

      删除节点,如果有子Znode则递归删除:rmr /abc

      列出历史记录:histroy

      znode有属性:dataVersion、cversion、aclVersion、cZxid、mZxid、ctime、mtime、ephemeralOwner等。

      Zookeeper的watch机制:通过类似于数据库中的触发器,对某个Znode设置watcher,当Znode发生变化的时候,watermanager会调用对应的watcher。当Znode发生删除、修改、创建、子节点修改的时候,对应的watcher会得到通知。watcher有一次性触发(一个watcher只会被触发一次)和事件封装(得到的事件是被封装过的,包括keeperState、eventType、path)的特点。

      Zookeeper的JavaAPI操作:使用的是一套Zookeeper客户端框架Curator,解决了很多Zookeeper客户端非常底层的细节开发工作。Curator包含了几个包:curator-framework(对Zookeeper的底层api的一些封装)、curator-recipes(封装一些高级特性,如:Cache事件监听、选举、分布式锁、分布式计数器等)。

     

     

      54                                                                                        default:

      55                                                                                                       break;

      56}

      57}

      58}

      59 });

      60      treeCache.start();

      61      Thread.sleep(l:100000000);

      62 }

  • 相关阅读:
    【9408】数的计数
    【rlz03】十六进制转十进制
    【rlz02】二进制转十进制
    【rlz01】完全数
    【a101】高精度实数加法
    【9406】2的幂次方
    【42.86%】【Codeforces Round #380D】Sea Battle
    【26.83%】【Codeforces Round #380C】Road to Cinema
    【9932】饥饿的牛
    【9933】单词的划分
  • 原文地址:https://www.cnblogs.com/fengjingfei/p/13572170.html
Copyright © 2020-2023  润新知