编辑
2023-12-04
后端
00
请注意,本文编写于 522 天前,最后修改于 522 天前,其中某些信息可能已经过时。

目录

1. 服务端设计
2. 服务器对象
3. 启动流程
4. 其他组件

etcd是一个使用Go语言编写的分布式键值存储系统,是CNCF(Cloud Native Computing Foundation)的核心项目之一。它提供了高可用性、一致性和分布式事务的支持。

1. 服务端设计

etcd的服务端模块是etcd的核心模块,它定义了主要的接口和数据交互格式,并解决了以下问题:

  • 接收客户端的请求并对节点进行分发
  • 感知集群成员变动,对成员进行通知
  • 同步或启动恢复快照等

etcd服务端主要由几个组件构成,下面对每个组件进行介绍:

  • EtcdServer:主进程,包含了多个核心组件,如raftNodeWALsnapshotter等,可以理解为一个容器[1]
  • raftNode:对内部RAFT协议实现的封装,暴露简单的接口,用于保证写事务的集群一致性[1]

2. 服务器对象

etcd服务器通过Etcd结构抽象,对应了etcdserver/server.go中的代码。它包含了属性r,代表RAFT集群中的一个节点。在启动过程中,会调用EtcdServer.NewServer()来创建一个新的服务器实例[1]

3. 启动流程

etcd的启动流程主要包括以下几个步骤[1]

  • 解析参数,设置日志,启动监听端口等。
  • 调用etcdserver.NewServer()创建一个新的服务器实例。
  • 启动RAFT协议的核心部分,即调用node.run()[1]
  • 启动ETCD应用层的处理协程,即调用raftNode.start()[1]

4. 其他组件

除了服务端设计外,etcd还包含其他重要的组件,如:

  • mvcc:用于实现多版本并发控制的存储引擎,提供了对键值对的读写操作[1]
  • lessor:用于管理租约,即键值对的过期时间和自动删除[1]
  • authStore:用于管理用户认证和授权的存储引擎[1]

Learn more:

  1. 前言 - ETCD源码剖析
  2. 基于etcd的源码分析 -- 源码篇(中) - 知乎
  3. 分布式架构注册中心etcd源码解析实现原理 - 知乎

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!