RGW 架構(gòu)

文章轉(zhuǎn)載自:RGW對象存儲網(wǎng)關(guān)學(xué)習(xí)3:架構(gòu)學(xué)習(xí)

image.png

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)鍵流程羽莺。

image.png

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)鍵步驟桐绒。

image.png
用戶認(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í)行具體的請求操作歇盼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舔痕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子豹缀,更是在濱河造成了極大的恐慌伯复,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邢笙,死亡現(xiàn)場離奇詭異啸如,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)氮惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門叮雳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妇汗,你說我怎么就攤上這事帘不。” “怎么了杨箭?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵寞焙,是天一觀的道長。 經(jīng)常有香客問我互婿,道長捣郊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任慈参,我火速辦了婚禮呛牲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驮配。我一直安慰自己侈净,他們只是感情好尊勿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畜侦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躯保。 梳的紋絲不亂的頭發(fā)上旋膳,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機(jī)與錄音途事,去河邊找鬼验懊。 笑死,一個胖子當(dāng)著我的面吹牛尸变,可吹牛的內(nèi)容都是我干的义图。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼召烂,長吁一口氣:“原來是場噩夢啊……” “哼碱工!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奏夫,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怕篷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后酗昼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廊谓,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年麻削,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒸痹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡呛哟,死狀恐怖叠荠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竖共,我是刑警寧澤蝙叛,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站公给,受9級特大地震影響借帘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淌铐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一肺然、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腿准,春花似錦际起、人聲如沸拾碌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至曲饱,卻和暖如春灾前,著一層夾襖步出監(jiān)牢的瞬間防症,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工哎甲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蔫敲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓炭玫,卻偏偏與公主長得像奈嘿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吞加,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容