我尝试使用Redis群集作为主数据存储(Cassandra)的后备缓存。我注意到,虽然Redis比Cassandra获取小物体的速度明显快,但是对于大于100kB的物体,它却落后了。
我的问题是:
基于Yourkit分析,在Redis与客户端之间或Redis本身之间的网络连接中,似乎发生了缓慢,而不是在客户端。来自iperf的结果显示1Gb / s连接的正常吞吐量,并且机器之间的延迟是亚毫秒。 SLOWLOG没有显示任何异常。
关于我的Redis群集的一些事实: 18个实例分布在3个VM上,复制因子为1(因此总共9个主服务器和每个VM上的6个实例)。 每个VM有32GB内存,每个实例使用5GB。每个VM有4个核心。 两种形式的持久性(RDB和AOF)都被禁用。 透明的巨大页面被禁用。
下面我列出了一个表格,说明了吞吐量随着对象尺寸的增加而下降的情况。对Cassandra和Redis的测试都是单线程运行的,每个都有一个连接。
Redis吞吐量:0.003537595276169634 MB / s,Cassandra吞吐量: 0.002188710038885119 MB / s,对象大小(字节):10,吞吐率:1.6162923426675595
Redis吞吐量:0.03797119469182343 MB / s,Cassandra吞吐量: 0.02551391762038427 MB / s,对象大小(字节):100,吞吐率:1.4882541856875189
Redis吞吐量:0.3897608379431817 MB / s,Cassandra吞吐量: 0.2901892901215633 MB / s,对象大小(字节):1000,吞吐率:1.3431261980065041
Redis吞吐量:2.7464192980834445 MB / s,Cassandra吞吐量: 2.5417614833282105 MB / s,对象大小(字节):10000,吞吐率:1.080518103723585
Redis吞吐量:7.020086815887924 MB / s,Cassandra吞吐量: 12.797994158989074 MB / s,对象大小(字节):100000,吞吐量比率:0.5485302406515904
Redis吞吐量:19.84828274884104 MB / s,Cassandra吞吐量: 44.10034458329361 MB / s,对象大小(字节):1000000,吞吐率:0.45007092203901056
网络配置中唯一明显的区别是Cassandra集群由物理机组成,而Redis集群由VM组成。但似乎不应该考虑到50%的减速,特别是当Redis从内存中读取而Cassandra(至少偶尔)从磁盘读取时。
任何帮助将不胜感激!