我将puma服务器用于聚合来自 14 个 HTTP 客户端请求的响应的服务。我在请求之间有一些依赖关系,但它们可以在某种程度上并行。每个请求可能需要 1.8s 秒,而 ruby/cpu 时间仅为 50ms (97.3% IO)。
目前,我正在使用自动缩放的 heroku dynos,每个进程有 25 个线程。使用 MRI/CRuby 并假设 jRuby 将大大提高可伸缩性,因为我同意Elyasin 的说法。
Puma 在处理并发请求方面做得很好,而其他请求被 IO 阻塞。但我仍然需要并计划以非阻塞方式并行 HTTP 客户端请求。
在我的场景中使用jubilee对vert.x进行基准测试之前。我希望对标准 ruby 选项进行基准测试,例如EventMachine::MultiRequest或Celluloid,或其他建议的选项。为了真正了解 jubilee/vert.x 的性能比 puma 与 event-machine 好多少。请参阅Ruby 基准测试和 jubilee。
我的问题是:
- 哪种选择最适合 Puma?
- 当EM::HttpRequest(例如)“非阻塞等待”响应时,哪个替代方案的设计方式可以发挥最佳 Puma 的事件循环,并承诺启用 Puma 处理并发请求?
- 为了实现这一点,我应该使用 EventMachine/Celluloid 的特定配置或用法吗?
- 总的来说,任何关于这种情况的想法都会受到赞赏。