這篇文章給大家分享的是有關(guān)Ceph中KeyValueStore有什么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
我們提供的服務(wù)有:網(wǎng)站制作、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、師宗ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的師宗網(wǎng)站制作公司
KeyValueStore 是 Ceph 支持的另一個(gè)存儲(chǔ)引擎(第一個(gè)是FileStore),它是在 Emporer 版本中Add LevelDB support to ceph cluster backend store Design Summit 上由本人提出并實(shí)現(xiàn)了原型系統(tǒng),在 Firely 版本中實(shí)現(xiàn)了與 ObjectStore 的對接。目前已經(jīng)合并到 Ceph 的 Master 上。
KeyValueStore 相對于 FileStore 是一個(gè)輕量級實(shí)現(xiàn),目標(biāo)是利用其不同 Backend 提供的能力來為 Ceph 的不同應(yīng)用場景服務(wù)。如目前的默認(rèn) engine 是 LevelDB,期望來提供高性能的寫性能。
KeyValueStore主要由三部分組成,一個(gè)是繼承ObjectStore 的KeyValueStore 類,另一個(gè)是GenericObjectMap(類似于FileStore 的DBObjectMap),最后一個(gè)是繼承GenericObjectMap 的StripObjectMap。GenericObjectMap 是主要用來訪問后端Engine 的實(shí)現(xiàn),它的作用有點(diǎn)類似VFS,而Engine 就是各種不同的FileSystem,它抽象出一些基本的方法(read/write)和一些高級接口(rename/clone)等等,首先最初開始設(shè)計(jì)GenericObjectMap的時(shí)候是打算直接利用已經(jīng)存在的FileStore 的DBObjectMap,但是在一定的調(diào)查后發(fā)現(xiàn)DBObjectMap 缺少一定的擴(kuò)展性,很難在不破壞現(xiàn)有接口的前提下來實(shí)現(xiàn),因此最后與Sage 商定直接實(shí)現(xiàn)新的ObjectMap。那么什么是ObjectMap,正如在上篇FileStore 文章中所述,ObjectMap 是利用K/V 接口實(shí)現(xiàn)的一個(gè)多層次Map,目的是讓OSD 最重要的Object 具備一個(gè)獨(dú)立和高效查找的KV 空間,同時(shí)這個(gè)空間還能使用no-copy 的clone。
GenericObjectMap 在提供了一個(gè)面向Object 的通用KV 空間后,StripObjectMap 繼承了GenericObjectMap 實(shí)現(xiàn)了對Object Data 的封裝,ObjectStore 有三種類型的數(shù)據(jù): Data, attr 和Omap,后兩者都是單一的KV 實(shí)現(xiàn),可以直接利用GenericObjectMap 的原生接口實(shí)現(xiàn),但是Data 的接口是類似于Posix 需要具備Parity Write 的能力,因此簡單的將一個(gè)Object 的Data 作為一個(gè)鍵值對是不合適的,需要做一個(gè)Strip 的工作,將一個(gè)Object 的Data 根據(jù)一定寬度劃分成多個(gè)鍵值對,這個(gè)工作就是由StripObjectMap 來完成。
最后KeyValueStore 類利用StripObjectMap 來完成了對ObjectStore 的方法實(shí)現(xiàn)。
struct OpWQ定義了操作隊(duì)列
op_tp定義了線程池
與FileStore 的實(shí)現(xiàn)類似,KeyValueStore 也會(huì)產(chǎn)生一個(gè)消息隊(duì)列,所有來自上層PG 產(chǎn)生的IO 請求都會(huì)先放入這個(gè)隊(duì)列,然后會(huì)有多個(gè)KeyValueStore 線程作為隊(duì)列的消費(fèi)者獲取請求進(jìn)行處理,因?yàn)镻G 天生的隔離性,目前KeyValueStore 是利用PG 作為一個(gè)隔離單元,同一時(shí)間只有一個(gè)線程處理同一個(gè)PG 的請求。KeyValueStore 線程針對每一個(gè)請求會(huì)產(chǎn)生一個(gè)緩沖空間,因?yàn)橐粋€(gè)請求作為一個(gè)事務(wù)會(huì)包含多個(gè)原子操作,為了保證事務(wù)的原子性和隔離性,每一個(gè)請求在中間階段并不能寫入到持久層,只能產(chǎn)生一些操作序列,而可能的副作用就需要被緩沖空間保存起來作為后續(xù)操作的上下文。最后KeyValueStore 線程會(huì)提交這個(gè)請求來完成這次事務(wù)。</font
KeyValueStore.h中相關(guān)定義如下
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)
感謝各位的閱讀!關(guān)于“Ceph中KeyValueStore有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
本文標(biāo)題:Ceph中KeyValueStore有什么用
文章URL:http://vcdvsql.cn/article22/pesjjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站維護(hù)、標(biāo)簽優(yōu)化、定制開發(fā)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)