《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW(四)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 《存储漫谈Ceph原理与实践》第三章接入层3.2对象存储RGW

2.  RGWData

 

RGW对象数据存储在 {zone}.rgw.buckets.data池里,一个 RGW对象包含一个或多RADOS对象。

RGW收到写请求时,会基于 rgw_obj_stripe_size配置的值默认为4MB)将数据切分为 stripe,并基于 rgw_max_chunk_size配置默认为 4MB)将这些stripes划分为更小的 chunks,并将这些 chunks写入 RADOS集群。

第一个 chunk写入时会创建 Head对象,随后的 chunks作为tail 追加到对象后面写入。其中 Head对象包含了对象的一些元数据信息,如 ACLmanifestetag等,作为 xattr保存。Head 对象本身可以包含 4MB 的数据。如果对象大于 4MB,就会生成tail 对象。

Head对象的 manifest 描述了对象的布局信息。查看对象的 xattrmanifest,可使用如下命令。

 

# ./bin/rados listxattr -p default.rgw.buckets.data 54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1_ceph.conf

user.rgw.acluser.rgw.content_typeuser.rgw.etaguser.rgw.idtaguser.rgw.manifestuser.rgw.pg_veruser.rgw.source_zoneuser.rgw.storage_classuser.rgw.tail_tag

user.rgw.x-amz-content-sha256user.rgw.x-amz-date

user.rgw.x-amz-meta-s3cmd-attrs

 

#./bin/ceph-dencoderimportmanifest.txttypeRGWObjManifestdecodedump_json

{

"objs":[]

"obj_size": 6775"explicit_objs": "false""head_size":6775

"max_head_size":4194304

"prefix":".dhrTwsaLcBPQOYPeIx2bImXjxO_WCKk_"

"rules": [

{

"key": 0

"val": {

"start_part_num":0

"start_ofs":4194304

"part_size":0

"stripe_max_size":4194304

 

 

"override_prefix":""

}

}

]

"tail_instance": """tail_placement":{

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"placement_rule":"default-placement"

}

"begin_iter": {"part_ofs":0

"stripe_ofs":0

"ofs": 0

"stripe_size":6775

"cur_part_id":0

"cur_stripe": 0"cur_override_prefix": """location":{

"placement_rule":"default-placement"

"obj": {

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"key": {

"name":"ceph.conf"

 

 

 

"instance": ""

"ns": ""

}

}

"raw_obj":{

"pool": ""

"oid: ""

"loc": ""

}

"is_raw":false

}

}

"end_iter": {"part_ofs":4194304

"stripe_ofs":0

"ofs":6775

"stripe_size":6775

"cur_part_id":0

"cur_stripe": 0"cur_override_prefix": """location":{

"placement_rule":"default-placement"

"obj": {

"bucket": {

"name":"john-bkt1"

"marker": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""bucket_id": "54dba15f-9c2e-40ea-8b87-fc5f2eb01236.154118.1""tenant":""

"explicit_placement": {"data_pool": """data_extra_pool": """index_pool":""

}

}

"key": {

"name":"ceph.conf"

"instance":""

"ns":""

}

}

"raw_obj":{

"pool":""

"oid":""

"loc":""

 

 

}

"is_raw":false

}

}

}

 

RGW中的对象对应RADOS对象(一对多关系,对象上传分整体上传和分段上传,不同的上传方式,对应 RADOS对象的方式不同。

首先介绍 3个概念。

◆  rgw_max_chunk_size

RGW下发至 RADOS集群的单个 I/O的大小, 同时也决定了应用对象分成多个RADOS对象时首对象的大小。

◆  rgw_obj_stripe_size

条带大小,也是 RADOS对象最大大小,如果大于rgw_max_chunk_size的对象文件,后续部分会根据这个参数切成多个RADOS对象。

◆  rgwobjectmanifest

管理应用对象和 RADOS 对象的对应关系。

基于以上概念,我们分别介绍普通上传以及分块上传。普通上传的流程如下。

(1)  当对象大小小于等于 rgw_max_chunk_size 时,用户上传的一个对象只对应一个RADOS对象,该RADOS 对象以对象名称命名,对象元数据也保存在该RADOS对象的扩展属性中。

(2)  当对象大小大于 rgw_max_chunk_size 时,对象被划分为一个大小等于分块大小的head以及多个大小等于 rgw_obj_stripe_size 的中间对象,和一个大小小于或等于 rgw_obj_stripe_sizetail对象。head 以对象名称命名,该对象的数据部分保存了对象前 rgw_max_chunk_size字节的数据,扩展属性部分保存了对象的元数据信息和 manifest信息。中间对象和tail对象保存对象剩余的数据,对象名称为:''shadow_'+ '.' + '32bit随机字符串'

+ '_' + ' 条带编号',其中条带编号从1开始。分块上传的流程如下。

(1)  RGW根据条带大小 rgw_obj_stripe_size将对象的每一个分块分成多个 RADOS对象,每个分块的第一个 RADOS 对象名称为:'_multipart_'+ ' 用户上传对象名称 ' + ' 分块上传 ID' + ' 分段编号',其余对象的名称为:'_shadow_' + ' 用户上传对象名称' + ' 分块上传 ID'+ ' 分段编号' + '_' + ' 条带编号'

(2)  当所有的分块上传结束后,RGW会从 data_extra_pool 中的分块上传的临时对象中读取各个分段信息,将各分段的 manifest信息组成一个 manifest;然后生成一个新的RADOS对象,即 head 对象,用来保存分块上传的对象的元数据信息和 manifest信息。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
2月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
3月前
|
存储 Kubernetes 对象存储
StrmVol存储卷:如何解锁K8s对象存储海量小文件访问性能新高度?
如何提升海量文件的数据读取速率,对于AI训练集管理、量化回测、时序日志分析等场景尤为重要。阿里云容器服务(ACK))支持StrmVol类型存储卷,基于底层虚拟块设备及内核态文件系统,显著降低海量小文件访问延迟。
|
3月前
|
存储 Kubernetes 对象存储
StrmVol 存储卷:解锁 K8s 对象存储海量小文件访问性能新高度
本文介绍了阿里云容器服务(ACK)支持的StrmVol存储卷方案,旨在解决Kubernetes环境中海量小文件访问性能瓶颈问题。通过虚拟块设备与内核态文件系统(如EROFS)结合,StrmVol显著降低了小文件访问延迟,适用于AI训练集加载、时序日志分析等场景。其核心优化包括内存预取加速、减少I/O等待、内核态直接读取避免用户态切换开销,以及轻量索引快速初始化。示例中展示了基于Argo Workflows的工作流任务,模拟分布式图像数据集加载,测试结果显示平均处理时间为21秒。StrmVol适合只读场景且OSS端数据无需频繁更新的情况,详细使用方法可参考官方文档。
555 144
|
2月前
|
存储 人工智能 测试技术
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
OSSFS 2.0通过轻量化协议设计、协程化技术及FUSE3低级API重构,实现大文件顺序读写与小文件高并发加载的显著提升,在实际测试中表现出高达数十倍的吞吐量增长。适用于机器学习训练、推理等对高带宽低延迟要求严苛的场景,同时支持静态和动态挂载方式,方便用户在ACK集群中部署使用。
279 34
|
3月前
|
存储 弹性计算 数据管理
阿里云对象存储oss怎么收费?存储费用+流量收费标准
阿里云对象存储OSS收费标准包含存储费、流量费及请求费等,支持按量付费与包年包月两种模式。标准型本地冗余存储按量付费价格为0.09元/GB/月,包年包月500GB预留空间优惠价118元/年。流量费仅收取公网出方向费用,忙时0.50元/GB,闲时0.25元/GB。更多详情可参考官方页面。
|
3月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准:500G存储118元1年、
阿里云对象存储OSS 2025年收费标准涵盖存储、流量及请求等费用,支持按量付费与包年包月两种模式。标准型存储按量价格为0.09元/GB/月,包年包月如9元享40GB体验价。流量费仅收取公网出方向,忙时0.50元/GB,闲时0.25元/GB。此外提供多种存储类型(低频、归档等)及流量包优惠方案,未使用功能不收费。详情见阿里云OSS官网。
2232 6
|
6月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准,存储、流量和请求等多个计费项
阿里云对象存储OSS收费标准涵盖存储、流量及请求费用,提供按量付费和包年包月两种模式。标准型OSS按量付费为0.09元/GB/月,包年包月40GB仅9元/年,500GB优惠价118元/年。流量费仅收取公网流出方向,内网流入流出免费。
443 13
|
存储 对象存储 云计算
|
5月前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
|
12月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。