etcd源码解析之V2 server和raft核心运转

etcd是一个应用raft一致性算法的分布式KV存储数据库,使用go语言开发,在业界应用广泛,本文对etcd server部分的代码解析基于master分支的V2版本。

V2 server核心运转解析

V2 server的启动需要配置--enable-v2,所以我从这个配置项跟踪起代码,从http server解析请求到刷快照落盘在到http server回包,以代码为维度生成以下流程图:
etcd源码解析之V2 server和raft核心运转
从图中可以看出,etcd的状态机完全依赖go语言中的channel。
server接受到请求后封装成MsgProc包通过管道发送给本进程,注册一个管道等到进程处理完回包。
raft commit请求后,构造一个ready信号给管道,server接受到管道后,写wal, 判断是否需要写快照,再构造applyc信号到管道,触发请求应用到存储层store, store更新后打包回包,唤醒之前等待处理完成的管道,回包给client。

raft核心运转解析

raft一致性算法可参考官网:https://raft.github.io
etcd的raft机制可参考文档:https://github.com/coreos/etcd/blob/master/raft/doc.go
从一个空server启动raft的流程图:
etcd源码解析之V2 server和raft核心运转
收到MsgProc请求,强一致性情况下:

  • Leader: 走raft流程
  • Follower: 转发给Leader
  • Candidate: 丢弃

其他细节根据代码和算法文档不再累述。

上一篇:开启关闭服务器以及登录退出客户端|学习笔记


下一篇:(二)ELK--ES的主要特点和使用场景介绍