Mamy aplikację internetową opartą na Java EE działającą w klastrze serwerów aplikacji Glassfish . Przychodzący ruch będzie głównie żądaniami RESTful dotyczącymi reprezentacji opartych na XML zasobów naszych aplikacji, ale być może 5% ruchu może dotyczyć reprezentacji opartych na JSON lub XHTML / CSS.
Obecnie badamy rozwiązania równoważenia obciążenia w celu rozdzielenia ruchu przychodzącego między instancjami Glassfish w klastrze. Szukamy również sposobu na rozładowanie klastra za pomocą memcached, rozproszonej w pamięci mapy mieszającej, której kluczami byłyby nazwy zasobów REST (np. „/ User / bob”, „/ group / jazzlovers”) i których wartości to odpowiednie reprezentacje XML.
Jednym z podejść, które brzmi obiecująco, jest zabicie obu ptaków jednym kamieniem i użycie lekkiego, szybkiego serwera HTTP / odwrotnego proxy nginx . Nginx obsługiwałby każde przychodzące żądanie, najpierw sprawdzając swój identyfikator URI w memcached, aby sprawdzić, czy istnieje już nieaktualna reprezentacja XML. Jeśli nie, nginx wysyła żądanie do jednej z instancji Glassfish. Moduł memcached nginx został opisany w tym krótkim piśmie .
Jakie jest twoje ogólne wrażenie z użyciem nginx i memcached w ten sposób, jak bardzo jesteś z nich zadowolony? Jakie zasoby były dla Ciebie najbardziej pomocne w poznawaniu ich? Jeśli spróbowałeś ich, a one nie pasowały do twoich celów, dlaczego nie i czego użyłeś zamiast tego?
Uwaga: oto powiązane pytanie . Zanim dowiedziałem się o ServerFault, zapytałem o to na StackOverflow .
Edycja: Wszystkie dotychczasowe odpowiedzi były bardzo pomocne, chociaż nie było bezpośredniego doświadczenia. Ta odpowiedź ostatecznie pojawiła się na StackOverflow i była dość uparta w konfiguracji nginx / memcached.
Odpowiedzi:
Naprawdę powinieneś użyć serwera pamięci podręcznej przed serwerami WWW. Polecam pamięć podręczną lakieru. Używamy go w pracy z największą i najbardziej ruchliwą stroną internetową w Skandynawii. Zastąpiliśmy 13 mocno obciążonych skrzynek kalmarów 1 skrzynią lakierniczą i 1 zapasową.
Zredagowałem prostą aplikację na mojej prywatnej stronie i zmieniła się ona z 9 żądań na sekundę na ponad 2000.
Ty decydujesz, jak długo utrzymuje to w pamięci, możesz zrobić do końca czasu, a następnie po prostu wysłać żądanie czyszczenia HTTP do serwera pamięci podręcznej, gdy dane się zmienią.
źródło
Z mojego osobistego doświadczenia wynika, że jeśli używasz modułu równoważenia obciążenia, chcesz całkowicie ograniczyć to pole do funkcji równoważenia obciążenia. Posiadanie przez moduł równoważenia obciążenia treści, nawet z pamięci podręcznej, obniża funkcjonalność równoważenia obciążenia w sytuacjach dużego obciążenia (więcej połączeń pozostaje aktywnych dłużej, zmniejszając ogólną pojemność i przepustowość).
Radzę, aby sama aplikacja przeprowadziła wyszukiwanie i udostępniła buforowaną zawartość i pozwoliła modułowi równoważenia obciążenia wykonać swoją pracę. Powiedziawszy to, nginx nie jest idealny, jeśli chodzi o równoważenie obciążenia - oferuje tylko bardzo podstawowy algorytm round-robin. Zamiast tego poleciłbym haproxy. Jeśli potrzebujesz usług deszyfrowania SSL z przodu, nginx działa dobrze, siedząc przed haproxy, z mojego doświadczenia.
źródło
Myślę, że przejdziesz w ślepy zaułek na wypadek, gdybyś potrzebował takich rzeczy jak równoważenie obciążenia, wysoka dostępność itp.
Weź również pod uwagę taką sytuację: gdy użytkownik jest autoryzowany, strona wygląda inaczej, a dodatkowe funkcje są dostępne i zindywidualizowane dla każdego użytkownika. Adresy URL są takie same dla wygody linkowania itp. Na przykład strona, na której użytkownik nie musi wpisywać swojego imienia / captcha w celu skomentowania lub witryna wyświetla twoją nazwę użytkownika na górze, gdy jesteś zalogowany (jak błąd serwera). W takich przypadkach nginx będzie bezużyteczny, ponieważ nie można odróżnić użytkownika automatycznie od nieautoryzowanego.
Jeśli nie potrzebujesz SSL, sugeruję uruchomienie Varnish. Został zaprojektowany jako akcelerator HTTP, a nie jako serwer WWW lub proxy. Jeśli potrzebujesz SSL, uruchom nginx na górze jako akcelerator SSL i lakieruj jako zwykły akcelerator HTTP, ponieważ Varnish nie radzi sobie z SSL.
Myślę, że wybór serwera buforującego zależy od aplikacji i nie można na ten temat uogólniać komentarzy bez dogłębnej analizy aplikacji.
źródło
mój wybór to haproksy. Bardzo mały i bardzo szybki odwrotny serwer proxy, ale nie jest to serwer proxy pamięci podręcznej! Używam dla mojego systemu pamięci podręcznej „Squid Web Proxy”
Działa idealnie dla mojego systemu internetowego
źródło