Etcd定义
Etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管,Etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册于发现,还可以作为 key-value 存储的中间件。
Etcd特点
Etcd 的目标是构建一个高可用的分布式键值数据库,具有以下特点:
1.简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单;
2.键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中;
3.监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应;
4.安全:支持 SSL 证书验证;
5.快速:根据官方提供的 benchmark 数据,单实例支持每秒 2k 读操作;
6.可靠:采用 Raft算法,实现分布式系统数据的可用性和一致性;
Etcd工作原理
1.Etcd架构
Etcd架构如下图所示:
从 架构图中我们可以看到etcd 主要分为四个部分:
1.HTTP Server
用于处理用户发送的 API 请求,以及其它 Etcd节点的同步与心跳信息请求。
2.Store
用于处理 Etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等。
3.Raft
Raft 是强一致性算法的具体实现,是 Etcd的核心。
4.WAL
Write Ahead Log,预写日志系统,是 Etcd的数据存储方式,Etcd就通过 WAL 进行持久化存储,这个与MySQL持久化存储机制类似。
Write-Ahead Logging 是数据库中一种高效的日志算法,对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。
在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。
2.Etcd工作流程
Etcd的工作流程,大致分为如下4步:
1.通常一个用户的请求发送过来,会经由 HTTP Server 转发给 Store 进行具体的事务处理;
2.如果涉及到节点的修改,则交给 Raft 模块进行状态的变更、日志的记录;
3.然后再同步给别的 Etcd节点以确认数据提交;
4.最后进行数据的提交,再次同步。
Etcd的应用场景
和Zookeeper类似Etcd有很多使用场景,主要包括以下5类:
1.服务注册与发现
2.消息发布订阅
Etcd可以充当消息中间件,生产者可以往 Etcd中注册 topic 并发送消息,消费者从Etcd中订阅 topic,来获取生产者发送至 Etcd中的消息。
3.负载均衡
后端多组相同的服务提供者可以经自己服务注册到 Etcd中,Etcd并且会与注册的服务进行监控检查。
服务请求这首先从 Etcd中获取到可用的服务,然后对此多组服务发送请求,Etcd在其中充当了负载均衡的功能。
4.分布式锁
当有多个竞争者 node 节点,Etcd作为总控,在分布式集群中与一个节点成功分配 lock。
5.分布式队列
有对个 node,Etcd根据每个 node 来创建对应 node 的队列,根据不同的队列可以在Etcd中找到对应的 competitor。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》