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