图解Ceph_001_BlueStore主要数据结构

CEPH VERSION: Quincy 17.2.6

BlueStore数据结构.png

BlueStore极为庞大复杂,包含的Types远不止上图这些。所以,采用切换视角的方式,每次只观察一个方面,分析理解一个部分,抽丝剥茧,最终达成完整的认知。

把视线聚焦到BlueStore中,用于表达用户数据的数据结构上,忽略掉组件、流程、过程数据相关的数据结构,最后,得到上面的两部分数据结构以及数据之间的关系。

  • OnDisk Types
    这部分数据是最终保存到RocksDB中的,它们被序列化,而后不同类型以不同的PREFIX保存为RocksDB K-V条目。
    这些类型被设计为尽可能的独立,类型之间尽可能少的呈现组合关系,而一些类型之间,通过offset进行微妙的逻辑关联。这样设计的好处在于每种类型可以独立的encode、decode,可以方便而且小代价的进行局部修改,尽量少的冗余信息使得存盘容量小,减少BlueStore整体的元数据占用空间。

  • InMemory Types
    这部分数据结构只在BlueStore被OSD等进程加载后,存在于内存中,它们与OnDisk Types存在直接或间接的对应关系。它们能够依靠OnDisk Types从盘上读出并decode后,在内存进行完整的构建以及关联。
    与OnDisk Types的显著不同有几点:InMemory Types有更多的辅助性的、无持久化需求的字段;类型之间有复杂的组合、继承、共享等关系,这更加符合面向对象的设计,便于组件流程的编程使用;组合类型间通常有着双向的关联字段,便于在类型间高效的导航;大多数的对象引用为智能指针的方式,降低了内存管理的压力和风险,也更符合现代C++习惯。

剥离一些非关键细节,进一步抽象后,类型关系呈现为下图


Bluestore数据结构精简.png
  • Collection
    PG在BlueStore中对应的内存元数据管理类型,每个PG在BlueStore中有一个对应的Collection对象常驻内存。每个Collection有一个OpSequencer对象用于IO保序,这意味着在BlueStore中,仍然遵守OSD上层的PG内IO保序要求。OpSequencer的详细工作机制将在后续文章分析。
    Collection通过对应的bluestore_cnode_t类型成员cnode关联到具体的pgid。
    Collection关联着两个Cache分片,分别是数据缓存(BufferCacheShard)和元数据缓存(OnodeCacheShard)。两种分片的确定,均是通过pgid进行hash映射。本篇不对BlueStore Cache做深入分析,此处只需意识到它们的存在即可。
    Collection通过OnodeSpace类型成员onode_space来管理本PG下的object元数据

  • OnodeSpace
    OnodeCacheShard *cache成员由Collection创建时,由pgid做hash映射确定后传入。
    unordered_map<ghobject_t,OnodeRef> onode_map成员则管理着本PG下已加载到内存的Onode对象引用,使用unordered_map来实现最快的objectID查找Onode。

  • Onode
    一个对象的元数据内存结构。由于boost::intrusive_ptr的要求,它自己管理着引用计数。bluestore_onode_t onode成员对应着它的OnDisk数据结构。ExtentMap extent_map成员则是它与盘上数据映射关系的内存管理结构。

  • ExtentMap
    包含若干个逻辑上不一定连续的Extent对象,整个ExtentMap包含了该object所有数据在盘上的所有映射区间

  • Extent
    代表着object的一段数据的映射信息,它关联到一个Blob,并记录这段数据该Blob中的偏移和长度。

  • Blob
    它是OnDisk结构bluestore_blob_t的内存对应结构,受到参数bluestore_max_blob_size(默认64KB)的限制,当Blob过大时会发生分裂。Blob结构使得大object的元数据和数据均被分割为合适粒度的多个片段,每个片段能够独立的被读写、变更,有效控制元数据的读写放大。

  • bluestore_blob_t
    Blob的OnDisk对应结构,其中包含了若干个bluestore_pextent_t,后者记录了一个offset和length,代表Block设备上的一段物理区间。
    csum相关的成员记录了校验和相关信息,包括校验码类型、分段校验的分段长度、以及整个Blob的校验和(csum_data)

最后,借用一张网上画得很直观的一张图,进一步清晰的展现上述各数据结构的映射关系。


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容