Facebook CacheLib 文档调研

https://cachelib.org/

https://cachelib.org/docs/Cache_Library_Architecture_Guide/overview_a_random_walk

简单地看了一下官网文档,印象中大约有这么几个功能点:

即使使用NVMe作为缓存,也需要DRAM的支持,所有item访问最后都是进入DRAM层的。因为单独管理DRAM的使用,所以它其实没有使用kernel buffer cache. 读取文件也是使用O_DIRECT来读取的,读取的时候默认会进行校验,估计读取到了DRAM之后就不会进行校验了。读取的时候支持使用同步/future/异步几种方式,因为过程会比较长,比如从NVM Cache protomote到DRAM Cache上。因为是自己管理DRAM的,所以也有OOM protection这样的策略存在:如果内存压力很大的情况下,会考虑优先刷盘到NVMe上或者是拒绝缓存。

另外就是NVMe只支持单个文件或者是RAID files. 没有办法在多个目录下面均衡。当然这个可以通过应用程序创建多个cache实例来解决,不过这种实现方式不被推荐。https://cachelib.org/docs/Cache_Library_User_Guides/Configure_HybridCache/

Pasted-Image-20231225105039.png

另外一个问题就是这个库需要依赖许多库,一些库SR里面是没有的(fizz, folly),一些库则是有了但是需要升级(boost, openssl),感觉集成进来难度也比较大。里面自带了和CentOS8的编译脚本,但是我们的开发环境是CentOS7, 许多库的版本是对不上的。

Pasted-Image-20231225105047.png