zookeeper探索(5): Znode类型及特点
(1) 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识,如/SERVER2节点的标识就为/APP3/SERVER2
(2) Znode可以有子znode,并且znode里可以存数据,但是EPHEMERAL类型的节点不能有子节点
(3) Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本。
(4) znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和 服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
(5) znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
(6) znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的集中管理,集群管理,分布式锁等等。
zookeeper探索(4): leaderElection(C语言实现)
上一篇中只是给出了文字描述,本篇中给出具体的代码。zookeeper的领导选举过程的实现比较简单,体现为创建znode节点,并监听znode节点的变化。具体来说就是:
(1)在跟节点创建"/election"永久性节点;
(2)在“/election”节点之下,每个客户端创建属于自己独享的临时顺序节点(即znode节点属性为ZOO_SEQUENCE | ZOO_EPHEMERAL),可以用ip地址也可以用其他的字符串(例如a,b,c);
(3)获取“/election/“子节点列表,并获取其中的最小节点,判断此最小节点是否为自己;
zookeeper探索(3):选举过程
使用zookeeper实现leader选举过程的一种简单方式是在创建代表参选人的客户端znode节点的时候指定SEQUENCE|EPHEMERAL标签。首先创建一个“/election”节点,然后每个客户端在此节点之下创建代表自己的znode节点,“/election/guid-n_”并同时指定SEQUENCE|EPHEMERAL这两个标签。根据SEQUENCE标签,zookeeper会自动将序号最大的znode节点放在“/election”子节点队列的最后面。序号最小的那个znode节点对应的客户端就是leader。 至此,选举过程并不完整。选举好leader之后,仍然需要监视这个le...zookeeper探索(2):C/C++开发环境搭建
Zookeeper是分布式设计常用的架构,分为服务端和客户端,其中服务端基本不需要修改直接拿来用就可以了,客户端需要根据自己的需求进行设计,zookeeper提供了大量非常有用的c api,基本上都是以“zoo_”开头,含义简单明了。客户端根据不同人的需求,可能会使用不同的程序语言来实现,首选当然是和zookeeper使用相同的Java语言 ,但有时候,已有的框架会使用其他语言,这里给出C/C++语言的客户端开发实例。 Zookeeper的环境搭建见上一篇《zookeeper探索(1)》。进入到目录zookeeper-3.4.8/src/c/,执行如下命令即可安装好Zookeep...zookeeper探索(1):初试
借用百度百科对zookeeper的介绍如下:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个简单的原语集,提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.8\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
对于并行处理的一点思考
最近一段时间,需要对一直进行维护的服务器后端模块从现有的单机较低并行程度改进升级,首先是提高单机并行化程度,其次从单机工作模式升级为多机分布式工作模式。 说到并行化,经常会想到相近的一个名词就是,并发 ; 并发是指在同一时间间隔内,同时运行多个任务; 并行是指在同一时刻内,同时运行多个任务; 在单核单处理上面执行这些指令时,可以首先将不相关的指令在短时间内依次执行,然后处理后续的指令;也就是时分复用处理器,同一时刻只有一条指令在执行,这叫并发,其实并发从硬件来说仍然是串行的,只是给人们(或者说使用者)的感觉是同时在执行,或者可以理解为伪并行; 在多核或者多处理的情况下,可以将不相...git hooks探索(3)
hooks实验
提交更新之后自动执行推送操作
客户端推送更新时自动更新服务端代码