分布式中的 CAP 理论

CAP 原理是描述分布式系统下节点数据同步的基本定理,分别指Consistency(一致性)、Availability(可用性)和 Partition tolerance(分区容错性),这三个要素最多只能同时实现两点,不能三者兼顾。

image.png

etcd 的特性

etcd 可以用来构建高可用的分布式键值数据库,总结来说有如下特点。

简单:etcd 的安装简单,且为用户提供了 HTTP API,使用起来也很简单。

存储:etcd 的基本功能,数据分层存储在文件目录中,类似于我们日常使用的文件系统。

Watch 机制:Watch 指定的键、前缀目录的更改,并对更改时间进行通知。

安全通信:支持 SSL 证书验证。

高性能:etcd 单实例可以支持 2K/s 读操作,官方也有提供基准测试脚本。

一致可靠:基于 Raft 共识算法,实现分布式系统内部数据存储、服务调用的一致性和高可用性。

etcd 是一个实现了分布式一致性键值对存储的中间件,支持跨平台,拥有活跃用户的技术社区。etcd 集群中的节点基于 Raft 算法进行通信,Raft 算法保证了微服务实例或机器集群所访问的数据的可靠一致性。

etcd 的应用场景

etcd 在稳定性、可靠性和可伸缩性上表现极佳,同时也为云原生应用系统提供了协调机制。etcd 经常用于服务注册与发现的场景,此外还有键值对存储、消息发布与订阅、分布式锁等场景。

etcd 基于 Raft 算法,能够有力地保证分布式场景中的一致性。各个服务启动时注册到 etcd 上,同时为这些服务配置键的 TTL 时间。注册到 etcd 上面的各个服务实例通过心跳的方式定期续租,实现服务实例的状态监控。

image.png

分布式锁

分布式系统中涉及多个服务实例,存在跨进程之间资源调用,对于资源的协调分配,单体架构中的锁已经无法满足需要,需要引入分布式锁的概念。etcd 基于 Raft 算法,实现分布式集群的一致性,存储到 etcd 集群中的值必然是全局一致的,因此基于 etcd 很容易实现分布式锁。

etcd 的核心架构

image.png

其中:

etcd Server 用于对外接收和处理客户端的请求;

gRPC Server 则是 etcd 与其他 etcd 节点之间的通信和信息同步;

MVCC,即多版本控制,etcd 的存储模块,键值对的每一次操作行为都会被记录存储,这些数据底层存储在 BoltDB 数据库中;

WAL,预写式日志,etcd 中的数据提交前都会记录到日志;

Snapshot 快照,以防 WAL 日志过多,用于存储某一时刻 etcd 的所有数据;

Snapshot 和 WAL 相结合,etcd 可以有效地进行数据存储和节点故障恢复等操作。

虽然 etcd 内部实现机制复杂,但对外提供了简单的 API 接口,方便客户端调用。我们可以通过etcdctl 客户端命令行操作和访问 etcd 中的数据,或者通过HTTP API接口直接访问 etcd。

etcd 中的数据结构很简单,它的数据存储其实就是键值对的有序映射。etcd 还提供了一种键值对监测机制,即 Watch 机制,客户端通过订阅相关的键值对,获取其更改的事件信息。Watch 机制实时获取 etcd 中的增量数据更新,使数据与 etcd 同步。

etcd 是云原生架构中的存储基石,可以有效保证存储数据的一致性和可靠性;

etcd 内部实现机制复杂,但是对外提供了简单直接的 API 接口;

使用 etcd 的常见分布式场景包括键值对存储、服务注册与发现、消息订阅与发布、分布式锁等。

etcd 集群的启动有以下三种方式:

  • 静态启动
  • etcd 动态发现
  • DNS 发现