6

应用程序服务器有这么多选择(Passenger、Thin、Unicorn、Mongrel、Puma 和 Rainbows!),我想知道什么适合以下场景:

Rails 纯粹用于 API 后端(所有资产都由 Nginx 提供)。一些 API 调用依赖于其他 API 服务,因此有时它们需要一段时间才能完成。

响应式应用程序用于移动、平板电脑和桌面客户端,因此无法保证客户端的连接。

在这种情况下,您认为哪种应用服务器合适?选择时应该考虑哪些事项?

4

3 回答 3

13

如果您的应用程序对其他服务进行 API 调用,那么 Unicorn 是一个糟糕的选择。Unicorn 是一个单线程多进程应用程序服务器,专为快速、短期运行的 CPU 密集型工作负载而设计。进行 HTTP API 调用算作长时间运行的阻塞 I/O 请求。这不是限制,而是 Unicorn 的明确设计选择。Unicorn 网站“在某些情况下更糟”部分证实了这一点。

理论上,Thin 可以处理这种高并发工作负载,因为它使用事件 I/O。然而,这需要事件代码形式的显式框架和应用程序支持。很少有框架和应用程序这样做。Rails 和 Sinatra 没有。

所以这只剩下支持多线程的应用程序服务器。三个竞争者是 Puma、Rainbows 和Phusion Passenger 4 Enterprise

  • 彪马相对较新。Rainbows 稍微老一点,但作者不保证它是否运作良好。Phusion Passenger 已经成熟,已经存在多年,目前已被超过 150000 个网站使用,包括皮克斯、纽约时报、AirBnB 等大型网站。
  • Puma 和 Rainbows 的使用模型与 Unicorn 和 Thin 类似,您启动一​​堆进程并通过反向代理配置将它们挂钩到 Nginx。另一方面,Phusion Passenger 被设计为直接集成到 Nginx 中,因此它需要的配置、流程管理和其他管理开销要少得多。
  • Phusion Passenger 4 Enterprise 不是严格意义上的多线程服务器,而是混合多进程/多线程的服务器。这意味着它可以运行多个进程(以提高稳定性和使用多个 CPU 内核的能力),每个进程都有多个线程(用于高 I/O 并发)。
  • Phusion Passenger 4 Enterprise 比 Puma 和 Rainbows 带来了许多优势:例如它具有带外垃圾收集,可以根据流量动态调整进程数,完全自动化滚动重启,因此您不需要脚本等.

您可能也对这篇文章感兴趣以获取更多信息。

于 2013-03-15T15:13:13.447 回答
3

一种真正的了解方法是在真实条件下测试和测量性能。其他任何事情都是假设和猜测。

同时,你应该从一个你知道的足够好的开始(独角兽似乎是一个相当流行和体面的选择),一旦它成为瓶颈,就处理服务器性能。

于 2013-02-14T13:24:50.060 回答
2

根据您的独立请求,我建议在 nginx 反向代理后面使用 Puma 或 Unicorn 服务器。将 sidekiq 用于工作队列。这是假设一个 Rails 应用程序,如果使用 Sinatra,thin 可能对你来说已经足够了。就像其他人说的那样,首先写稳定性而不是测试性能。

于 2013-02-14T23:13:51.007 回答