Etcd
Etcd 是一个分布式键值存储系统,用于可靠地存储和检索数据。它是由 CoreOS 开发并开源的,现在是 Cloud Native Computing Foundation(CNCF)的一个孵化项目。
Etcd 提供了一个简单的接口,允许应用程序以键值对的形式存储和检索数据。它的设计目标是提供高可用性、一致性和分布式的数据存储解决方案。
Etcd 的主要特点包括:
分布式存储:
Etcd使用Raft一致性算法来实现数据的分布式存储。它将数据分布在多个节点上,以提供高可用性和容错性。强一致性:
Etcd保证在分布式环境下的强一致性。它使用Raft算法来确保数据的一致性和可靠性,即使在节点故障或网络分区的情况下也能保持数据的一致性。高可用性:
Etcd支持多节点部署,可以容忍节点故障。当节点发生故障时,Etcd会自动进行故障转移,保证数据的可用性。监视和通知:
Etcd提供了监视功能,可以监视指定键的变化,并在变化发生时发送通知。这使得应用程序可以实时获取数据的变化。安全性:
Etcd支持基于TLS的安全通信,并提供访问控制机制,可以限制对数据的访问和操作。
TIP
Etcd 在分布式系统中有广泛的应用,特别是在容器编排系统(如 Kubernetes)中被广泛使用,用于存储和共享集群的配置信息、服务发现和状态信息等。它提供了一个可靠和高效的分布式存储解决方案,为构建可扩展的分布式应用程序提供了支持。
Etcd 保证数据一致性
Etcd 通过使用 Raft 一致性算法来保证数据的一致性。 Raft 是一种分布式一致性算法,它将集群中的节点分为Leader、Follower和Candidate三种角色,通过选举机制选出Leader节点来处理客户端的请求。
当客户端向Etcd发送写请求时,Leader节点会将该请求复制到其他节点的日志中,并等待大多数节点确认接收到该日志条目。一旦大多数节点确认接收到该日志条目,Leader节点会将该请求应用到自己的状态机中,并将结果返回给客户端。同时,Leader节点会通知其他节点将该请求应用到自己的状态机中。
如果Leader节点失去连接或崩溃,剩余的节点会通过选举机制选出新的Leader节点。新的Leader节点会根据自己的日志和其他节点的日志进行比较,保证自己的日志是最新的,并将缺失的日志条目复制给其他节点,以保持数据的一致性。
通过Raft算法,Etcd能够保证数据在集群中的一致性,并且在Leader节点失效时能够快速选举出新的Leader节点,保证系统的可用性和数据的一致性。
可运行最小实验:把 revision 当作门卫
下面的纯 Go 模型不依赖 Etcd 服务,只演示“带版本写入”的核心思想;它不是对 Raft 的缩水实现。真正接入 Etcd 时,还要观察租约、watch、线性读和集群故障。
package main
import "fmt"
type Store struct {
value string
revision int64
}
func (s *Store) PutIfRevision(expected int64, value string) bool {
if s.revision != expected {
return false
}
s.value = value
s.revision++
return true
}
func main() {
store := Store{value: "v1", revision: 7}
fmt.Println(store.PutIfRevision(7, "v2"), store.value, store.revision)
fmt.Println(store.PutIfRevision(7, "v3"), store.value, store.revision)
}运行 go run main.go,预期输出 true v2 8 与 false v2 8。第二次写入失败不是服务闹脾气,而是版本条件保护了并发更新。
深入检查:把两个客户端的 expected revision 都设为 7,证明只有一个能成功;再设计租约过期、watch 断线和 leader 切换时的恢复记录。
练习:把「Etcd」变成可验证能力
- 从本文任选一个示例,在可丢弃环境重跑;记录运行时/服务版本、输入、关键输出和清理动作。
- 保持其他条件不变,只制造一个边界:空值、重复请求、并发、超时、断连、权限不足或资源耗尽。
- 用四句话复盘:现象是什么、原理在哪一层、证据是什么、生产中如何止损。
验收清单
- [ ] 示例能从空环境重复执行,必要依赖和版本已写明。
- [ ] 同时保留成功路径与至少一个失败路径,不用“应该没问题”冒充证据。
- [ ] 结论写明适用边界,并能链接回对应学习路线的能力域。
- [ ] 练习结束后已清理临时数据、凭据、端口或进程。
对照 中间件练习答案与复盘尺。先交自己的证据再翻答案;答案是镜子,不是传送门。