应云而生——RGW的功能实现

1.功能特性

对象存储最基本的功能包括用户,存储桶,对象的增删改查,在此基础之上结合对象存储应用的特征,引申出更多的功能,比如在对象存储应用中,如果对一个存储桶或者对象没有任何访问的限制,该储存桶或对象就会变成公开的资源,任何人都可以访问。因此对存储桶和对象的访问控制变得尤为重要,存储桶和对象的访问功能成为了对象存储的基本功能之一。

RGW支持的S3 API

 

2.I/O路径

RGW网关使用OP线程处理应用的I/O请求。OP线程内部处理逻辑可分为HTTP前端REST API通用处理层API操作执行层RADOS接口适配层librados接口层等几个关键流程。

OP线程从HTTP前端收到I/O请求以后,首先在REST API通用处理层,从HTTP语义中解析出S3或者Swift数据并进行一系列检查,检查通过以后,根据不同的API操作请求执行不同的处理流程,如需从RADOS集群获取数据或者往RADOS集群写入数据,则通过RGW与RADOS接口适配层的调用librados接口将请求发送到RADOS集群中获取或写入相应数据,完成整个I/O过程。

REST API通用处理层的关键步骤大概分为用户认证、(用户,存储桶,对象)访问权限控制、(用户、存储桶)配额检查这几个关键步骤


用户认证:对于S3 API支持认证用户和匿名用户的访问,所有没有通过认证的访问则认为是匿名用户的访问。RGW认证支持V2和V4两种认证方式,RGW V2认证支持本地认证,LDAP和kaystone三种认证方式。RGW V4认证兼容AWS V4认证机制。

用户/存储桶/对象的访问权限控制:通过身份验证的请求,并不意味着一定会有访问资源(桶,对象)的权限,针对不同资源的访问,用户必须具备相应的访问权限(ACL)才能访问相应的资源。

bucket/用户配额:在RGW网关中配额管理是指对最大可存放对象数量和对象总大小进行限制,他支持单个用户以及单个用户下单个存储桶两种模式的配额限制,分别使用user_quota和bucket_quota表示。当两种配额模式同时启用时,任何一种先达到了配额限制都会生效。而且,在做用户配额判断时,如果针对的那个用户/存储桶配置了配额,则使用单个用户/存储桶配额判断,否则,使用全局配额判断。

用户操作权限判断:判断该用户是否具有读,写,删除权限。

 

3.存储桶的创建

1)从HTTP请求流中解析出相关参数

2)判断存储桶是否存在

3)创建存储桶

4)更新user_id.buckets对象:创建一个用户的同时,创建一个名为user_id.buckets的对象,用于记录该用户下所有的存储桶列表,保存在该对象的OMAP中。

 

4.对象上传

1.整体上传

prepare:在prepare阶段主要工作是初始化manifest数据结构

handle_data:RGW每次从HTTP Server缓冲区中取出rgw_max_chunk_size(分块大小)字节数据,存放在bufferlist中,然后分成一个或者多个I/O异步下发到RADOS层

complete:所有数据上传成功以后,对象上传进入complete。该阶段主要工作是将对象元数据更新到head_obj中,同时将对象条目更新到索引对象中,以便后续

2.分段上传

初始化:上传数据之前,应首先调用INITIATE MULTI-PART UPLOAD接口进行初始化,应用在调用该接口请求中携带对象的访问控制列表、用户对上传对象定义的元数据等信息。RGW网关在此操作中生成一个Uploadld返回给应用,同时在data_extra_pool中生成一个临时对象,用于保存每个分段的信息,并将对象的访问控制列表信息、元数据信息等保存到该对象的xattr中。

分段上传:流程和单个操作上传流程基本一样,不同之处在于complete阶段,分段上传除了需要将每个分段对象更新到索引对象之外,还需要将每个分段的信息更新到初始化时在data_extra_pool中生成的临时对象中。

分段上传完成:所有的分段上传完成以后,应用需要调用COMPLETE MULTIPART UPLOAD表示对象上传完成。此操作中RGW会从初始化阶段生成的临时对象中读出各个分段的信息,最主要的分段是manifest,组成一个manifest,然后生成一个head_obj,将这些信息保存到head_obj后,将临时对象删除

 

5.对象下载

用户可以请求指定对象某一段,去下载对象的部分内容,RGW首先从head_obj中读出manifest管理结构,然后根据manifest中定义的规则计算出用户请求的数据段保存在哪些对象中,最后从这些对象读出数据合并发送给客户端。 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph RGW(Rados Gateway)是Ceph存储系统中提供对象存储服务的组件。它允许用户通过HTTP协议以对象的形式存储和检索数据。 Ceph RGW是一个分布式的、高可用的存储解决方案,它将数据分散保存在多个物理节点上,提供了可靠的数据冗余和容错能力。通过数据的分散,RGW能够实现高并发的访问和高吞吐量的数据传输,从而满足大规模的存储需求。 在Ceph RGW中,数据以对象的形式存储,每个对象都有一个唯一的标识符和元数据信息,可以通过它们进行快速的检索和访问。对象可以以任意格式存储,如文本、图片、视频等。通过提供RESTful风格的API,RGW使得开发者能够方便地访问和操作存储在其中的对象。 RGW支持多租户的机制,可以为不同的用户或应用程序提供独立的存储空间和访问权限。它还提供了访问控制机制,可以通过身份验证、访问策略等方式,限制对象的访问权限,并保证数据的安全性。 另外,Ceph RGW还具有自动化的数据迁移和负载均衡功能,可以根据数据的访问模式和负载情况,自动调整数据的存储位置和副本数量,以实现最佳的性能和可用性。 综上所述,Ceph RGW是一款功能强大、可靠性高的对象存储服务,适用于大规模存储和分发数据的场景。它提供了高并发、高吞吐量的数据访问和传输能力,以及安全性、可扩展性等方面的优势,成为当今对象存储领域的一种重要解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值