一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
ETCD 常用术语
| 术语 | 描述 | 备注 |
|---|---|---|
| Raft | etcd实现一致性的核心 | etcd有etcd-raft模块 |
| Follower | Raft中的从属节点 | 竞争leader失败 |
| Leader | Raft中的领导协调节点 | Leader 节点协调整个集群 |
| Candidate | 候选节点 | 当Follower接受Leader节点的消息超时会转变为Candidate |
| Node | Raft 状态机的实例 | Raft 中涉及多个节点 |
| Member | etcd实例,管理着对应的Node节点 | 可处理客户端请求 |
| Peer | 同一集群中的另一个Member | 其他成员 |
| Cluster | etcd集群 | 拥有多个etcd Member |
| Lease | 租期 | 关键设置的租期,过期删除 |
| Watch | 检测机制 | 监控键值对的变化 |
| Term | 任期 | 某个节点成为Leader,到下一次竞选的时间 |
| WAL | 预写式日志 | 用户持久化存储的日志格式 |
| Client | 客户端 | 向etcd发起请求的客户端 |
ETCD 核心架构
-
etcd 是云原生架构中的存储基石,可以有效保证数据的一致性和可靠性。
-
etcd 内存实现机制复杂,但是对外提供了简单直接的api接口
-
使用etcd的常见分布式场景包括键值对的存储,服务注册与发现,消息订阅与发布,分布式锁等等
ETCD 组件架构
| 包名 | 用途 |
|---|---|
| auth | 访问权限 |
| client/clientv3 | Go语言客户端SDK |
| embed | 主要是etcd的config |
| etcdmain | 入口程序 |
| etcdctl | 命令行客户端实现 |
| etcdserver | server主要的包 |
| functional/hack | CMD、Dockerfile 之类的杂项 |
| integration | 和etcd集群相关 |
| lease | 租约相关 |
| mvcc | etcd的底层存储,包含Watch实现 |
| pkg、proxy | etcd使用的工具集合 |
| raft | raft算法模块 |
| wal | 日志模块 |
| scripts/security/tests/tools/version | 脚本、测试等相关内容 |
- client 层:etcd 的客户端
- API 接口层:提供了客户端访问服务端的通信协议和接口定义以及服务端节点之间相互通信的协议,通过gRPC-gateway提供REST ful 代理,转换HTTP/JSON请求为gRPC的Protocol Buffer格式的消息。
- etcd Raft层:负责Leader选举和日志复制等功能。
- 逻辑层:包括鉴权,租约,KVserver,MVCC和Compactor压缩等核心功能特点。
- etcd存储:实现了快照,预写式日志WAL(Write Ahead Log)