优化稠密点之尝试通过 Balance 来分摊访问压力

news2025/2/1 11:52:57

回忆之前的官方架构图,数据在 storaged 中是分片的,且 raft 协议中只有 leader 才会处理请求,所以,重新进行数据平衡操作,是有可能将多个稠密点分摊到不同的服务上以减轻单一服务的压力。同时,我们对整个集群进行 Compaction 操作(由于 storaged 内部使用了 RocksDB 作为存储引擎,数据是通过追加来进行修改的,Compaction 可以清楚过时的数据,提高访问效率)。

操作之后集群的整体 CPU 是有一定的下降,同时服务的响应速度也有小幅的提升,如下图。

但在运行一段时间之后仍然遇到了 CPU 突然增加的情况,稠密点显然没有被平衡掉,也说明在分片这个层面是没法缓解稠密点带来的访问压力的

优化稠密点之尝试通过配置缓解锁竞争

进一步调研出现问题的 storaged 的 CPU 的使用率,可以看到当流量增加的时候,内核占用的 CPU 非常高,如下图所示:

抓取 perf 看到,锁竞争比较激烈,即使在 “正常” 情况下,锁的占比也很大,而在竞争激烈的时候,出问题的 storaged 服务上这个比例超过了 50%。如下图所示:

所以我们从减少冲突入手,对 NebulaGraph 集群主要做了如下改动:

重新上线之后,整个集群服务变得比较平滑,CPU 的负载也比较低,正常情况下锁竞争也下降不少(下图),酒店也成功地将流量推送到了 100%。

但运行了一段时间之后,我们仍然遇到了服务响应突然变慢的情况,热点访问带来的压力的确超过了优化带来的提升。

优化稠密点之尝试减小锁的颗粒度

考虑到在分片级别的 balance 不起作用,而 CPU 的上升主要是因为锁竞争造成的,那我们想到如果减小锁的颗粒度,是不是就可以尽可能减小竞争?RocksDB 的 LRUCache 允许调整 shared 数量,我们对此进行了修改:

版本LRUCache 默认分片数方式
v2.5.02^8修改代码,将分片改成 2^10
v2.6.1 及以上2^8通过配置 cache_bucket_exp = 10,将分片数改为 2^10

观察下来效果不明显,无法解决热点竞争导致的雪崩问题。其本质同 balance 操作一样,只是粒度的大小的区别,在热点非常集中的情况下,在数据层面进行处理是走不通的。

优化稠密点之尝试使用 ClockCache

竞争的锁来源是 block cache 造成的。NebulaGraph storaged 使用 RocksDB 作为存储,其使用的是 LRUCache 作为 block cache 等一系列 cache 的存储模块,LRUCache 在任何类型的访问的时候需要需要加锁操作,以进行一些 LRU 信息的更新,排序的调整及数据的淘汰,存在吞吐量的限制。

由于我们主要面临的就是锁竞争,在业务数据没法变更的情况下,我们希望其他 cache 模块来提升访问的吞吐。按照 RocksDB 官方介绍,其还支持一种 cache 类型 ClockCache,特点是在查询时不需要加锁,只有在插入时才需要加锁,会有更大的访问吞吐,考虑到我们主要是读操作,看起来 ClockCache 会比较合适。

LRU cache 和 Clock cache 的区别:https://rocksdb.org.cn/doc/Block-Cache.html

经过修改源码和重新编译,我们将缓存模块改成了 ClockCache,如下图所示:

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

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

相关文章

记录C,C++关键字的位置,直接跳过注释和字符串文本。(修正)

依据第二版本&#xff0c;可以写一个跳过注释的查找函数 C_IndexOfWord Java_IndexOfWord CSharp_IndexOfWord 还有一种方法&#xff0c;可以先把所有注释用空格代替&#xff0c;查出的字符位置也不变。 以前版本&#xff1a; DList<TextColor> Syntax::GetTextColorP…

(三分钟)学会kd-tree 激光SLAM点云搜索常见

Kd-Tree&#xff1a; 今天来介绍一下有关Kdtree的相关概念&#xff0c;它是一维线段树的多维推广。Kd-tree常用在激光点云编程中使用&#xff0c;Kd-tree简称k维树&#xff0c;是一种空间划分的数据结构&#xff0c;常被用于高维空间中的搜索&#xff0c;比如范围搜索和最近邻…

动态规划问题——最长公共子序列问题

题目: 给定两个字符串 str1 和 str2 &#xff0c;返回两个字符串的最长公共子序列。 举例&#xff1a; str1 "1A2C3D4B56" str2 "B1D23CA45B6A" 最长公共子序列为&#xff1a;"123456" 或 "12C4B6" 返回哪个都行 思路&#xf…

「内核知识」Linux下的系统调用write

本文以x86_64平台为例&#xff0c;分析linux下的系统调用是如何被执行的。 假设目标系统调用是&#xff0c;其对应的内核源码为&#xff1a; // fs/read_write.c SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf,size_t, count) {return ksys_write(fd, …

通过国产化低代码平台搭建设备管理系统,助力中国航天企业信息化建设

编者按&#xff1a;掌握软件自主权&#xff0c;支持信创国产化。本文分析了国产化低代码平台的意义&#xff0c;并介绍了低低代码平台是如何为航天企业提高信息化建设水平的。 关键词&#xff1a;国产化&#xff0c;第三方对接能力&#xff0c;文件管理 以容器、微服务、DevOp…

Linux内核中的open方法

在linux下&#xff0c;假设我们想打开文件/dev/tty&#xff0c;我们可以使用系统调用open&#xff0c;比如&#xff1a; int fd open("/dev/tty", O_RDWR, 0); 本文将从源码角度看下&#xff0c;在linux内核中&#xff0c;open方法是如何打开文件的。 首先看下入…

【opencv】centos下opencv的编译(带opencv_contrib扩展包)

目录1.安装cmake2.opencv安装文件准备可选安装3.进行编译4.进行安装5.使用测试编译步骤&#xff1a;1.安装cmake 安装wget: 应该已安装gcc工具套组&#xff1a; yum install sudo yum install -y gcc gcc-c make automake yum install -y wget wget https://cmake.org/files…

【树莓派不吃灰】兄弟连篇④ Shell编程

目录1、Shell基础1.1 脚本执行方式1.1.1 echo1.1.2 脚本执行1.2 Bash基本功能1.2.1 history1.2.2 命令补全1.2.3 命令别名1.2.4 常用快捷键1.2.5 输出输入重定向1.2.6 多命令顺序执行与管道符1.2.7 通配符和特殊符号1.3 Bash变量1.3.1 用户自定义变量1.3.2 环境变量1.3.3 位置变…

Hudi入门到实战

简介 Apache Hudi&#xff08;Hadoop Upserts Delete and Incremental&#xff09;是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服务、数据集群/压缩优化和并发&#xff0c;同时保持…

用于医学诊断的菁染料ICG-Sulfo-OSu,活性基团修饰ICG

英文名&#xff1a;ICG-Sulfo-EG4-OSu 激发波长: 780nm; 发射波长: 800nm 分子量: 1777.36 溶剂:DMSO 凯新生物描述&#xff1a; (ICG)是一种用于医学诊断的菁染料。它用于测定心输出量、肝功能和肝脏血流量&#xff0c;以及用于眼科血管造影。它的峰值光谱吸收接近800纳米…

【课程整理】随机系统期末整理

文章目录1 概率论部分 (1-4)概率空间随机变量概率分布随机变量的函数仍然是随机变量条件期望2 随机过程 (5-7)随机过程Martingale停时马尔科夫链3 参数估计 (8-10)参数估计问题充分统计量贝叶斯估计非随机估计部分思维导图如下&#xff0c;私信发送html完整版 1 概率论部分 (1-…

3.path路径模块

目录 1 路径问题 2 直接给绝对路径 3 用 __dirname 表示绝对路径 4 path模块常用方法 4.1 路径拼接 path.join() 4.2 从路径字符串中解析出文件名 path.basename() 4.3 获取路径中的扩展名 path.extname() 1 路径问题 当我们使用 ./ 或是 ../ 表示相对路径的时…

小林Coding阅读笔记:操作系统篇之硬件结构,中断问题

前言 参考/导流&#xff1a; 小林coding - 2.6 什么是软中断&#xff1f;学习意义 学习CPU与外设如何去提升处理效率的设计思想&#xff0c;异步机制的理解与借鉴掌握相关的Linux命令&#xff0c;帮助问题排查 相关说明 该篇博文是个人阅读的重要梳理&#xff0c;仅做简单参…

【修饰性PEG供应商】mPEG-DBCO_DBCO mPEG_甲氧基聚乙二醇环辛炔

【产品描述】 西安凯新生物科技有限公司是国内业PEG供应商&#xff0c;可以提供不同分子量的PEG衍生物&#xff0c;小分子PEG的循环节可以做到1-36个&#xff0c;高分子PEG分子量从1000-40000不等&#xff0c;可以修饰的基团有&#xff1a;氨基类&#xff0c;NHBOC类&#xff0…

多层板PCB设计中电源平面相对地平面为什么要进行内缩

大家是否观察过&#xff0c;有一些人绘制的PCB&#xff0c;在GND层和电源层会进行一定程度的内缩设计&#xff0c;那么大家有没有想过为什么要内缩呢。需要搞清楚这个问题&#xff0c;我们需要来先了解一个知识点&#xff0c;那就是“20H”原则&#xff1a; 20H原则主要是为了减…

MySQL的数据结构

阅读目录MySQL 数据结构用 btree 做的为什么不用红黑树叉树呢&#xff1f;什么是 B-Tree&#xff08;B-树&#xff09;&#xff1f;什么是 BTree&#xff1f;BTree 相对于 B-Tree 的几点不同MySQL 数据结构用 btree 做的 为什么不用红黑树叉树呢&#xff1f; 不用红黑树是因为…

计算机3D数学基础 旋转的三种表示方法 学习笔记

旋转的三种表示方法&#xff1a;1、矩阵 2、欧拉角 3、四元数 矩阵的缺点&#xff0c;记录旋转角度要记录9个数 欧拉角的heading就是绕着y(绿色轴)轴30 &#xff0c;容易理解 三种旋转方式的优缺点&#xff1a; 矩阵&#xff1a;缺点&#xff1a;1、上手难&#xff0c;记…

Android常用布局总结之(LinearLayout、TableLayout、GridLayout、RelativeLayout)

一、LinearLayout 线性布局 LinearLayout 是一个视图组&#xff0c;用于使所有子视图在单个方向&#xff08;垂直或水平&#xff09;保持对齐。您可以使用 android:orientation 属性指定布局方向。 android:orientation&#xff0c;指定布局方向&#xff0c;vertical-竖向布局…

在线点餐网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 管理员&#xff1a; 1、管理门店介绍、联系我们 2、对公告类型、公告信息增删改查 3、对菜品类型、菜品信息增册改查 4…

【计算机考研408】2023考研408相关题目预测总结

目录数据结构选择1-时间复杂度选择2-栈或者队列选择3-二叉树、树、森林选择4-并查集选择5-红黑树选择6-图的概念选择7-图的应用选择8-B树&#xff08;B-树&#xff09;选择8-B树选择8-B树与B树的区别选择8-B树与B树的相关应用选择9-查找算法选择10、11-排序算法综合应用题41-算…