Redis Cluster 模式比 Standalone 慢

Redis Cluster mode slower than Standalone

我有一个由 3 个主节点组成的 Redis 集群,版本 3.0.3 托管在 3 个 EC2 t2.medium 实例上。当我坐在第 4 个实例上使用 redis-benchmark 测量 SET、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。 写入性能的差异对我来说是莫名其妙的。有人能告诉我为什么以及如果可能如何解决这个问题吗?欢迎任何帮助。

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

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

我创建的脚本无法与 redis-benchmark 相提并论。该脚本的主要用途是对客户端代码进行简单的性能检查,以查看它在哪里使用时间最多以及代码的缓慢部分在哪里。

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