3.2.3 I/O 路径
RGW 是 RADOS Gateway,顾名思义是 RADOS 对象存储系统上层的一个网关服务,根据网关的功能定义,网关负责完成不同协议的转换和对接。在 Ceph 场景中,RGW即完成类似的功能:接收用户 S3/Swift 接口规则的数据存取请求,然后将其转化为后端RADOS 能够处理的操作。
RGW 的请求处理经历了 3 个阶段:
(1)Web 框架主要负责接收用户请求,RGW 中常用的 Web 框架包括 CivetWeb、Apache、Beast 等;
(2) 根 据 用 户 请 求 类 型, 分 别 选 择 不 同 的 RESTMgr( 针 对 不 同 的 Resource)、Handler、RGWOp 来处理用户的具体业务,梳理出用户的请求数据;
(3)将用户的业务请求转换为对 RADOS 层数据读写请求的封装,具体操作由RGWRados 完成。
RGW 的业务架构示意如图 3-29 所示。请求到达 RGW 网关后,在 RGW Frontend 层做相应转发,请求到达 RGWRESTMgr 层,RGWRESTMgr 依照请求资源类型,对请求做相应的 RGWHandler 层的资源实例化工作。
在 RGWHandler 层中实例化后的请求,首先进行前置处理,完成基本信息的校验等工作,在校验完成后,调用相关的业务接口 RGWOp 完成 Bucket 和 Object 的请求处理,并在 RGWOp 中,调用终极接口 RGWRados,完成 RGW 数据的最终落盘(RGWRados是 RGW 网关模块和后端的 RADOS 底层存储系统交互的窗口)。RGW 请求处理流程见图 3-30。
图 3-29 RGW 业务架构示意
图 3-30 RGW 请求处理流程
对 应 上 述 业 务 处 理 过 程,RGW 中 会 有 3 个 重 要 的 数 据 结 构:RGWFrontend、RGWRESTMgr 及 RGWHandler。
◆ RGWFrontend :RGWFrontend 是 RGW 的 WEB 前端类的封装,用于处理 HTTP(s)相关的请求,完成 RGW 业务逻辑中的 WEB 框架接收用户请求的功能。目前最新的 WEB框架是 Beast。
◆ RGWRESTMgr :RGWRESTMgr 负责 RGW 处理的资源类型区分,RGWRESTMgr包含了多种不同类型的路径和资源,并可根据请求资源类型的不同,将请求“路由”到不同的业务逻辑来进行处理(请求的实例化工作)。
◆ RGWHandler :RGWHandler 负责具体的用户请求处理,如客户使用 S3 规范进行业务请求,该层中会调用 S3 相关的 RGWHandler,后续操作如下。
(1)RGWHandler_REST_Service_S3
负责处理 S3 用户类型请求,包括获取用户的统计信息、用户的桶列表、S3 账户访问权限设置等。
(2)RGWHandler_REST_Bucket_S3
负责处理 S3 桶类型请求,包括桶的 ACL 权限列表、生命周期规则以及具体的创建 / 删除桶等操作。
(3)RGWHandler_REST_Obj_S3
负责处理 S3 Object 类型请求,包括 Object 的 ACL 权限列表、Tagging 及具体的Object 数据操作(简单上传、分块上传、删除)等。