etcd 原理

etcd 原理

数据模型

etcd设计是可靠地存储经常更新的数据提供可靠的表的查询。etcd将键值对以前版本支持廉价的快照和监控历史事件(”time travel queries”)。一个持久的、多版本的并发控制数据模型非常适合这些例子。

etcd 存储数据在多版本中, 以 persistent key-value 方法进行存储。presistent key-value 存储方式, 当 value 更新了一个新数据时, 可以有效区分于之前版本的 key-value 对。key-value 存储实际上是不可变的,它的操作不会更新结构,而是总是生成一个新的更新结构。所有过去版本的 key 在修改后, 依旧可以访问和查询。为了防止数据存储随着时间的推移无限期地保持旧版本,数据存储可能会被压缩,以取代最古老版本的替代数据。

逻辑视图

该存储库的逻辑视图是一个平面二进制 key space。 key space 利用词汇分类方法存储数据, 按照 key 进行字节串方法存储索引, 因此对范围查询比较方便廉价。

key space 保留多个修订本。每个原子变化的操作(例如,事务操作可能包含多个操作)在 key 空间创建一个新的修订本。所有之前修订本的数据变得不可改变。旧版本的 key 仍然可以通过以前的修订本访问。同样,修订本也被编入索引,对于访问者, 修订本依旧有效。如果存储压缩以恢复空间,所有修订本在压缩之前都会被删除。

key 的声明周期可以被声明。每个 key 可以有一个或多个声明(generation)。key 的 generation 将会在创建 key 时候增量增加,generation 从1开始增加, 不会重复。删除密钥会生成一个密钥墓碑,从而结束 key 当前对应的 generation。 每次对 key 进行修改, 都会生成一个新的对应的 generation。一旦发生压缩,所有 generation 都会结束, 然后所有修订本都会删除, 所有 key-value 都只会保留最后一个版本的 value 值

物理视图

etcd 以 key-values 方法存储物理数据到一个持久的B树。每个修订本存储状态只包含从这个之前修订本有效的变量增量, 单个修订本可能对应于树中的多个 key。

key-value 对中的 key 包含三个元组信息 (major, sub, type)
major 存储修订本中的 key
sub 包含同一版本中的键值的区别
type 是特殊的 value 的可选后缀 (例如, 假如 value 包含了墓碑)
key-value 中的 value 包含了之前修订本的修改信息, 包含之前修订本的一个变量增量,
关键值对的关键是一个元组(主要,分型)。专业是商店改版,拿着钥匙。在同一版本中的键之间进行子差异。类型是特殊值的可选后缀(例如,如果值包含一个墓碑)。键值对的值包含来自以前修订的修改,因此是先前修订的增量。B树按字节顺序按键排序。可以通过变量增量快速查找变量增量;可以快速从一个特定的版本通过变量增量找到另外一个修改版本。压缩删除过期键值对。

etcd 保持从级别 btree索引到内存只能够, 以加快查询的键范围。 在 btree 中的 key 索引可以存储用于期待的索引, 对应的 value 是指向持久 btree 修改的指针。 压缩删除过期指针。

猜你喜欢

转载自blog.csdn.net/signmem/article/details/78849781