etcd概述

news2025/1/20 18:27:42

本文主要介绍了 etcd 相关概念,以及 etcd 的主要使用场景

1. 介绍

etcd 是云原生架构中的基础组件,由 CNCF 孵化托管。etcd 在微服务和 kubernetes 集群中不仅可以作为服务注册中心用于服务发现,还可以作为 key-value 存储中间件

etcd 是 CoreOS 团队与 2013 年 6 月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。具有以下特点:
  • 简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单

  • 键值对存储:将数据存储在分层组织的目录中,如同 在标准文件系统中

  • 检测变更:监测特定的键或目录以进行更改,并对值的更改做出反应

  • 安全:支持 SSL 证书验证

  • 快速:根据官方提供的 benchmark 数据,单实例支持每秒 2k+ 读操作

  • 可靠:采用 raft 算法,实现分布式系统数据的可用性和一致性

    etcd 采用 Go 语言编写,它具有出色的跨平台支持,很小的二进制文件和强大的社区。etcd 机器之间的通信通过 Raft 算法处理。

    etcd 是一个高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要分布式系统或机器集群访问的数据。它可以优雅处理网络分区期间的 leader 选举,以应对机器的故障,即使是在 leader 节点发生故障时。

    从简单的 Web 应用程序到 kubernetes 集群,任何复杂的应用程序都可以从 etcd 中读取数据或将数据写入 etcd。etcd 于 2018 年 12 月正式加入云原生计算基金会 CNCF,并由 CNCF 支持。

2. 使用场景

etcd比较多的应用场景是用于服务注册与发现,除此之外,也可以用于键值对存储,应用程序可以读取和写入etcd中的数据。

一个简单的用例是将数据连接详细或功能标志存储在etcd中作为键值对。可以观察这些值,使我们的应用在更改时可以重新配置自己。高级用法是利用etcd的一致性保证来实施数据库leader选举或在一组follower之间执行分布式锁定。

2.1 键值对存储

归根接底,etcd是一个键值存储的组件,其他的应用都是基于其键值存储的功能展开。etcd的存储有如下特点:
  • 采用KV型数据存储,一般情况下比关系型数据库快

  • 支持动态存储(内存)以及静态存储(磁盘)

  • 分布式存储,可集成为多节点集群

  • 存储方式,采用类似目录结构

    • 只有叶子节点才能真正存储数据,相当于文件

    • 叶子节点的父节点一定是目录,目录不能存储数据

      etcd leader的延迟是要跟踪的最重要的指标,严重的延迟会在集群内造成不稳定,因为Raft的速度仅与大多数机器中最慢的一样快。

2.2 服务注册与发现

服务注册于与发现要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接。从本质上说,服务发现就是要了解集群中是否有监听UDP或者TCP端口,并且通过名字就可以查找和链接。

要解决服务发现的问题,需要下面的三大支柱,缺一不可。
  • 强一致性、高可用的服务存储目录。基于Raft算法的etcd天生就是这样一个强一致性、高可用的服务存储目录。

  • 一种注册服务和服务健康状况的机制。用户可以在etcd中注册服务,并且对注册的服务配置key TTL,定时保持服务的心跳以达到监控健康状态的效果。

  • 一种查找和连接服务的机制。通过在etcd指定的主题下注册的服务也能在对应的主题下找到。为了确保连接,我们可以在每个服务机器上都部署一个Proxy模式的etcd,这样就可以确保访问etcd集群的服务都能够互联。
    在这里插入图片描述

    etcd2中引入的etcd/raft库,是目前最稳定、功能丰富的开源一致性协议之一。作为etcd、TiKV、CockcorachDB、Dgraph等知名分布式数据库的核心数据复制引擎,etcd/raft驱动了超过十万个集群,是被认为最广泛应用的一致性协议实现之一。etcd3中引入的多版本控制、事务等功能,大大简化了分布式应用的开发流程,提高了效率和稳定性。经过五年的演进,etcd也已经成为了各种各种容器编排系统的默认存储选项。kubernetes是流程的容器平台,运行在任何环境的Kubernetes集群都依赖etcd来提供稳定可靠的存储服务。

2.3 消息发布与订阅

在分布式系统中,最适用的一种组件间通用方式就是消息发布与订阅,即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅他们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新

![image](assets/image-20220805140827-qk3m587.png)​

应用中用到的一些配置信息放到etcd上进行集中管理。这类场景的使用方式通常是:应用在启动的时候主动从etcd获取一次配置信息,同时在etcd节点上注册一个Watcher并等待,以后每次配置更新时,etcd都会实时通知订阅者,以此达到获取最新配置信息的目的。

分布式搜索服务中,索引的元信息和服务器集群的节点状态存放在etcd中,供各个客户端订阅使用。使用etcd的key TTL功能可以确保机器状态是实时更新的。

分布式日志收集系统。这个系统的核心工作时收集分布在不同机器的日志。收集器通常是按照应用(或主题)来分配收集任务单元,因此可以在etcd上创建一个以应用(主题)命名创建的目录P,并将这个应用(主题相关)的所有机器IP,以子目录的形式存储到目录P上,然后设置一个etcd递归的Watcher,递归式的监控应用(主题)目录下所有信息的变动。这样就实现了机器IP(消息)变动的时候,能够实时通知到收集器调整任务分配。

系统中信息需要动态自动获取与人工干预修改信息请求内容的情况。通常是暴露出接口,例如JMX接口,来湖区一些运行时的信息。引入etcd之后,就不用自己实现一套方案了,只要将这些信息存放到指定的etcd目录中即可,etcd的这些目录就可以通过HTTP的接口在外部访问。

2.4 分布式通知与协调

这里说到的分布式通知与协调,与消息发布和订阅类似。在分布式系统中,最适用的一种组件间通信方式就是消息发布与订阅,即构建一个配置共享中心,数据提供者在这个配置中心发布消息,而消息使用者则订阅它们关心的主题,一旦主题有消息发布,就会实时通知订阅者。通过这种方式可以做到分布式系统配置的集中式管理与动态更新。

这里用到的etcd中的Watch机制,通过注册与异步通知机制,实现分布式环境下不同系统之间的通知与协调,从而对数据变更做到实时处理。实现方式通常是:不同系统都在etcd上对同一个目录进行注册,同时设置了Watcher观测该目录的变化(如果对子目录的变化也有需要,可以设置递归模式),当某个系统更新了etcd的目录,那么设置了Watcher的系统就会收到通知,并做出相应处理。

通过etcd进行低耦合的心跳检测,检测系统和被检测系统通过etcd上某个目录关联而非直接关联起来,这样大大减少了系统耦合性。

在这里插入图片描述

通过etcd完成系统调度。某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台的一些操作,实际上是修改了etcd上某些目录节点的状态,而etcd就把这些变化通知给注册了Watcher的推送系统客户端,推送系统再做出相应的推送任务。

通过etcd完成工作汇报。大部分类似的任务分发系统,子任务启动后,到etcd来注册一个临时工作目录,并且定时将自己的进度进行汇报(将进度写入到这个临时目录),这样任务管理者就能够实时知道任务进度。

2.5 分布式锁

当在分布式系统中,数据只有一份(或有限制),此时需要利用锁的技术控制某一时刻修改数据的进程数。与单机模式下的锁不同,不仅需要保证可见,分布式环境下还需要考虑进程与锁之间的网络问题。

分布式锁可以将标记存在内存只是该内存不是某个进程分配的内存,而是公共内存如redis、Memcache。至于利用数据库、文件等做锁与单机的实现是一样的,只要保证标记能互斥就行。因为etcd使用Raft算法保持数据的强一致性,某次操作存储到集群中的必然是全局一致的,所以很容易实现分布式锁。锁服务有两种使用方式,一是保持,二是控制时序。

保持独占即所有获取锁的用户最终只有一个可以得到。etcd为此提供一套实现分布式锁原子操作CAS的API。通过设置的prevExist值,可以保证在多个节点同时去创建某个目录时,只有一个成功。而创建成功的用户就可以认为是获得了锁。

控制时序,即所有想要获得锁的用户都会被安排执行,但是获得锁的顺序也是全局唯一的,同时决定了执行顺序。etcd为此也提供了一套API(自动创建有序键)。对一个目录创建值时指定为POST动作,这样etcd会自动在目录下生成一个当前最大的值为键,存储这个新的值(客户端编号)。同时还可以使用API按顺序列出当前目录下的键值。此时这些见得值就是客户端的时序,而这些键中存储的值可以是代表客户端的编号。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring的Bean初始化过程和生命周期

Spring的Bean初始化过程和生命周期一、Spring创建bean的流程图二、Spring创建bean的详细流程1.加载bean信息2.实例化bean3.bean属性填充4.初始化bean5.后置操作三、bean的生命周期四、总结Spring的核心功能有三点IOC、DI、AOP,IOC则是基础,也是Spring功能…

Python+Requests模拟发送post请求

模拟发送post请求 发送post请求的基础知识dumps和loads 代码示例: # 发送post请求 import requests,json # 发送post请求的基础知识dumps和loads str_dict {name:xiaoming,age:20,sex:男} print(type(str_dict)) str1 json.dumps(str_dict) # 1,json.dumps 是把…

git 本地新建并提交上传仓库

初始化步骤基本解释 新建readme touch README.md 初始化仓库 git init 添加仓库下所有文件 git add . 提交 备注到本地 git commit -m "备注" 链接远程git库 git remote add origin 新建库ssh链接 上传代码 git push -u origin master 初始化操作步骤 touch README.…

【Ubuntu】Ubuntu20基础配置+go开发配置

这里写自定义目录标题1 基础配置1.1 安装ifconfig网络管理工具1.2 初始化root密码1.3 换镜像源1.4 关闭息屏休眠1.5 关闭自动更新2 开发环境2.1 go2.1.1 建立软件目录并安装软件2.1.2 建立go工作目录2.1.3 配置环境变量2.2 mysql2.2.1 安装2.2.2 建立对外用户并更改密码2.2.3 修…

江苏三年制专转本法学类考纲配套课程网课题库

江苏三年制专转本法学类考纲配套课程网课题库1、江苏专转本的考试科目都有哪些? 2022年开始江苏专转本成绩主要由语文/数学英语/日语专业课三科的成绩构成,满分500分。分别给大家解释一下 语文/数学:满分150分(文科考语文&#xf…

[源码解析]socket系统调用上

文章目录socket函数API内核源码sock_createinet_createsock_allocsock_map_fd相关数据结构本文将以socket函数为例,分析它在Linux5.12.10内核中的实现,先观此图,宏观上把握它在内核中的函数调用关系:socket函数API socket 函数原…

王小川,才是深「爱」李彦宏的那个人?

在推出中国首个类ChatGPT产品「文心一言」后,李彦宏在接受专访时断言,中国基本不会再出一个OpenAI了,「创业公司重新做一个ChatGPT其实没有多大意义,基于大语言模型开发应用机会很大,没有必要再重新发明一遍轮子。」 听…

【AI理论学习】深入理解扩散模型:Diffusion Models(DDPM)(理论篇)

深入理解扩散模型:Diffusion Models引言扩散模型的原理扩散过程反向过程优化目标模型设计代码实现Stable Diffusion、DALL-E、Imagen背后共同的套路Stable DiffusionDALL-E seriesImagenText encoderDecoder什么是FID(Frechet Inception Distance&#x…

uni-app--》如何实现网上购物小程序(上)?

🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败&#xf…

YOLOv8源码逐行解读(yolov8.yaml)(更新中)

本人也是刚接触YOLO不久的菜鸟一个,写博客主要是记录自己的学习过程,如果有写的不对的地方欢迎大家批评指正! yolov8.yaml 官方下载地址:https://github.com/ultralytics/ultralytics/tree/main/ultralytics/models/v8 # Ultral…

工业机器人三大主流行业浮动去毛刺应用深度详解

工业机器人是一种能够自动执行各种工业任务的机器人,它的使用不仅能将工人从繁重或有害的体力劳动中解放出来,解决当前劳动力短缺问题,而且能够提高生产效率和产品质量,增强企业整体竞争力,被广泛地应用于工业各个生产…

软件测试岗,4 轮面试成功拿下字节 Offer..........

一共经历了四轮面试:技术4面+HR面。 特整理出所涉及的全部知识点,并复盘了完整面试题及答案,分享给大家,希望能够帮到一些计划面试字节的朋友。 一、测试基础理论类 怎么编写案例?软件测试的两种方法测试结束的标准…

SpringBoot解析指定Yaml配置文件

再来个文章目录 文章目录前言1、自定义配置文件2、配置对象类3、YamlPropertiesSourceFactory下面还有投票,帮忙投个票👍 前言 最近在看某个开源项目代码并准备参与其中,代码过了一遍后发现多个自定义的配置文件用来装载业务配置代替数据库…

打造最小VR头显,软件开发商Bigscreen缘何跨进VR硬件市场?

今年2月,Bigscreen推出了一款非常轻薄的PC VR头显:Beyond。该头显的特点是采用两块1英寸Micro OLED屏幕(RGB Stripe排列),可带来双眼5K分辨率,28 PPD,75Hz/90Hz刷新率和90x93FOV。目前Beyond虽还…

Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核)

Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核) 文章目录Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核)1.出厂源码编译1 修改顶层 …

Matlab simulink上手控制仿真学习笔记3-常用模块S Function及使用案例

讲得真的十分细致!个人感觉看完前4节就差不多了。 今天记录的是S Function。 内容比较多,加个目录: S Function前置工作1.1 parameter.m1.2 plant.mfunction [sys,x0,str,ts,simStateCompliance] plant(t,x,u,flag,pa)function [sys,x0,str…

三电技术(电池(BMS)、电驱(MCU)、电控(VCU))

三电技术 1、概述 三电技术不仅是新能源汽车的核心技术,也是基础性技术。 三电是指电池,电驱(电机),电控,简称 BMC。 2、电池 为了区分新能源汽车上的低压电池将其称为动力电池,“动力电池“也是行业术语。动力电…

毫无废话,四个小案例手把手教你Vue2基础轻松入门_学习笔记

四个小案例手把手教你Vue2基础轻松入门_学习笔记 本文将通过四个小案例介绍Vue2学习 根据 黑马程序员vue前端基础教程-4个小时带你快速入门vue 教程。 因教程中的网络项目和综合项目难度不高,且内容仅为综合使用,本笔记不另介绍。 * 源自教程&#xff0c…

【Linux】网络编程之套接字 --TCP

目录🌈前言🌸1、TCP相关API🍡1.1、socket函数🍢1.2、bind函数🍧1.3、listen函数🍨1.4、accept函数🍰1.5、connect函数🌺2、TCP网络编程🍡2.1、简单TCP通信程序 -- 多进程…

【redis】验证redis是否正常运行以及报错解决方案

Redis 出现 “(error) NOAUTH Authentication required.” 错误,意味着客户端尝试向 Redis 服务器发送命令,但未提供身份验证或提供的身份验证信息不正确。这通常是由于 Redis 实例开启了密码认证机制导致的。 为了解决该问题,可以尝试以下…