ZooKeeper和Etcd有多好?

6
免责声明:我对etcd项目和ZooKeeper项目都还很陌生。
我最近开始对分布式开源产品感兴趣。我发现它们似乎需要像Presto DB、Hive的ZooKeeper以及Kubernetes的etcd这样的配置(协调?)系统。我认为了解etcd和ZooKeeper的作用是理解分布式系统的第一步。
但现在,我感到有些迷失……我还无法理解etcd和ZooKeeper的优点和独特之处。它们对我来说只是良好分布式的键值存储或文件系统。以下是我对这些产品的印象。我知道这些印象并不反映产品的特性,但我不知道我应该了解哪些其余特性。
ZooKeeper:根据ZooKeeper概述页面,它保证以下事项:
- 顺序一致性 - 客户端的更新将按照发送的顺序应用。 - 原子性 - 更新要么成功要么失败。没有部分结果。 - 单一系统镜像 - 客户端将看到与其连接的服务器相同的服务视图。 - 可靠性 - 一旦应用了更新,它将从那时起持续存在,直到客户端覆盖更新。 - 实时性 - 客户端对系统的视图保证在某个时间范围内是最新的。
顺序一致性和原子性是独特的特性,大多数文件系统不支持,但其他特性在其他文件系统中很常见。
Etcd:根据etcd的README,它专注于以下内容:
- 简单:curl'able用户界面API(HTTP+JSON) - 安全:可选的SSL客户端证书身份验证 - 快速:每个实例测试了1000次写入/秒 - 可靠:使用Raft正确分布
其中大多数似乎与Amazon S3相同(S3不支持这样快速的访问)。
我知道这些产品都非常优秀,因为大多数分布式开源产品依赖它们。但是,分布式开源产品选择它们的关键、独特特点是什么?

我建议您也将此发布到邮件列表中(我假设有一个)。 - DavidS
1个回答

10
我认为你将类似文件系统的接口与实际文件系统混淆了。你提到的这些系统非常适合于集群协调,特别是ZooKeeper。它们不适用于像文件系统一样存储大量数据。你应该将它们看作更适合于协调文件系统。也就是说,可以想象一个文件系统将文件路径存储在像ZooKeeper或etcd这样的一致性存储中,但不包括文件本身。它们展示的类似文件系统的接口并不意味着它们有存储文件的能力。事实上,这些系统被设计用于存储可以保存在内存中的少量数据。通过在分布式文件系统中使用像ZooKeeper这样的一致性存储来存储文件信息,文件系统可以确保客户端按顺序查看文件系统中的更改。
ZooKeeper实际上是一组基元,用于协调分布式系统。与ZooKeeper协调分布式系统相关的特别是其会话事件(监视器),允许客户端监听群集状态的变化。分布式系统通常在ZooKeeper中使用监视器来进行锁定等操作,而ZooKeeper的强一致性保证使其完全适用于该用例。
如果你想了解ZooKeeper和etcd等系统的用途,可以查看Apache Curator recipesAtomix还实现了类似类型的API以协调共识算法上的分布式系统。所有这些工具都展示了基于共识的分布式系统的典型用例。
需要注意的是,这些类型的系统建立在共识算法之上,并且通常将状态存储在内存中。它们适用于涉及少量数据但需要高度一致性的操作,因此经常用于分布式锁定、配置管理和组成员身份验证等方面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接