`

zookeeper features(summary)

阅读更多

**refer to zookeeper 3.2.2**

zookeeper 利用场合:

a.全局配置服务.

其实相当于是利用了zk的高可用性和快速访问的特点,可以将某些全局属性置于其中,当然 由于每个znode是1m存储上限,所以不能是大量的数据.事实上,可以把zk看成是高可用的文件系统也是可以的(high available file system)

 

b.锁服务

由于zk有EPHEMERAL_SEQUENTIAL创建znode的模式,所以当加入 一个新node时,自动在后缀加1;同时由于是ephemeral的,即便lock znode死了,其它znodes也可以重新进行leader election。

 

c.队列 管理

与b相似

 

d。统一命令服务

就是利用了它的树型目录结构的特点,产生唯一的名称。可以在建立znode时指定

 

---------------------

 

1.写流程



 从以上图可以看出,当client要写操作时,

a)通过已经连接上的follow(也可能是leader)生成一个Request,然后有一串的RequestProcessors传递,直到递到leader;

b1)leader此时开始2pc中的first phase:vote_request,

b2)各followers接受到vote_request后,进行决择 是否可以提交,返回 vote_commit或vote_abort;

--以上b为表决 阶段

c1)当leader收集到所有的表决 結果后进行分析 ,如果 commit人数大于指定quorum便生成一个global_commit,否则生成一个global_abort,transform to all flowers

c2)当所有followers收到leader命令后进行相应 操作,commit or abort 。

--以上c为决定阶段

  这样就 构成 一个distributed transaction commit 了。当然 实现上可能不至于这么简单。

  可以看出2pc无非就是比较1pc比了b phase,所以是比它安全多了,减少了不一致的概率。当然 ,2pc也可能出现 当global message传递时再现1pc中的情况,但按照概率 的理论,如果 cluster environment比较稳定时效果是理想的。

  当然为了防止leader失效时follower不知所措的情况,zookeeper实现为让followers自己重新elect,其实这也是3pc的实现呀!!

 

 置于具体的更新 过程,当follower收到global后,先是进行disk上的update,然后再对znode trees in memory 进行update.

 

 

2.读流程

  由于client已经连接上了follower,所以读取时直接从当前 peer上读取即可,这就是本页中 为什么可以快速访 问的原因 之一了。

当然它的过程与wite时是相反的,query from memory only .

 

 

3.zookeeper中的watch分为zookeeper status event 和 znode events,其中这些events都 是一次性的。即想要获得下次的event必须要调用读取方法时加入watch或true参数。

 

 

 

4.zk中的znode data也是有版本的:

[zk: localhost:2181(CONNECTED) 1] get /test
b
cZxid = 871
ctime = Wed May 25 14:45:32 CST 2011
mZxid = 880
mtime = Wed May 25 15:40:55 CST 2011
pZxid = 871
cversion = 0
dataVersion = 4

其中dataVersion就是真正的版本号,每次修改加1.在命令行中set path data [version]时,version就是此版本,如果 指定的版本与最新 版本不匹配时,将产生错误;置于api中setData(path,value,version)没试过,估计也是此意,此时-1代表忽略版本号。

 

 

5.簡易

zookeeper形如一个文件系统,高度精简。

 

6.decouple

类似spring ioc一样,zookeeper是独立运行的一个组件,可以置于项目中,也可以单独成群。

 

7.high avaiable

因为所有的server都是peer的运行在replicated mode中,避免了single point failure

 

8.快速访问capacity

由于读取直接从内存副本中直接 读取,避免了直接access disk的io开销

 

 

9.zk怎样实现广播式移除一个peer node?

参见 zab

 

10.zk怎样实现监听?

thread,http?

 

 

 

see also :http://leibnitz.iteye.com/blog/908805

http://zookeeper.apache.org/doc/r3.2.2/zookeeperOver.html

 

  • 大小: 102 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics