对于应用程序服务器(Passenger,Thin,Unicorn,Mongrel,Puma和Rainbows!)有这么多选择,我想知道什么适用于以下场景:
Rails纯粹用于API后端(所有资产都使用Nginx)。一些API调用依赖于其他API服务,因此有时需要一段时间才能完成。
响应式应用程序用于移动设备,平板电脑和桌面客户端,因此无法保证客户端的连接。
在这种情况下,您认为适合哪种应用服务器?选择时应该考虑哪些事项?
答案 0 :(得分:13)
如果您的应用程序对其他服务进行API调用,那么Unicorn是一个糟糕的选择。 Unicorn是一个单线程多进程应用程序服务器,专为快速,短期运行的CPU绑定工作负载而设计。进行HTTP API调用会计入长时间运行的阻止I / O请求。这不是限制,而是Unicorn的明确设计选择。 the Unicorn website,“在某些情况下更糟糕”一节确认了这一点。
理论上,Thin可以处理这种高并发工作负载,因为它使用了事件I / O.但是,这需要以事件代码的形式提供明确的框架和应用程序支持。很少有框架和应用程序这样做。 Rails和Sinatra没有。
因此,这只留下支持多线程的应用程序服务器。三个竞争者是Puma,Rainbows和Phusion Passenger 4 Enterprise。
您可能还对this writeup感兴趣了解更多信息。
答案 1 :(得分:3)
唯一可靠的方法是在真实条件下测试和测量表演。其他任何事情都是假设和猜测。
与此同时,你应该从你认识的足够好的开始(独角兽似乎是一个相当受欢迎和体面的选择),并在服务器性能成为瓶颈时处理它。
答案 2 :(得分:2)
根据您的独立请求,我建议在nginx反向代理后面使用Puma或Unicorn服务器。使用sidekiq作为工作队列。这是假设一个Rails应用程序,如果使用Sinatra,瘦可能对你来说足够好。就像其他人说的那样,首先要考虑稳定性而不是测试性能。