|
http://www.blogjava.net/BucketLi/archive/2010/12/21/341268.html
ZooKeeper 是一个精简的文件系统;一个高可用性的分布式文件系统。但是没有目录和文件。
用来提供协调服务的,服务分布应用的,而不是存储大量数据的【znode能存储的数据限制在1M内】;
ZooKeeper的数据访问是原子的。客户端要么读到所有数据,要么读取失败;写操作同样如此;因此,zookeerpr不支持追加操作。
znode以路径表示,必须是绝对路径,且不支持 ., .. 解析。
znode两种类型:短暂和永久,一旦创建,类型就不可修改;
znode顺序号,指znode名称后自动附上一个序号(前提是创建时候指定创建顺序node),这个顺序号是单调递增的,又父节点维护。
watcher:只触发一次,因此需要重新注册。读操作:exists,getData,getChildren上可以设置观察,之后可以被写操作create,delete,setData触发。
zookeeper的更新操作需要提供znode的版本号(可由exists方法获得)
zab: zookeeper atomic broadcast
当一台服务器出现故障,导致它的 一个客户端需要尝试连接集合体中其他的服务器时,所有滞后于故障服务器的 服务器都不会接受该连接请求,除非这些服务器赶上故障服务器。
所有读操作都是从zookeeper服务器内存中获取数据,且不参与写操作的全局排序。
客户度与任何一服务器建立连接,该服务器就为该客户度创建一个会话,会话是由timeout的,timeout会导致连接断开,短暂节点消失。不过正常情况下,会话空闲超过一定时间,客户端库会自动发ping数据。
客户端可以自动进行故障切换:从故障服务器切换到新的服务器,而且关键一点是,在新的服务器接替故障服务器后,所有的会话包括短暂znode仍然是有效的。
在故障切换过程中,应用程序将收到断开连接和连接至服务的通知。当客户端断开 连接时,观察通知将无陆发送 z 但是当客户端成功恢复连接后,这些延迟的通知会 被发送。当然,在客户端重新连接至另一台服务器的过程中,如果应用程序试图执 行一个操作,这个操作将会失败。
应用场合: 配置服务(watcher),分布式锁(顺序短暂znode)
|
|
|