etcd之读性能主要影响因素

news2024/11/14 21:53:55

1、Raft模块-线性读ReadIndex-节点之间的RTT延时、磁盘IO

线性读时Follower节点首先会向Raft 模块发送ReadIndex请求,此时Raft模块会先向各节点发送心跳确认,一半以上节点确认 Leader 身份后由leader节点将已提交日志索引 (committed index) 封装成 ReadState 结构体通过 channel 层层返回给线性读模块,并会 等待本节点状态机的已应用日志索引 (applied index) 大于等于 Leader 的已提交日志索引,才能继续将请求发送到MVCC模块,从而确保能在本节点状态机中读取到最新数据,

心跳确认会涉及到各个节点之间网络通信,因此各个节点之间的 RTT 延时是决定线性读 ReadIndex 性能的核心因素之一。

Follower节点应用已提交日志条目到状态机的过程涉及到写磁盘,因此磁盘 IO 性能还会影响读性能,线性读性能会随着写QPS的增加而快速下降

2、MVCC模块-总key数、查询的key数、key大小

从 treeIndex 中获取整个查询涉及的 key 列表版本号信息时,影响其性能的关键因素是 treeIndex 的总 key 数、查询的 key 数、获取 treeIndex 锁的耗时。

大 key-value 的查询非常容易导致 etcd OOM、server 节点出现丢包、性能急剧下降。

img

etcd写性能主要影响因素

1、Quota模块-压缩策略

Quota模块会对db配额进行校验,etcd 支持按时间周期性压缩、按版本号压缩两种策略,建议压缩策略不要配置得过于频繁,比如如果按时间周期压缩,一般情况下 5 分钟以上压缩一次比较合适。

2、KVServer 模块-磁盘IO

KVServer 模块的写请求在提交到 Raft 模块前,会进行限速判断,如果 Raft 模块已提交的日志索引(committed index)比已应用到状态机的日志索引(applied index)超过了 5000,那么它就返回一个"etcdserver: too many requests"错误给 client。主要场景有

etcd 定时批量将 boltdb 写事务提交的时候,需要对 B+ tree 进行重平衡、分裂,并将 freelist、dirty page、meta page 持久化到磁盘,此过程需要持有 boltdb 事务锁,若磁盘随机写性能较差、瞬间大量写入,则也容易写阻塞,导致应用已提交的日志条目缓慢。

执行 defrag 等运维操作时,也会导致写阻塞,它们会持有相关锁,导致写性能下降。

3、Raft模块-网络、磁盘IO、leader稳定性、快照频率

etcd 是基于 Raft 协议实现数据复制和高可用的,各节点会选出一个 Leader,etcd 写请求首先需要转发给 Leader 处理,然后由leader将写请求提交到Raft模块后,首先会通过http广播给各个followwer节点并等待半数以上节点确认,此时各节点会将待持久化的日志条目追加到 WAL 中并写入磁盘,之后返回确认信息,因此节点之间 RTT 延时、磁盘的IO延时对写性能有较大影响。

此外,leader稳定性也是影响写性能的重要因素,Leader 节点会根据 heartbeart-interval 参数(默认 100ms)定时向 Follower 节点发送心跳,如果两次发送心跳间隔超过 2*heartbeart-interval,就会打印此警告日志。超过 election timeout(默认 1000ms),Follower 节点就会发起新一轮的 Leader 选举。

etcd 默认心跳间隔是 100ms,较小的心跳间隔会导致发送频繁的消息,消耗 CPU 和网络资源,而较大的心跳间隔,又会导致检测到 Leader 故障不可用耗时过长,影响业务可用性。一般情况下,为了避免频繁 Leader 切换,建议你可以根据实际部署环境、业务场景,将心跳间隔时间调整到 100ms 到 400ms 左右,选举超时时间要求至少是心跳间隔的 10 倍。

另外,快照频率也会影响写性能,在 Raft 模块中,正常情况下,Leader 可快速地将我们的 key-value 写请求同步给其他 Follower 节点,但是某 Follower 节点数据若落后太多,Leader 内存中的 Raft 日志已经被 compact 了,那么 Leader 只能发送一个快照给 Follower 节点重建恢复,而快照重建是极其昂贵的操作,会消耗大量的 CPU、Memory、网络资源,影响我们的读写性能。

--snapshot-count 参数控制快照行为,是指收到多少个写请求后就触发生成一次快照,并对 Raft 日志条目进行压缩。默认值为 10 万,如果过小的话在某节点数据落后时,如果它请求同步的日志条目 Leader 已经压缩了,此时我们就不得不将整个 db 文件发送给落后节点,然后进行快照重建,过大它会消耗较多内存。

4、MVCC模块-总key数、key大小

写事务则会从 treeIndex 模块中查找 key、更新的 key 版本号等信息,影响其性能因素是 key 数和锁。

更新完索引后,就会把新版本号作为 boltdb key, 把用户 key/value、版本号等信息组合成一个 value,写入到 boltdb,影响其性能因素是大 value、锁。

5、watcher的数量

大量的 watcher 会显著增大 etcd server 的负载,导致读写性能下降

gRPC proxy 组件里面提供了 watcher 合并的能力

img

1111

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

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

相关文章

Linux下如何查看正在运行的Nginx使用的配置文件

Linux下如何查看正在运行的Nginx使用的配置文件 1. 查看nginx的进程id2. 查询对应端口的nginx路径3. 使用-t参数获取改进程对应的配置文件路径nginx命令 1. 查看nginx的进程id #查询nginx是9000端口的PID netstat -lntup | grep 90002. 查询对应端口的nginx路径 ll /proc/150…

万兆网络变压器(网络滤波器/脉冲变压器)在光模块产品上的应用

Hqst盈盛(华强盛)电子导读:随着5G网络技术的发展,万物互联的愿景变得越来越现实,在网络技术高速发展的过程中,网络设备和元器件的发展也在适应着这种技术变化,其中的光电器件:光模块…

回顾多线程

1.线程有几种状态 public enum State {//新生NEW,//运行RUNNABLE,//阻塞BLOCKED,//等待WAITING,//超时等待TIMED_WAITING,//终止TERMINATED;} 2.wait和sleep的区别 1.来自不同的类 wait>Object类 sleep > Thread类 2.关于锁的释放 wait 会释放锁, s…

智能远程监考方案助力企业考试化繁为简

在音视频数字化之旅中,轻装上阵。 近年来,在数字化浪潮之下,远程考试频繁成为各领域热词,各企业也纷纷改革求新,将原本的企业内部考试转移到线上,从而获取更低廉的组考成本,更高的管理效率&…

程序和进程

一些基本概念: 进程的状态转换

Ardupilot — EKF3使用光流室内定位代码梳理

文章目录 前言 1 Copter.cpp 1.1 void IRAM_ATTR Copter::fast_loop() 1.2 void Copter::read_AHRS(void) 1.3 对象ahrs说明 2 AP_AHRS_NavEKF.cpp 2.1 void AP_AHRS_NavEKF::update(bool skip_ins_update) 2.2 void AP_AHRS_NavEKF::update_EKF3(void) 2.3 对象EKF3说…

LeetCode【27. 移除元素】

为国捐躯赴战场,丹心可并日争光。 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺…

[面试] 15道最典型的k8s面试题

文章目录 在 Kubernetes 中,有以下常见的资源对象:1.什么是 Kubernetes?它的主要特点是什么?2. Kubernetes 中的 Pod 是什么?它的作用是什么?3.Kubernetes 中的 Deployment 和 StatefulSet 有何区别&#x…

无涯教程-JavaScript - MATCH函数

描述 MATCH函数在单元格范围内搜索指定的项目,然后返回该项目在该范围内的相对位置。 当您需要某个项目在范围中的位置而不是项目本身时,请使用MATCH而不是LOOKUP函数之一。如。您可以使用MATCH函数为INDEX函数的row_num参数提供一个值。 语法 MATCH (lookup_value, lookup…

【送书活动】大模型赛道如何实现华丽的弯道超车

文章目录 导读前言AI/ML 模型训练任务对数据平台的需求01 具备对海量小文件的频繁数据访问的 I/O 效率02 提高 GPU 利用率,降低成本并提高投资回报率03 支持各种存储系统的原生接口04 支持单云、混合云和多云部署 核心密码01 通过数据抽象化统一数据孤岛02 通过分布…

Linux命令200例:apt-get软件包管理工具的使用

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师&#xff0…

一文带你了解2023年最新央企名单、业务和管理机构(附资料)

前两天有个朋友留言问华研荟关于国企和央企的问题,他说经常在电视或网上看到国企、央企的表述,这两个的区别是什么?国企不都是国家所有吗?为什么还要有央企一说呢? 今天华研荟就来带大家了解一下两者的区别&#xff0…

RISC-V Reader 笔记(六)RV32V

RV32V 早期并行数据计算:采用 SIMD 单指令多数据,把一个64位宽寄存器拆成若干个32 16 8 位长度部分并行计算。这种方法前期看起来十分简单诱人。但是后来如果要扩展 SIMD 寄存器宽度,也要复杂化指令集,复杂开销越来越大。 向量操作…

【微服务】六. Nacos配置管理

6.1 Nacos实现配置管理 配置更改热更新 在nacos左侧新建配置管理 Data ID:就是配置文件名称 一般命名规则:服务名称-环境名称.yaml 配置内容填写:需要热更新需求的配置 配置文件的id:[服务名称]-[profile].[后缀名] 分组&#…

启用新的精细服务权限来更好地控制账单、成本管理和账户服务的访问权限

12 月 11 日,亚马逊云科技将在服务前缀 aws-portal 下停用账单、成本管理和账户控制台(https://docs.amazonaws.cn/en_us/service-authorization/latest/reference/list_awsbillingconsole.html)的 Amazon Identity and Access Management&am…

LeetCode-热题100-笔记-day29

199. 二叉树的右视图https://leetcode.cn/problems/binary-tree-right-side-view/ 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1…

音乐网站设计与实现

目 录 摘要 Abstract 1、引言 1.1 课题的目的和意义 1.2 国内现状分析 2、可行性研究与需求分析 2.1 可行性研究 2.1.1 经济可行性 2.1.2 技术可行性 2.1.3 运行可行性 2.1.4 时间可行性 2.1.5 法律可行性 2.2 需求分析 2.2.1 系统需求 2.2.2 …

如何让两台手机相互远程控制?

你的两台手机是什么系统的?如果你的两台手机都是安卓系统,而且都是安卓7.0及以上版本的系统,那么恭喜你,这两台手机可以相互远程控制! 你可以利用两个软件实现将两台手机相互远程控制的想法。为了避免混淆&#xff0c…

中小企业建设数字化工厂,选择集成还是重构

随着科技的飞速发展和市场竞争的日益激烈,数字化工厂管理系统已成为中小企业未来发展的必经之路。然而,对于许多中小企业来说,建设数字化工厂并非易事。在建设数字化工厂的过程中,企业需要面对许多问题,其中最关键的问…

Git:Git的一些基本操作

文章目录 基本认识使用方法创建本地仓库配置本地仓库 工作区、暂存区、版本库的概念添加文件版本回退撤销修改删除操作 基本认识 首先要对Git有一个基本的认知: Git本质上是一个版本控制器,可以对一个信息的多个版本进行一些控制,而能对版本…