开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
etcd 是云原生架构中重要的基础组件,由 云原生计算基金会(CNCF,全称 Cloud Native Computing Foundation) 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件。目标是构建一个高可用的分布式键值(key-value)数据库。具有以下特点:
- 简单:内部实现复杂,但提供了简单直接的API接口
- 可靠:采用 raft 算法,实现分布式系统数据的可用性和一致性
使用场景
键值对存储
采用kv型数据存储
支持动态存储(内存)以及静态存储(磁盘)。
分布式存储,可集成为多节点集群。
存储方式,采用类似目录结构。
- 只有叶子节点才能真正存储数据,相当于文件。
- 叶子节点的父节点一定是目录,目录不能存储数据。
服务注册与发现
etcd2 中引入的 etcd/raft 库,是目前最稳定、功能丰富的开源一致性协议之一。
用户可以在 etcd 中注册服务,并且对注册的服务配置 key TTL,定时保持服务的心跳以达到监控健康状态的效果
消息发布与订阅
在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅。即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。
分布式锁
锁服务有两种使用方式,一是保持独占,二是控制时序。
保持独占即所有获取锁的用户最终只有一个可以得到。etcd为此提供了一套实现分布式锁原子操作CAS(CompareAndSwap)的API。通过设置prevExist值,可以保证在多个节点同时去创建某个目录时,只有一个成功。而创建成功的用户就可以认为是获得了锁。
控制时序,即所有想要获得锁的用户都会被安排执行,但是获得锁的顺序也是全局唯一的,同时决定了执行顺序