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

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.mzph.cn/news/644795.shtml

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

相关文章

knife4j调用接口报404

问题 Knife4j文档请求异常,请求资源的接口都是404 解决方法 就是请求路径出错了,我一开始还以为是拦截器拦截了来自knife4j发来的请求。。。

【Godot4自学手册】第四节动画状态机-AnimationTree

各位同学大家好!今天继续学习Godot4,本节将要学习AnimationTree,来实现控制主人公的动画。 一、AnimationPlay节点介绍 Godot引擎通过AnimationPlay节点实现了最灵活的动画系统,它几乎可以给godot中的任意节点的任意属性添加动画…

快速上手的AI工具-文心一言辅助学习

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

[完美解决]Vue/React项目运行时出现this[kHandle] = new _Hash(algorithm, xofLen)

问题出现的原因 出现这个问题是node.js 的版本问题,因为 node.js V17开始版本中发布的是OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。故此以前的项目在使用 nodejs V17以上版本后会报错。而github项目…

macOS磁盘管理工具Paragon Hard Disk Manager,轻松且安全的改变磁盘分区

Paragon Hard Disk Manager mac版是Macos上一款磁盘管理工具,可以帮助你轻松而且安全的随意改变磁盘分区的大小和各种分区参数,作为mac磁盘分区工具也是游刃有余,同时在找回数据的时候也非常容易,并且不会损坏原来的数据&#xff…

Java 序列化

Java 序列化 标记接口transient(转瞬即逝的)Java 序列化常用 APIserialVersionUIDwriteReplace 序列化机制可以让对象地保存到硬盘上,减轻内存压力的同时,也起了持久化的作用;也可以让 Java 对象在网络传输。一般我们可…

Java多态

多态 什么事多态: 同类型的对象表现出的不同的形态 多态的表现形式: 父类类型 对象名称子类对象; 满足多态的前提: 1.有继承或者实现的关系 2.有父类对象引用指向子类对象 (父类 变量名 new 子类(&#…

Qt Quick 项目(第二集Qt Quick Application创建)

上集回顾 Qt Quick 项目(第一集Qt Quick UI 项目项目创建) 如果将程序的用户界面称为前端,将程序中的数据存储和业务逻辑称为后端,那么传统Qt应用程序的前端和后端都是使用C++来完成的。对于现代软件开发而言,这里有一个存在已久的冲突:前端的演化速度要远快于后端。当用…

Javascript--变量命名规则

目录 变量 什么变量 变量的作用 如何使用变量 变量的命名规范 变量 什么变量 所谓变量,就是它的值会发生变化。即它的值不是固定不变的。 从内存结构上来看,它会在内存中开辟一片空间来存储这个值。而这个空间中的内容是会根据程序的运行过程中发生…

java策略模式简单分析

Java策略模式:灵活应对多重算法 欢迎来到本博客,今天我们将深入探讨Java中的策略模式。策略模式是一种行为设计模式,它允许你定义一系列算法,并将每个算法封装起来,使它们可以相互替换,而且可以独立于客户…

build-essential : Depends: gcc (>= 4:9.2) but it is not going to be installed

build-essential : Depends: gcc (> 4:9.2) but it is not going to be installedDepends: g (> 4:9.2) but it is not going to be installed解决方法: https://blog.csdn.net/android_sniper/article/details/121218593

【MySQL索引特性】

文章目录 1. 没有索引,可能会有什么问题2. 认识磁盘2.1 MySQL与存储2.2 先来研究一下磁盘:2.3 磁盘随机访问(Random Access)与连续访问(Sequential Access) 3. MySQL 与磁盘交互基本单位4. 建立共识5. 索引的理解5.1 建立测试表5.2 插入多条记录5.3 查看…

【C++干货铺】C++中的四种类型转换

个人主页点击直达:小白不是程序员 C系列专栏:C干货铺 代码仓库:Gitee 目录 C语言中的类型转换 为什么C需要四种类型转化 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast RTTI C语言中的类型转换 在C语言中&…

k8s部署Ingress

前提:有自备的域名,没有域名可用主机配置的域名解析代替测试 #主机配置的域名 vi /etc/hosts #追加以下内容 127.0.0.1 kuboard1、部署Ingress vi deploy.yaml #输入以下内容apiVersion: v1 kind: Namespace metadata:labels:app.kubernetes.io/instan…

第137期 Oracle的数据生命周期管理(20240123)

数据库管理137期 2024-01-23 第137期 Oracle的数据生命周期管理(20240123)1 ILM2 Heat Map3 ADO4 优点5 对比总结 第137期 Oracle的数据生命周期管理(20240123) 作者:胖头鱼的鱼缸(尹海文) Orac…

Zookeeper架构系列——集群模式

背景 架构图 集群模式详解 客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接,通过该连接发送请求、获取响应、获取监视事件和发送检测信号。如果与服务器的TCP连接中断,客户端将连接到其他服务器。 订购了ZooKeeper。ZooKeeper在每次更新时都…

微信小程序之全局配置-window和tabBar

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

JS进阶-深入对象(二)

拓展:深入对象主要介绍的是Js的构造函数,实例成员,静态成员,其中构造函数和Java种的构造函数用法相似,思想是一样的,但静态成员和实例成员和java种的有比较大的差别,需要认真理解 • 创建对象三…

CHS_04.2.2.3_2+调度器和闲逛进程

CHS_04.2.2.3_2调度器和闲逛进程 调度器/调度程序(scheduler)闲逛进程 调度器/调度程序(scheduler) 调度器 或者叫调度程序 很简单的一个概念 调度程序是操作系统内核的一个非常非常重要的一个程序模块 我们说一个进程会在就绪运…

第二百八十五回

文章目录 概念介绍知识回顾使用方法示例代码 我们在上一章回中介绍了BoxDecoration Widget相关的内容,本章回中将介绍命名路由(Route).闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的命名路由是路由(Route)中的一种,主要用来当作导航&…