• zk系列-zookeeper的使用


    zk支持java/c访问,java常用的有apache-zkclient、社区版的i0tec-zkclient、github.adyliu,apache-zkclient是zk自身提供的接口,i0tec/adyliu都是对apache版的封装丰富,提供了便捷的事件监听和数据序列化。C版的使用见"zk系列-c++下zookeeper使用实例"。具体使用不做介绍了。

    一般zkclient要支持如下功能:

    • 节点-创建、删除、是否存在、永久节点、临时节点、序列节点
    • 事件-子节点变化、节点变化、状态变化、数据变化事件的注册和取消。也就是收到服务端事件通知时,根据事件类型调用相关函数。

    更进一步,可以支持:

    • 维护对不同zkserver的zkclient,维护各自的连接数,当一个zkclient的连接数为0时,关闭其连接
    • 如果维护全公司的zk,可以封装一些默认的配置,让zk对使用者完全透明
    • 支持存储数据的序列化和反序列化:如java中的Properties,来管理配置(properties或xml格式);或者其他格式,只要自己知道二进制流的格式就好
    • 分布式锁-不同进程或服务间互斥的实现,主要使用临时序列节点
      • 向zkserver在同一个父目录(如/lock)下创建临时序列子节点(/lock/ip_),并监听/lock子节点变化
      • /lock下会有/ipa_1,/ipb_2,/ipc_3类似递增的临时节点
      • ipa获得/lock下所有子节点,当前最小节点是自己创建的时候,表示该服务获得锁
      • ipa完成互斥操作后,删除/lock/ipa_1,表示释放锁
      • zkserver会通知其他client变化,其他client重复以上判断和操作
    • 统一配置:服务经常有自己的配置文件,但服务又是多份部署,为了保证配置的一致性及修改方便,可以用zkserver维护配置文件。各服务都监听配置节点,当节点数据变化时,各自获取新数据(即配置)
    • 服务管理:后台服务都向一个节点下创建子节点,保存自己的Ip和端口;客户端获取该节点下的所有子节点,随机选一个ip去调用。也可以做智能一些,每个ip节点还能记录下最近一段时间使用该ip的client数,这样client选用使用数最少的ip,达到更好的负载均衡。

    就说这么多吧,具体的代码实现也都很简单,在已有zkclient的基础上进行一些简单封装就好。

  • 相关阅读:
    HTML5结构
    HTML5新增的非主体元素header元素、footer元素、hgroup元素、adress元素
    CF GYM 100703G Game of numbers
    CF GYM 100703I Endeavor for perfection
    CF GYM 100703K Word order
    CF GYM 100703L Many questions
    CF GYM 100703M It's complicate
    HDU 5313 Bipartite Graph
    CF 560e Gerald and Giant Chess
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981973.html
Copyright © 2020-2023  润新知