ceph bluestore是在newstore上去掉文件系统的实现,现在newstore已经废弃。
为什么bluestore?
- More natural transaction atomicity
- Avoid double writes
- Efficient object enumeration
- Efficient clone operation
- Efficient splice (“move these bytes from object X to object Y”)
- Efficient IO pattern for HDDs, SSDs, NVMe
- Minimal locking, maximum parallelism (between PGs)
- Full data and metadata checksums
- Inline compression
上述是newstore的目标,但是并未全部实现,尤其是overwrite的情况,数据仍然需要wal,将其写入rocksdb,显然不是一个很好的方案。
bluestore上相应的实现如下:
- 事务由kvdb提供,不再额外使用journal
- object的元数据放入db,使用db接口实现enumeration
- clone, splice,split collection只修改元数据
- 使用裸盘,支持dio + aio,支持各种device
- 使用裸盘之后,数据采用cow的方式写,数据片段化,可以对每个片段实现checksum
-
在数据片上支持压缩
rocksdb on raw
但是仅仅如此还不够,rocksdb on xfs也有额外的开销,为了去掉这部分开销。架构调整为:
下面使用2个BlockDevice是因为Rocksdb支持wal和db数据的分离。
- rocksdb本身实现也在改进,支持dio等,rocksdb on bluefs的实现有多大效果有待观测。
后续
目前bluestore的架构基本定型,但是仍然有很多地方急需改进。
空间管理,内存cache,meta layout, kvdb on raw 都有很大的发挥空间,结合业务特点对上述三大块可以做一些垂直优化。