一、什么是ETCD
1.1、etcd简介
etcd,可以读成etc-d,也就是分布式的配置文件。同理可以知道etcd的作用就是一个分布式的配置文件系统,也就是配置中心。
1.2、etcd应用场景
用来实现分布式系统中的配置管理和服务注册与发现;具体场景有:
- 配置管理,比如多个客户端可以从etcd中读取到统一的配置,类似于NoSQL数据库。
- 服务注册与发现,比如微服务架构中,服务向etcd注册自己的状态,其他服务就可以通过etcd发现。
- 分布式锁,比如多个客户端通过获取etcd实现的分布式锁避免数据竞争和并发问题。
- 分布式系统的一致性协调,比如分布式事务管理。
二、etcd基础架构
网上图很多,我选了一个新手比较好理解的(后面自己画一个)。
根据上面的图,可以简单理解etcd的架构如下:
Client层,etcd客户端,支持以api的形式操作etcd系统。
API网络层:声明客户端访问etcd server的通信协议,支持gRPC、HTTP。
逻辑层
- Raft,通过Raft算法实现系统中的多个节点间的Leader选举、日志复制,保证节点间的数据一致性。
- 功能逻辑层,实现了etcd系统的很多特性,比如MVCC、KV Server,Auth鉴权、限流等。
存储层:包含WAL日志模块、快照等模块;其中WAL和MySQL的WAL一样,是用来保证系统Crash时写入的数据不丢失的。
三、etcd执行一个写操作
根据上面的模型来分析etcd的写操作,可以将其分成以下流程:
- etcd client选择一种通信方式,如gRPC请求etcd系统,请求到达逻辑层;
- etcd系统会在逻辑层进行请求的校验,如系统的配额(Quota)是否达到上限;
- 逻辑层校验完成后,通过KV Server向Raft模块发起执行请求,Raft后根据选举算法找到主节点,并在大部分节点同意后,让请求真正开始修改,也就是到达存储层。
- etcd 存储层执行请求时,会先先WAL日志,用来保证数据不丢失;之后把请求放到一个先进先出的队列(Apply 模块)中,再依次更新MVCC模块、写boltdb等。
下面是更加清晰的etcd架构图,分析写请求涉及到哪些模块,可以帮助我们更好理解。
四、总结
上面只是分析了etcd的简单架构以及写流程,并没有介绍一些模块的具体作用,如哪些模块保证etcd的数据一致性、MVCC的作用是什么;这些会在后面补充。