前言

在开始看代码之前,我们先要对 etcd 的整体架构和功能有一个基本认识,从而能进一步窥探作者的设计思路,其中文档是我们很好的切入点。etcd 官方在 learning 文档中,详细说明了 etcd 的设计初衷,数据模型,api 的设计。

关键词

snapshot key range revision generation b+tree compact

Why

etcd 的名字由来是结合了 unix 中存放配置文件的 "/etc" 目录和 "d"istributed system(分布式系统)的含义,表示一个分布式的配置数据库。

etcd 的设计初衷是想为更新频率不高的数据创造可靠的存储,并提供用户持续 watch 数据变化的能力。etcd 可以看做是一个多版本一致性的 kv 存储数据库。它保留了数据的多个版本,从某种意义上来说可以认为它的数据是不可变的,因为它并没有修改旧的数据,而是每次更新都创建了一个新的版本。所以当数据修改后,旧版本的数据仍然可以被访问到。etcd 为了防止数据量无限增加,使用了 snapshot 技术对数据进行压缩,过旧的版本会被 snapshot 取代。


术语

术语表


Etcd 特性

原子性 - Atomicity

所有的 api 请求都是原子的,一个 operation 要么全部完成要么全部失败。对于 watch 来说,一个 operation 产生的所有 events 都会在一个 response 中返回

一致性 - Consistency

所有的 api 请求都保证是顺序一致性的。

隔离性 - Isolation

etcd 保证是 serializable isolation,这是分布式系统中最高等级的隔离性。读操作永远不会读到中间状态。

持久化 - Durability

所有已经完成的 operation 都是持久的,所有可以被访问到的数据都是已经被持久化的数据。读操作不会读到未持久化的数据。