levy5307 / blog

https://levy5307.github.io/blog/
MIT License
0 stars 0 forks source link

KV SSD调研 #51

Open levy5307 opened 3 years ago

levy5307 commented 3 years ago

https://levy5307.github.io/blog/kv-ssd/

Block SSD

传统的SSD硬盘以块设备的形式存在。当在传统SSD之上实现KV存储系统时,如果写入或者读取键值对,需要先完成从KV到文件的转换,再实现文件到logic block的转换,然后将logic block映射到physical block,这种层层转换无疑是性能很低的。

并且为了适应块设备,当前很多KV系统采用了LSM-Tree的方式来实现,但是其有如下几个问题:

写放大。由于compaction机制的存在,一份数据被反复的compaction到LSM-Tree中的多层,造成非常大的写放大。

读放大。当没有命中block cache时,可能需要读取LSM-Tree中的多层才能够获取数据

compaction造成的IO浪费。由于compaction的存在,使得处理业务实际请求的IO远远小于磁盘能够提供的IO能力

空间使用率低。在数据被compaction之前,可能会保存多份,造成了空间的浪费。

KV SSD

目前业界提出了一种新的解决方案:KV SSD。在KV SSD中,通过固件对外提供了一个KV的接口,应用可以绕过内核与文件系统,通过SSD提供的KV接口向其写入数据。

下图所示为Block SSD和KV SSD的对比:

另外通过KV SSD,可以不必使用LSM-Tree,从而避免了LSM-Tree带来的读写放大、IO浪费等问题。分布式KV存储可以基于一个thin KV引擎来构建,如下图所示:

现状

当前百度携手宝存科技,已经实现上了上述方案,并且在百度内部接入了多个应用。根据百度的测试发现,其性能(吞吐和延迟)比基于Block SSD的KV存储有了数十倍的提升

参考文档

论文

Samsung KV SSD

Key Value Storage Standard Final

百度Open-Channel KV

2019开放数据中心峰会亮点之KV SSD