分类: Java
2011-08-29 16:24:27
zookeeper的一些处理原则
1.可靠 delivery
如果消息m被一台服务器delivered,它会被所有服务器delivered
2.完全有序
如果消息a在一台服务器上先于消息b被delivered,在所有服务器上都保持这个顺序
3.因果顺序(causual order)
消息的发送顺序决定了消息的顺序
-- zookeepker使用TCP,下列几个特性依赖TCP的特性
(与同类系统容忍丢包和乱序不同,zookeepker假定所有servers建立在 p2p的FIFO通道上)3
4.有序delivery(Ordered delivery)
5.FIFO channel一旦关闭,就不能发送任何信息
6.发送消息包括两个阶段
* Leader activation :本阶段会推选一个leader,并建立系统状态和次序,准备好发送proposal
* Active messaging :本阶段leader会接收message,并协调系统中message的传送
7.Leader activation
包括Leader election,其有两个算法,LeaderElection和FastLeaderElection(AuthFastLeaderElection是其变种,是一种简单的授权以防止IP欺骗的election方式)
但ZooKeeper messaging不关注election算法,而
* leader获取到所有followers中的最大zxid (必要条件)
* 一定量的servers已经follow这个leader
在election过程中或完成后,有较多服务器断开,则会重新进行election
所有follower会连接到leader
8.Active Messaging
* leader以FIFO方式给所有Followers发送message,Followers按顺序存储和执行
* 当Followers收到message后,要返回一个ack给leader
* 当leader收到quorum Followers的 ack后,会发送一个COMMIT
zxid ZooKeeper Transaction id,所有proposal都有唯一标识其和其顺序的zxid
目前为64位表示一个zxid(epoch, count).,高32位为epoch,低32位为counter
epoch与一个leader关联,新leader有新epoch号
packet 由FIFO channel发送的字节数据
proposal 一种约定(在所有zookeepker服务器之间),一般带有message(NEW_LEADER类型的不带message)message 原子广播包,需放入 proposal或agreed才能发送