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.