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

ceph对象存储使用的一些思考

  1. 导言
    我在某司做对象存储约4年时间,作为研发人员,接触过大量的市场项目,对国内市场上对对象存储的使用有一些了解和思考。本文主要是对本人经历的过往对象存储项目中发现的一些问题进行总结。
    背景如下:

    • 基于ceph版本进行开发并进行市场交付。
    • 行业覆盖通信、金融、互联网、车企、测绘等行业。
  2. ceph对象存储的弊端1:元数据过大
    在ceph对象存储中,每个对象(或者叫做文件)都有rgw层携带的元数据信息(即,XATTR)。
    对象xattr
    表中结果以对象名111为例,未开启多版本。对象名越长,manifest、acl和dir_entry占用字节更多。xattr属性一般是存储在ssd介质中,而ssd介质的空间是有限的。
    也就是说:上传一个1K的对象,其默认的元数据就占了差不多1K多。这对于空间的占用和浪费是不可忍受的,尤其是在数据recovery重构的时候,更是灾难性的问题。

  3. 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的标准需要有序的返回对象列表。
以分片数1024为例
和osd的交互增多,意味着list的时间长。
吐槽:其实单桶上亿时,客户就不要想着去list了,但是某些用户就是。。。

自己的一些思考:

1)引入单独的元数据管理机制,当前ceph的元数据管理机制其实不太适合海量的对象文件。
2)ceph也在尝试引入DBStore,让用户自己去使用各种数据库,但感觉不是长久之计
3)或许国外的使用者不会这样粗暴的使用存储桶。。。
  1. ceph对象存储的弊端3:桶生命周期的设计
    生命周期会定时(默认是0点-6点,可调整)进行 遍历 桶内对象,判断是否是需要处理。当生命周期的桶较多,且桶内对象较多时,往往删除或者转移的速度跟不上写入的速度。存储空间来不及进行释放。

  2. 删除对象
    过于依赖桶生命周期进行删除。 删除速度跟不上,存储空间得不到快速释放。

    • 后来我们团队写了个脚本,直接多进程遍历桶index对象,判断对象是否过期,然后进行删除。
    • 且缺乏直接清空桶的操作,我们团队也补充了该功能。
  3. 总结
    常规的使用ceph对象存储,问题不大。丰富的SDK文档和协议接口,帮助开发人员能够较好的使用存储。但是上述问题,却是我们在上市项目遇到的绝大对数复杂问题,也是对象存储的难点和重点改进方向,至少在我看来是的。

相关文章:

ceph对象存储使用的一些思考

导言 我在某司做对象存储约4年时间,作为研发人员,接触过大量的市场项目,对国内市场上对对象存储的使用有一些了解和思考。本文主要是对本人经历的过往对象存储项目中发现的一些问题进行总结。 背景如下: 基于ceph版本进行开发并进…...

单词排序C++实现

代码如下&#xff1a; #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 实例服务器网络性能深度评测

引言 随着互联网应用的快速发展&#xff0c;网络带宽和性能对云服务器的表现至关重要。在不同的云服务平台上&#xff0c;即便配置相同的带宽&#xff0c;实际的网络表现也可能有所差异。因此&#xff0c;了解并测试服务器的网络性能变得尤为重要。本文将以华为云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的内部是一个完全二叉树&#xff0c;将极值存放在根节点。这个里的极值可分为最大值、最小值。根据极值…...

走进低代码表单开发(一):可视化表单数据源设计

在前文&#xff0c;我们已对勤研低代码平台的报表功能做了详细介绍。接下来&#xff0c;让我们深入探究低代码开发中最为常用的表单设计功能。一个完整的应用是由众多表单组合而成的&#xff0c;所以高效的表单设计在开发过程中起着至关重要的作用。让我们一同了解勤研低代码开…...

简单好用的OCR API

现如今&#xff0c;越来越多的科技产品可以帮助我们改善和提高相应的工作效率。OCR技术的出现&#xff0c;提高了人们的工作效率&#xff0c;其应用领域及其广泛。就拿应用了OCR技术的翔云文档识别服务来说&#xff0c;只需上传文档图片便可自动识别并返回文档中相应的内容。翔…...

c++的拷贝构造函数和赋值函数

拷贝构造函数和赋值函数 什么是拷贝构造 是一种特殊构造函数&#xff0c;如果没有显式的实现&#xff0c;编译器就会自动生成。 class 类名 { public:// 拷贝构造类名(const 类名& that){} }; 什么时候会调用拷贝构造 当使用一个类对象给另一个新的类对象初始化时&…...

什么自动猫砂盆才适合旅游党?4个选购技巧统统告诉你!

有没有能让我们防夹3天不在家都不用担心猫咪铲屎问题的方法&#xff1f;当然有了&#xff01;自动猫砂盆就是最好的选择&#xff0c;要知道&#xff0c;有个好用合适的自动猫砂盆在家的话&#xff0c;根本不用担心生虫发臭的问题出现&#xff0c;因为自动猫砂盆能及时感应到猫咪…...

算法知识点————双指针【删除重复元素】【反转链表】

删除重复元素 题目&#xff1a;//给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数 思路&#xff1a…...

建造者模式builder

此篇为学习笔记&#xff0c;原文链接 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.找到字符串中所有字母异位词

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;滑动窗口&#xff09; 很容易想到&#xff0c;这个题目要求我们在字符串s中找到一个定长的窗口让窗口里面出现异位词。 OK&#xff0c;先思考一下怎么快速判断两个字符串是否是异位词&#xff1f; 比较简单的方法是…...

Microsoft SC-100: Microsoft 网络安全架构师

SC-100认证介绍 Microsoft SC-100: Microsoft 网络安全架构师是微软网络安全方向的相关证书&#xff0c; 作为 Microsoft 网络安全架构师&#xff0c;你要将网络安全策略转化为保护组织的资产、业务和运营的功能。 你要设计、指导实现和维护遵循零信任原则和最佳做法的安全性解…...

代码随想录训练营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 库&#xff0c;它提供了一套简单的接口来控制和监控输入设备&#xff0c;包括鼠标和键盘。这个库允许开发者编写跨平台的代码来处理输入事件&#xff0c;无需担心底层操作系统的差异。 下面是pynput的测试程序&#xff1a; from pynput.keyboard import …...

IPV4端口数据有哪些?

关于IPv4的端口数据包括端口号&#xff0c;协议类型&#xff0c;端口状态&#xff0c;扫描时间以及开放时间&#xff0c;这些是常见的实时IPv4端口扫描和分析数据。 IPv4端口号 Ipv4端口号是一个16位的无符号整数&#xff0c;范围从0到65535&#xff0c;这些端口号用于区分运…...

【爱加密_云平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

Open CASCADE学习|按圆离散旋转体

旋转体是一个非常重要的概念&#xff0c;它涉及到三维空间中由二维曲线绕某一轴线旋转形成的立体形状。这种旋转体的形成过程&#xff0c;实际上是一个连续变化的动态过程&#xff0c;但在数学和几何学中&#xff0c;我们往往通过静态的方式来描述和研究它。 旋转体的基本特性…...

无人矿车使用ZMQ消息代理进行跨机互联进行消息收发

目录 背景 前景知识 1.启动一个代理服务器 2.发布者 3.订阅者 实际应用 1.模拟智驾收来自交互箱131的按钮json数据 2.模拟交互箱131收来自智驾137的cjson数据 背景 在调试防爆无轨无人矿车时&#xff0c;出现消息代理不能很好转发&#xff0c;于是在公司通过代理的方式…...

医疗机构关于DIP/DRG信息化建设

推进DIP/DRG支付方式改革是一项系统性工程&#xff0c;牵一发而动全身。作为河北省DIP试点医院&#xff0c;河北医科大学第二医院将信息化与创新性管理理念融合&#xff0c;用好支付工具做好精细化管理&#xff0c;积极应对改革。 ■ 改革背景 国家医疗保障局制定的《DRG/DIP支…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...