ZooKeeper 和 Etcd 有多好?

How good are ZooKeeper and Etcd?

免责声明:我是 etcd 项目和 ZooKeeper 项目的新手。

我最近对分布式开源产品产生了兴趣。 我发现它们似乎需要配置(协调?)系统,例如用于 Presto DB 的 ZooKeeper,用于 kubernetes 的 Hive 和 Etcd,我认为理解 etcd 和 ZooKeeper 的作用是理解分布式系统的第一步。

但是现在,我有点迷路了。。。我还没有弄明白etcd和ZooKeeper有什么好的和独特的地方。他们为我寻找一个分布良好的键值存储或文件系统。 这是我对产品的印象。我知道印象并不能反映产品的特性。但我不知道我应该知道的剩余功能是什么。

ZooKeeper:根据 ZooKeeper 的概述页面,它保证了以下内容。

顺序一致性和原子性是大多数文件系统不支持的独特功能,但其他功能在其他文件系统中很常见。

etcd:根据etcd的README。它专注于

其中大部分似乎与 Amazon S3 通用(S3 不支持如此快速的访问。)

我知道这些产品非常好,因为大多数分布式开源产品都依赖于它们。但分布式开源产品选择它们的关键、独特功能是什么?

我认为您将类文件系统界面与实际文件系统混淆了。您提到的系统非常适合集群协调,尤其是 ZooKeeper。它们 而非 的设计目的是像文件系统那样存储大量数据。您应该认为它们更适合 协调 文件系统。也就是说,可以想象一个文件系统将文件路径存储在像 ZooKeeper 或 etcd 这样的一致存储中,而不是文件本身。它们公开类似文件系统的界面与任何存储文件的能力无关。实际上,这些系统旨在存储可保存在内存中的少量数据。通过使用像 ZooKeeper 这样的一致存储在分布式文件系统中存储文件信息,文件系统将确保客户端按顺序查看文件系统中的更改。

ZooKeeper 实际上是一组可以协调分布式系统的原语。与 ZooKeeper 协调分布式系统特别相关的是它的会话事件(watches),它允许客户端监听集群状态的变化。分布式系统通常在 ZooKeeper 中使用手表来处理锁之类的事情,而 ZooKeeper 强大的一致性保证使其非常适合这种用例。

如果您想了解 ZooKeeper 和 etcd 等系统的用途,您应该查看 Apache Curator recipes. Atomix 也实现了类似类型的 API,用于在共识算法之上协调分布式系统。所有这些工具都展示了基于共识的分布式系统的典型用例。

需要注意的重要一点是,这些类型的系统建立在共识算法之上,通常将状态存储在内存中。它们适用于涉及少量数据但需要高度一致性的操作,这就是为什么它们经常用于分布式锁定、配置管理和组成员资格等方面。