Zookeeper是一个为分布式应用服务的分布式协作服务:
应用程序可以使用它的服务来同步,维护配置,分组和命名
设计目标:
- 简洁:分布式程序可以通过namespace协作,zookeeper的数据是存在内存中的,所以可以实现高吞吐和低冗余
- 重复:zookeeper在一组主机(ensemble)上被复制
这些server彼此知道,Clients连在Server上,并维持一个TCP连接:发送请求、接受回应、查看事件、发送心跳。如果一个server掉线,它的Clients会连接到别的Servers - 有序:每个zookeeper stamp更新一个代表所有交易顺序的数字
- 快速:zookeeper在读取:写入速率 = 10:1时最快
树状结构:
每个节点是一个znode,由路径标识
Znode维护了数据变更的版本号,ACL变化,时间戳
Znode里的数据自动读写,读时会获取到所有的数据,写时会替换所有的数据
临时节点随session创建和销毁
update和watch:
客户端可以watch znodes,当znode改变时watch会被触发和移除
APIs:
- create:在树中创建一个节点
- delete:删除一个节点
- exists:测试一个节点在某地是否存在
- get data:从一个node获取数据
- set data:给node写数据
- get children:获取一个节点的子节点
- sync:等待数据propagate
Replicated Database是一个在内存中并包括整棵树的数据库,更新会写入disk,写入也会在存入内存数据库之前序列化到disk
性能调优:
多读少写!