我们正在开发具有以下属性的 SSD 支持的键值解决方案:
- 吞吐量:10000 TPS;50/50 看跌/获得;
- 延迟:平均 1 毫秒,第 99.9 个百分位数 10 毫秒
- 数据量:约 10 亿个值,每个约 150 字节;64位密钥;随机访问,20% 的数据适合 RAM
我们在商品 SSD 上尝试了 KyotoCabinet、LevelDB 和 RethinkDB,使用不同的 Linux IO 调度程序、ext3/xfs 文件系统;使用Rebench进行了许多测试;并发现在所有情况下:
- 只读吞吐量/延迟非常好
- 仅写入/仅更新始终处于中等水平,但有许多高延迟异常值
- 即使在直接访问块设备(绕过文件系统)的情况下,混合的读/写工作负载也会导致吞吐量/延迟的灾难性波动
下图说明了 KyotoCabinet 的这种行为(横轴是时间,三个周期清晰可见 - 只读、混合、仅更新)。
问题是:是否有可能使用 SSD 实现描述的 SLA 的低延迟以及推荐哪些键值存储?