【发布时间】:2021-08-17 05:50:27
【问题描述】:
我目前正在尝试优化和扩展在 AWS ALB 后面基于 Ruby on Rails 构建的 API,该 API 将流量发送到 NGINX,然后将流量发送到 Puma 到我们的 Rails 应用程序。我们的 API 有一个最长 30 秒的超时选项,这是我们最终使请求超时的时间。目前,我们有一个控制器操作,它使 Sidekiq 工作人员排队,然后我们在前 1 秒每 100 毫秒轮询一次 Redis 密钥,然后在剩余的 29 秒内每 500 毫秒轮询一次。我们的许多请求可以在 1 秒内完成,但其中一些请求需要整整 30 秒才能成功或超时,告诉用户稍后重试。
我们目前正在尝试对此 API 进行负载测试并将其扩展到 500-1000 RPS,但我们遇到了较慢的请求会阻塞我们所有连接的问题。当慢请求运行时,Puma 不应该在慢请求的休眠期间接受其他请求吗?
如果这不是 API,我们可以轻松地在后台工作人员排队后立即响应,但在这种情况下,我们需要等待响应并为 API 请求保持连接长达 30 秒。
【问题讨论】:
-
数据库连接被worker声明并在作业完成时释放回池中。您可以在执行一些长操作(如 http 请求)之前尝试释放连接。
标签: ruby-on-rails nginx concurrency puma