应云而生——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中定义的规则计算出用户请求的数据段保存在哪些对象中,最后从这些对象读出数据合并发送给客户端。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值