源码地址:https://github.com/etcd-io/etcd

1、目录结构(旧版):

  • raft: Raft 协议的核心实现,其中只实现了基本的 Raft 协议,井未提供实现网络层相关的内容 。

  • raft-http: Ra负协议中 各个节点发送消息时使用的网络层实现,该模块与 raft 模块紧密相关 。

  • wal 和 snap: WAL 日志和快照存储相关的实现。

  • store: etcd 中的 v2 版本存储实现, v2 版本的存储是完全的内存实现。

  • mvcc :etcd 中的 v3 版本存储实现, v3 版本的存储底层使用 BoltDB 实现持久化存储 。

  • lease : 租约相关的实现 。

  • auth 和 alarm : 权限和报警相关的实现 。

  • etcdserver: etcd 服务端实现,它会基于上述模块提供的功能,对外提供一个 etcd 节点的完整功能。

  • client: v2 版本客户端的具体实现, v2 版本的客户端是通过 HTTP+JSON 的方式与服务端进行交互的。

  • clientv3: v3 版本客户端 的具体实现, v3 版本的客户端是通过 GRPC 的方式与服务端进行交互的。

2、etcd 3.5版本后,开始被组织成多个 golang 模块 托管在 单个存储库

有以下模块:

  • go.etcd.io/etcd/api/v3 - 包含 API 定义 (如原型和原型生成的库)定义通信协议 在 etcd 客户端和服务器之间。

  • go.etcd.io/etcd/pkg/v3 - etcd 使用的实用程序包集合 不特定于 etcd 本身。 包裹属于这里 仅当将来可能将其移出到自己的存储库中时。 请避免在此处添加本身具有很多依赖性的代码,因为 它们自动成为客户端库的依赖项 (我们希望保持轻量化)。

  • go.etcd.io/etcd/client/v3 - 用于联系 etcd 的客户端库 网络(grpc)。 推荐用于 etcd 的所有新用法。

  • go.etcd.io/etcd/client/v2 - 用于联系 etcd 的遗留客户端库 通过 HTTP 协议。 已弃用。 所有新用法都应依赖于 /v3 库。

  • go.etcd.io/etcd/raft/v3 - 分布式共识的实现 协议。 应该没有 etcd 特定代码。

  • go.etcd.io/etcd/server/v3 - etcd 实现。 此包中的代码是 etcd 内部的,不应使用 通过外部项目。 包布局和 API 可以在次要版本中更改。

  • go.etcd.io/etcd/etcdctl/v3 - 一个用于访问和管理 etcd 的命令行工具。

  • go.etcd.io/etcd/tests/v3 - 一个包含 etcd 所有集成测试的模块。 注意:所有单元测试(快速且不需要跨模块依赖) 应该保存在本地模块中以供测试下的代码使用。

  • go.etcd.io/bbolt - 持久 b 树的实现。 托管在单独的存储库中: https://github.com/etcd-io/bbolt

作者:joker.liu  创建时间:2023-05-17 10:49
最后编辑:joker.liu  更新时间:2023-05-17 11:27