2012-02-01 43 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

相關問題