本文主要介绍 etcd 能解决什么问题,哪些大型项目使用了 etcd,以及 etcd 社区的情况。

初识 etcd

我是在一个项目文档上看到 etcd 的,当时还不了解 etcd 是做什么的。

看到 etcd 这个名字的时候我就在想,为什么叫 etcd 呢?好眼熟啊,etcd 拆分一下就是 etc 和 d,etc 不由得让我联想到了 Linux,在 Linux 系统中 etc 文件夹下通常放配置相关的文件,那么 d 呢?d 是什么意思?

查阅了 etcd 的官方文档,发现 d 代表 distributed。

"etcd"这个名字源于两个想法,即 unix "/etc" 文件夹和分布式系统"d"istributed。 "/etc" 文件夹为单个系统存储配置数据的地方,而 etcd 存储大规模分布式系统的配置信息。因此,"d"istributed。 的 "/etc" ,是为 "etcd"。

原来如此。

etcd 的功能

etcd 是一个基于Raft 算法分布式键值对存储,用来保存关键数据并提供访问。

Raft 算法是分布式系统中非常经典的一个算法,Raft 算法能解决分布式系统中选主、同步、一致性等问题,更多请查阅 Raft 算法

所以 etcd 除了存储以外,还能提供选主、同步等一系列功能,可以使用 etcd 做服务注册与发现、消息订阅发布、协调分布式工作等。

能够解决分布式常见问题的工具不止 etcd,还有 ZooKeeper、Consul,以下是 etcd、ZooKeeper、Consul 的对比.(来自 etcd 文档)

image.png

在了解 etcd 的过程中发现,K8S、TiCDC、Apache APISIX 都用到了 etcd。

Kubernetes

Kubernetes 将配置数据存储到 etcd 中,用于服务发现和集群管理;etcd 的一致性对于正确调度和操作服务至关重要。Kubernetes API 服务器将集群状态持久化到 etcd 中。它使用 etcd 的 watch API 来监控集群并推出关键的配置更改。

TiCDC

TiCDC 是一款通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具,具有将数据还原到与上游任意 TSO 一致状态的能力,同时提供开放数据协议 (TiCDC Open Protocol),支持其他系统订阅数据变更。

image.png

架构中的 PD 是使用 etcd 实现高可用。更多请查阅TiCDC 文档

Apache APISIX

Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

image.png

架构中使用 etcd 做配置存储,实现动态扩容等。更多请查阅Apache APISIX 文档

etcd 社区

etcd 是一个开源项目,最后聊聊 etcd 的社区。

image.png

etcd 目前最新版本是 v3.5.0,通过 Github 上 Insights 看板发现社区并不活跃,近一个月只合并了 13 个 PR,开放的 issue 有 150+,大多是 bug 等反馈,处理速度也比较慢。

2019 年 ~ 2020 年还开放了社区会议,不过目前没有更新了。

总的来说 etcd 社区并不活跃。

总结

对 etcd 有了初步的认识,了解了 etcd 能解决什么问题,哪些大型项目使用了 etcd,以及 etcd 社区的情况。