为什么客户端连接数会影响Redis性能?

时间:2016-08-23 19:07:38

标签: networking redis benchmarking

我一直在阅读Redis文档,但我不理解以下段落(来自链接http://redis.io/topics/benchmarks):

“Naively迭代同步Redis命令不会对Redis本身进行基准测试,而是衡量您的网络(或IPC)延迟。要真正测试Redis,您需要多个连接和/或......”

我进行了以下测试,以查看1个连接和500个连接之间的速度差异。我们可以看到,只有1个连接时速度要慢得多。但我不明白为什么以及连接数如何影响Redis速度性能。我是计算机网络的新手,任何帮助都将不胜感激!

$ redis-benchmark -c 500 -t ping
====== PING_INLINE ======
  10000 requests completed in 0.10 seconds
  500 parallel clients
  3 bytes payload
  keep alive: 1

$ redis-benchmark -c 1 -t ping
====== PING_INLINE ======
  10000 requests completed in 0.19 seconds
  1 parallel clients
  3 bytes payload
  keep alive: 1

1 个答案:

答案 0 :(得分:3)

当延迟>吞吐量,你需要多个飞行中的请求才能达到吞吐量的瓶颈而不仅仅是往返延迟。

e.g。如果网络往返是10ms,那么在发送另一个请求之前等待一个请求的结果的客户端在数学上被限制为100个请求/秒。如果您的服务器可以处理更多,那么您无法使用单个客户端进行测试。

逻辑与网络上的常规数据传输相同,例如TCP窗口大小。这篇wiki文章(https://en.wikipedia.org/wiki/Bandwidth-delay_product)可能有助于澄清需要保留多个数据包/操作的概念。对于redis请求,总延迟包括处理时间+网络时间。如果你遇到麻烦,你就不会让服务器的CPU(或网络)保持100%的忙碌。

请注意,实现Instruction-Level Parallelism in a CPU也是一样的概念。 (例如,对于浮点数组合,如果FP add有3个周期延迟,每1c吞吐量一个,即完全流水线化,则应使用至少3个累加器。)