针对大型(> 100kB)对象

时间:2015-06-25 17:52:05

标签: redis cassandra

我尝试使用Redis群集作为主数据存储(Cassandra)的后备缓存。我注意到,虽然Redis比Cassandra获取小物体的速度明显快,但是对于大于100kB的物体,它却落后了。

我的问题是:

  1. Redis或Redis群集在处理大型对象时是否存在性能问题?
  2. 是否有方法优化Redis群集以存储主要大型对象?
  3. 这是否表明Redis的弱点或Cassandra的已知优势 - 是否与比较这两项服务的基准相符?
  4. 基于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(至少偶尔)从磁盘读取时。

    任何帮助将不胜感激!

0 个答案:

没有答案