本來不想再寫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臺或以上的電腦,具體配置自己感覺滿意就行 雖然用虛擬機器也可以,但難免某些惡意 有虛擬機器檢測機制,...