etcd简介

云原生架构中重要的基础组件,因为etcd 项目是 Kubernetes 内部的一大关键组件,目前有很多项目都依赖 etcd 进行可靠的分布式数据存储。

云原生中的微服务应用属于分布式系统的一种落地实践。在分布式环境中,由于网络的复杂性、不确定性以及节点故障等情况,会产生一系列的问题。最常见的、最大的难点就是数据存储不一致的问题,即多个服务实例自身的数据或者获取到的数据各不相同。因此我们需要基于一致性的存储组件构建可靠的分布式系统。

那什么是etcd呢?etcd是一个分布式、可靠的键值存储,可用于分布式系统中存储关键核心数据。从定义上你也可以发现,etcd 归根结底是一个存储组件,且可以实现配置共享和服务发现。在分布式系统中,各种服务配置信息的管理共享和服务发现是一个很基本也是很重要的问题,无论你调用服务还是调度容器,都需要知道对应的服务实例和容器节点地址信息。etcd 就是这样一款实现了元数据信息可靠存储的组件。

etcd 可集中管理配置信息。服务端将配置信息存储于 etcd,客户端通过 etcd 得到服务配置信息,etcd 监听配置信息的改变,发现改变通知客户端。

etcd 满足 CAP 理论中的 CP(一致性和分区容错性) 指标,解决了分布式系统中一致性存储的问题。

特性

  • 简单:etcd 的安装简单,且为用户提供了 HTTP API,使用起来也很简单。
  • 存储:etcd 的基本功能,数据分层存储在文件目录中,类似于我们日常使用的文件系统。
  • Watch 机制:Watch 指定的键、前缀目录的更改,并对更改时间进行通知。
  • 安全通信:支持 SSL 证书验证。
  • 高性能:etcd 单实例可以支持 2K/s 读操作,每个实例1000次写入/秒,官方也有提供基准测试脚本。
  • 一致可靠:基于 Raft 共识算法,实现分布式系统内部数据存储、服务调用的一致性和高可用性。

使用场景

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

在分布式系统或者 Kubernetes 集群中,etcd 可以作为服务注册与发现和键值对存储组件。不管是简单应用程序,还是复杂的容器集群,都可以很方便地从 etcd 中读取数据,满足了各种场景的需求。

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

  • 键值对存储

etcd 是一个用于键值存储的组件,存储是 etcd 最基本的功能,其他应用场景都建立在 etcd 的可靠存储上。比如 Kubernetes 将一些元数据存储在 etcd 中,将存储状态数据的复杂工作交给 etcd,Kubernetes 自身的功能和架构就能更加稳定。
etcd 基于 Raft 算法,能够有力地保证分布式场景中的一致性。各个服务启动时注册到 etcd 上,同时为这些服务配置键的 TTL 时间。注册到 etcd 上面的各个服务实例通过心跳的方式定期续租,实现服务实例的状态监控。

  • 消息发布与订阅

通过构建 etcd 消息中间件,服务提供者发布对应主题的消息,消费者则订阅他们关心的主题,一旦对应的主题有消息发布,就会产生订阅事件,消息中间件就会通知该主题所有的订阅者。

  • 分布式锁

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

etcd架构

etcd 有 etcd Server、gRPC Server、存储相关的 MVCC 、Snapshot、WAL,以及 Raft 模块。

  • etcd Server 用于对外接收和处理客户端的请求
  • gRPC Server 则是 etcd 与其他 etcd 节点之间的通信和信息同步
  • MVCC,即多版本控制,etcd 的存储模块,键值对的每一次操作行为都会被记录存储,这些数据底层存储在 BoltDB 数据库中
  • WAL,预写式日志,etcd 中的数据提交前都会记录到日志
  • Snapshot 快照,以防 WAL 日志过多,用于存储某一时刻 etcd 的所有数据。Snapshot 和 WAL 相结合,etcd 可以有效地进行数据存储和节点故障恢复等操作。

etcd 是云原生架构中的存储基石,可以有效保证存储数据的一致性和可靠性。etcd 内部实现机制复杂,但是对外提供了简单直接的 API 接口。使用 etcd 的常见分布式场景包括键值对存储、服务注册与发现、消息订阅与发布、分布式锁等。

ETCD 一 什么是ETCD相关推荐

  1. php etcd 服务发现,confd+etcd+nginx 实现简单服务发现

    一. 项目背景 随着微服务的兴起,大量接口服务化.当新的微服务加入或微服务的信息发生变更时,服务方如何通知周边系统.使用方如何知道这些变更呢? 这时就需要服务的注册配置和发现功能. 服务注册配置--存 ...

  2. golang基础-etcd介绍与使用、etcd存取值、etcd监测数据写入

    关注公众号"风色年代"订阅更多精彩文章,本博大部分文章为转载并已标明原文出处,如有再转敬请保留,请自觉尊重原创作者的劳动成果! golang基础-etcd介绍与使用.etcd存取值 ...

  3. Etcd教程 — 第二章 Etcd集群静态发现

    Etcd教程 - 第二章 Etcd集群静态发现 一.Etcd集群安装方式 二.Etcd集群静态发现 2.1 静态启动的方式 ※2.2 单机搭建Etcd集群 2.2.1 安装 goreman工具 2.2 ...

  4. Etcd教程 — 第一章 Etcd简介、Etcd单机安装

    Etcd教程 - 第一章 一.Etcd介绍 1.1 介绍 1.2 etcd特点 二. Etcd单机安装 2.1 安装方式 2.1.1 yum install etcd 2.1.2 通过系统工具安装et ...

  5. ETCD快速入门-01 ETCD概述

    1.ETCD概述 1.1 ETCD概述     etcd是一个高可用的分布式的键值对存储系统,常用做配置共享和服务发现.由CoreOS公司发起的一个开源项目,受到ZooKeeper与doozer启发而 ...

  6. Failed to reconcile etcd plane: Failed to add etcd member [etcd-server05] to etcd cluster

    出现这个错误的原因可能不止一种,本文陈述一个可能会出现这个错误的原因,那就是集群中存在了不存在的节点,然后当你再想新添加一个etcd节点的时候,就会出现这个错误. 问题发生在 rancher 扩容 e ...

  7. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  8. etcd 笔记(04)— etcd 网关与 gRPC 网关

    1. etcd 网关 etcd 网关是一个简单的 TCP 代理,可将网络数据转发到 etcd 集群.网关是无状态且透明的,它既不会检查客户端请求,也不会干扰集群响应,支持多个 etcd 服务器实例,并 ...

  9. etcd 笔记(02)— etcd 安装(apt 或 yum 安装 、二进制包安装、Docker 安装 etcd、etcd 前端工具etcdkeeper)

    1. 使用 apt 或 yum 安装 etcd 命令如下: sudo apt-get install etcd 或者 sudo yum install etcd 这样安装的缺点是:安装的 etcd 版 ...

最新文章

  1. 三、索引优化(3)聚集索引上的非聚集索引
  2. admininfo.php,admin.php 源代码在线查看 - FTB安装版 v1.3(虚拟形象)FTB安装版 v1.3(虚拟形象) 资源下载 虫虫电子下载站...
  3. 重磅 | 20+技术大咖齐聚 阿里云数据库创新上云峰会进入一周倒计时
  4. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!
  5. SAP BTP 应用 mta.yaml 里的 sap-btp-project1-dest-content module
  6. 《操作系统真象还原》-阅读笔记(下)
  7. linux的nfs端口号,#Linux NFS服务 固定端口及防火墙配置#
  8. linux查看cpu核数_我们常说的CPU核数指的是什么?
  9. Linux内核开发_内核模块
  10. 《Android开发艺术探索》— Android 书籍
  11. C语言 —— 回调函数
  12. 【Unity项目实战】手把手教学:飞翔的小鸟(1)导入素材
  13. c语言编程简单教学,C语言入门教程-最简单的C程序
  14. 主板诊断卡代码含义及处理方法
  15. Ambari2.7.4配置HIVE_AUX_JARS_PATH
  16. 正版游戏怎么开服务器,方舟生存进化
  17. 赵小楼《天道》《遥远的救世主》深度解析(47)为什么要给韩楚风的司机小赵点赞?芮小丹是怎么做到“反客为主、打破阶层”的?
  18. 为什么有的人特别招蚊子?
  19. OSPF基础工作过程
  20. Objective-c:OC语言简介、类与对象

热门文章

  1. Python遍历目录下的文件(os.walk 、os.listdir的用法)
  2. 立创梁山派GD32F450ZGT6--通过PCA9685控制16路舵机
  3. 【码农学编曲】关于宿主软件和插件的推荐
  4. Win10安装nodejs 错误代码2502,2503
  5. 为什么移动计算比移动数据更便宜?
  6. classloder
  7. 关于pip install numpy
  8. SQL Server Management Studio(SMSS)删除连接记录
  9. [CF14E]Camels
  10. Linux下学习C语言编程(一)系统环境配置