一、概述
Etcd是由CoreOS构建的高可用key-value数据库,采用raft协议作为一致性算法,并且基于Go实现。
使用场景:处理数据都是控制数据,或者数据量很小、更新频繁的应用数据。主要用于共享配置与服务发现。
Etcd特点:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
- 安全:支持SSL证书验证
- 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
支持的能力:
- 提供存储以及获取数据的接口,它通过协议保证 Etcd 集群中的多个节点数据的强一致性。用于存储元信息以及共享配置。
- 提供监听机制,客户端可以监听某个key或者某些key的变更,用于监听和推送变更。
- 提供key的过期以及续约机制,客户端通过定时刷新来实现续约,用于集群监控以及服务注册发现。
- 提供原子的CAS(Compare-and-Swap)和 CAD(Compare-and-Delete)支持,用于分布式锁以及leader选举。
两个版本v2与v3
Etcd v2 和 v3 本质上是共享同一套 raft 协议代码的两个独立的应用,接口不一样,存储不一样,数据互相隔离。也就是说如果从 Etcd v2 升级到 Etcd v3,原来v2 的数据还是只能用 v2 的接口访问,v3 的接口创建的数据也只能访问通过 v3 的接口访问。
二、Etcd架构
介绍etcd前建议先了解raft协议:https://blog.csdn.net/qq_34924156/article/details/111589352
Etcd架构如下图所示:

- HTTP:是主要的对外接口,通信接口,节点直接的通信,客户端的交互等。
- EtcdServer:主要实现了raft相关功能与其他附加功能等
- FileSystem与Disk Driver:与文件系统等交互,不是重点
2.1 HTTP
http作为信息入口,是与外界通信的桥梁,提供客户端接口调用,也提供了节点间的交互通信。
其中客户端的接口调用可以通过http,也可以通过grpc。
节点之间的消息则主要是通过grpc传送,EtcdServer的Transport则是节点之间消息的主要处理场所。
2.2 EtcdServer
EtcdServer主要包括了raftNode、transport、kvstore。
(1)Raftnode 是raft节点,主要负责维护raft状态机的步进和状态迁移,还包括wal日志存储和快照等。
Wal日志:在raft中有介绍,日志条目是复制同步、状态机处理的基本单元,etcd的wal日志是二进制的,但可以解析为LogEntry,结构入下:

其中第一个字段type,只有两种,一种是0表示Normal,1表示ConfChange(ConfChange表示 Etcd 本身的配置变更同步,比如有新的节点加入等)。第二个字段是term,每个term代表一个主节点的任期,每次主节点变更term就会变化。第三个字段是index,这个序号是严格有序递增的,代表变更序号。第四个字段是二进制的data,将raft request对象的pb结构整个保存下。Etcd 源码下有个tools/etcd-dump-logs,可以将wal日志dump成文本查看,可以协助分析raft协议。
raft协议本身不关心应用数据,也就是data中的部分,一致性都通过同步wal日志来实现,每个节点将从主节点收到的data apply到本地的存储,raft只关心日志的同步状态,如果本地存储实现的有bug,比如没有正确的将data apply到本地,也可能会导致数据不一致。
(2)Transport 负责将消息同步到其他的副本。
(3)Kvstore是kv数据的存储引擎,在v3版本中支持多种存储引擎。
三、Etcd,Zookeeper,Consul对比
| 功能 | Consul | zookeeper | etcd |
| 服务健康检查 | 服务状态,内存,硬盘等 | (弱)长连接,keepalive | 连接心跳 |
| 多数据中心 | 支持 | 无 | 无 |
| kv存储服务 | 支持 | 支持 | 支持 |
| 一致性 | raft | paxos | raft |
| 使用接口 | http/dns | 客户端 | http/grpc |
| watch支持 | 全量/支持long polling | 支持 | 支持 long polling |
| 自身监控 | metrics | — | metrics |
| 安全 | acl /https | acl | https支持(弱) |
| spring cloud集成 | 已支持 | 已支持 | 已支持 |
功能上:
- Etcd 和 Zookeeper 提供的能力非常相似,都是通用的一致性元信息存储,在软件生态中所处的位置也几乎是一样的,可以互相替代。
- Etcd 和 Zookeeper 提供的是分布式一致性存储能力,具体的业务场景需要用户自己实现,比如服务发现,比如配置变更。而Consul 则以服务发现和配置变更为主要目标,同时附带了kv存储。
- 在软件生态中,越抽象的组件适用范围越广,但同时对具体业务场景需求的满足上肯定有不足之处。
性能上:etcd比Zookeeper更简单好用


本文详细介绍了etcd,一个由CoreOS构建的基于raft协议的高可用Key-Value数据库。它用于共享配置和服务发现,具备简单、安全、快速和可靠的特点。文章涵盖etcd的使用场景、特点、版本差异以及核心组件HTTP和EtcdServer的职责。此外,还对比了etcd、Zookeeper和Consul的功能和适用范围。
813

被折叠的 条评论
为什么被折叠?



