Willson Chen

Stay Hungry, Stay Foolish.

ETCD

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,服务端向客户端流式推送。