近期在接触的新项目中在使用Etcd,但是在使用的过程中公司对其的使用仅使用服务注册的功能,并未将其发挥真正的用处。学习一波,将来可以在项目中使用进行改进。
什么是Etcd
官网对Etcd的解释:
- A highly-available key value store for shared configuration and service discovery.
即一个用于配置共享和服务发现的键值存储系统。
从定义上可发现,
- Etcd是一个存储组件,以键值的方式进行存储
- 用于配置共享 和 服务发现
为什么需要Etcd
Etcd是一款实现元数据信息可靠存储的组件。在分布式系统中,数据一致性是比较大的难点,所以需要一个基于一致性的存储组件来构建可靠的分布式系统。集中管理各种服务的配置信息,共享,以及用于服务发现。
Etcd特性
- 简单:安装简单,且因提供HTTP API,使用也很简单
- 存储:数据分层存储在文件系统中,类似我们平常使用的文件系统
- Watch机制:监测指定的键、前缀目录的更改,并对更改时间进行通知
- 安全通信:支持SSL证书验证
- 高性能:单实例Etcd支持2K/s读操作
- 一致可靠:基于Raft算法,实现分布式系统内部数据存储、服务调用的一致和高可用
使用场景
键值对存储
- 存储功能
服务注册与发现
- 各服务启动时都注册到etcd上,客户端可以从etcd上获取服务列表,实现服务发现功能
消息发布与订阅
- 服务提供者发布对应主题消息,消费者订阅他们关心的主题。有发布则就有订阅事件,通知给订阅者
分布式锁
- 存储在etcd上的值是全局一致的,可将其作为锁使用
核心架构
- etcd Server:对外接收和处理客户端请求
- grpc Server:处理ectd各节点间的通信和信息同步
- MVCC 对版本控制,每次的对存储模块和键值对的操作都会记录存储
- WAL:预写式日志,即数据提交前会先记录到日志
- Snapshot:快照,存储某一时刻的etcd数据,防止WAL日志过多(Snapshot和WAL结合使用有效进行数据存储和节点故障恢复)