2009-03-26 17 views
21

Przede wszystkim, aby przedstawić nieco aktualnego otoczenia. Mamy wiele aplikacji ASP.NET, z których wszystkie korzystają z sesji w określonych aspektach. Jesteśmy "Load Balanced" na wielu serwerach ze względu na poziomy ruchu, jednak nasze równoważenie obciążenia jest ustawione na użycie "Sticky Sessions", ponieważ obecnie wszystkie aplikacje internetowe są ustawione na użycie "InProc" dla stanu sesji.Zezwalanie na sesję w farmie sieciowej? Czy StateServer jest wystarczająco dobry?

Szukamy możliwości usunięcia konfiguracji "Sticky Sessions" w naszym systemie równoważenia obciążenia, ponieważ ze względu na nasze obciążenie ruchem, serwery mogą zostać przeciążone. Chcemy iść z bardziej zrównoważonym podejściem, ale musimy mieć możliwość korzystania z sesji.

Wiem, że SqlServer dla stanu sesji będzie działał, ale z przyczyn od nas niezależnych, nie możemy użyć SqlServer do przechowywania naszego stanu. W trakcie badań wydaje się, że StateServer jest naszym najlepszym wyborem. Mamy dodatkowy serwer z dużą ilością pamięci. Ten serwer może być naszym serwerem StateServer dla całego klastra internetowego. Chcemy tylko poznać następujące rzeczy.

1.) Oprócz ewentualnych problemów z serializacją przy przechodzeniu z InProc na StateServer, czy są jakieś znane znane problemy z utratą obiektów sesji lub generowaniem błędów w wyżej wymienionym środowisku?

2.) Oprócz pojedynczego punktu awarii i nieco wolniejszej wydajności, istnieją inne problemy, o których powinniśmy wiedzieć korzystając z StateServer.

3. Czy są jakieś dane wskazujące różnice w wydajności między trzema typami magazynów państwowych?

+0

Ile informacji jest przechowywanych w stanach sesji? – Keltex

+0

W tej chwili nie mamy pojęcia. Istnieje ponad 150 różnych aplikacji opracowanych przez różne grupy. –

Odpowiedz

23

Oto przyzwoity FAQ na temat stanu asp.net: http://www.eggheadcafe.com/articles/20021016.asp

Z tego artykułu, tutaj jest kilka informacji na temat StateServer:

  • W gospodarstwie internetowej, upewnij się, że w ten sam MachineKey wszystkie twoje serwery internetowe. Zobacz, jak to zrobić: KB 313091.
  • Upewnij się również, że twoje obiekty można szeregować. Aby uzyskać szczegółowe informacje, patrz KB 312112.
  • Aby stan sesji był obsługiwany na różnych serwerach internetowych w farmie sieci Web, ścieżka aplikacji witryny (na przykład \ LM \ W3SVC \ 2) w metaboli IIS powinna być taka sama na wszystkich serwerach w farmie sieci Web . Aby uzyskać szczegółowe informacje, zobacz KB 325056
+3

+1 za wywołanie klawisza Machine Machine. –

+0

Ostatni punkt na temat ścieżki IIS jest interesujący, czy ktoś wie, czy to nadal ma zastosowanie w IIS7 +? Jak również sprawdzić tę ścieżkę w IIS7? –

+0

Tak, nadal obowiązuje. Aby uzyskać więcej informacji, zobacz [ta odpowiedź na serverfault] (http://serverfault.com/questions/288981/load-balanced-iis-7-5-web-server-asp-net-session-state-problem). – Oliver

0

Używamy StateServer do bardzo małej farmy internetowej z tylko dwoma węzłami dla kilkuset użytkowników.

Nie jestem odpowiedzialny za jego działanie, ale pamiętam tylko dwa problemy w ciągu dwóch lat, w których usługa musiała zostać ponownie uruchomiona, ponieważ uległa awarii.

+0

Widzę, że to stary post, ale jakie były objawy, gdy usługa się zawiesiła? Czy po prostu zaczęły pojawiać się komunikaty o błędach "Nieprawidłowy stan sesji", czy też były bardziej tajemnicze? – Ads

+0

@Ads sorry Niestety nie pamiętam, ale myślę, że po prostu się zawiesił. – laktak

3

Użyłem tylko sql i in-proc. Ale te 3, które mają zastosowanie podczas korzystania z serwera sql, obowiązują również:

  • Unikaj przechowywania zbyt dużej ilości informacji w sesji, ponieważ ma to wpływ zarówno na serializację, jak i na transmisje danych w sieci.
  • Upewnij się, że nie masz niczego, co zależy od Session_onEnd. To jest po prostu niedostępne dla sesji poza procesami.
  • Wyłącz sesję na stronach, które jej nie używają. Nie ma to znaczenia dla sesji wewnątrzprocesowej, ale poza procesem zaoszczędzi wiele.
2

Upewnij się, że identyfikatory etag serwera są zsynchronizowane w obrębie farmy internetowej, inaczej buforowanie w przeglądarkach klientów będzie zdenerwowane.

Czy szczegółowo przeanalizowałeś swój kod, aby upewnić się, że wszystko można serializować z procesu i przez sieć LAN wydajnie?

Czy rozwiązujesz główny problem z wydajnością w swoim systemie? Pytam, ponieważ baza danych jest typowym źródłem rywalizacji.

Moją główną motywacją do rezygnacji z lepkich sesji była elastyczność operacyjna, np. Wyłączenie problematycznego serwera lub wdrożenie aktualizacji oprogramowania. Zatem po wdrożeniu centralnej usługi stanu sesji upewnij się, że w pełni korzystasz z operacyjnego punktu oparcia.

+0

Przegląd kodu to coś, co zostanie zrobione, JEŚLI udowodnimy, że można naprawić przedmioty. Baza danych nie jest wąskim gardłem w całym naszym środowisku, ale dużym nierównym obciążeniem serwerów sieciowych. –

2

Z mojego doświadczenia wynika, że ​​natywny serwer stanu lub nawet używanie programu SQL Server do sesji jest bardzo przerażającym scenariuszem, ponieważ oba mają problemy (głównie wydajność). Przy okazji, korzystamy również z sesji lepkich.

Myślę, że możesz odkryć inne produkty, aby uzyskać absolutnie najlepsze. Bezpłatną opcją byłaby Velocity, ale nadal nie została zwolniona. I kolejny wszechstronny, ale sprawdzony produkt będzie (bardzo drogi faktycznie) NCache. To pomoże nawet w Twoich usługach przy niższych kosztach. Jeśli użyjesz ich API, będzie to jeszcze lepsze.

Zobacz, co wygląda najlepiej dla Ciebie.

O serwerze SQL, serwer wkrótce umrze, jeśli pojawi się wystarczająca liczba trafień (wierzę, że masz już kilka trafień, które pozwoliły Ci zrobić Web Farma lub robisz to tylko ze względu na nadmiarowość)

Podsumowanie: Oceniamy prędkość, ponieważ NCAchce jest naprawdę droga. Jednak zalety są ogromne.

+1

Dla osób szukających serwerów buforujących można również sprawdzić SharedCache/Indexxus ... całkiem solidne narzędzie do buforowania. – bbqchickenrobot

+0

Dla tych, którzy szukają bardziej aktualnego rozwiązania: [Scott Hanselman zrobił fajne spisy] (http://www.hanselman.com/blog/InstallingConfiguringAndUsingWindowsServerAppFabricAndTheVelocityMemoryCacheIn10Minutes.aspx), jak skonfigurować ostatnio wydaną Velocity mem-cache, np jako [serwer stanu sesji ASP.NET] (http://msdn.microsoft.com/en-us/library/ee790859.aspx). – Oliver

+0

Mamy przetestowaną usługę stanu ASPNet pod względem pamięci podręcznej prędkości (AKA appfabric), a wyniki są bardzo różne. Usługa stanu ASPNet przewyższa AppFab o masową ilość (prawie 250% szybciej), a AppFab wymaga o wiele więcej pamięci i jest trudniej skonfigurować w klastrze. Nie używaj AppFabric dla stanu sesji – nachonachoman

0

Chciałbym innego jeszcze jednego punktu do zaakceptowanej odpowiedzi:

  • Upewnij się, że wersja bibliotek DLL ramowych jest taka sama.

W moim przypadku wersje dll System.Web były inne, ponieważ kilka aktualizacji systemu Windows zostało pominiętych na jednym z serwerów farmy.

Powiązane problemy