中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Ceph中KeyValueStore有什么用

發布時間:2021-12-17 10:59:24 來源:億速云 閱讀:176 作者:小新 欄目:互聯網科技

這篇文章給大家分享的是有關Ceph中KeyValueStore有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

KeyValueStore 是 Ceph 支持的另一個存儲引擎(第一個是FileStore),它是在 Emporer 版本中Add LevelDB support to ceph cluster backend store Design Summit 上由本人提出并實現了原型系統,在 Firely 版本中實現了與 ObjectStore 的對接。目前已經合并到 Ceph 的 Master 上。

KeyValueStore 相對于 FileStore 是一個輕量級實現,目標是利用其不同 Backend 提供的能力來為 Ceph 的不同應用場景服務。如目前的默認 engine 是 LevelDB,期望來提供高性能的寫性能。

主要數據結構

  Ceph中KeyValueStore有什么用
 

KeyValueStore主要由三部分組成,一個是繼承ObjectStore 的KeyValueStore 類,另一個是GenericObjectMap(類似于FileStore 的DBObjectMap),最后一個是繼承GenericObjectMap 的StripObjectMap。GenericObjectMap 是主要用來訪問后端Engine 的實現,它的作用有點類似VFS,而Engine 就是各種不同的FileSystem,它抽象出一些基本的方法(read/write)和一些高級接口(rename/clone)等等,首先最初開始設計GenericObjectMap的時候是打算直接利用已經存在的FileStore 的DBObjectMap,但是在一定的調查后發現DBObjectMap 缺少一定的擴展性,很難在不破壞現有接口的前提下來實現,因此最后與Sage 商定直接實現新的ObjectMap。那么什么是ObjectMap,正如在上篇FileStore 文章中所述,ObjectMap 是利用K/V 接口實現的一個多層次Map,目的是讓OSD 最重要的Object 具備一個獨立和高效查找的KV 空間,同時這個空間還能使用no-copy 的clone。

     GenericObjectMap 在提供了一個面向Object 的通用KV 空間后,StripObjectMap 繼承了GenericObjectMap 實現了對Object Data 的封裝,ObjectStore 有三種類型的數據: Data, attr 和Omap,后兩者都是單一的KV 實現,可以直接利用GenericObjectMap 的原生接口實現,但是Data 的接口是類似于Posix 需要具備Parity Write 的能力,因此簡單的將一個Object 的Data 作為一個鍵值對是不合適的,需要做一個Strip 的工作,將一個Object 的Data 根據一定寬度劃分成多個鍵值對,這個工作就是由StripObjectMap 來完成。

   最后KeyValueStore 類利用StripObjectMap 來完成了對ObjectStore 的方法實現。

Ceph中KeyValueStore有什么用

struct OpWQ定義了操作隊列

op_tp定義了線程池
 

主要 IO 路徑

與FileStore 的實現類似,KeyValueStore 也會產生一個消息隊列,所有來自上層PG 產生的IO 請求都會先放入這個隊列,然后會有多個KeyValueStore 線程作為隊列的消費者獲取請求進行處理,因為PG 天生的隔離性,目前KeyValueStore 是利用PG 作為一個隔離單元,同一時間只有一個線程處理同一個PG 的請求。KeyValueStore 線程針對每一個請求會產生一個緩沖空間,因為一個請求作為一個事務會包含多個原子操作,為了保證事務的原子性和隔離性,每一個請求在中間階段并不能寫入到持久層,只能產生一些操作序列,而可能的副作用就需要被緩沖空間保存起來作為后續操作的上下文。最后KeyValueStore 線程會提交這個請求來完成這次事務。</font

KeyValueStore.h中相關定義如下

struct Op {
 utime_t start;
 uint64_t op;
 list<Transaction*> tls;
 Context *ondisk, *onreadable, *onreadable_sync;
 uint64_t ops, bytes;
 TrackedOpRef osd_op;
 };
 struct OpWQ : public ThreadPool::WorkQueue<OpSequencer>

消息處理請求控制

unsigned KeyValueStore::_do_transaction(Transaction& transaction,                                        BufferTransaction &t,                                        ThreadPool::TPHandle *handle)


感謝各位的閱讀!關于“Ceph中KeyValueStore有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都匀市| 会同县| 登封市| 鄯善县| 武山县| 平利县| 岳阳市| 土默特左旗| 乌拉特中旗| 台安县| 祁阳县| 巨鹿县| 宁津县| 隆尧县| 五指山市| 抚顺市| 应城市| 甘谷县| 霍林郭勒市| 班戈县| 尉犁县| 军事| 南城县| 嘉鱼县| 昌邑市| 达州市| 溆浦县| 宁明县| 云梦县| 高唐县| 西青区| 泸定县| 襄城县| 河东区| 米脂县| 濮阳市| 民勤县| 陆川县| 东丽区| 南澳县| 库尔勒市|