文章转载自:RGW对象存储网关学习3:架构学习
RGW 主要由3部分组成:
- Frontend,用于接收回复外部客户端的http请求
- REST,根据外部请求的http信息选择相应的REST、Handler、Op对请求进行分解处理
- RGWRados,完成了对数据读写业务的封装
Frontend 包括:
- Frontend Config(RGWFrontendConfig)
- Civetweb(RGWCivetWebFrontend)
- beast(RGWAsioFrontend)
- loadgen(RGWLoadGenFrontend)
- fastcgi/fcgi(RGWFCGXFrontend)
Frontend负责接收客户端的请求,然后回调process_request
方法处理该请求,并将响应信息返回客户端。
REST
REST Resource 包括:
request process
s3 resource
swift resource
Swift auth resource
- Admin 相关
Admin Usage resource
Admin User resource
Admin Metadata resource
Admin Realm resource
Admin Config resource
Admin Bucket resource
Admin OpState resource
Admin Log resource
Admin Replica-log resource
每个Resource 包含一个RESTMgr、多个Handler、多个OP。
Frontend回调了process_request
,process_request
通过RESTMgr取得handler,handler再根据Http Method取得Op,Op再对数据进行读写操作。
S3 resource
RESTMgr:由1个RGWRESTMgr_S3组成。
- Handler
由6个Handler组成。-
RGWHandler_REST_Service_S3
- 获取Usage信息
- List Buckets
- Role信息操作
-
RGWHandler_REST_Bucket_S3
- Bucket ACL 信息操作
- Bucket Core 信息操作
- Bucket Payment 信息操作
- Bucket LC 信息操作
- Bucket Policy 信息操作
- Bucket 操作
-
RGWHandler_REST_Obj_S3
- Object ACL 操作
- Object tagging 操作
- Object Multipart 上传操作
- Object 操作
- Object Copy 操作
RGWHandler_REST_Service_S3Website
RGWHandler_REST_Bucket_S3Website
RGWHandler_REST_Obj_S3Website
-
OP
- Object Tags
RGWGetObjTags RGWPutObjTags RGWDeleteObjTags实现对象属性的查询、设置、删除操作 - Bulk
RGWBulkDelete
RGWBulkUploadOp
Swift专享批量上传、删除操作 - Usage
RGWGetUsage
获取usage信息操作 - Stat
RGWStatAccount
统计buckets的使用情况 - Bucket
RGWListBuckets
列出所有buckets
RGWGetBucketLocation
获取bucket location
RGWGetBucketVersioning
获取bucket versioning、mfa-delete状态
RGWSetBucketVersioning
设置bucket versioning
RGWGetBucketWebsite
获取bucket website信息
RGWSetBucketWebsite
设置bucket website
RGWDeleteBucketWebsite
删除bucket website
RGWStatBucket
获取bucket信息
RGWCreateBucket
创建bucket操作
RGWDeleteBucket
删除bucket操作
RGWPutBucketPolicy
设置bucket policy
RGWGetBucketPolicy
获取bucket policy
RGWDeleteBucketPolicy
删除bucket policy - Object
RGWPutObj
RGWPostObj
RGWGetObj
RGWDeleteObj
RGWCopyObj
实现对象的创建、修改、下载、删除、拷贝操作,
RGWListBucket 列出bucket中的对象 - Metadata
RGWPutMetadataAccountSwift 专享保存user所有属性信息(RGWUserInfo)
RGWPutMetadataBucketSwift 专享保存bucket所有属性信息
RGWPutMetadataObjectSwift 专享保存object所有属性信息 - ACL
RGWGetACLs、RGWPutACLs 实现对bucket或object的访问控制策略属性(user.rgw.acl)的获取、设置操作 - LC
RGWGetLC、RGWPutLC、RGWDeleteLC 实现对bucket的生命周期属性(user.rgw.lc)的获取、设置、删除操作 - CORS
RGWGetCORS、RGWPutCORS、RGWDeleteCORS、RGWOptionsCORS 实现对bucket的CORS属性(user.rgw.cors)的获取、设置、删除、Options操作
RGWGetCrossDomainPolicySwift 专享获取CrossDomain策略信息操作 - Payment
RGWGetRequestPayment、RGWSetRequestPayment 实现对bucket的payment属性的获取、设置操作 - Multipart
RGWInitMultipart、RGWCompleteMultipart、RGWAbortMultipart、RGWListMultipart、RGWListBucketMultiparts、RGWDeleteMultiObj实现对Object的分片上传的操作 - HealthCheck
RGWGetHealthCheckSwift 专享访问判断配置文件中的rgw_healthcheck_disabling_path是否可以被访问操作 - Swift Info
RGWInfoSwift 专享获取Swift信息 - Layout
RGWGetObjLayout 获取Object的layout信息 - Bucket MateSearch Config
RGWConfigBucketMetaSearch、RGWGetBucketMetaSearch、RGWDelBucketMetaSearch实现对Bucket的MetaSearch Config 属性的配置、查询、删除操作 - Cluster
RGWGetClusterStat 获取Cluster状态
IO 路径
RGW 网关使用OP线程(rgw_thread_pool_size
)处理应用的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 支持认证用户和匿名用户的访问,所有没哟通过认证的访问则认为是匿名用户的访问。RGW 支持V2 和 V4 两种认证方式。
用户 / 存储桶 / 对象的访问权限控制
通过身份验证的请求,并不意味着一定会有访问资源的权限,针对不同资源的访问,用户必须具备相应的访问权限(ACL)
针对 S3 API,RGW 网关规定了允许的操作跟资源的对应关系如表 7-8, s3 访问控制列表分为存储桶访问控制列表和对象访问控制列表,分别作用于存储桶本身和对象本身。一个存储桶或对象的访问控制权限可在创建吋指定,也可以针对已存在的存储桶或对象设置访问控制权限。无论采用哪种方式设置,都是通过授予除了存储桶或对象拥有者之
外的其他用户一定权限,以便其他用户对该存储桶或对象具备一定访问权限、
权限 | 存储桶 | 对象 |
---|---|---|
READ | 允许查询存储桶中对象列表 | 允许下载该对象 |
WRITE | 允许上传/删除对象 | NA |
READ_ACP | 允许读取存储桶访问控制列表 | 允许读取对象访间控制列表 |
WRITE_ACP | 允许设置存储桶访问控制列表 | 允许设置对象访间控制列表 |
FULL CONTROL | 完全控制权限 (READ | WRITE | READ ACP | WRITE_ACP) | 完全控制权限 (READ | WRITE | READ ACP | WRITE_ACP) |
bucket/用户配额
用户操作权限判断
用户操作权限判断指的是判断该用户是否具有读,写,删除权限,比如只有具有删除权限的用户才能进行删除对象的操作,对应于用户信息中的 op_mask
字段。
上面4步完成之后,针对不同的操作请求执行具体的请求操作。