怎么做cpa网站/seo关键词工具
背景
随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益;对于业界各种计算-存储分离架构的数据库而言,怎么用真实的端到端数据库 workload 去 benchmark 其底层存储系统一直存在以下难题:
对于数据库专用存储系统,不存在如 fio 一样的“事实标准” benchmark 模型
数据库专用存储系统实现与经典存储差别较大。若仍然将其当作经典存储来设计 benchmark,没有考虑数据库特点,会导致端到端存在“脱节”现象
为了解决上述问题,我们希望为字节跳动 veDB 底层的专用存储系统设计出契合数据库特点的 benchmark 模型。本次我们提出了 CDSBen 模型,利用 机器学习 方法,根据真实的数据库 端到端 事务 pattern 预测出对存储层的 IO pattern,从而对存储系统实现真实、精准的 benchmark。 相关文章 《 CDSBen: Benchmarking the Performance of Storage Services in Cloud-native Database System at ByteDance 》 发表于 VLDB 2023。
veDB 简介
veDB 是字节跳动基于计算-存储分离架构实现的,服务于 OLTP 场景的云原生分布式数据库,其目标是:
高弹性 : 计算层 & 存储层解耦,可独立按需扩缩容,解决单机扩展性问题。
高性价比 : 通过一系列深度的计算/存储内核优化,最终提升性能降低成本。
高易用性 : 完全兼容 MySQL、PG 等开源数据库引擎,降低学习/使用开销。
高可靠/高可用 : 计算/存储支持多副本、跨数据中心部署、快速 PITR 等能力,提升系统可用性 & 可靠性。
veDB 的系统架构如下所示:

从上图可知,veDB 整体分为三层:
接入层: 提供鉴权、流控、读写路由等功能。
计算层: 完全兼容 MySQL、PG 等开源数据库引擎,支持 DML、DDL、事务。
存储层: 为数据库设计的专用分布式存储系统,可以插件的形式支持不同数据库引擎。
veDB 存储层 Benchmark 存在的问题与挑战
veDB 的底层存储是专门为数据库设计的专用分布式存储系统,称为 veDB DBStore。在veDB DBStore 内部,又分为专门持久化 WAL 的日志存储模块和管理多版本数据 page 的 PageStore 模块。在此架构下,如果我们要对 veDB DBStore 进行 benchmark,之前我们常用的两种方式是:
采用数据库端到端的 benchmark 模型(如 TPC系列 & sysbench 系列),调整各种参数进行压测。
采用改造后的 YCSB/类 fio 工具,调整各种参数进行压测。
然而,以上的两种方式对于 veDB Store 来说存在以下挑战:
端到端 benchmark 模型(TPC/sysbench)本质都是并发执行 SQL statement,而存储层无法直接处理 SQL,所以用 TPC/sysbench 就不能脱离计算层来单独对存储层进行压测。
经改造的 ycsb/类 fio 工具可以单独对存储层进行压测,其对于经典存储系统而言具有普适性,但是经典存储的 IO pattern 又跟数据库的事务场景没太大关联,跟数据库“脱节”。
基于这些问题与挑战,我们针对 veDB Store 里管理多版本数据 page 的 PageStore 设计了 CDSBen 模型。我们尝试将端到端的数据库事务执行 pattern 跟存储系统的 IO pattern 匹配起来,从而在脱离计算层的情况下,能够以最真实的、端到端的 pattern 对 PageStore 进行 benchmark。
CDSBen 方案
Learning-based 模型
CDSBen 包括两个学习模型,一个是 IOPS 序列预测模型,基于循环神经网络;另一个是联合分布预测模型,基于随机森林,这个模型主要被用于预测读写请求的目标地址(PageStore segment ID)和写入数据量的联合分布。
CDSBen 的工作流程如下:
选择一个/多个真实业务场景,从 veDB 的计算层和存储层的 running log 中提取 workload 特征,并用所提取的特征训练 CDSBen 模型。
用户向 CDSBen 输入计算层的 workload 特征,CDSBen 会预测存储层对应的 workload 特征。
CDSBen 使用经过改造的 YCSB 生成具体的读写请求并直接在 veDB DBStore上运行,从而进行基准测试。
接下来,我们介绍 CDSBen 的具体细节,主要包括特征提取 ,模型设计和负荷生成三个部分。
特征提取指从计算层和存储层的 running log 中分别提取特征,这些特征会被分别用于 IOPS 预测模型和联合分布预测模型的输入和输出。
计算层的 workload 由多种事务类型混合构成,我们统计每一种事务的 TPS 作为计算层 workload 的特征向量,比如 veDB_OSS 业务包含四种单 SQL statement 的事务,分别为 SELECT、INSERT、UPDATE和DELETE;TPC-C 包含五种长事务,分别为 Line-Order、Payment、Order-Status、Delivery 和 Stock-Level。我们统计每一种事务的 TPS 作为计算层 workload 的特征向量。
存储层的 workload 由对 PageStore segment 的读写请求构成,针对读请求,我们关注该请求的时间戳和目标地址(Segment ID);针对写请求,我们关注时间戳,目标地址和写入数据量。我们从存储引擎的日志中得到每一个读写请求的具体信息,通过每个请求的时间戳,我们可以得出存储层 workload 的 IOPS 序列,其包含的信息可以同时描述存储层 workload 的强度和波动程度。我们也关注读写请求的目标地址和写入数据量的联合分布。
为了简化数据处理,我们将所有读请求看作写入数据量为0的写请求。我们使用一个二维数组表示读写请求在目标地址和写入数据量上的分布情况,如数组中的第 i 列第 j 个表示对于目标地址 i,写入数据量为 j 的读写请求的比例。
在特征提取完成之后,我们使用收集到的数据训练这两个模型。这两个模型的输入是计算层 workload 的特征向量,输出分别是 IOPS 序列和联合分布。在训练完成之后,我们输入所想要模拟的计算层 workload 的特征向量,CDSBen 会预测对应的存储层 workload 的特征向量。然后我们使用YCSB,基于预测出的存储层 workload 的特征向量,随机生成出读写请求并在存储层运行,进行性能测试。
需要注意的是,因为CDSBen在特征提取的过程中只关注计算层的TPS,而不关注 workload 内容本身(跑了什么SQL statement),因此针对每一种 workload,CDSBen 的模型必须被重新训练一次。但是在实践中我们发现,训练模型的开销较小(取决于模型本身的复杂度),这种开销是可以接受的。
CDSBen 的优势主要是准确,灵活,和易用。准确可直接参考论文中的实验结果或本文下面4.2节的部分截图。灵活和易用在于 CDSBen 可以像 YCSB 一样直接在存储层上运行,不需要像 TPC/sysbench 一样部署计算层,同时CDSBen 可以让用户在只输入想要模拟的计算层负荷的特征向量这一简单输入的情况下,生成贴近真实情况的读写请求,且有能力回答 what-if question( TPS 变化和事务比例变化)。
在实验中我们发现,与 YCSB 相比, CDSBen 生成的读写请求测量出的性能明显更贴近真实业务流量下的性能 。
模型效果

上图是模型生成的 IOPS 曲线 & 真实线上业务 IOPS 曲线的对比图。在验证过程中,我们采样了线上一个代号 SYNC 的业务,图中的黑线是真实的业务对 veDB DBStore 造成的 IOPS 曲线,蓝线是 CDSBen 模型预测的 IOPS 曲线。从图中可以看出两条曲线的重合度很高,且两条曲线的一些数学特征匹配度很高(真实 IOPS 的区间平均值是1046、预测 IOPS 的区间平均值是999)。
总结
在没有 CDSBen 模型的阶段,如果想 benchmark 底层的存储系统(veDB DBStore)的性能,我们无法在脱离计算层的情况下,用真实的业务 workload 对存储层进行压测。
CDSBen 的作用,就是帮我们在事务 pattern(SQL statement)和存储 IO pattern(segment 读写)之间搭起了转换的桥梁,让我们可以脱离计算层,用较真实的业务 workload 对 veDB DBStore 进行测试。其收益在于:
帮助数据库研发工程师在开发阶段对底层存储系统进行精准调优,保证 veDB 每个版本端到端上线时性能的稳定性,持续给用户提供高性能的数据库服务。
精准地 benchmark 存储系统在真实 workload 下的(极限)性能,是我们在分布式数据库存储层实现精准流控的前提条件,无论哪种业务场景都能平滑、稳定地服务大量 veDB 实例的真实业务流量。
相关文章:

VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型
背景 随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 OLTP 场景的分布式数据库强调的是从计算-存储分离架构获得弹性收益;对于业界各种计算-存储分离架构的数据库而言,怎么…...

crontab的配置参数和基础使用教程
crontab基本格式 crontab文件的基本格式如下: * * * * * command 这5个*代表: 第一个* :分钟(0-59)第二个* :小时(0-23)第三个* :一个月中的第几天(1-31)第四个* :月份(1-12)第五个* :一周中的第几天(0-6,其中0代表星期天) command代表要执行的命令。 crontab常用时间设置…...

基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
一、项目简介 本项目是一套基于Python开发的玛丽冒险小游戏程序,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试…...

K8S之使用yaml格式定义pod
mysql-pod.yaml # overView: # 1. web服务与db打包放在同一个pod中,本地通过localhost来访问,并附带存活性/可用性检测 # 2. 补充重启策略/镜像拉去策略 # 3. 对容器资源进行限制apiVersion: apps/v1 kind: Pod metadata:name: pub-oanamespace: hunte…...

SSH命令详解
本文转载于:https://blog.csdn.net/m0_60873746/article/details/130843325 SSH命令详解 SSH(Secure Shell)是一种用于安全登录远程计算机的网络协议。通过 SSH,可以在不受干扰的情况下,传输服务器操作系统和网络管理…...

Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法
Windows SQLYog连接不上VMbox Ubuntu2204 的Mysql解决方法 解决方法: 1、先检查以下mysql的端口状态 netstat -anp|grep mysql如果显示127.0.0.1:3306 则说明需要修改,若为: : :3306,则不用。 在**/etc/mysql/mysql.conf.d/mysqld.cnf**&am…...

Python中的日期和时间(一)datetime模块
Python处理时间的对象很多,常用的有time、datetime和calendar等。本文对常用的时间对象的使用进行学习。在开始学习具体的对象前,先学习几个计算机的时间概念。 UTC(全球标准时间):是全球范围内计时的科学标准,它基于…...

qt触控板手势检测
主要检测双指上下滚动、左右滚动、双指放大、缩小。 内容解释看注释,代码在mac上经过测试无问题,windows未测试。 bool WBScreenShotDialog::event(QEvent *event) {if (event->type() QEvent::Wheel) { // 双指滚动QWheelEvent *wheel static_…...

数据库 Redis
todo QARedis里面的有序结合用什么数据结构实现? QA Redis里面的有序结合用什么数据结构实现?...

Linux之权限
目录 一、shell运行原理 二、权限 1、对人操作 2、对角色和文件操作 修改权限(改属性): ①ugo- ②二进制数的表示 修改权限(改人): 三、权限的相关问题 1、目录的权限 2、umask 3、粘滞位 一、s…...

【产线故障】线上接口请求过慢如何排查?
文章目录 前言一、内存使用过高导致CPU满载案例代码分析思路 二、出现了类似死循环导致cpu负载案例代码分析思路 三、死锁案例代码分析思路 前言 首先线上接口变慢,原因可能有很多,有可能是网络,有可能是慢 SQL,有可能是服务本身…...

Increment Selection 插件
Increment Selection 插件实现递增 初次使用 按下快捷键 Alt Shift 鼠标左键向下拖拽 向下拖拽之后,在输入一个数字,比如我这里输入了一个数字1 然后按下快捷键 Ctrl Shift ← 进行选中数字 然后按下快捷键 Ctrl Alt i 建自动递增。 然后鼠标随…...

LeetCode刷题笔记【26】:贪心算法专题-4(柠檬水找零、根据身高重建队列、用最少数量的箭引爆气球)
文章目录 前置知识860.柠檬水找零题目描述解题思路代码 406.根据身高重建队列题目描述解题思路代码 452. 用最少数量的箭引爆气球题目描述踩坑-进行模拟正确思路的贪心 总结 前置知识 参考前文 参考文章: LeetCode刷题笔记【23】:贪心算法专题-1&#x…...

LeetCode:移除元素
题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度…...

Spring中的JdbcTemplate的使用
在最近的一个工作中,为了简单方便我就是用了Spring自带的JdbcTemplate来访问数据库,我以为之前自己很熟练的掌握,后来才发现我太天真了,踩了很多坑。 基本方法 JdbcTemplate自带很多方法可以执行SQL语句,以下我主要列举…...

机器学习——boosting之GBDT
现在要开始重点关注名字了,名字透漏了很多信息!名字暗藏线索! GBDT,Gradient Boosting Decision Tree: 梯度提升决策树 果然信息很丰富 梯度:意味着计算有迭代递进关系,但还不明确是怎么迭代递进的 提升&…...

如何选择报修管理系统?报修工单管理系统有哪些功能和优势?
报修管理系统是一种能够帮助企业快速反应设备故障和异常情况,并将问题及时通知到相关人员,并对问题进行统计和分析的系统。它能够有效提高企业的工作效率,并减少人员成本的支出。那么,报修工单管理系统有哪些功能和优势呢?下面以“…...

Matlab图像处理-
有些时候,直接利用图像的灰度直方图选择阈值不是非常直观,这时,可以利用图像三个通道的直方图来进行图像分割,操作步骤如上文所示,下图为原始图片。 下图为三通道直方图。 下图将三个通道的直方图会绘制到一个图表上&a…...

数据接口工程对接BI可视化大屏(二)创建BI空间
第2章 创建BI空间 2.1 SugarBI介绍 网站地址:https://cloud.baidu.com/product/sugar.html SugarBI是百度推出的自助BI报表分析和制作可视化数据大屏的强大工具。 基于百度Echarts提供丰富的图表组件,开箱即用、零代码操作、无需SQL,5分钟即可完成数…...

Struts.xml 配置文件说明
<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--…...

阿里巴巴API接口解析,实现获得商品详情
要解析阿里巴巴API接口并实现获取商品详情,你需要按照以下步骤进行操作: 了解阿里巴巴开放平台:访问阿里巴巴开放平台,并了解相关的API文档、开发者指南和规定。注册开发者账号:在阿里巴巴开放平台上注册一个开发者账…...

9.(Python数模)(分类模型一)K-means聚类
Python实现K-means聚类 K-means原理 K-means均值聚类算法作为最经典也是最基础的无标签分类学习算法。其实质就是根据两个数据点的距离去判断他们是否属于一类,对于一群点,就是类似用几个圆去框定这些点(簇),然后圆心…...

MinIO集群模式信息泄露漏洞(CVE-2023-28432)
前言:MinIO是一个用Golang开发的基于Apache License v2.0开源协议的对象存储服务。虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据。该漏洞会在前台泄露用户的账户和密码。 0x00 环境配置 …...

【从零单排Golang】第十五话:用sync.Once实现懒加载的用法和坑点
在使用Golang做后端开发的工程中,我们通常需要声明一些一些配置类或服务单例等在业务逻辑层面较为底层的实例。为了节省内存或是冷启动开销,我们通常采用lazy-load懒加载的方式去初始化这些实例。初始化单例这个行为是一个非常经典的并发处理的案例&…...

常见注意力机制
注意力机制 (具有自适应性) 18年提出的一种新的 卷积注意力模块 ;对前馈卷积神经网络 是一个 简单而有效的 注意力模块 ; 因为它的 轻量级和通用性 ,可以 无缝集成到任何CNN网络 当中, 对我们来讲&…...

解决报错之org.aspectj.lang不存在
一、IDEA在使用时,可能会遇到maven依赖包明明存在,但是build或者启动时,报找不存在。 解决办法:第一时间检查Setting->Maven-Runner红圈中的√有没有选上。 二、有时候,明明依赖包存在,但是Maven页签中…...

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi
文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作(一)JC-1-2.SpringBoot入门程序制作(二)JC-1-3.SpringBoot入门程序制作(三)JC-1-4.SpringBoot入门程序制作(四)…...

golang中如何判断字符串是否包含另一字符串
golang中如何判断字符串是否包含另一字符串 在Go语言中,可以使用strings.Contains()函数来判断一个字符串是否包含另一个字符串。该函数接受两个参数:要搜索的字符串和要查找的子字符串,如果子字符串存在于要搜索的字符串中,则返…...

ONNX OpenVino TensorRT MediaPipe NCNN Diffusers ComfyUI
框架 和Java生成的中间文件可以在JVM上运行一样,AI技术在具体落地应用方面,和其他软件技术一样,也需要具体的部署和实施的。既然要做部署,那就会有不同平台设备上的各种不同的部署方法和相关的部署架构工具 onnx 在训练模型时可以…...

java中使用 Integer 和 int 的 含义、使用方法 及之间的区别
学习目标: 学习目标如下: 明确 Integer 和 int 的 含义、使用方法 及之间的区别 学习内容: 一、区别: 1.Integer是int的包装类,int则是java的一种基本的数据类型; 2.Integer变量必须实例化之后才能使用&a…...