ceph对象存储使用的一些思考
-
导言
我在某司做对象存储约4年时间,作为研发人员,接触过大量的市场项目,对国内市场上对对象存储的使用有一些了解和思考。本文主要是对本人经历的过往对象存储项目中发现的一些问题进行总结。
背景如下:- 基于ceph版本进行开发并进行市场交付。
- 行业覆盖通信、金融、互联网、车企、测绘等行业。
-
ceph对象存储的弊端1:元数据过大
在ceph对象存储中,每个对象(或者叫做文件)都有rgw层携带的元数据信息(即,XATTR)。

表中结果以对象名111为例,未开启多版本。对象名越长,manifest、acl和dir_entry占用字节更多。xattr属性一般是存储在ssd介质中,而ssd介质的空间是有限的。
也就是说:上传一个1K的对象,其默认的元数据就占了差不多1K多。这对于空间的占用和浪费是不可忍受的,尤其是在数据recovery重构的时候,更是灾难性的问题。 -
ceph对象存储的弊端2:桶index的设计
本节或许不该叫做弊端。
index的设计带来了接下来的问题:- 桶内对象个数的限制
- 单个index过大导致的重构问题
- 桶内对象有序list的速度
先说一下当前桶index设计的好处,对象通过hash桶的分片数(默认好像是128,可以调整,甚至分裂),分别在各个index上进行记录,便于list等操作。这种hash后进行记录,大大提升了读写速度。再说弊端。
弊端1: 官方推荐分片数不超过65535,且每个分片上不超过10万条记录,则限制了单桶最多的对象个数为65亿左右。然而国内市场的大部分使用者都不会主动进行分桶的设计和使用。 暴力使用的后果就是单桶对象往往超百亿,这也为后来的生命周期处理和有序list带来了不小的挑战。xsky后来推出了单桶千亿的功能。将元数据管理单独拎出来,确实是一种解决思路。但单桶对象过多会导致弊端2和弊端3的问题。暂时从我的理解来看,该问题是一个无解的问题,只能进行舍弃。
弊端2: index对象(存储在.rgw.bucket.index存储池中,或者元数据池中,一般是ssd介质)一般记录的是对象的记录,多版本信息、分片信息、多站点等。如果对象过多,index对象一般较大,可能会在1G以上。 当ssd盘发生坏盘、ssd换盘或者节点宕机重启,触发对象recovery重构时,则会阻碍业务的写操作,该动作是致命的,虽然可以调整recovery速度,但是还是会对业务产生不小的影响,除非完全不重构。
**弊端3:**分片数过多,会导致有序list的耗时倍增。因为每次有序list都需要和osd进行多次交互。性能较差,耗时较长。
1)每个桶都有默认的1024个索引分片,索引分片上记录了对象名等信息。
2)桶内对象的list其实是访问桶的索引分片,获取对象的oid信息。
3)桶索引分片的结构是omap结构,单个分片是有序的,分片之间是无序的。
4)有序list存在的意义有两个:一是对象有理论上的目录结构,需要有序返回显示;二是S3的标准需要有序的返回对象列表。

和osd的交互增多,意味着list的时间长。
吐槽:其实单桶上亿时,客户就不要想着去list了,但是某些用户就是。。。
自己的一些思考:
1)引入单独的元数据管理机制,当前ceph的元数据管理机制其实不太适合海量的对象文件。
2)ceph也在尝试引入DBStore,让用户自己去使用各种数据库,但感觉不是长久之计
3)或许国外的使用者不会这样粗暴的使用存储桶。。。
-
ceph对象存储的弊端3:桶生命周期的设计
生命周期会定时(默认是0点-6点,可调整)进行 遍历 桶内对象,判断是否是需要处理。当生命周期的桶较多,且桶内对象较多时,往往删除或者转移的速度跟不上写入的速度。存储空间来不及进行释放。 -
删除对象
过于依赖桶生命周期进行删除。 删除速度跟不上,存储空间得不到快速释放。- 后来我们团队写了个脚本,直接多进程遍历桶index对象,判断对象是否过期,然后进行删除。
- 且缺乏直接清空桶的操作,我们团队也补充了该功能。
-
总结
常规的使用ceph对象存储,问题不大。丰富的SDK文档和协议接口,帮助开发人员能够较好的使用存储。但是上述问题,却是我们在上市项目遇到的绝大对数复杂问题,也是对象存储的难点和重点改进方向,至少在我看来是的。
相关文章:
ceph对象存储使用的一些思考
导言 我在某司做对象存储约4年时间,作为研发人员,接触过大量的市场项目,对国内市场上对对象存储的使用有一些了解和思考。本文主要是对本人经历的过往对象存储项目中发现的一些问题进行总结。 背景如下: 基于ceph版本进行开发并进…...
单词排序C++实现
代码如下: #include<iostream> #include<string> #include<fstream> #include<map> #include<iomanip> #include<algorithm> #include<vector>int read_file(std::map<std::string,int> &map_words) {std::st…...
828华为云征文 | Flexus X 实例服务器网络性能深度评测
引言 随着互联网应用的快速发展,网络带宽和性能对云服务器的表现至关重要。在不同的云服务平台上,即便配置相同的带宽,实际的网络表现也可能有所差异。因此,了解并测试服务器的网络性能变得尤为重要。本文将以华为云X实例服务器为…...
STL —heap算法源码刨析 make_heap、push_heap、pop_heap、sort_heap操作分析
STL —heap算法源码刨析 heap算法概述push_heap 插入元素pop_heap 取出根节点元素sort_heap 按极值存放元素make_heap 将一段现有数据构造成heap程序测试 heap算法概述 heap的内部是一个完全二叉树,将极值存放在根节点。这个里的极值可分为最大值、最小值。根据极值…...
走进低代码表单开发(一):可视化表单数据源设计
在前文,我们已对勤研低代码平台的报表功能做了详细介绍。接下来,让我们深入探究低代码开发中最为常用的表单设计功能。一个完整的应用是由众多表单组合而成的,所以高效的表单设计在开发过程中起着至关重要的作用。让我们一同了解勤研低代码开…...
简单好用的OCR API
现如今,越来越多的科技产品可以帮助我们改善和提高相应的工作效率。OCR技术的出现,提高了人们的工作效率,其应用领域及其广泛。就拿应用了OCR技术的翔云文档识别服务来说,只需上传文档图片便可自动识别并返回文档中相应的内容。翔…...
c++的拷贝构造函数和赋值函数
拷贝构造函数和赋值函数 什么是拷贝构造 是一种特殊构造函数,如果没有显式的实现,编译器就会自动生成。 class 类名 { public:// 拷贝构造类名(const 类名& that){} }; 什么时候会调用拷贝构造 当使用一个类对象给另一个新的类对象初始化时&…...
什么自动猫砂盆才适合旅游党?4个选购技巧统统告诉你!
有没有能让我们防夹3天不在家都不用担心猫咪铲屎问题的方法?当然有了!自动猫砂盆就是最好的选择,要知道,有个好用合适的自动猫砂盆在家的话,根本不用担心生虫发臭的问题出现,因为自动猫砂盆能及时感应到猫咪…...
算法知识点————双指针【删除重复元素】【反转链表】
删除重复元素 题目://给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数 思路:…...
建造者模式builder
此篇为学习笔记,原文链接 https://refactoringguru.cn/design-patterns/builder 能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象...
IEC103设备数据 转 IEC61850项目案例
目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集103设备数是 2 5 用IEC61850协议转发数据 4 6 网关使用多个逻辑设备和逻辑节点的方法 6 7 IEC103协议说明 8 8 案例总结 9 1 案例说明 设置网关采集IEC103设备数据把采集的数据转成IEC61850协议转发…...
438.找到字符串中所有字母异位词
题目 链接:leetcode链接 思路分析(滑动窗口) 很容易想到,这个题目要求我们在字符串s中找到一个定长的窗口让窗口里面出现异位词。 OK,先思考一下怎么快速判断两个字符串是否是异位词? 比较简单的方法是…...
Microsoft SC-100: Microsoft 网络安全架构师
SC-100认证介绍 Microsoft SC-100: Microsoft 网络安全架构师是微软网络安全方向的相关证书, 作为 Microsoft 网络安全架构师,你要将网络安全策略转化为保护组织的资产、业务和运营的功能。 你要设计、指导实现和维护遵循零信任原则和最佳做法的安全性解…...
代码随想录训练营day42|188.买卖股票的最佳时机IV,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费
188.买卖股票的最佳时机IV 变成了最多可以买卖k只股票 class Solution { public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2*k1,0));for(int i1;i<2*k1;i2){dp[0][i]-prices[0];}//初始…...
解决Pynput不能在Ubuntu22.04上正常使用问题
pynput 是一个 Python 库,它提供了一套简单的接口来控制和监控输入设备,包括鼠标和键盘。这个库允许开发者编写跨平台的代码来处理输入事件,无需担心底层操作系统的差异。 下面是pynput的测试程序: from pynput.keyboard import …...
IPV4端口数据有哪些?
关于IPv4的端口数据包括端口号,协议类型,端口状态,扫描时间以及开放时间,这些是常见的实时IPv4端口扫描和分析数据。 IPv4端口号 Ipv4端口号是一个16位的无符号整数,范围从0到65535,这些端口号用于区分运…...
【爱加密_云平台-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
Open CASCADE学习|按圆离散旋转体
旋转体是一个非常重要的概念,它涉及到三维空间中由二维曲线绕某一轴线旋转形成的立体形状。这种旋转体的形成过程,实际上是一个连续变化的动态过程,但在数学和几何学中,我们往往通过静态的方式来描述和研究它。 旋转体的基本特性…...
无人矿车使用ZMQ消息代理进行跨机互联进行消息收发
目录 背景 前景知识 1.启动一个代理服务器 2.发布者 3.订阅者 实际应用 1.模拟智驾收来自交互箱131的按钮json数据 2.模拟交互箱131收来自智驾137的cjson数据 背景 在调试防爆无轨无人矿车时,出现消息代理不能很好转发,于是在公司通过代理的方式…...
医疗机构关于DIP/DRG信息化建设
推进DIP/DRG支付方式改革是一项系统性工程,牵一发而动全身。作为河北省DIP试点医院,河北医科大学第二医院将信息化与创新性管理理念融合,用好支付工具做好精细化管理,积极应对改革。 ■ 改革背景 国家医疗保障局制定的《DRG/DIP支…...
3步掌握WebPShop插件:让Photoshop完美支持WebP格式图片处理 [特殊字符]
3步掌握WebPShop插件:让Photoshop完美支持WebP格式图片处理 🚀 【免费下载链接】WebPShop Photoshop plug-in for opening and saving WebP images 项目地址: https://gitcode.com/gh_mirrors/we/WebPShop WebPShop是一款专为Adobe Photoshop设计…...
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Tr…...
智能家居开发实战:用RxAndroidBle3实现多设备扫描与信号过滤(附完整Demo)
智能家居BLE开发进阶:RxAndroidBle3多设备扫描与动态过滤实战 在智能家居场景中,蓝牙低功耗(BLE)设备的高效扫描与筛选是构建稳定物联网系统的关键技术。本文将深入探讨如何利用RxAndroidBle3框架实现多设备并发扫描、动态信号过滤…...
TrafficMonitor插件系统:5个技巧打造你的个性化Windows监控中心
TrafficMonitor插件系统:5个技巧打造你的个性化Windows监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 想要让Windows任务栏上的TrafficMonitor变得更加强大…...
终极指南:如何免费将CAJ文件转换为高质量PDF?caj2pdf完整使用教程
终极指南:如何免费将CAJ文件转换为高质量PDF?caj2pdf完整使用教程 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: …...
Coze-Loop与Vue3前端性能优化:渲染速度提升方案
Coze-Loop与Vue3前端性能优化:渲染速度提升方案 1. 为什么Vue3项目需要Coze-Loop来诊断性能问题 在实际开发中,很多团队都遇到过这样的困惑:明明代码写得挺规范,但页面滚动卡顿、列表加载缓慢、交互响应迟滞。我们曾接手一个电商…...
实战应用:基于快马构建多维智能限流系统,精细化管控API访问
在构建现代Web服务时,API限流是保障系统稳定性的重要防线。最近我在处理一个电商平台的流量管控需求时,深刻体会到"rate limit exceeded"不仅是简单的错误提示,更是系统自我保护的关键机制。下面分享如何用InsCode(快马)平台快速搭…...
Noi:整合多 AI 服务的新利器能否突出重围?
Noi:一站式 AI 服务整合新体验Noi 是一款图形用户界面(GUI)应用程序,它的核心亮点在于将所有 AI 服务整合到一处。用户通过单一用户界面(UI)就能访问 ChatGPT、Claude、Gemini、Perplexity 等多个服务&…...
EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台
EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台 你是不是也遇到过这样的场景?作为电商运营,每天要写几十条商品描述、营销文案,绞尽脑汁也想不出新花样;面对海量的用户评论,想快速了解用户情…...
Windows环境下SpringBoot Jar包热更新实战:从配置文件到Class文件的动态替换
1. Windows下SpringBoot Jar包热更新核心原理 SpringBoot应用打包成Jar后,本质上是个压缩文件。在Windows环境下,我们可以利用JDK自带的jar命令直接操作这个压缩包。热更新的本质就是在不重启服务的情况下,通过替换Jar包内部文件来实现配置或…...
