1. zookeeper: 高可用性的分布式协调服务
分布式困难在于部分失败:消息传递过程中,到底接收方收到与否,无法确定下来,才有了tcp协议的3次握手这样比较复杂的协议
2. zk的实例
可以讲zk看成是一个文件系统,这个文件系统文友目录跟文件,只有 节点的概念,znode这个节点既可以看做是一个service,包括db实例,thrift service,也可以看做是一个保存其他service的容器,所有的这些znode 构成了一个tree型的结构,而基本的zk操作就是在这些节点上面进行的,包括 create 组,删除组,加入组,列出组的成员等
关于znode:有2中不同的类型,短暂的和永久的,短暂的在一次客户端创建组的会话中保持,当会话断开后,这个znode就结束了,被zk删除,而永久的znode一直存在
3. 每个znode有一个与之关联的ACL,zk用来协调服务而不是存储数据的,所有每个znode的大小不能超过1m,对于znode 的访问具有原子性
znode创建的时候可以指定顺序号,有顺序号的znode,可以有相同的名字
4. 观察机制
znode节点上发生变化时,可以通知其他的客户端,eg是 一个客户端调用了zk的exists查看当前tree中是否有某个znode,同时在上面设置一个观察,当其他客户端创建这个znode后,便可以通知这个客户端了,可以再读操作上设置观察(exists,getData,getChildren),写操作上触发观察(create,setData,delete)