Wymagania: Użyj Nginx do zbudowania reverse proxy, odpowiedzialnego za planowanie wszystkich żądań, backend jest rozwijany przez ASP.NET MVC i wdrażany na wielu różnych serwerach, tworząc klaster backendInformacje o sesji nie mogą być udostępniane, co skutkuje nieprawidłowym przetwarzaniem niektórych żądań。 Pojawią się następujące problemy:
ASP.NET Strona internetowa może być nazywana następująco:
Najczęściej stosowane rozwiązania to:
Użyj bazy danych do przechowywania SESSION
Ponieważ każdy serwer musi korzystać z tej samej sesji, możemy przechowywać sesję w tej samej bazie danych, za każdym razem wchodzimy do bazy, aby sprawdzić, czy ta sesja istnieje, czy ta sesja wygasła, a następnie możemy synchronizować sesję wielu serwerów;
Zasługa:Korzystanie z tej metody jest proste, wygodne i łatwe do rozpoczęcia;
Niedociągnięcie:Wykorzystanie bazy danych do synchronizacji sesji zwiększy liczbę wejść i obciążenie bazy danych. Jednocześnie każdy dostęp musi przechwytywać żądania i zapytywać bazę danych, co skutkuje dodatkową warstwą dostępu i marnowaniem czasu sesji bazy danych.
Użyj mechanizmu buforowania, takiego jak Memcache lub Redis, aby przechowywać SESSION
Wykorzystanie rozproszonych mechanizmów buforowania, takich jak memcache czy redis, do przechowywania danych sesji, jest popularnym rozwiązaniem do równoważenia obciążenia i synchronicznych sesji w wielu dużych projektach. Zasada projektu polega na tym, że projekt korzysta z pamięci podręcznej memcache lub redis w tym samym miejscu, a gdy użytkownik się zaloguje, sesja jest przechowywana w pamięci podręcznej, a niezależnie od tego, do którego serwera projektu uchodzi dostęp, pamięć podręczna sesji jest pobierana z tego samego miejsca, dzięki czemu synchronizacja sesji jest łatwa;
Zasługa:Użycie pamięci podręcznej do synchronizacji sesji nie zwiększy obciążenia bazy danych, ani nie musisz ręcznie oceniać, czy sesja istnieje, czy wygasa, co eliminuje część logiki biznesowej.
Niedociągnięcie:Memcache lub Redis dzieli pamięć na wiele specyfikacji bloków pamięci, a istnieją bloki o rozmiarach, co również oznacza, że memcache lub redis nie mogą w pełni wykorzystać pamięci, co powoduje fragmentację pamięci, a jeśli bloki pamięci są niewystarczające, dochodzi do przepełnienia pamięci.
Wykorzystaj wzór ip_hash w Nginx
Ta technika, znana również jako prowadzenie sesji, jest ip_hash technologią w nginx, która pozwala naŻądania z określonego adresu IP są przypięte do tego samego serwera aplikacji backendowej, tak aby klient i backend pod tym IP mogli nawiązać stabilną sesję.
(Ale istnieje też wada, jeśli sieć operatora jest bardziej niestabilna i niestabilna,IP wyjściowe jest dynamiczneTak, z tą metodą pojawią się problemy. )
Metodą testową jest otwarcie dwóch lokalizacji na podstawie dockera,Musisz utworzyć nowy plik index.html odpowiednio w katalogach /data/testsite/a i /data/testsite/b, polecenie brzmi następująco:
Dostęp przez przeglądarkę, jak pokazano poniżej:
Jeśli utworzysz nowy kontener nginx oparty na Dockerze, nie używając ip_hash technologii, żądanie może być wysyłane do różnych serwerów backendowych, jak pokazano na poniższym rysunku:
Korzystając z ip_hash technologii, utworz nowy plik /data/testsite/nginx.conf z następującą konfiguracją:
Polecenie uruchamiania dockera wygląda następująco:
(Zachowanie sesji oparte na ciasteczkach, które można sprawdzić w przypiętym module, zostało pominięte)
Konfiguracja Nginx:Logowanie do linku jest widoczne.
(Koniec)
|