分布式场景SSD append 引擎的点滴思考

分布式和单机场景对append引擎设计的不同要求

单机:只用考虑本地数据的格式、位置和管理
分布式:需要考虑分布式一致协议中 日志落盘的格式、位置和管理

append引擎和分布式一致性协议的潜在冲突

append引擎的需求

顾名思义, append引擎期望SSD盘能尽量把数据一路写下去,也就是物理数据需要顺序落盘,这样可以减小写放大。但为了保证比较好的数据恢复速度,一个磁盘上通常有多个复制组,这些复制组可能同时收到用户写请求数据而要落盘,因此逻辑上的多个复制组的数据是杂乱无序的。

分布式一致性协议的需求

典型的分布式一致性协议比如Raft, 在做Log compaction的时候,把之前的所有做过snapshot(索引信息落盘的)log 删调。哪些日志可以删掉呢?可以根据log index 记录。 哪里的日志可以删掉呢? 这就需要记录好不同复制组内不同日志在同一个磁盘上的位置。为了防止掉电这些数据还在,这些信息需要持久化。同时为了避免反复从磁盘读入,这些信息就需要在内存中缓存一份。