前言
Ceph早期的单机对象存储引擎是FileStore
,为了维护数据的一致性,写入之前数据会先写Journal
,然后再写到文件系统,会有一倍的写放大,而同时现在的文件系统一般都是日志型文件系统(ext系列、xfs),文件系统本身为了数据的一致性,也会写Journal
,此时便相当于维护了两份Journal
;另外FileStore
是针对HDD
的,并没有对SSD
作优化,随着SSD
的普及,针对SSD
优化的单机对象存储也被提上了日程,BlueStore
便由此应运而出。
BlueStore
最早在Jewel
版本中引入,用于在SSD
上替代传统的FileStore
。作为新一代的高性能对象存储后端,BlueStore
在设计中便充分考虑了对SSD
以及NVME
的适配。针对FileStore
的缺陷,BlueStore
选择绕过文件系统,直接接管裸设备,直接进行对象数据IO操作,同时元数据存放在RocksDB
,大大缩短了整个对象存储的IO路径。BlueStore
可以理解为一个支持ACID
事物型的本地日志文件系统。
目录
设计理念
存储系统中,数据的可靠性是至关重要的。所有的读操作都是同步的,也就是除非命中缓存,否则必须从磁盘上读到指定的数据才能返回。但是写操作则不一样,一般为了性能考虑,所有写操作都会先写内存缓存Page-Cache
便返回客户端成功,然后由文件系统批量刷盘。但是内存是易失性存储介质,掉电后数据便会丢失,所以为了数据可靠性,我们不能这么做。
一种可行的替代方案便是将数据先写入性能更好的非易失性存储介质(SSD、NVME等)充当的中间设备,然后再将数据写入内存缓存,便可以直接返回客户端成功,等到数据写入到普通磁盘的时候再释放中间设备对应的空间。写入中间设备的过程我们称为写日志Journal
。如果写