文章轉(zhuǎn)載自:RGW對象存儲網(wǎng)關(guān)學(xué)習(xí)3:架構(gòu)學(xué)習(xí)
RGW 主要由3部分組成:
- Frontend,用于接收回復(fù)外部客戶端的http請求
- REST沛鸵,根據(jù)外部請求的http信息選擇相應(yīng)的REST、Handler尤勋、Op對請求進(jìn)行分解處理
- RGWRados融求,完成了對數(shù)據(jù)讀寫業(yè)務(wù)的封裝
Frontend 包括:
- Frontend Config(RGWFrontendConfig)
- Civetweb(RGWCivetWebFrontend)
- beast(RGWAsioFrontend)
- loadgen(RGWLoadGenFrontend)
- fastcgi/fcgi(RGWFCGXFrontend)
Frontend負(fù)責(zé)接收客戶端的請求,然后回調(diào)process_request
方法處理該請求城舞,并將響應(yīng)信息返回客戶端钧唐。
REST
REST Resource 包括:
request process
s3 resource
swift resource
Swift auth resource
- Admin 相關(guān)
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回調(diào)了process_request
该园,process_request
通過RESTMgr取得handler,handler再根據(jù)Http Method取得Op帅韧,Op再對數(shù)據(jù)進(jìn)行讀寫操作里初。
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實(shí)現(xiàn)對象屬性的查詢双妨、設(shè)置、刪除操作 - Bulk
RGWBulkDelete
RGWBulkUploadOp
Swift專享批量上傳叮阅、刪除操作 - Usage
RGWGetUsage
獲取usage信息操作 - Stat
RGWStatAccount
統(tǒng)計(jì)buckets的使用情況 - Bucket
RGWListBuckets
列出所有buckets
RGWGetBucketLocation
獲取bucket location
RGWGetBucketVersioning
獲取bucket versioning刁品、mfa-delete狀態(tài)
RGWSetBucketVersioning
設(shè)置bucket versioning
RGWGetBucketWebsite
獲取bucket website信息
RGWSetBucketWebsite
設(shè)置bucket website
RGWDeleteBucketWebsite
刪除bucket website
RGWStatBucket
獲取bucket信息
RGWCreateBucket
創(chuàng)建bucket操作
RGWDeleteBucket
刪除bucket操作
RGWPutBucketPolicy
設(shè)置bucket policy
RGWGetBucketPolicy
獲取bucket policy
RGWDeleteBucketPolicy
刪除bucket policy - Object
RGWPutObj
RGWPostObj
RGWGetObj
RGWDeleteObj
RGWCopyObj
實(shí)現(xiàn)對象的創(chuàng)建、修改浩姥、下載挑随、刪除、拷貝操作勒叠,
RGWListBucket 列出bucket中的對象 - Metadata
RGWPutMetadataAccountSwift 專享保存user所有屬性信息(RGWUserInfo)
RGWPutMetadataBucketSwift 專享保存bucket所有屬性信息
RGWPutMetadataObjectSwift 專享保存object所有屬性信息 - ACL
RGWGetACLs镀裤、RGWPutACLs 實(shí)現(xiàn)對bucket或object的訪問控制策略屬性(user.rgw.acl)的獲取、設(shè)置操作 - LC
RGWGetLC缴饭、RGWPutLC、RGWDeleteLC 實(shí)現(xiàn)對bucket的生命周期屬性(user.rgw.lc)的獲取骆莹、設(shè)置颗搂、刪除操作 - CORS
RGWGetCORS、RGWPutCORS幕垦、RGWDeleteCORS丢氢、RGWOptionsCORS 實(shí)現(xiàn)對bucket的CORS屬性(user.rgw.cors)的獲取傅联、設(shè)置、刪除疚察、Options操作
RGWGetCrossDomainPolicySwift 專享獲取CrossDomain策略信息操作 - Payment
RGWGetRequestPayment蒸走、RGWSetRequestPayment 實(shí)現(xiàn)對bucket的payment屬性的獲取、設(shè)置操作 - Multipart
RGWInitMultipart貌嫡、RGWCompleteMultipart比驻、RGWAbortMultipart、RGWListMultipart岛抄、RGWListBucketMultiparts别惦、RGWDeleteMultiObj實(shí)現(xiàn)對Object的分片上傳的操作 - HealthCheck
RGWGetHealthCheckSwift 專享訪問判斷配置文件中的rgw_healthcheck_disabling_path是否可以被訪問操作 - Swift Info
RGWInfoSwift 專享獲取Swift信息 - Layout
RGWGetObjLayout 獲取Object的layout信息 - Bucket MateSearch Config
RGWConfigBucketMetaSearch、RGWGetBucketMetaSearch夫椭、RGWDelBucketMetaSearch實(shí)現(xiàn)對Bucket的MetaSearch Config 屬性的配置掸掸、查詢、刪除操作 - Cluster
RGWGetClusterStat 獲取Cluster狀態(tài)
IO 路徑
RGW 網(wǎng)關(guān)使用OP線程(rgw_thread_pool_size
)處理應(yīng)用的I/O請求蹭秋,OP 線程內(nèi)部處理的邏輯可分為 HTTP前端扰付,REST API通用處理層,API操作執(zhí)行層仁讨,RADOS 接口適配層 與 librados 接口層等幾個關(guān)鍵流程羽莺。
OP線程從HTTP前端收到 I/O 請求后,首先在 REST API 通用處理層陪竿,從HTTP語義中解析出 S3 或 Swift 數(shù)據(jù)并進(jìn)行一系列的檢查禽翼,檢查通過后,根據(jù)不同 API 操作請求執(zhí)行不同的處理流程族跛,如需從 RADOS 集群獲取數(shù)據(jù)或者往 RADOS 集群中寫入數(shù)據(jù)闰挡,則通過 RGW 與 RADOS 接口適配層調(diào)用 librados 接口將請求發(fā)送到 RADOS 集群中獲取或?qū)懭胂鄳?yīng)數(shù)據(jù),完成整個 I/O 過程礁哄。
其中 REST API 通用處理層的關(guān)鍵步驟如圖所示长酗,大概分為用戶認(rèn)證,用戶/存儲桶/對象的訪問控制 和 用戶 / 存儲桶配額檢查等幾個關(guān)鍵步驟桐绒。
用戶認(rèn)證
對于S3 API夺脾,RGW 支持認(rèn)證用戶和匿名用戶的訪問,所有沒喲通過認(rèn)證的訪問則認(rèn)為是匿名用戶的訪問茉继。RGW 支持V2 和 V4 兩種認(rèn)證方式咧叭。
用戶 / 存儲桶 / 對象的訪問權(quán)限控制
通過身份驗(yàn)證的請求,并不意味著一定會有訪問資源的權(quán)限烁竭,針對不同資源的訪問菲茬,用戶必須具備相應(yīng)的訪問權(quán)限(ACL)
針對 S3 API,RGW 網(wǎng)關(guān)規(guī)定了允許的操作跟資源的對應(yīng)關(guān)系如表 7-8, s3 訪問控制列表分為存儲桶訪問控制列表和對象訪問控制列表,分別作用于存儲桶本身和對象本身婉弹。一個存儲桶或?qū)ο蟮脑L問控制權(quán)限可在創(chuàng)建吋指定睬魂,也可以針對已存在的存儲桶或?qū)ο笤O(shè)置訪問控制權(quán)限。無論采用哪種方式設(shè)置镀赌,都是通過授予除了存儲桶或?qū)ο髶碛姓咧?br> 外的其他用戶一定權(quán)限氯哮,以便其他用戶對該存儲桶或?qū)ο缶邆湟欢ㄔL問權(quán)限、
權(quán)限 | 存儲桶 | 對象 |
---|---|---|
READ | 允許查詢存儲桶中對象列表 | 允許下載該對象 |
WRITE | 允許上傳/刪除對象 | NA |
READ_ACP | 允許讀取存儲桶訪問控制列表 | 允許讀取對象訪間控制列表 |
WRITE_ACP | 允許設(shè)置存儲桶訪問控制列表 | 允許設(shè)置對象訪間控制列表 |
FULL CONTROL | 完全控制權(quán)限 (READ | WRITE | READ ACP | WRITE_ACP) | 完全控制權(quán)限 (READ | WRITE | READ ACP | WRITE_ACP) |
bucket/用戶配額
用戶操作權(quán)限判斷
用戶操作權(quán)限判斷指的是判斷該用戶是否具有讀商佛,寫喉钢,刪除權(quán)限,比如只有具有刪除權(quán)限的用戶才能進(jìn)行刪除對象的操作威彰,對應(yīng)于用戶信息中的 op_mask
字段出牧。
上面4步完成之后,針對不同的操作請求執(zhí)行具體的請求操作歇盼。