2012-02-01 14 views
10

Jestem trochę zdezorientowany tą architekturą. W jednym z projektów, nad którymi pracuję, Unicorn został wybrany jako serwer Rails. I jest umieszczony za serwerem Nginx. Jak rozumiem, Unicorn jest w pełni funkcjonalnym serwerem sieciowym i nie planujemy hostować żadnych innych aplikacji Railsowych na tym samym serwerze.Czy konieczne jest umieszczenie Unicorn za Nginx (lub Apache)?

Więc moje pytanie brzmi: jakie są korzyści z posiadania dodatkowej warstwy w łańcuchu:

client -> nginx -> unicorn -> unicorn worker 

Odpowiedz

17

Unicorn nie został zaprojektowany do obsługi klientów „slow”. Możesz przeczytać więcej na ten temat w pliku PHILOSOPHY pomocy:

większość benchmarków zauważamy czy nie powiedzieć to, jednorożec i nie dba o klientów ... powolne, ale powinno.

"Powolny klient" może być dowolnym klientem spoza centrum danych. Ruch sieciowy w sieci lokalnej jest zawsze szybszy niż ruch wykraczający poza nią. Prawa fizyki nie dopuszczają inaczej.

Utrwalone połączenia zostały wprowadzone w protokole HTTP/1.1. Zmniejszają opóźnienie w ustanawianiu połączenia i powolnym uruchomieniu TCP. Mają także marnować zasoby serwera, gdy klienci są bezczynni.

Stałe połączenia oznaczać jedną z Jednorożca procesów roboczych (w zależności od aplikacji, może to być bardzo głodny pamięci) spędzał znaczną część swojego czasu bezczynności utrzymanie połączenia przy życiu i nie robi nic innego. Będąc jednowątkowym i używającym blokujących operacji we/wy, pracownik nie może obsługiwać innych klientów przy utrzymaniu połączenia przy życiu. W ten sposób jednorożec nie realizuje trwałych połączeń.

Jeśli odpowiedzi aplikacji są większe niż bufor gniazda lub jeśli obsługiwane są duże żądania (przesyłane), procesy robocze będą również wąskie gardło ze względu na szybkość połączenia klienta. Nie należy pozwolić jednorożecowi na obsługę klientów spoza sieci lokalnej.

+0

Dziękujemy! Oto odpowiedź, której szukałem :) –

+0

bardzo jasne. dzięki – berto77

Powiązane problemy