Ceph Newstore存储引擎介绍
在Ceph被越来越多地应用于各项存储业务过程中,其性能及调优策略也成为用户密切关注讨论的话题,影响性能表现关键因素之一即OSD存储引擎实现;Ceph基础组件RADOS是强一致、对象存储系统,其OSD底层支持的存储引擎如下图所示:

其中,ObjectStore层封装了下层存储引擎的所有IO操作,向上层提供对象(object)、事务(Transaction)语义的接口,MemStore为基于内存的实现;KeyValueStore主要基于KV数据库(如leveldb, rocksdb等)实现接口功能,事务实现也基于KV数据库自身;FileStore是Ceph目前默认的存储引擎(也是目前使用最多的存储引擎),其事务实现基于Journal机制(Journal文件或块设备);除了支持事务特性(consistency、atomic等)外,Journal还可将多个小IO写合并为顺序写Journal,以提升性能。
在社区使用过程中,FileStore也暴露了若干问题:(1)Journal机制使一次写请求在OSD端变为两次写操作(同步写Journal,异步写入object);(2)对前一个问题,社区通常做法是使用专门设备(如SSD)用作Journal以解耦Journal和object写操作的相互影响,但持续循环写入Journal会降低SSD设备的使用寿命;(3)写入的每个object都一一对应OSD本地文件系统的一个物理文件,对于大量小object存储场景,OSD端无法缓存本地所有文件的inode等元数据,使读写操作可能需要多次本地IO,系统性能差;(4)object对应的本地物理文件的文件名,包含了object name、rados namespaces、object name hash、snapshot等信息,可能会超过本地文件系统对文件名长度的限制。
面对上述问题,新的存储引擎NewStore(又被称为KeyFileStore)出现,其关键数据结构如下图所示:

其主要特点有:(1)解耦object与本地物理文件间的一一对应关系,通过索引结构(上图中ONode)在object和本地物理文件建立映射关系,并使用KV数据库存储索引数据;(2)在保证事务特性的同时,对于object的create/append/overwrite(fragement aligned)操作,无需Journal支持;(3)对于unaligned update操作,先同步写入write-ahead-log(简称为WAL,使用KV存储),再异步写入相应的fragement文件;(4)在KV数据库上层建立Onode数据cache以加速读取操作;(5)单个object可以有多个fragement文件,多个object也可共存于一个fragement文件;
FileStore的上述问题,在NewStore结构中已基本解决;NewStore还采用以下策略来减小WAL的性能开销:(1)在update写入fragement文件后,立即将相应WAL从KVdb中删除(WAL已完成使命,无需保存);(2)增大KVdb的write buffer,尽量将WAL保留在buffer中,避免不必要的dump;(3)在write buffer数据dump到磁盘前,强制合并多个buffer数据,以避免不必要的dump。在初步的随机读写测试中,NewStore相对于FileStore有60%的性能提升;
本博客的上篇博文《海量小文件存储与Ceph实践》从元数据管理、本地存储引擎两个方面对海量小文件存储问题进行了分析描述,并通过object class接口层对FileStore存储结构做了改进优化,虽不如NewStore彻底,但也在很大程度上优化了小文件存储性能;NewStore则直接在存储引擎层进行重新设计实现,解耦object与本地物理文件间的对应关系,并允许多个object共存于一个fragement文件;但二者对小文件本地存储引擎优化的本质思想是相通的,即合并存储+索引;不过目前NewStore还在密集开发阶段,到线上部署还需要一段时间;相信以后随着NewStore引擎的逐步部署与成熟,海量小文件存储难题也不再是难题。
另外,基于object class接口层的改进优化方案相关代码实现已放到github,欢迎测试使用及批评指正。
参考:
图片和相关内容摘自2015年6月份Beijing Ceph Day《Newstore》讲稿
http://thread.gmane.org/gmane.comp.file-systems.ceph.devel/23414/focus=23417
http://docs.ceph.com/docs/master/rados/configuration/journal-ref/
http://www.sebastien-han.fr/blog/2014/02/17/ceph-io-patterns-the-bad/
http://tracker.ceph.com/projects/ceph/wiki/Optimize_Newstore_for_massive_small_object_storage
http://www.cnblogs.com/wuhuiyuan/p/ceph-small-file-compound-storage.html
http://www.wzxue.com/ceph-filestore/
http://www.wzxue.com/ceph-keyvaluestore/
https://github.com/yxgup/ceph/tree/omap_indexed_compound
------------------------------------
http://www.cnblogs.com/wuhuiyuan/p/4907984.html
个人原创,转载请注明出处。
Ceph Newstore存储引擎介绍的更多相关文章
- [ ceph ] BlueStore 存储引擎介绍
为什么需要 BlueStore 首先,Ceph原本的FileStore需要兼容Linux下的各种文件系统,如EXT4.BtrFS.XFS.理论上每种文件系统都实现了POSIX协议,但事实上,每个文件系 ...
- 数据库 --> MySQL存储引擎介绍
MySQL存储引擎介绍 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然 ...
- {MySQL存储引擎介绍}一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用
MySQL存储引擎介绍 MySQL之存储引擎 本节目录 一 存储引擎解释 二 MySQL存储引擎分类 三 不同存储引擎的使用 一 存储引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是 ...
- Mysql部分存储引擎介绍
Mysql存储引擎 什么是存储引擎 mysql中建立的库 --> 文件夹 库中建立的表 --> 文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制: ...
- MySql存储引擎介绍
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默认引擎,可以修改配置文件中的default-storage-engin ...
- MySQL的常见存储引擎介绍与参数设置调优
MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check table tablename repair table tablename 3.MyISAM表支持的索引 ...
- MySQL的常见存储引擎介绍与参数设置调优(转载)
原文地址:http://www.cnblogs.com/demon89/p/8490229.html MySQL常用存储引擎之MyISAM 特性: 1.并发性与锁级别 2.表损坏修复 check ta ...
- MySql的存储引擎介绍
下面主要介绍InnoDB.MyISAM和MEMEORY三种存储引擎. InnoDB存储引擎 InnoDB遵循CNU通用公开许可(GPL)发行.InnoDB已经被一些重量级互联网公司所采用,如雅虎.Sl ...
- MYSQL存储引擎介绍--应用场景
MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些? MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表.若要修改默 ...
随机推荐
- Cocos2d-x中jsb结构剖析
libs/javascript下有两部分bindings和spidermonkey.其中spidermonkey为js虚拟机,暂时不去管它.bindings下分为四部分,分别为主干部分,generat ...
- AIDL实例
转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5658372.html 什么是AIDL Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进 ...
- algorithm@ Divide two integers without using multiplication, division and mod operator. (Bit Operation)
#include<bits/stdc++.h> using namespace std; int divide(int dividend, int divisor) { long long ...
- [读书笔记]了不起的node.js(四)
这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站.主要是遇到了一下几个问题. 1.mongodb版本过低 npm ERR! Not compatible wit ...
- 新手学习 Vim 的五个技巧
多年来,我一直想学 Vim.如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具.我说的学习,指的是真正意义上的学习.想要精通确实很难,所以我只想要达到熟练的水平 ...
- Java中的IP对象以及本地域名解析
本地域名解析操作步骤: 1.打开C:\WINDOWS\system32\drivers\etc目录 2.找到host文件,用记事本打开 3.添加“空间IP 域名” package WebProgra ...
- PCB编辑快捷键
TAB: 调节属性PgUp: 放大PgDn: 缩小Delete: 删除Ctrl+C: 复制Ctrl+V: 粘贴Ctrl+X: 剪贴Ctrl+Z: 撤销Ctrl+Y: 取消撤销Ctrl+F: 查找Ctr ...
- OpenCV学习笔记:MAT解析
在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料.但这 ...
- UI进阶 数据处理之文件读写
目录: 1-------沙盒机制(SandBox) 2-------简单对象的读写(I/O)操作 3-------复杂对象的读写(I/O)操作 一.沙盒机制(SandBox) 什么是沙盒:每个iOS应 ...
- 教你50招提升ASP.NET性能(二):移除不用的视图引擎
(2)Remove unused View Engines 招数2: 移除不用的视图引擎 If you're an ASP.NET MVC developer, you might not know ...