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的基础上进行一些简单封装就好。
zk系列-zookeeper的使用的更多相关文章
- zk系列-zookeeper概述
接触zk是2年前了,最近工作又比较依赖于zk,所以准备起个系列文章,系统的总结下. zookeeper是一个分布式的用于协调的服务,起源于Hadoop中的一个组件.分布式系统可以用zookeeper实 ...
- zk系列三:zookeeper实战之分布式锁实现
一.分布式锁的通用实现思路 分布式锁的概念以及常规解决方案可以参考之前的博客:聊聊分布式锁的解决方案:今天我们先分析下分布式锁的实现思路: 首先,需要保证唯一性,即某一时点只能有一个线程访问某一资源: ...
- zk系列二:zookeeper实战之分布式统一配置获取
前面介绍了zk的一些基础知识,这篇文章主要介绍下如何在java环境下获取zk的配置信息:主要基于zk的监听器以及回调函数通过响应式编程的思想将核心代码糅合成一个工具类,几乎做到了拿来即用: 在分布式集 ...
- zk系列一:zookeeper基础介绍
聊完kafka必不可少的需要再聊一聊zk了,下面开始 一.ZK是什么 ZooKeeper是分布式应用程序的高性能协调服务.它可以实现分布式的选主.统一配置管理,命名,分布式节点同步,分布式锁等分布式常 ...
- 面试必问:分布式锁实现之zk(Zookeeper)
点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...
- 容器化系列 - Zookeeper启动和配置 on Docker
本文简要说明了如何在Docker容器中启动和配置Zookeeper. 1 准备工作 1.1 下载zookeeper镜像 $ docker pull zookeeper:3.4 1.2 单点模式 安装D ...
- Hadoop系列-zookeeper基础
目前是刚刚初学完zookeeper,这篇文章主要是简单的对一些基本的概念进行梳理强化. zookeeper基础概念的理解 有时候计算机领域很多名词都是从一长串英文提取首字母缩写而来,但很不幸zooke ...
- ZK(ZooKeeper)分布式锁实现
点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你. 本文中案例都会在上传到git上,请放心浏览 git地址:https://github.com/muxiaonong/Zo ...
- (转)淘淘商城系列——zookeeper单机版安装
http://blog.csdn.net/yerenyuan_pku/article/details/72717744 这篇文章,我单独来说一下zookeeper如何安装.在实际开发中,zookeep ...
随机推荐
- 如何让openvpn在windows启动时自动加载
在非常需要vpn的人群中,他们几乎一整天都连接着vpn,但是每次开机都要连接vpn的过程有时候比较繁琐对于新手而言.这篇文章主要是说明如何在windows启动时自动加载openvpn自动连接,该教程适 ...
- enum类型学习笔记
如:enum color {red,white,yellow,green} 枚举出一种类型中的多个变量 enum本质为int,可以作为int使用: enum默认值为0,1,2... 以上的定义中: e ...
- 287. Find the Duplicate Number hard
287. Find the Duplicate Number hard http://www.cnblogs.com/grandyang/p/4843654.html 51. N-Queens h ...
- [UCSD白板题] Take as Much Gold as Possible
Problem Introduction This problem is about implementing an algorithm for the knapsack without repeti ...
- erlang学习笔记(文件操作)
参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)
- OpenMP之枚举排序
// EnumSort.cpp : 定义控制台应用程序的入口点. //枚举排序 /* 枚举排序(Enumeration Sort)是一种最简单的排序算法,通常也称为秩排序(Rank Sort). 该算 ...
- android开发时使用游标时一定要关闭
原代码如下: places = getPlaceDatas(context, cursor); cursor.close(); 应改为: try{ places = getPlaceDatas(con ...
- web
1.linux下交换文件 .index.php.swp 有时可查看源码2.当php后缀被过滤的时候可以直接对ph开头的后缀进行一个fuzz测试可以上传的文件后缀名3.curl -x 123.45.67 ...
- HDU-4869 Turn the pokers
原题: Turn the pokers 思路:假设正面为0,反面为1.牌就像这样 000000....... .考虑到假如可以实现最终反面个数为m, 牌共n张, 则这n张排任取m个为反面 ...
- Use Hibernate core API
For Hibernate configuration, We can use hibernate.cfg.xml file to configure: <?xml version='1.0' ...