以键值对(Key-Value,简称KV)作为数据的存储方式,已经在很多场合得到了成功的应用。KV存储以其直观性,降低了很多应用程序调用数据的复杂度,可以获得更高数据的存取效率,但也有其局限性。宝存科技的Open-Channel SSD(OCS)定义了一种通用的,高效率的主机端直接访问 FLASH 的标准接口,百度基于此开发出一套高性能KV存储引擎,有效减少写放大对设备性能的影响。
01
当前KV的不足之处
目前KV的成熟应用场合有:
内存数据库及其持久化,如Redis、Pika;
分布式文件存储系统底层存储接口,如Ceph中使用Bluestore;
关系数据库存储引擎,如MySQL中的MyRocks引擎。
由于单机内存总量的限制,内存KV有持久化到硬盘的需求,而基于硬盘的KV数据库多使用LSM Tree的方式在文件系统中实现(如RocksDB),在实际应用中会出现以下问题:
极高的写放大。由于WAL的机制,一份数据落盘即出现“双写”的效果,产生1倍写放大。WAL(Write-ahead logging)记录了数据持久写入DB之前的变更,是传统数据库保证数据安全性的必要动作。由于compaction机制的存在,新数据的写入会导致旧数据被反复合并,最终一份数据的写入实际会造成2倍以上的写入量。业界存储设备已经全面转向SSD,而SSD的寿命是有限的,类似RocksDB的KV数据库在SSD上会将SSD的预期寿命大幅缩短到原本的三分之一。
缓存未命中时的读放大。传统KV数据库将数据按冷热分层存储,在读取时分层检索。如果读取的数据没有在缓存中,那么至少需要一次硬盘读取操作,多则需要5次以上读盘操作才能取到数据。
与设备性能不匹配的业务性能。对于单个硬盘来讲,其总的IO能力是有限的,有限的IO能力被应用IO和KV数据库的compaction共同占用。由于compaction同时占用硬盘的读写带宽,大量的compaction操作使得上层业务可得的IO能力被大幅挤压。
极低的空间使用率。以上情形同时存在,整个存储设备一直处在compaction操作和compaction触发之前有大量失效数据未标记的情况下,此时如果有一定的业务性能要求,用户将不得不使用空间换性能,存储设备内的有效数据总量相对设备的实际容量比例必然过小。
尽管很多业务已经从KV的使用中受益,但当前KV的不足限制了KV本该发挥的作用。
02
百度在Open-Channel SSD上的KV实现
搜索引擎及相关业务对KV有很强的需求。结合对KV的深入理解以及SSD的发展方向,百度选择在Open-Channel SSD平台上实现一套高性能KV,以移除当前KV存在的不足,充分发挥KV在SSD上应有的性能。
Open-Channel SSD是白盒化的NVMe SSD。SSD的底层介质NAND Flash具有先擦后写、寿命有限的特点,因此将NAND Flash组织成主机可见的硬盘需要实现地址映射、垃圾回收、磨损均衡、错误处理等主要逻辑。Open-Channel SSD将实现这些逻辑的基本接口传递到主机层,用户可以将业务逻辑和SSD逻辑结合实现,使用软硬件深度捆绑优化的方式实现同样硬件上的收益大幅度提升。
在百度的Open-Channel KV实现中,SSD不再以块设备形式存在,而是以KV服务的形式呈现给上层业务,KV逻辑向上层提供KV接口。KV接口接收到的键值对将被一步写到物理介质NAND的某个地址上并在内存中记录映射关系,无需经过文件系统/虚拟内存/块设备的层层转换,读取时同理。数据的传输获得的是软件层面最短的路径,因而延迟大幅度缩短。
按照这种方法实现的KV可以解决传统KV存在的问题:
极小的写放大。如同写入传统SSD时SSD内部逻辑的动作一样,每一个新的键值对永远写在新的物理地址上,旧值自然失效。由于没有文件系统,从SSD角度等效OP会变得非常大,垃圾回收线程总是可以找到全脏或接近全脏的块进行回收,实际写放大仅为1.05。
没有读放大。所有key都可以在内存中找到,key中包含了value的物理地址,读取任何值都只需要一次读盘。
充分使用硬件性能。由于没有compaction操作存在,SSD的所有性能都用于实际的业务读写,使得可用带宽大幅提高。Open-Channel KV较原有方案的可用带宽提高一倍。
巨幅提升的QoS水平。由于写操作的重复机制和读操作的等待机制被去除,QoS水平得到极大优化。
更高的空间使用率。业务对单盘输出能力有极高的要求,原方案下满足业务要求的性能时,SSD实际存储的有效数据量仅占盘容量的30%,剩余空间被无效数据占据或存入数据也没有额外的带宽用于业务IO。Open-Channel KV方案在保证输出能力的情况下,将单盘实际有效数据量提升到盘容量的70%。
性能对比实测:
03
Open-Channel平台提供的助力
Open-Channel SSD作为软硬件优化的基础,目前已经有稳定的开发平台,Linux内核也已内置支持。百度Open-Channel KV使用的硬件平台具有以下特点:
使用标准NVMe控制芯片,定制化Open-Channel固件。硬件无需定制,作为客户可以获得标准品的供货优势。
高效的读/写/擦接口,完备的错误回报机制。开发端可以获得硬件的极限性能和对硬件的完全控制。
Controller Memory Buffer(CMB)。CMB作为无掉电风险的高速缓冲区可以用在很多方面实现应用加速和优化,如存放log避免双写、合并小value写入避免块设备模式每一笔IO都必须按block size下发产生的写放大和写延迟。使用CMB后,小于4k byte的KV写入获得数倍性能提升。
自动数据保护。企业级SSD产品除NAND ECC外,还需要page/block层面的保护。当前Open-Channel平台提供底层自动数据保护功能,开发端只需要关注业务逻辑的编程即可。
03
总结
作为一个独立的存储引擎,百度Open-Channel KV项目已成功接入多个重要业务,实现了同等级产品中单独提升存储性能和单独优化软件逻辑都无法达到的业务性能提升幅度。
此次Open-Channel应用的成功实践,证明了存储类应用在Open-Channel SSD上获得大幅度性能提升的可能性,也验证了Open-Channel平台的可靠性。
宝存科技基于Open-Channel的更多创新项目已经在孵化中,未来我们可以看到Open-Channel SSD在更广泛的范围内的成功应用,为高可靠性、高效率、高性价比的IT基础设施带来独特的价值。
(文章来源:宝存科技)
来源:oschina
链接:https://my.oschina.net/u/4316562/blog/4275888