当前位置: 首页 > news >正文

VLDB 2023 | CDSBen: 字节跳动 veDB 数据库存储系统性能测试模型

背景

随着业务爆炸式增长与云原生技术的日渐成熟,大量云原生分布式数据库产品如雨后春笋般涌现,其中一部分主打 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 的系统架构如下所示:

b5c72a6f0245ccc6205e20653871d704.png

从上图可知,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 生成的读写请求测量出的性能明显更贴近真实业务流量下的性能

模型效果

f16abbec59862737aa0a8b6fa2e9b37e.png

上图是模型生成的 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学习者。 包含:项目源码、项目文档等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xf…...

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语句,以下我主要列举&#xf…...

机器学习——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> <!--…...

深入解析CC Switch架构:构建AI开发工具统一管理引擎

深入解析CC Switch架构&#xff1a;构建AI开发工具统一管理引擎 【免费下载链接】cc-switch A cross-platform desktop All-in-One assistant tool for Claude Code, Codex, OpenCode, openclaw & Gemini CLI. 项目地址: https://gitcode.com/GitHub_Trending/cc/cc-swit…...

数据库索引原理:B+树与哈希索引的深度对决

数据库索引原理&#xff1a;B树与哈希索引的深度对决在数据库的世界里&#xff0c;索引是提升查询性能的“核武器”。如果把数据库表比作一本厚厚的书&#xff0c;那么索引就是书中的目录。没有目录&#xff0c;想要找到特定的知识点只能一页页翻找&#xff08;全表扫描&#x…...

别再只记*#*#284#*#*了!揭秘小米手机日志抓取的‘售后模式’:CIT工具(*#*#6484#*#*)的隐藏用法与解读

解锁小米手机CIT工具的隐藏潜能&#xff1a;从硬件诊断到日志深度解析 在智能手机高度普及的今天&#xff0c;用户对设备问题的自主排查需求日益增长。小米手机内置的CIT工具&#xff08;Customer Interface Test&#xff09;作为售后服务的核心诊断利器&#xff0c;其实蕴藏着…...

别再死记硬背了!用74HC系列CMOS芯片,手把手带你理解逻辑门电平与噪声容限

74HC系列CMOS芯片实战&#xff1a;从数据手册到面包板的逻辑门电平全解析 当你在深夜调试一块74HC04反相器搭建的振荡电路时&#xff0c;示波器上本该清晰的方波却出现了毛刺和畸变——这种场景对电子爱好者来说再熟悉不过。本文将以74HC系列CMOS芯片为核心&#xff0c;通过五…...

3步轻松延长Navicat使用周期:Mac用户实用指南

3步轻松延长Navicat使用周期&#xff1a;Mac用户实用指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat试用期到期烦恼吗&#xff1f;作为数据库管理的得力工具…...

2.1 task_struct 进程描述符详解

1. 进程描述符概述 在 Linux 内核中&#xff0c;每个进程都有一个 task_struct 结构体来描述其所有信息。这个结构体是内核中最复杂的结构之一&#xff0c;包含了进程管理的方方面面。 // include/linux/sched.h struct task_struct {volatile long state; // 进程状态…...

【Python】安装 Python 环境

需要安装的环境主要是两个部分&#xff1a; 运行环境&#xff1a;Python开发环境&#xff1a;PyCharm 一、安装 Python 1、找到官方网站 Welcome to Python.org 2、找到下载页面 选择 "Download for Windows"&#xff1a; 现在主流使用的 Python 版本是 Python…...

自动驾驶小白必看:航向角、偏航角、前轮转角到底有什么区别?

自动驾驶入门&#xff1a;航向角、偏航角与前轮转角的本质差异与应用解析 刚接触自动驾驶技术时&#xff0c;最让人困惑的莫过于那些描述车辆方向的专业术语——航向角、偏航角、前轮转角&#xff0c;它们看起来相似却又各有所指。理解这些概念不仅是掌握车辆控制的基础&#…...

Graphormer在放射性药物中的应用:螯合剂分子稳定常数与配位能力预测

Graphormer在放射性药物中的应用&#xff1a;螯合剂分子稳定常数与配位能力预测 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准测试中表现优异&a…...

5分钟部署阿里RexUniNLU:Web界面操作,无需编程基础

5分钟部署阿里RexUniNLU&#xff1a;Web界面操作&#xff0c;无需编程基础 1. 认识RexUniNLU&#xff1a;零样本理解的神器 想象一下&#xff0c;你刚接手一个新项目&#xff0c;老板丢给你一堆用户评论&#xff0c;要求你快速分析出大家对产品"屏幕"、"续航&…...