我刚接触zookeeper和分布式系统,正在自学。
目前我所理解的是,ZooKeeper只是一个键值存储器,其键为路径,值为字符串,这与Redis等其他键值存储器没有什么不同。(显然,在Redis中我们也可以使用斜杠分隔的路径作为键。)
那么我的问题是,ZooKeeper和其他分布式键值存储器之间的本质区别是什么?为什么ZooKeeper要将所谓的“路径”用作键,而不是简单的字符串?
我刚接触zookeeper和分布式系统,正在自学。
目前我所理解的是,ZooKeeper只是一个键值存储器,其键为路径,值为字符串,这与Redis等其他键值存储器没有什么不同。(显然,在Redis中我们也可以使用斜杠分隔的路径作为键。)
那么我的问题是,ZooKeeper和其他分布式键值存储器之间的本质区别是什么?为什么ZooKeeper要将所谓的“路径”用作键,而不是简单的字符串?
你正在将ZooKeeper的高级数据模型与其他键值存储进行比较,但这并不是它独特的地方。从分布式系统角度来看,ZooKeeper与许多其他键值存储(特别是Redis)不同,因为它具有强一致性并且可以容忍大多数群集连接的故障。此外,虽然数据保存在内存中,但它会被同步复制到大多数集群并备份到磁盘,因此一旦写入成功,就保证不会丢失该写入(除非遭受导弹攻击)。这使得ZooKeeper非常适合存储像配置之类的关键状态的少量信息。
相反,Redis不是分布式系统,也没有提供与ZooKeeper相同类型的保证。许多其他分布式键值存储都是“最终一致”的。换句话说,没有保证一旦写入一个值,所有分布式系统中的其他进程都可以看到那个值。
最后,除了用于存储状态的类似文件系统的接口外,ZooKeeper还提供了相当低级别的功能,可以解决更复杂的问题。例如Apache Curator。Curator使用ZooKeeper的临时节点(由创建它们的客户端断开连接时消失的节点)构建锁和领导者选举等东西,这对于协调分布式系统非常有用。因此,从那个角度来看,ZooKeeper的数据模型和相关功能可以作为构建分布式协调的更高级别工具的原语。
etcd
有何区别?我的理解是etcd
也可以做到这一点。 - Joshetcd
不也是容错的吗?而且 etcd
也将数据(即日志)存储到磁盘上了吧? - Josh