概要
是什么:ZooKeeper是一个分布式系统的基础构件(协调内核),分布式应用(如RocketMQ)可以使用ZooKeeper来处理分布式系统协同的各个方面,比如可以使用它来实现leader选举、分布式锁等等,分布式应用可以使用它暴露的API实现各种类型的协同原语(考虑Java中的AQS)。它让分布式应用的设计者无需考虑分布式系统中各种繁杂的问题,如网络分区、节点故障等等,专注于实现应用的逻辑。
API结构:ZooKeeper提供给应用的API是类似文件系统的层级结构对象,并且这种对象是无等待的(wait-free)。
ordering:单客户端所有操作FIFO,所有客户端的所有写入操作全局线性(Linearizable)。
管道设计:ZooKeeper在对请求的处理上使用了管道设计,这使得客户端的请求可以异步化,并且天然满足单客户端操作的FIFO特性
ZAB:基于leader的原子广播协议,用于处理所有的写请求。可以将它理解为一种只针对于写请求的复制状态机(思考raft),也就是说写请求是leader处理并复制到所有follower的,而对于读请求,ZooKeeper会在节点本地处理,不管它是不是leader(但这里想要保证不back-in-time,不读到过时数据,还要有其它保证)
Watch与缓存:ZooKeeper提供了Watch机制,这使得客户端可以无需直接地管理缓存,而是会在一个内容发生改变后得到通知。这里论文中还提到了Chubby,它的设计就是让客户端直接管理缓存,在这种设计下一旦缓存发生变化,就要阻止更新,失效所有相关客户端的缓存,慢客户端或者已经失效的客户端会将更新阻塞。Chubby使用lease机制来避免永久性的阻塞,保证集群的活性。
标签:缓存,请求,18205343,ZooKeeper,笔记,分布式系统,leader,客户端 From: https://www.cnblogs.com/lilpig/p/18205403