RocksDB是如何实现存算分离的

核心参考文献: Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde, O. (2023). Disaggregating RocksDB: A Production Experience. Proceedings of the ACM on Management of Data, 1(2), 1–24. https://doi.org/10.1145/3589772

动机

为什么RocksDB要做存算分离?

单机的磁盘(存储能力)和CPU(计算能力)的配比常常不均衡,有时计算能力会有富裕,有时存储能力会有富裕。而且每个服务都需要预留一些存储空间。积少成多就会导致存储空间或计算能力的浪费。如果能把磁盘放在一个池子里,就能减少要预留的空间(100个服务,各预留1TB,vs 100个服务,总共预留10TB),避免空间浪费

为什么基于RocksDB改造而不是从头开发?

  1. 即使是在存算分离的场景,大部分用例也是受限于存储空间,而非IO吞吐量,RocksDB在存储时需要多占用的空间较少
  2. 方便用户迁移,几乎没有学习成本
  3. 维护一个引擎比维护两个引擎的工作量更小
  4. LSM tree很适合拉远存储(disaggregated storage)。

什么时候不要用存算分离?

  1. 对时延和吞吐量有极高要求的场景(笔者注:通过合理的设计,充分利用本地缓存,事实上存算分离的架构可以满足极致时延和极高吞吐量场景的需求)
  2. 要求简单可靠的场景。例如OBS的元信息管理就很难再使用一套存算分离的元信息存储系统。

挑战和对策

挑战1:如何在存算分离的条件下提供令人满意的性能?

对策1.1 优化IO时延

  • 如果第一个IO请求在一定时间内没有返回,就立即发出第二个(相同的)IO请求
  • hedged quorum full block wirtes

对策1.2 缓存元信息

  • 缓存目录结构到本地。列出目录结构是高频操作,并且目录结构只能由一个进程修改,因此可以对目录结构进行缓存。

对策1.3 在本地磁盘缓存脏的block(secondary cache),效果如图

在这里插入图片描述

对策1.4 RocksDB IO调优

  • 增大compaction read size 到4MB或8MB,增大compaction write buffer到64MB或更大
  • 从拉远存储中预读取更多的数据(可以基于历史情况预测要预读的数据大小)

对策1.5 同时发出多个IO请求以降低MultiGet时延

挑战2:如何以较低的开销支持多副本?

  • SST数据文件需要同时具备高可靠(高持久性)和低开销,使用Facebook Tectonic文件系统提供的 [12,8] encoding ,即可仅使用1.5倍的空间和写入贷款,同时能够达到SLA要求
  • WAL和其他日志文件需要支持低时延的写入。使用5路副本。

挑战3:存在多副本时,如何确保只有一个进程能修改(写)同一份数据?

对zookeeper或etcd,paxos或raft有一定了解的读者能发现,这一问题是经典的分布式共识问题。要达成共识的对象是当前哪个进程能够修改数据。
RocksDB使用了IO Fencing技术来实现。该技术类似于一种基于单调递增时间戳的分布式锁。

其他修改

允许远程IO操作和本地IO操作使用不同的时延,从而降低远程操作超时的可能性

区分哪些远程操作的错误可以重试,避免出错后rocksdb立即进入只读状态

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

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

相关文章

YOLOv5独家改进:轻量级原创自研 | 一种多尺度的GSConv卷积变体,轻量化的同时能够实现涨点 | 新颖的轻量级网络

💡💡💡本文独家改进:1)基于GSConv提出了一种Multi-Scale Ghost Conv的卷积变体,保证轻量级的同时实现涨点,2)同时结合Bottleneck,设计了一种新颖的轻量级网络。 💡💡💡在多个数据集验证能够涨点,同时跟yolov5s进行参数量对比: parameters、GFLOPs都有大幅…

乐鑫与 Elektor 杂志合作推出特刊,聚焦 AIoT 创新

在新一年的起始之际,我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台,自 20 世纪 60 年代起,就引领着电子制造的发展潮流。如今,它已经发展…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(1)

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

如何写好论文——(4)确立研究目标的两个原则

一、市场需求——大处着眼 不管目前自己的能力和资源是多么的有限,也要眼光长远,不要老是局限于眼下,只做一些细枝末节、无足轻重的工作。 二、自身条件——小事着手 着眼于自身目前的实际情况,踏踏实实从小事做起 引言就是把自…

Leetcode—2396. 严格回文的数字【中等】

2024每日刷题(一零六) Leetcode—2396. 严格回文的数字 算法思想 实现代码 class Solution { public:bool isStrictlyPalindromic(int n) {return false;} };运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦&…

【linux】文本处理命令-grep、awk、sed使用(1)

作用: grep数据查找定位awk数据切片sed数据修改 类比SQL: grepselect *from tableawkselect field from tablesedupdate table set fieldnew where fieldold 一、grep 1.1 grep* Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟g…

基于simulink的模糊PID控制器建模与仿真,并对比PID控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1PID控制器原理 4.2 模糊PID控制器原理 5.完整工程文件 1.课题概述 在simulink,分别建模实现一个模糊PID控制器和一个PID控制器,然后将PID控制器的控制输出和模糊PID的控制输出…

剑指offer面试题10 二进制中1的个数

考察点 位运算知识点 位运算针对二进制位进行运算&#xff0c;包括(&)与运算,(|)或运算&#xff0c;(^)异或运算,(~)取反,(<<)左 移位,(>>)右移位,(>>>)无符号右移运算 与运算&#xff1a;0&00,0&10,1&00,1&11 或运算&#xff1a;0…

closest的用法

1. closest的概念 Element.closest() 是一个DOM&#xff08;文档对象模型&#xff09;方法&#xff0c;用于从当前元素开始&#xff0c;沿着DOM树向上遍历&#xff0c;直到找到匹配指定选择器的第一个元素。如果没有找到匹配的元素&#xff0c;则返回 null。 2. closest的使用…

【vue2】路由之 Vue Router

文章目录 一、安装二、基础使用1、简单的示例2、动态路由2.1 定义动态路径参数2.2 获取动态路径的参数2.3 捕获所有路由 3、嵌套路由4、编程式的导航4.1 router.push4.2 router.replace4.3 router.go(n) 5、命名路由6、重定向 三、进阶1、导航守卫1.1 全局前置守卫1.2 全局后置…

模板笔记 ST表 区间选数k

本题链接&#xff1a;用户登录 题目&#xff1a; 样例&#xff1a; 输入 5 3 1 1 2 2 3 1 2 3 3 1 5 输出 4 6 思路&#xff1a; . 根据题意&#xff0c;给出数组&#xff0c;以及多个区间&#xff0c;问这些区间中&#xff0c;最小值之和 和 最大值之和&#xff0c;…

居然可以在大肠杆菌上运行Doom游戏

MIT的学生们成功地在人体细胞&#xff08;大肠杆菌&#xff09;上……运行了Doom游戏。看到第一反应是科幻小说《雪崩》&#xff01;

A ConvNet for the 2020s

前言 论文名称&#xff1a;A ConvNet for the 2020s  发表时间&#xff1a;CVPR2022  code链接&#xff1a; 代码  作者及组织&#xff1a; Zhuang Liu&#xff0c;Hanzi Mao来自Meta和UC Berkeley。 一句话总结&#xff1a;仿照swin-T思想&#xff0c;重新设计ResNet结构&a…

【Python】使用aiohttp编写客户端

对比aiohttp和requests aiohttp 和 requests 是两个常用的 Python HTTP 库&#xff0c;它们有一些明显的区别&#xff0c;主要涉及到同步与异步、性能、用法和适用场景等方面。aiohttp不仅能编写http客户端代码&#xff0c;还可以用于开发服务端。以下内容对比aiohttp和reques…

嵌入式学习记录14

一&#xff1a;string.h 1.strncpy char *strncpy(char *dest, const char *src, size_t n) 定义一个 char * 类型的函数&#xff1b;其中dest为复制到这个地址&#xff0c;src为要复制的目标&#xff1b;n为复制src的前n 个&#xff1b; n < strlen(src) 只拷贝…

spark-cannot resolve overloaded method

使用split方法&#xff0c;出现错误&#xff1a;cannot resolve overloaded method 解决方法:那个regex应该是自动生成&#xff0c;所以split括号中输入空引号即可。 入门学习人的愚笨&#xff0c;也要继续坚持&#xff0c;加油&#xff01;

解决npm安装phantomjs失败

失败信息 Progress: resolved 102, reused 102, downloaded 0, added 0, done .pnpm/phantomjs2.1.7/node_modules/phantomjs: Running install script, failed in 21.3s .../node_modules/phantomjs install$ node install.js │ PhantomJS not found on PATH │ Downloading…

消息中间件之RocketMQ源码分析(三)

RocketMQ中的Consumer启动流程 RocketMQ客户端中有两个独立的消费者实现类分别为DefaultMQPullConsumer和DefaultMQPushConsumer&#xff0c; DefaultMQPullConsumer DefaultMQPullConsumer,该消费者使用时需要用户主动从Broker中Pull消息和消费消息&#xff0c;提交消费位点…

vue-router 实现页面路由

vue-router介绍 vue 的官方路由组件 功能包括 嵌套路由映射动态路由选择模块化、基于组件的路由配置路由参数、查询、通配符HTML5 的 history 模式 和 hash 模式 vue-router使用 结合 tabs 组件&#xff0c;实现页面路由 安装 vant-ui 实现底部导航栏 Tabbar-CSDN博客 重点…

图的学习

图的基本概念和术语 图的定义&#xff1a;图是由顶点的有穷非空集合和顶点之间的边的集合组成的&#xff0c;G表示&#xff0c;V是图G中顶点的集合&#xff0c;E是图G中边的集合 无向图&#xff1a;任意两点的边都是无向边组成的图&#xff08;无向边&#xff1a;&#xff08…