应用程序服务器有这么多选择(Passenger、Thin、Unicorn、Mongrel、Puma 和 Rainbows!),我想知道什么适合以下场景:
Rails 纯粹用于 API 后端(所有资产都由 Nginx 提供)。一些 API 调用依赖于其他 API 服务,因此有时它们需要一段时间才能完成。
响应式应用程序用于移动、平板电脑和桌面客户端,因此无法保证客户端的连接。
在这种情况下,您认为哪种应用服务器合适?选择时应该考虑哪些事项?
应用程序服务器有这么多选择(Passenger、Thin、Unicorn、Mongrel、Puma 和 Rainbows!),我想知道什么适合以下场景:
Rails 纯粹用于 API 后端(所有资产都由 Nginx 提供)。一些 API 调用依赖于其他 API 服务,因此有时它们需要一段时间才能完成。
响应式应用程序用于移动、平板电脑和桌面客户端,因此无法保证客户端的连接。
在这种情况下,您认为哪种应用服务器合适?选择时应该考虑哪些事项?
如果您的应用程序对其他服务进行 API 调用,那么 Unicorn 是一个糟糕的选择。Unicorn 是一个单线程多进程应用程序服务器,专为快速、短期运行的 CPU 密集型工作负载而设计。进行 HTTP API 调用算作长时间运行的阻塞 I/O 请求。这不是限制,而是 Unicorn 的明确设计选择。Unicorn 网站“在某些情况下更糟”部分证实了这一点。
理论上,Thin 可以处理这种高并发工作负载,因为它使用事件 I/O。然而,这需要事件代码形式的显式框架和应用程序支持。很少有框架和应用程序这样做。Rails 和 Sinatra 没有。
所以这只剩下支持多线程的应用程序服务器。三个竞争者是 Puma、Rainbows 和Phusion Passenger 4 Enterprise。
您可能也对这篇文章感兴趣以获取更多信息。
一种真正的了解方法是在真实条件下测试和测量性能。其他任何事情都是假设和猜测。
同时,你应该从一个你知道的足够好的开始(独角兽似乎是一个相当流行和体面的选择),一旦它成为瓶颈,就处理服务器性能。
根据您的独立请求,我建议在 nginx 反向代理后面使用 Puma 或 Unicorn 服务器。将 sidekiq 用于工作队列。这是假设一个 Rails 应用程序,如果使用 Sinatra,thin 可能对你来说已经足够了。就像其他人说的那样,首先写稳定性而不是测试性能。