ETCD 源码学习--简述(一)

前段时间认真学习了 ETCD 源码实现,往后的一段时间,会陆陆续续的写一些学习记录。

ETCD 的使用方法、用途等,可以通过 Google 或者百度查询,这里只是记录源码相关的学习,如有错误,欢迎指正。

本章主要介绍 ETCD 的主要几个组成部分。

ECTD主要包括以下几个部分:

Storage

存储包括两部分组成,内存和磁盘。

index:键值索引(MVCC 多版本控制)

kv:原始键值对(MVCC 多版本控制)

snaphot:数据快照

metadata:元数据,主要记录当前节点的状态信息。

ETCD 源码学习--简述(一)

 

Transport

Transport 主要实现数据传输,其中包括两种传输方式,一是长连接(数据传输完成不关闭),二是短链接(数据传输完成就关闭)。

短连接主要用于传输大数据,比如数据快照。

Server

httpServer 或 grpc Server,用于接收外部请求。

ETCD 源码学习--简述(一)

Monitor

服务监控模块,各个模块上报自身状态数据,用户可以通过特定地址,查看服务的运行状态。

Raft

Raft 协议的具体实现。主要包括 Leader选举、日志同步等。

Node

一个 Node 代表一个节点,Node 会调用 Raft 进行 Leader 选举和日志同步。

当接收到提案或者其他消息时,会通过 Node 处理,将消息保存到本地(unstable消息),并最终交给上层模块处理。上层模块处理完成之后,在满足 Raft 协议的情况下, Node 会将消息更新为 stable 消息 。

RaftNode

Node 的上层模块,其主要作用用于处理 Node 提交的 Ready 实例 (包含一系列待处理消息的封装)。其中包括,追加消息自身内存、消息持久化、同步消息到其他节点、更新服务配置等等。

ETCDServer 

最上层组件,主要调用各种组件来实现一个可以正常工作的ETCD实例。

 

PS:欢迎纠正