RubbleDB: CPU-Efficient Replication with NVMe-oF——论文泛读

news2024/11/17 16:00:26

ATC 2023 Paper 论文阅读笔记整理

问题

由于需要执行昂贵的后台压缩操作,CPU 往往是持久键值存储的性能瓶颈。在日志结构合并树(LSM树),标准的基于磁盘的键值存储设计[2,4,8,22,41],压缩可以在生产工作负载中消耗高达45%的CPU。我们实验发现使用RocksDB,压缩消耗总CPU周期的72%。

在包含多个相同数据副本的复制存储系统中,我们观察到 CPU 可以用多余的网络带宽来换取。在复制键值存储的情况下,压缩操作只需在一个节点上执行一次,已经压缩过的数据可以传输到其他节点的磁盘上,节省了它们大量的 CPU 时间。而且现代数据中心的网络流量往往没有得到充分利用;例如,Alibaba[1]和Snowflake[47]的集群跟踪显示,50-75%的网络容量始终保持空闲。

为了进一步降低总 CPU 消耗,文件复制协议可以利用 NVMe-oF,这是一种网络存储协议,可以完全将网络和存储数据路径卸载到网卡,不需要目标节点的 CPU 参与。然而,NVMe-oF 是一种单向协议,如果使用不当,很容易在目标节点引起数据损坏或数据丢失。

挑战

使用NVMe oF跨存储节点复制文件会带来两个挑战。首先,由于远程节点的本地文件系统(例如ext4)不参与写入文件,它不知道更新的文件及其位置,无法读取它。其次,运行在远程节点上的键值应用程序也必须与传入的文件同步。它的应用程序级内存数据结构必须更新,以便从本地存储设备上更新的新文件中查找和读取数据,并且不能从压缩过程中删除的陈旧文件中读取数据。

本文方法

我们设计了 RubbleDB,利用 NVMe-oF 进行高效复制的键值存储。关键贡献是在远程节点提供文件系统同步和应用程序同步的机制,因此它可以安全、正确地读取通过NVMe oF写入的数据。

  • 为了文件系统同步,RubbleDB 在所有节点上预分配所有磁盘数据为固定大小的固定位置文件。RubbleDB 维护一个文件映射,存储文件名与预分配文件位置之间的映射,并指示文件是否包含实时数据或旧数据。当复制新文件时,它被发送到一个不包含实时文件的预分配位置。当在压缩过程中删除文件时,它只是在映射中标记为旧,实际上并未删除。

  • 对于应用级同步,RubbleDB 需要保持次要节点的内存数据结构同步,因此当它们从磁盘读取数据时,它们读取最新的对象版本。通过强制在副本之间应用版本编辑顺序的方法,确保在次要节点中对内存数据结构进行的更改与主节点执行的压缩操作一致。它还仔细同步从磁盘或内存中刷新的对象的删除,以避免在次要节点中以无序方式处理时意外删除对象。

开源代码:https://github.com/lei-houjyu/RubbleDB

我们在 RocksDB 之上实现了 RubbleDB,并展示它在写入密集型工作负载下相对于复制键值存储(如在所有副本节点上执行紧凑操作的 ZippyDB)提供了一致的 CPU 节省,吞吐量增加了最多 1.9 倍,并将尾部延迟降低了最多 93.4%。

实验

实验环境:在CloudLab上进行所有实验[24,40]。除非另有规定,复制组在多台r6525服务器上运行,客户端在一台带有复制器的c6420计算机上运行。每个r6525服务器都有两个2.8 GHz的32核AMD 7543 CPU、256 GB DDR4内存、一个1.6 TB的Dell Enterprise SSD和一个双端口Mellanox ConnectX-6 100 GB NIC。默认情况下,RubbleDB使用Mellanox NIC的NVMe oF卸载功能。c6420服务器有两个2.6 GHz的16核Intel Xeon Gold 6142 CPU和384 GB DDR4内存。操作系统是Ubuntu 20.04 LTS,Linux版本为5.4.0。

数据集:YCSB[20],Twitter Cluster[49]

实验对比:CPU占用时间,I/O节省,网络开销,吞吐量,尾延迟,不同复制比,故障恢复

总结

在包含多个数据副本的KV存储系统中,如何减少压缩的CPU利用率。作者利用网络和NVME-oF,在单个节点上压缩,压缩后传输到其他复制节点上。为了实现文件系统的同步,提出为数据预分配固定的磁盘空间,通过维护映射表确保复制节点的文件系统同步。为了实现应用级同步,提出在副本之间应用版本编辑顺序的方法,确保各复制节点执行顺序一致,避免删除导致的节点间不一致问题。

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

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

相关文章

基于FPGA的OFDM基带发射机的设计与实现

文章目录 前言一、OFDM描述二、本系统的实现参照 1.IEEE 802.11a协议主要参数2.不同调制方式与速率 3. IFFT映射关系4. IEEE 802.11a物理层规范5. PPDU帧格式三、设计与实现 1.扰码2.卷积编码与删余3.数据交织4.符号调制5.导频插入6.IFFT变换 7.循环前缀&加窗8.训练序列生成…

快速上手的AI工具-文心一言绘本创作

前言 大家好晚上好,现在AI技术的发展,它已经渗透到我们生活的各个层面。对于普通人来说,理解并有效利用AI技术不仅能增强个人竞争力,还能在日常生活中带来便利。无论是提高工作效率,还是优化日常任务,AI工具…

RKE快速搭建离线k8s集群并用rancher管理界面

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 本文记录使用RKE快速搭建一套k8s集群过程,使用的rancher老版本2.5.7(当前最新版为2.7)。适用…

Xftp连接不上Linux虚拟机的原因解决方法

前言: 在当今数字化时代,远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而,有时候,面对Xftp连接不上Linux虚拟机的问题,我们可能感到困惑和无措。这个看似小问题可能导致工作中断,因…

NQA网络质量分析

概念 网络质量分析是设备上集成网络测试功能,不仅可以实现对网络运行情况的准确测试,还可以输出统计信息,有效的节约成本。 NQA可以检测网络上运行的各种协议的性能,使运营商能够实时采集到各种网络运行指标。 例如:…

动态设置和获取类实例变量(setattr、getattr)

动态设置和获取类实例变量 写在前面的话setattr 示例代码getattr 示例代码: 写在前面的话 在pyqt5的界面设置中,有很多相同的Qlabel、Qpushbutton、Qslider的设置,这些具有相同属性的界面模块可能需要不同的触发方法,定义为self.…

JavaScript中的DOM导航

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 在我们的日常生活中,JavaScript已经成为了一种无处不在的…

HCIA——26E-mall、MIME、POP3、IMAP、电子邮件系统的组成结构、电子邮件的发送,接收过程、MIME 与SMTP 的关系

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

SpringBoot+Vue充电桩管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1. 分页获取预约数据代码2.保存预约信息代码3.修改订单状态代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootVue框架开发的充电桩管理系统。首先&…

Centos使用Docker搭建自己的Gitlab社区版16.8.0-ce.0(设置汉化 修改密码 设置SSH秘钥 添加拉取命令端口号 备份至网盘和恢复)

根据我的经验 部署Gitlab(社区版) 至少需要2核4g的服务器 带宽3~4M 1. 在自己电脑上安装终端:宝塔ssl终端 或者 FinalShell,根据喜好安装即可 http://www.hostbuf.com/t/988.html http://www.hostbuf.com/downloads/finalshell_w…

Pytorch中Dataset和dadaloader的理解

不同的数据集在形式上千差万别,为了能够统一用于模型的训练,Pytorch框架下定义了一个dataset类和一个dataloader类。 dataset用于获取数据集中的样本,dataloader 用于抽取部分样本用于训练。比如说一个用于分割任务的图像数据集的结构如图1所…

蓝桥杯---三羊献瑞

观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 答案 代码 public class _03三羊献瑞 {public static void main(String[] args) {//c 生 b 瑞 g 献 d 辉…

Flink多流转换(1)—— 分流合流

目录 分流 代码示例 使用侧输出流 合流 联合(Union) 连接(Connect) 简单划分的话,多流转换可以分为“分流”和“合流”两大类 目前分流的操作一般是通过侧输出流(side output)来实现&…

【后端技术】术有千法,道本归一

目录 1.概述 2.机器的问题 2.1.计算 2.2.存储 2.3.传输 3.人的问题 3.1.代码工程的管理 3.2.过程的把控 4.总结 1.概述 术有千法,道本归一。 之所以这样说,是因为当前出现的纷繁复杂的后端技术,其本质其实都是为了解决同一套问题。…

蓝桥杯题目解析 --矩形切割

先看题: 题目中的例子解析: 5*3 切一刀最大的,肯定是3*3,切完后只剩2*3,切一刀最大的,肯定是2*2,切完后只剩2*1,切一刀最大的,肯定是1*1,切完后只剩1*1&…

浅谈手机APP测试(流程)

前言 APP测试是一个广泛的概念,根据每个app的应用场景不一样,测试的方向也略微的不同,在测试过程中需要灵活应用自身所知的测试手段。 今天就跟大家简单聊聊手机APP测试的一些相关内容。 APP开发流程 (1) 拿到需求分…

【STM32】USB程序烧录需要重新上电 软件复位方法

文章目录 一、问题二、解决思路2.1 直接插拔USB2.2 给芯片复位 三、解决方法3.1 别人的解决方法3.2 在下载界面进行设置 一、问题 最近学习STM32的USB功能,主要是想要使用虚拟串口功能(VCP),发现每次烧录之后都需要重新上电才可以…

Parade Series - Android Studio

硬件支持 CPU i7 RAM 16Gb -------------- ------- Java 3Gb Android 33GbJava Enviroment C:\ ├─ Java │ ├─ jdk1.8.0_181 │ ├─ jre1.8.0_181 │ ├─ maven-3.8.5 │ └─ gradle-6.5 └─ Cache├─ gr…

Python实现力扣经典面试题——删除有序数组中的重复项

题目:删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nu…

在Word中插入高亮/好看代码

Md2All 一个markdown工具 Md2All 网址 代码一定要用code 高亮主题可选 atom-one-light > 复制到word > 调节字体可选Cnsolas, 间距等 效果 另一个高亮工具 效果