我们正在开发一个基于SSD的键值存储方案,具有以下特性:
- 吞吐量:10000 TPS;50/50写入和读取;
- 延迟:平均1ms,99.9%分位数10ms;
- 数据量:约10亿个值,每个值大约150字节;64位键;随机访问,20% 的数据适合RAM
我们在普通SSD上尝试使用KyotoCabinet、LevelDB和RethinkDB,采用不同的Linux IO调度程序,ext3/xfs文件系统。我们使用Rebench进行了多次测试,并发现在所有情况下:
- 只读的吞吐量/延迟非常好;
- 仅写入/更新的吞吐量适中,但存在许多高延迟的异常值;
- 混合读/写工作负载导致吞吐量/延迟的灾难性振荡,即使直接访问块设备(绕过文件系统)也是如此;
下面的图片说明了KyotoCabinet的这种行为(横轴是时间,可以清楚地看到三个时期-只读,混合,仅更新)。
问题是:是否可能使用SSD实现所述的SLA的低延迟,以及推荐哪些键值存储?