Lambda 函数在与 redis 的简单连接上超时

Posted

技术标签:

【中文标题】Lambda 函数在与 redis 的简单连接上超时【英文标题】:Lambda function timing out on simple connection to redis 【发布时间】:2016-08-06 04:38:44 【问题描述】:

我有一个非常小的 lambda 函数,其唯一目的是从 Segment.io 接收 webhook 并通过 HSET 将用户 ID 和时间戳添加到 Redis 哈希。

这个过程是合理的量,每分钟 100-200 个请求。然而由于某种原因,我发现许多 HSET 请求超出了我在 Lambda 函数上设置的 5 秒限制。

我正在使用 Heroku Redis 的免费层。我连接了 Redis 监视器,这就是我所看到的:

所以看起来 Redis 并没有超时,但更多的是 Lambda 遇到了问题,或者由于某种原因 Lambda 无法连接到 Redis 并超时 - 但我不确定。

这里发生了什么?这是 Heroku Redis 的已知问题吗?我应该尝试其他方法吗?我想为此使用 Heroku Redis 的原因是我正在使用 Heroku Links(外部数据包装器),但我也可以使用外部 Redis 实例设置 FDW。

更新: 我尝试将其从 Lambda 移至单独的微服务服务器(Heroku 服务,以保持一致)。我看到了完全相同的重复超时问题,Redis 没有缓慢操作的记录。将 New Relic 添加到服务器只显示了令人难以置信的指标——就 New Relic 而言,每个请求都在 5 毫秒内完成,这意味着超时发生在应用程序之前。这可能发生在路由层吗?或者那个(对我来说难以置信)节点不知何故没有扩展到每秒这个请求数?

【问题讨论】:

哈希大小是多少,有多少个键? 它会有所不同,但我每 10 分钟清除一次,所以不会很大。现在它实际上有 2 个键,但我仍然看到超时。 免费套餐的连接限制为 20。尝试提升您的实例几分钟,然后再次运行您的基准测试。 @Niloct 我升级了;没有区别,仍然经常看到超时。无论如何,连接数只显示 3-4,所以我认为这不是问题。 这很难。你联系过 Heroku 的支持吗?一定很傻。 【参考方案1】:

这只是我们的一个愚蠢的错误——服务器在某些情况下从未向客户端返回响应,因此它超时了。

【讨论】:

以上是关于Lambda 函数在与 redis 的简单连接上超时的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 查询设计在与 SQL Server 的连接上挂起

我应该如何从 AWS Lambda 函数连接到 Redis 实例?

如何在与 SQLAlchemy 和 psycopg2 的 PostgreSQL 连接上设置“lock_timeout”?

在linux安装redis单机和集群后,如何在windows上使用redis客户端或者java代码访问错误的原因很简单,就是没有连接上redis服务,由于redis采用的安全策略,默认会只准许本地访问

超简单的Python教程系列——第11篇:Lambda装饰器和其他

redis服务器无法启动或无法连接上