ETCD
- 是分布式一致性的键值对存储系统。
- 适用于存储分布式系统中的控制数据或少量变更频繁的应用数据。
- Go开发,Apache开源协议。
- 特点:
- 简单:基于 HTTP+JSON 的 API,用 curl 命令就可以使用。
- 安全:可选SSL认证机制。
- 快速:官方给的 QPS 测试数据相对较高。
- 可信:使用 Raft 算法实现分布式一致性。
- 适用场景:
- 服务发现。
- 消息发布与订阅。
- 负载均衡。
- 分布式锁,分布式队列
- 业界应用:
- k8s使用etcd存储docker集群的配置信息。
- apisix使用etcd存储配置信息。
- etcd对比zookeeper:
- 一致性协议:etcd使用raft,zk基于paxos,raft更简单。
- 运维:etcd容易,zk难。
- 社区活跃度,etcd比较活跃。
- api:etcd提供 http+json,gRPC接口,zk 需要使用客户端。
- 安全:etcd支持ssl,zk不支持。
- etcd对比redis:
- 定位不同,etcd目标是分布式系统配置数据一致性,redis目标是内存数据库。
- 数据持久性:前者可以确保数据不丢失,后者虽然也提供持久化机制但极端场景仍然会丢失。
- 数据一致性:前者通过raft保证分布式各节点强一致性,后者属于单一结点设计,仅支持主从复制不支持强一致性。
- 数据类型和模型:前者模型相对简单,后者提供复杂结构适应更多场景。
- etcd 的 watch 原理:
- v2:使用 HTTP1协议,每一个 Watcher 对应一个TCP长连接,通过轮训来获取最新的变化事件。
- v3:基于 HTTP2的 gRPC 自己双向流的 WatchAPI,服务端向客户端流式推送。