RGW对象存储网关学习3:架构学习

1\underline{RGW架构学习}

RGW

RGW 是运行于RADOS集群之上的一个RADOS Client 实例,是CEPH集群对外提供对象存储服务的一个网关,它允许用户通过Restful API 的方式访问CEPH集群。其提供的Restful API具体为S3 API 和Swift API,即符合S3 协议和Swift 协议。

RGW 主要由3部分组成。Frontend,用于接收回复外部客户端的http请求;REST,根据外部请求的http信息选择相应的REST、Handler、Op对请求进行分解处理;RGWRados,完成了对数据读写业务的封装。

1.1\underline{Frontend}

Frontend包括

  • Frontend Config(RGWFrontendConfig)
  • Civetweb(RGWCivetWebFrontend)
  • beast(RGWAsioFrontend)
  • loadgen(RGWLoadGenFrontend)
  • fastcgi/fcgi(RGWFCGXFrontend)

用一个map管理所有RGWFrontendConfig配置信息对象;用一个list管理所有RGWFrontend对象。每个RGWFrontend实例使用与之对应的RGWFrontendConfig实例进行配置。

Frontend负责接收客户端的请求,然后回调process_request方法处理该请求,并将响应信息返回客户端。

1.2\underline{REST}

REST包括request process、S3 resource、Swift resource、Swift auth resource、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_requestprocess_request通过RESTMgr取得handler,handler再根据Http Method取得Op,Op再对数据进行读写操作。

1.2.1\underline{REST Resource}

1.2.1.1S3

RESTMgr:由1个RGWRESTMgr_S3组成。

Handler
由6个Handler组成。

  • RGWHandler_REST_Service_S3
  • RGWHandler_REST_Bucket_S3
  • RGWHandler_REST_Obj_S3
  • RGWHandler_REST_Service_S3Website
  • RGWHandler_REST_Bucket_S3Website
  • RGWHandler_REST_Obj_S3Website

功能
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操作

1.2.2 \underline{OP}

RGWOp

  • Object Tags
    RGWGetObjTags RGWPutObjTags RGWDeleteObjTags实现对象属性user.rgw.x-amz-tagging的查询、设置、删除操作
  • 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状态

1.2.3 request process

RGW的所有请求都需要回调process_request这个函数来处理,所以process_request处理过程十分重要。

处理流程

  1. 获取RGWHandler_REST
    1.1. 获取RGWRESTMgr对象
    各种REST resource 都保存在一个map中,当请求到来时根据传入的frontend_prefix和uri信息在map中查找对应的RGWRESTMgr
    1.2. 通过RGWRESTMgrget_handler获取RGWHandler_REST对象
    1.3. 调用RGWHandler_REST对象的init方法进行初始化
  2. 调用RGWHandler_REST对象的get_op方法获取RGWOp对象
  3. 调用RGWOp对象的verify_request的方法,根据不同的操作进行不同的请求授权检查
  4. 调用RGWHandler_REST对象的postauth_init方法,进行bucket和tenant解析及验证等操作
  5. 调用RGWHandler_REST对象的init_permissions方法,进行初始化权限
    5.1. 如果是创建Bucket操作(RGW_OP_CREATE_BUCKET)直接忽略此操作
    5.2. 非创建Bucket操作,通过调用RGWHandler_REST对象的do_init_permissions方法进行初始化权限
  6. 调用RGWHandler_REST对象的read_permissions方法,获取Object的AccessControlPolicy,若处理的是Bucket直接忽略
  7. 调用RGWOp对象的init_processing方法,获取bucket和user的quota信息
  8. 调用RGWOp对象的verify_op_mask验证操作的种类是否为RGW_OP_TYPE_READRGW_OP_TYPE_WRITERGW_OP_TYPE_DELETE中的一个或多个
  9. 调用RGWOp对象的verify_permission检查当前的操作在之前的init_permissions获取的策略之下是否有权限
  10. 调用RGWOp对象的verify_params检查当前操作的参数
  11. 调用RGWOp对象的pre_exec执行预执行操作
  12. 调用RGWOp对象的execute执行操作
  13. 调用RGWOp对象的complete完成操作,并整理响应结果

转载自Radosgw 架构 | Bolog (zhoubofsy.github.io),仅方便自己查询使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容