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。它专注于
- 简单:可卷曲面向用户API (HTTP+JSON)
- 安全:可选的 SSL 客户端证书身份验证
- 快速:每个实例 writes/s 的基准测试 1000s
- 可靠:使用 Raft 正确分布
其中大部分似乎与 Amazon S3 通用(S3 不支持如此快速的访问。)
我知道这些产品非常好,因为大多数分布式开源产品都依赖于它们。但分布式开源产品选择它们的关键、独特功能是什么?
我认为您将类文件系统界面与实际文件系统混淆了。您提到的系统非常适合集群协调,尤其是 ZooKeeper。它们 而非 的设计目的是像文件系统那样存储大量数据。您应该认为它们更适合 协调 文件系统。也就是说,可以想象一个文件系统将文件路径存储在像 ZooKeeper 或 etcd 这样的一致存储中,而不是文件本身。它们公开类似文件系统的界面与任何存储文件的能力无关。实际上,这些系统旨在存储可保存在内存中的少量数据。通过使用像 ZooKeeper 这样的一致存储在分布式文件系统中存储文件信息,文件系统将确保客户端按顺序查看文件系统中的更改。
ZooKeeper 实际上是一组可以协调分布式系统的原语。与 ZooKeeper 协调分布式系统特别相关的是它的会话事件(watches),它允许客户端监听集群状态的变化。分布式系统通常在 ZooKeeper 中使用手表来处理锁之类的事情,而 ZooKeeper 强大的一致性保证使其非常适合这种用例。
如果您想了解 ZooKeeper 和 etcd 等系统的用途,您应该查看 Apache Curator recipes. Atomix 也实现了类似类型的 API,用于在共识算法之上协调分布式系统。所有这些工具都展示了基于共识的分布式系统的典型用例。
需要注意的重要一点是,这些类型的系统建立在共识算法之上,通常将状态存储在内存中。它们适用于涉及少量数据但需要高度一致性的操作,这就是为什么它们经常用于分布式锁定、配置管理和组成员资格等方面。
免责声明:我是 etcd 项目和 ZooKeeper 项目的新手。
我最近对分布式开源产品产生了兴趣。 我发现它们似乎需要配置(协调?)系统,例如用于 Presto DB 的 ZooKeeper,用于 kubernetes 的 Hive 和 Etcd,我认为理解 etcd 和 ZooKeeper 的作用是理解分布式系统的第一步。
但是现在,我有点迷路了。。。我还没有弄明白etcd和ZooKeeper有什么好的和独特的地方。他们为我寻找一个分布良好的键值存储或文件系统。 这是我对产品的印象。我知道印象并不能反映产品的特性。但我不知道我应该知道的剩余功能是什么。
ZooKeeper:根据 ZooKeeper 的概述页面,它保证了以下内容。
- 顺序一致性 - 来自客户端的更新将按发送顺序应用。
- 原子性 - 更新要么成功要么失败。没有部分结果。
- 单一系统映像 - 无论连接到哪个服务器,客户端都将看到相同的服务视图。
- 可靠性 - 应用更新后,它将一直持续到客户端覆盖更新。
- 及时性 - 系统的客户端视图保证在特定时间范围内是最新的。
顺序一致性和原子性是大多数文件系统不支持的独特功能,但其他功能在其他文件系统中很常见。
etcd:根据etcd的README。它专注于
- 简单:可卷曲面向用户API (HTTP+JSON)
- 安全:可选的 SSL 客户端证书身份验证
- 快速:每个实例 writes/s 的基准测试 1000s
- 可靠:使用 Raft 正确分布
其中大部分似乎与 Amazon S3 通用(S3 不支持如此快速的访问。)
我知道这些产品非常好,因为大多数分布式开源产品都依赖于它们。但分布式开源产品选择它们的关键、独特功能是什么?
我认为您将类文件系统界面与实际文件系统混淆了。您提到的系统非常适合集群协调,尤其是 ZooKeeper。它们 而非 的设计目的是像文件系统那样存储大量数据。您应该认为它们更适合 协调 文件系统。也就是说,可以想象一个文件系统将文件路径存储在像 ZooKeeper 或 etcd 这样的一致存储中,而不是文件本身。它们公开类似文件系统的界面与任何存储文件的能力无关。实际上,这些系统旨在存储可保存在内存中的少量数据。通过使用像 ZooKeeper 这样的一致存储在分布式文件系统中存储文件信息,文件系统将确保客户端按顺序查看文件系统中的更改。
ZooKeeper 实际上是一组可以协调分布式系统的原语。与 ZooKeeper 协调分布式系统特别相关的是它的会话事件(watches),它允许客户端监听集群状态的变化。分布式系统通常在 ZooKeeper 中使用手表来处理锁之类的事情,而 ZooKeeper 强大的一致性保证使其非常适合这种用例。
如果您想了解 ZooKeeper 和 etcd 等系统的用途,您应该查看 Apache Curator recipes. Atomix 也实现了类似类型的 API,用于在共识算法之上协调分布式系统。所有这些工具都展示了基于共识的分布式系统的典型用例。
需要注意的重要一点是,这些类型的系统建立在共识算法之上,通常将状态存储在内存中。它们适用于涉及少量数据但需要高度一致性的操作,这就是为什么它们经常用于分布式锁定、配置管理和组成员资格等方面。