Etcd的初步认识

193 阅读2分钟

这是我参与更文挑战的第15天,活动详情查看: 更文挑战

近期在接触的新项目中在使用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上的值是全局一致的,可将其作为锁使用

核心架构

image-20210520222454478.png

  • etcd Server:对外接收和处理客户端请求

  • grpc Server:处理ectd各节点间的通信和信息同步

  • MVCC 对版本控制,每次的对存储模块和键值对的操作都会记录存储

  • WAL:预写式日志,即数据提交前会先记录到日志

  • Snapshot:快照,存储某一时刻的etcd数据,防止WAL日志过多(Snapshot和WAL结合使用有效进行数据存储和节点故障恢复)