zoukankan      html  css  js  c++  java
  • 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的基础上进行一些简单封装就好。

  • 相关阅读:
    用orgmode写加密日记
    用emacs加密文件(使用ccrypt)
    C#使用注册表添加删除开机启动项
    WPF中使用第三方字体选择器
    使用rdesktop远程连接Windows桌面
    webbrowser 提交按钮没反应的问题解决办法
    C#中webBrowser加载页面中的不同域的iFrame的源代码的取得
    C# 天涯博客验证码识别(转)
    webbroser 清除COOKIES的解决办法
    使用C#实现ADSL自动拨号
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981973.html
Copyright © 2011-2022 走看看