ceph rgw中關鍵流程分析及業務邏輯

2021-10-08 03:58:35 字數 2668 閱讀 2835

本來不想再寫ceph相關的文章了,最近在做ceph元資料優化研究及架構,整體思路是:將rados作為資料儲存引擎,構建分布式元資料集群來管理元資料,如:將rgw或者fs相關的元資料從ceph的元資料池中抽取出來,轉存到分布式元資料集群中,以此達到提公升單集群處理能力的目的;要達到這個目的,有兩個基礎條件:1.對ceph中rgw或者fs的各curd操作原理及io路徑非常熟悉,2.對ceph中元資料的組織及儲存非常熟悉;然後才能在rgw或者mds的io路徑中進行資料及元資料的分離操作,並以合適的格式將元資料轉存到分布式元資料集群中。

下文的操作在最新的nautilus版本環境下進行,基於s3 api進行,對rgw中的架構,關鍵流程及處理邏輯進行抽象,以使用者管理舉例說明

簡單介紹下rgw的邏輯分層架構,如下圖:

我將rgw從邏輯上分成兩層:

1)frontend:主要是處理http請求以及業務邏輯封裝,並提供到下層store的語義轉化。

2)store:主要負責io處理,對librados的封裝。

rgw中,對資源的請求都是這麼個思路:

1)根據http請求中的prefix獲取rest管理器rgwrestmgr_, 型別包括:s3,swift,admin等。

2)生成資源處理器rgwhander_,型別包括:user,usage,swift_auth,bucket,object等。

3)通過請求型別以及資源型別獲得操作物件rgwop_*。

4)請求預處理,主要是執行安全檢查及認證。

5)執行操作物件,與rados互動完成io操作。

以使用者管理為例,包括建立,刪除,更新等,下面是一張物件圖,是對上述邏輯分層圖第一層(frontend)以及業務邏輯在user的具體化:

下面來看下,第一層fronend中的關鍵路徑順序圖:(注:exec是統稱,泛指對rgwrados的呼叫)

verify_requester: 校驗客戶端signature和服務端的signatrue是否一致,用於確認使用者身份;這個過程中涉及兩個與後端相關的操作:(還記得前面的文章中幾點關於使用者元資料的分析吧? 這裡派上用場了)

1.1)通過access-key獲得uid,

1.2)通過uid獲得使用者資訊。

postauth_init:因為引入tenant,對bucket和object進行名字標準化,如果開啟mfa,還會進行mfa校驗(這部分操作的元資料作用在.rgw.otp池),user場景中不需要處理這個過程。

init_permissions:處理bucket及使用者的acl,bucket policy,這個過程中涉及兩個與後端相關的操作:

3.1)通過bucket name獲取bucket info資訊(包含acl,policy等擴充套件資訊),

3.2)通過instance id獲取bucket instance資訊,

3.3)通過uid獲取user擴充套件屬性(包括acl, sts policy)。

retarget:s3_website用於訪問物件重定向,這裡會獲取bucket 以及 bucket instance資訊(包含website資訊),相關的資訊在第3)步已經從後端獲取快取在cache中,其他場景不需要處理這個過程。

read_permissions:讀取bucket,object的acl,相關的資訊在第3)步已經從後端獲取快取在cache中,這裡主要是更新到req_state中。

verify_op_mask:操作碼(read,write,delete)許可權校驗,使用者的操作碼與該操作允許的操作碼進行比較,使用者的資訊以及在第1)步中從後端獲取快取在cache中,並設定在了rgwop_*物件中。

verify_permission:acl和policy許可權校驗,租戶檢查,配額檢查等,不同的rgwop_*的操作會有寫差異,可能包括:

8.1)使用者的cap與該操作允許的cap進行比較

8.2)bucket policy檢查

8.3)tenant匹配(只有同乙個tenant的user才能訪問bucket)

8.4)bucket配額(這裡會獲取.物件資訊,包含使用者的bucket列表)

verify_params:引數檢查

pre_exec:請求預處理,根據目前的了解,只有幾個dump操作。

execute:執行請求,這裡主要呼叫rgwrados完成io請求,比如:建立使用者,就會分別往.rgw.meta池的命名空間uid,keys,swfit,email等寫入使用者資訊,access-key,subuser,email資訊。

complete:完成請求,返回應答。

上面的流程可以歸納成這麼幾部分:

步驟1 ~ 5,從後端獲取必要的元資料,如:user,bucket,acl,policy等,

步驟11~12,執行請求,返回應答。

軟體測試意義及流程分析

一 什麼是軟體測試?1 為了發現程式中的錯誤,依據產品需求執行軟體的全過程。2 保證軟體研發過程中文件質量的過程。3 分析錯誤的產生原因和發生趨勢,提出研發過程改進意見。4 未發現錯誤的測試也有價值,測試是評定軟體質量的有效方法,軟體測試是軟體研發的一部分,不只是指出軟體錯誤的活動,更是軟體研發每一...

病毒分析必備工具及基本流程

快畢業了也應該給自己定個明確的方向,對於病毒分析這方面的知識確實還是感興趣的,這裡收集了一些資料,給大家分享一下。以下來自烏龜,略有改動 先說說硬體 條件允許的情況下,2條不同網路運營商提供的線路,2臺或以上的電腦,具體配置自己感覺滿意就行 雖然用虛擬機器也可以,但難免某些惡意 有虛擬機器檢測機制,...

病毒分析必備工具及基本流程

快畢業了也應該給自己定個明確的方向,對於病毒分析這方面的知識確實還是感興趣的,這裡收集了一些資料,給大家分享一下。以下來自烏龜,略有改動 先說說硬體 條件允許的情況下,2條不同網路運營商提供的線路,2臺或以上的電腦,具體配置自己感覺滿意就行 雖然用虛擬機器也可以,但難免某些惡意 有虛擬機器檢測機制,...