Redis群集模式比Standalone慢

时间:2015-07-22 12:06:51

标签: python amazon-ec2 redis cluster-computing database-performance

我在3个EC2 t2.medium实例上托管了3个主节点版本3.0.3的Redis群集。当我坐在第四个实例上测量SET时,使用redis-benchmark获得GET性能,我有

$ redis-benchmark -h redis-com-01 -p 6379 -t set,get -n 1000000
====== SET ======
...
33550.29 requests per second

====== GET ======
...
32353.04 requests per second

$ redis-benchmark -h redis-com-02 -p 6379 -t set,get -n 1000000
====== SET ======
...
36329.29 requests per second

====== GET ======
...
37199.61 requests per second

$ redis-benchmark -h redis-com-03 -p 6379 -t set,get -n 1000000
====== SET ======
...
32338.39 requests per second

====== GET ======
...
32169.86 requests per second

但是,当我使用https://github.com/Grokzen/redis-py-cluster中的基准工具simple.py来衡量整个群集的SET,GET性能时,我对结果感到非常惊讶

$ python simple.py --host redis-com-03 --port 6379 --timeit
10k SET/GET operations took: 4.3375210762 seconds... 2305.46430192 operations per second
20k SET/GET operations took: 8.5704600811 seconds... 2333.59700772 operations per second
40k SET/GET operations took: 17.3284561634 seconds... 2308.34181781 operations per second

我已经按照清单http://redis.io/topics/latency进行了操作。所有节点每秒配置一次AOF,fsync。 写入性能的差异对我来说是莫名其妙的。有人能给我一个线索,为什么以及如果可以解决这个问题?欢迎任何帮助。

2 个答案:

答案 0 :(得分:3)

AFAIK simple.py只是一个忙碌的样子,不使用多个线程来使服务器饱和。实际情况是我们需要一个集群感知redis-benchmark,我需要尽快完成...目前很难评估Redis集群的总体性能,但虽然不相同,但每个集群的性能都不相同node与独立节点非常相似。

请注意,使redis-benchmark具有线程并且能够同时测试多个节点只是第一步。为了测试一个大的基准测试,我们还需要在多个不同的节点中并行运行基准测试并对结果求和。

答案 1 :(得分:2)

我创建的脚本不能与redis-benchmark进行比较。该脚本的主要用途是对客户端代码进行简单的性能检查,以查看它使用时间最多的地方以及代码的缓慢部分。

如果我没记错的话,python代码中的主要减速是对每个键进行的crc16计算。而且我认为与独立的redis节点相比,你应该会看到大约50%的性能下降,因为必须在客户端完成所有额外的工作。