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

Ceph 中的写入放大

c63a47d534cc55fde99ba1c24c885862.gif

新钛云服已累计为您分享769篇技术干货

cb8fd68ff8ed45d4da03ae43cb6ea7c1.gif

d3c01d76d540ddc2c5c6c6698412cf95.png

介绍

f9f764197358682b5a131d16bce17a51.png

Ceph 是一个开源的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。 Ceph 独一无二地在一个统一的系统中同时提供了对象、块、和文件存储功能。 Ceph 消除了对系统单一中心节点的依赖,实现了无中心结构的设计思想。

我们知道Ceph为了保障数据的可靠性,存放数据通常是三副本策略(另有EC策略)。那么无论是data,metadata,journal都是三份。因此在应用端写入一个IO,在ceph内部实际上会额外产生许多内部IO,不同的存储后端差异很大。 Ceph提供了FileStore、KStore和BlueStore三种存储后端以供选择,那么以FileStore为例,来看看13X的写放大的来由。FileStore中ceph的数据被存放在XFS或者ZFS等本地文件系统中。这些文件系统本身又会记录日志(FS journal),以及还有它自己的元数据(FS metadata)。

在设计存储基础结构时,为了防止故障,保证一定的冗余度是非常有必要的。但是,冗余伴随着存储效率的降低,这也会增加您的成本。对于大型基础设施,每 TB 成本的差异可能会导致总存储成本显著提高。因此,Ceph 中的纠删码非常有吸引力。 纠删码类似于基于奇偶校验的 RAID 阵列。为每个对象创建许多数据块 (K) 和奇偶校验块 (M)。另一方面,副本只是创建给定对象的其他副本,类似于镜像 RAID 阵列。这通常意味着纠删码比副本具有更高的存储效率,计算公式为 k/(k+m)。 例如,以 6+2 为例,您将获得 75% 的存储效率——在记录的总 8 个区块中,有 6 个数据块。与三个副本相比,您将有 33% 的效率,总共 3 个记录的块中有 1 个数据块。

8eaa5f71470b61c012bf027c6fdcf87f.png

写入放大

正常来说,Ceph 都没啥问题,除了一个经常被忽视的问题:写入放大。 数据存储中的最小分配大小本质上是一段数据可以写入的最小单位。在 Pacific Ceph 之前,此值默认为 64kb。此最小分配单元会给某些工作负载带来问题,尤其是那些对小文件进行操作的工作负载。

c25d7834a552f2dff2f9d483cd7aeb2d.png

案例

4% 存储效率示例如下图:

31fcbd43a4bcecdc06ee9b85faedc6c3.png

为了更直观一点,让我们考虑一个传入写入为 16kb 的 4+2 纠删码池。 在上面的示例中,单个 16K 写入最终会放大 24 倍的大小,因为每个块至少需要以 64K 的速度写入磁盘。这导致此特定对象的总存储效率为 ~4%。如果您的工作负载主要由 16K 对象组成,那么这可能会很快抵消您的 EC 配置文件提供的任何优势。下面是使用相同文件大小的 3 副本示例。

9471229f7ab9c3900f476d940a7accb5.png

如上图所示,在此特定工作负载中,3 Replica 实际上比 4+2 纠删码池的存储效率更高。这表明规则总是有例外。从理论上讲,当存储效率是最高优先级时,应使用纠删码,但根据您的数据集,这可能会发生巨大变化。

89dee4692e8e72dba317728a15e2d851.png

写入放大重要的用例

当然,即使按照小文件工作负载标准,16K 文件也很小,单单一篇文章的大小就 100K 左右。另外,一些可能存在写入放大问题的场景是:

  • AI training 人工智能训练

  • audio editing 音频编辑

  • log storing/aggregation 日志存储/聚合

  • scientific computing 科学计算

6b26e436dcb65a85a1ecd40b2618220a.png

结论

了解数据和工作负载是确定 Ceph 集群构建的关键部分。了解整个数据的平均文件大小将使您能够避免这种极高的写入放大。 当然,这并不总是这样的。通常,在单个集群中往往会存在各种大小的文件。在这种情况下,只需确定数据的位置即可。例如,如果单个目录树拥有大部分小文件,则可以将副本池固定到该特定树,而具有较大文件大小的其余数据仍保留在纠删码上。 如前所述,当您的最小分配大小太大时,写入放大会更加普遍,这就是为什么较新版本的 Ceph(如 Pacific 和 Quincy)默认为 4K 而不是 64K 的原因。在较新的集群或最小分配大小修改的 Octopus 集群中,写入放大的问题要小得多,因此,我们在后续的集群部署前,需要认真考虑一下。

    推荐阅读   

2f4b0dc5c19beacfb7eb35176948882d.png

2af4835627faf1c6d38059aba3c2777a.png

    推荐视频    

相关文章:

Ceph 中的写入放大

新钛云服已累计为您分享769篇技术干货 介绍 Ceph 是一个开源的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。 Ceph 独一无二地在一个统一的系统中同时提供了对象、块、和文件存储功能。 Ceph 消除了对系统单一中心节点的依赖,实现了无中…...

Mabatis-puls强于Mybatis的地方

Mabatis-puls与Mybatis都是优秀的Java持久化框架,但是Mabatis-puls相较于Mybatis有以下几个方面的优势: 性能更优:Mabatis-puls采用了Javassist技术,使得它在运行时比Mybatis更快速,尤其是在执行大量SQL的情况下&#…...

vue项目npm intall时发生版本冲突的解决办法

在日常使用命令npm install / npm install XX下载依赖的操作中,我经常会遇到无法解析依赖树的问题(依赖冲突) 当遇到这种情况的时候,可以通过以下命令完成依赖安装: npm install --legacy-peer-deps npm install xxx…...

tomcat多实例部署jenkins

tomcat多实例部署jenkins 文章目录 tomcat多实例部署jenkins1.简介:2.优缺点:3.工作原理:4.工作流程:5.tomcat多实例部署jenkins流程5.1.环境说明5.2.部署前准备工作5.3.多实例部署tomcat5.4.部署jenkins5.5.创建一个jenkins项目5…...

强连通分量+缩点

[图论与代数结构 701] 强连通分量 题目描述 给定一张 n n n 个点 m m m 条边的有向图,求出其所有的强连通分量。 注意,本题可能存在重边和自环。 输入格式 第一行两个正整数 n n n , m m m ,表示图的点数和边数。 接下来…...

如何做系统架构设计

文章目录 1、如何进行架构设计体系架构需求体系架构设计体系架构文档化体系架构复审体系架构实现体系架构演化 2、架构设计注意事项分治原则服务自治拥抱变化可维护性考虑依赖和限制阅读代码注意事项 3、最后 ​系统架构应该如何设计,从自己做架构的经历来分享一些体…...

L14D6内核模块编译方法

一、内核模块基础代码解析 一个内核模块代码错误仍然会导致的内核崩溃。 GPL协议:开源规定,使用内核一些函数需要 1、单内核的缺点 单内核扩展性差的缺点减小内核镜像文件体积,一定程度上节省内存资源提高开发效率不能彻底解决稳定性低的缺…...

PyTorch入门教学——dir()函数和help()函数的应用

1、简介 已知PyTorch是一个工具包,其中包含许多功能函数。dir()函数和help()函数是学习PyTorch包的重要法宝。 dir():能让我们知道工具包以及工具包中的分隔区有什么东西。help():能让我们知道每个工具是如何使用的,即工具的使用…...

使用Elasticsearch来进行简单的DDL搜索数据

说明:Elasticsearch提供了多种多样的搜索方式来满足不同使用场景的需求,我们可以使用Elasticsearch来进行各种复制的查询,进行数据的检索。 1.1 精准查询 用来查询索引中某个类型为keyword的文本字段,类似于SQL的“”查询。 创…...

【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡

《树与二叉树》 二叉树的顺序存储结构 顺序存储只适用于完全二叉树和满二叉树,一般二叉树不适用i 2 的左孩子为 2i 4,右孩子为 2i 1 5 二叉树的链式存储结构 链式存储适用于二叉树;空结点用“∧”表示二叉链表:左孩子&#xff0…...

关于矿井地面电力综合自动化系统的研究与产品选型

安科瑞 崔丽洁 摘要:煤矿供电系统是煤矿生产的重要动力保障 , 一旦电力中断 , 生产将被迫停止 , 同时停电后容易发生瓦斯积聚爆炸、淹井等恶性事故,现有配电室采用不同厂商的保护装 置产品,没有形成有效的监控配电系统,不便于管…...

论文阅读:Offboard 3D Object Detection from Point Cloud Sequences

目录 概要 Motivation 整体架构流程 技术细节 3D Auto Labeling Pipeline The static object auto labeling model The dynamic object auto labeling model 小结 论文地址:[2103.05073] Offboard 3D Object Detection from Point Cloud Sequences (arxiv.o…...

Python学习基础笔记六十八——循环

循环是编程语言常见的流程控制。 Python语句要让计算机反复地做一些事情,就要用到循环语句。 有While和for循环。 while循环: command input("请输入命令:") while command ! exit:print(f输入的命令是{command})command input("请输…...

部署k8s dashboard(这里使用Kubepi)

9. 部署k8s dashboard(这里使用Kubepi) Kubepi是一个简单高效的k8s集群图形化管理工具,方便日常管理K8S集群,高效快速的查询日志定位问题的工具 部署KubePI(随便在哪个节点部署,我这里在主节点部署&#…...

Java Lambda表达式的使用

我们了解了 java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。…...

【初始C语言8】详细讲解初阶结构体的知识

前言 💓作者简介: 加油,旭杏,目前大二,正在学习C,数据结构等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏&#x1…...

<C++> IO流

C语言的输入与输出 在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf: scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。printf: 将指定的数据输出到…...

基于单目相机的2D测量(工件尺寸和物体尺寸)

目录 1.简介 2.基于单目相机的2D测量 2.1 想法: 2.2 代码思路 2.2 主函数部分 1.简介 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造:在工业制造过程中,精确测量是确保产品质量和一致性的关键。基于单目相机的2…...

23面向对象案例1

目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn? 3、用面向对象的方法可以解决冗余的问题,但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题,可以将类属性改成私有变量吗&…...

go语言基础之常量与itoa

视频学习地址:Go零基础入门_在线视频教程-CSDN程序员研修院 一. 常量 定义:常量是一个简单值的标识符,在程序运行时,不会被修改的量。注意:常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...