【发布时间】:2021-06-20 11:41:21
【问题描述】:
我正在调查我的服务器上的一些延迟问题,我已经缩小了范围,但还不足以解决它。我希望对 Redis 或 Node.js 有更多经验的人可以提供帮助。
在一个每分钟调用几千次的函数中,随着网络流量的增加和减少,我向我的 redis 客户端发送了一个GET 请求,以检查一个进程是否完成。我注意到我的 Web 请求的延迟增加了,似乎 redis GET 命令占用了我的大部分服务器时间。这让我很吃惊,因为我一直认为 redis 总是很快的。如果我查看 Redis 的“花费时间”信息,它会说一切都在 700 微秒以下。
这与我在事务监控设置中看到的不符,因此我在代码中添加了一些日志记录:
const start = Date.now();
client.get(`poll:${submittedId}`, (err, res) => {
console.log(`${Date.now() - start}`);
//other stuff
})
现在我的日志打印出每个 redis GET 花费的毫秒数。我观察了一段时间,发现了一个令人惊讶的模式。
大多数时候,有很多 1s,偶尔会有 10 或 100 的数字。然后,周期性地,服务器上的所有 get 都会减慢,每次 get 完成最多需要几秒钟。然后过了一会儿,数字又回落了,事情又开始顺利了。
什么可能导致这种行为?
我试图调查的事情:
- 正如我所提到的,我已经梳理了 Redis 的性能数据,如 Heroku 的 redis 仪表板所示,它没有任何投诉或延迟峰值。
- 我确认所有这些请求都来自少数连接,因为我了解到打开和关闭太多会导致问题。
- 我研究了连接池,认为事务可能正在排队并导致积压,但互联网似乎说这对于 Redis 和 Node 来说不是必需的。
非常感谢花时间为此提供建议的任何人!
【问题讨论】:
标签: node.js server redis latency node-redis