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 子类(&#…

【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) 调度器 或者叫调度程序 很简单的一个概念 调度程序是操作系统内核的一个非常非常重要的一个程序模块 我们说一个进程会在就绪运…

建议CSDN不要这样吃人xue馒头

程序员裁员潮:技术变革下的职业危机 2023年以来,谷歌、阿里巴巴各个科技公司都在裁员,程序员的日子也不好过。 讨论在技术变革下,裁员对于程序员的影响到底有多大,是非常有意义的话题,但是为什么要用“一…

Vulnhub-dc5

靶场下载 https://download.vulnhub.com/dc/DC-5.zip 信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-21 20:56 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00057s latency). MAC Address:…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第1章 统计学习方法概论

文章目录 第1章 统计学习方法概论1.1 统计学习1.统计学习的特点2.统计学习的对象3.统计学习的目的4.统计学习的方法1.2.1 基本概念1.2.2 问题的形式化 1.3 统计学习三要素1.3.1 模型1.3.2 策略1.3.3 算法 1.4 模型评估与模型选择1…

零基础学Python(5)— 基本数据类型

前言:Hello大家好,我是小哥谈。在内存中存储的数据可以有多种类型。例如:一个人的姓名可以用字符型存储,年龄可以使用数值型存储,婚姻状况可以使用布尔型存储。这里的字符型、数值型、布尔型都是Python语言中提供的基本…

WorkPlus打造高效协作的即时通讯工具,提升工作效率

在当今互联网时代,高效沟通和协作是企业成功的关键要素。而即时通讯成为了实现快速沟通和实时协作的利器。作为一款领先的即时通讯工具,WorkPlus以其卓越的性能和独特的功能,助力企业实现高效的沟通和协作。 为什么选择WorkPlus作为即时通讯…