2012-02-01 59 views
10

我对这种架构有点困惑。在我正在开发的其中一个项目中,Unicorn被选为Rails服务器。它被放在Nginx Web服务器的后面。据我了解,Unicorn是全功能的Web服务器,我们不打算在同一个服务器实例上托管任何其他Rails应用程序。是否有必要将Unicorn放在Nginx(或Apache)之后

所以我的问题是:什么是在链中具有附加层的好处:

client -> nginx -> unicorn -> unicorn worker 

回答

17

独角兽是不是设计来处理“慢客户端”。您可以在PHILOSOPHY帮助文件阅读更多关于这一点:我们已经看到

大多数基准不告诉你这一点,麒麟不关心缓慢的客户......但你应该。

“慢速客户端”可以是数据中心之外的任何客户端。本地网络内的网络流量总是比跨越其外部的流量更快。物理定律不允许以其他方式。

HTTP/1.1中引入了持续连接,可以减少连接建立和TCP慢启动的延迟。当客户端空闲时,它们也会浪费服务器资源。

持续连接意味着独角兽工作进程之一(取决于您的应用程序,它可能非常消耗内存)会花费大量的时间来保持连接处于活动状态,而不会执行其他任何操作。作为单线程和使用阻塞I/O,工作人员不能在保持连接处于活动状态时为其他客户端服务。因此独角兽并不实现持续连接。

如果您的应用程序响应大于套接字缓冲区,或者您正在处理大量请求(上载),则工作进程也将受到客户端连接速度的瓶颈。您不应允许独角兽为本地网络之外的客户提供服务。

+0

谢谢!这是我正在寻找的答案:) – 2012-02-01 14:57:54

+0

非常清楚。谢谢 – berto77 2012-04-03 15:44:44

相关问题