etcd基础架构

介绍

​ etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。它是一款云原生时代的首选元数据存储产品,已经成为云原生和分布式系统的存储基石。

简要基础架构图

Client层

  • 组成

    • client v2 API 客户端库

    • client v3 API 客户端库

  • 作用

    • 提供了简洁易用的 API

    • 支持负载均衡、节点间故障自动转移

    • 极大降低业务使用 etcd 复杂度,提升开发效率、服务可用性

API 网络层

  • client 访问 server的通信协议

    • v2API

      • HTTP/1.x 协议
    • v3API

      • gRPC 协议

      • HTTP/1.x 协议(通过 etcd grpc-gateway 组件支持)

  • server 节点之间的通信协议

    • 节点间通过 Raft 算法实现数据复制和 Leader 选举等功能时使用的 HTTP 协议

Raft 算法层(基石和亮点)

  • 核心算法组成

    • Leader 选举

    • 日志复制

    • ReadIndex

  • 作用

    • 用于保障 etcd 多个节点间的数据一致性、提升服务可用性等

功能逻辑层(核心特性实现层)

  • KVServer 模块

    • 限速判断(保证集群稳定性,避免雪崩)

    • 生成一个唯一的 ID,将此请求关联到一个对应的消息通知 channel,然后向 Raft 模块发起(Propose)一个提案(Proposal)

    • 等待此 put 请求,等待写入结果通过消息通知 channel 返回或者超时。etcd 默认超时时间是 7 秒(5 秒磁盘 IO 延时 +2*1 秒竞选超时时间),如果一个请求超时未返回结果,则可能会出现 etcdserver: request timed out 错误

  • MVCC 模块

    • 读场景

    • 写场景

    • treeIndex 模块(内存树形索引模块)

      • 保存用户 key 和版本号的映射关系
    • boltdb 模块

      • 基于 B+ tree 实现的 key-value 键值库,支持事务,提供 Get/Put 等简易 API 给 etcd 操作

      • 每次修改操作,生成一个新的版本号 (revision),以版本号为 key, value 为用户 key-value 等信息组成的结构体

      • 数据隔离

        • boltdb 里每个 bucket 类似对应 MySQL 一个表

          • 用户的 key 数据存放的 bucket 名字的是 key

          • etcd MVCC 元数据存放的 bucket 是 meta

  • Auth 鉴权模块

  • Lease 租约模块

  • Compactor 压缩模块

  • Quota 模块(配额)

  • Apply模块

存储层

  • 预写日志 (WAL) 模块

    • 可保障 etcd crash 后数据不丢失
  • 快照 (Snapshot) 模块

  • boltdb 模块

    • 保存了集群元数据和用户写入的数据
posted @ 2021-06-15 13:39  请务必优秀  阅读(826)  评论(0编辑  收藏  举报