Ceph分布式存储系统设计

1.设计原则

  • 存储系统中,所有读操作都是同步的,除非在缓存中命中,否则必须要从磁盘中读到指定的内容后才能向前端返回。(SKV也没有优化读,只优化写副本的流程)
  • 写操作处于效率考虑,都会先在内存中缓存,由文件系统组织后,再批量写入磁盘。理论上,数据写入缓存就能向前端返回成功。但由于数据可靠性,比如断电,不能这样做,替代的方案是,先写入性能更好的中间设备,如NVM,保电内存,等待数据写入磁盘后再释放中间设备的空间。写中间设备的过渡过程称为写日志,中间设备又叫日志设备。引入日志(设备)后,数据写入日志设备即可向前端应答写入成功,如果此时掉电,即使未写入磁盘,系统重新上电后也可以通过日志重放进行数据恢复。因此,日志系统的引入可以在不影响可靠性的基础上加速写操作。缺点是同一份用户数据需要先后在日志设备和磁盘上写两次,所以存在双写问题。

术语

1)块大小
对磁盘操作的最小粒度,现代SSD一般是4KB

2)RMW (Read Modify write)
当覆盖写,即改写已有的内容时,如果改写的内容不足一个磁盘块大小,那么要先将对应块读上来,然后与原先的内容进行合并,最后将更新的块重新写入原先的位置。RMW引入了两个问题,一个是额外的读惩罚,而是对已有的内容执行覆盖写,如果掉电会出现数据损坏。

3)COW(copy on write)
当覆盖写发生时,不再直接更新磁盘对应位置的已有内容,而是分配一块新空间,存放本次新写入的内容。当新写完成后,释放原有空间。因此可以解决RMW多读一次的问题和覆盖写的问题。但是COW破坏了物理连续性,经过多次COW后,大范围的顺序读最后会变成随机读(如果是磁盘的话,读性能会变差很多,但是如果是ssd的话,随机读写和顺序读写差距不大,因此性能影响不大)此外COW也可以把随机写转换为顺序写,也能提高写性能。但是COW原有块仍保留部分有效内容,后续范围内操作都需要多次读,还是会影响读性能,此外COW涉及空间分配和地址指针重定向,会引入更多的元数据,而元数据过多无法常驻内存,性能会降低。

BlueStore

  • BlueStore综合RMW和COW,根据磁盘块大小,将其切分为两个部分,首尾非块大小对齐部分和中间块大小对齐部分。对齐部分使用COW策略,写时分配一个新整块写,写完成后释放原有整块。首尾部分采用RMW,先读整块,合并更新后写回。
  • 所有读请求是同步的,写请求出于效率考虑设计成异步。因此,需要为写请求设计一个队列进行保序,队列称为OpSequencer,包含两个FIFO队列,第二个用于带日志写。因为带日志的写,需要写日志后再覆盖写数据。因此第二个队列用于进入覆盖写数据阶段在线程池中的排序。

2.磁盘结构

posted @ 2022-11-04 11:14  misaka-mikoto  阅读(154)  评论(0编辑  收藏  举报