【问题标题】:Cloud Redis latency causes (vs. local redis on macbook pro)Cloud Redis 延迟原因(与 macbook pro 上的本地 redis 相比)
【发布时间】:2018-12-31 12:34:30
【问题描述】:

Redis 可以提供亚毫秒级的响应时间。这是一个伟大的承诺。我正在测试heroku redis,我得到1ms 最高大约8ms,对于zincrby。我在 php 中使用 microtime() 来包装调用。这个 heroku redis(我使用的是免费计划)是一个共享实例,并且存在资源争用,因此我希望相同查询的响应时间会有所不同,而且它们肯定会发生变化。

我很好奇通过自制软件在我的 macbook pro 上安装的 redis 与性能差异的原因。那里显然没有网络延迟。我很好奇的是,这是否意味着任何云 redis(即通过网络连接,比如在 aws 中)总是比我拥有一台云服务器并在内部运行 redis 慢很多同一台物理机,从而消除网络延迟?

这些云产品也存在资源争用,除非选择成本更高的私有服务器。

一些数字:我本地的 macbook pro 始终为相同的 zincrby 提供 0.2ms,它在 heroku redis 上介于 1ms8ms 之间。

网络延迟是造成这种情况的原因吗?

【问题讨论】:

  • 为了兴趣,区域间延迟总是出现> 10ms:cloudping.co
  • 我原本预计与实例在同一 vpc 中的 redis 延迟较低。您是在测试 on-prem + cloud redis,还是 cloud-instance + cloud-redis?
  • @MatthewArthur 这是云实例和云redis。但当然不是,因为容器在同一块硬件上运行。这些是在同一个 aws 区域内运行的容器,我想这就是我们所能知道的。所以问题在于区域内延迟。

标签: amazon-web-services redis cloud heroku-redis


【解决方案1】:

不,可能不会。

1 Gbit/s 网络的典型延迟约为200us。那是0.2ms

更重要的是,在 aws 中您可能至少在 10gbps 上。

正如 redis 手册中的this page 解释的那样,这两种环境之间延迟变化的主要原因几乎肯定是更高的intrinsic latency 的结果(有一个 redis 命令可以在任何特定系统上测试这一点:@ 987654325@,请参阅上面的手册页)源于在 linux 容器中运行

即,网络延迟不是这里看到的变化的主要原因。

这是一个清单(来自上面链接的 redis 手册页)。

  • 如果您负担得起,最好使用物理机而不是 VM 来托管服务器。
  • 不要系统地连接/断开服务器(尤其是基于 Web 的应用程序)。保持联系长久 尽可能。
  • 如果您的客户端与服务器位于同一主机上,请使用 Unix 域套接字。
  • 优先使用聚合命令 (MSET/MGET) 或带有可变参数的命令(如果可能)而不是流水线。
  • 宁愿使用流水线(如果可能)而不是往返顺序。
  • Redis 支持 Lua 服务器端脚本以涵盖不适合原始流水线的情况(例如,当命令的结果 是以下命令的输入)。

【讨论】:

  • 有人告诉我,aws 内部网络不太可能是一个重大瓶颈...... - 如果是,他们会处理这个问题并修复它:)
猜你喜欢
  • 2013-01-08
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2014-10-13
  • 2012-11-07
  • 1970-01-01
  • 2017-09-27
  • 2019-04-05
相关资源
最近更新 更多