Krav: Använd Nginx för att bygga en reverse proxy, ansvarig för schemaläggning av alla förfrågningar, backend utvecklas av ASP.NET MVC och distribueras till flera olika servrar, vilket bildar ett backendklusterSessionsinformation kan inte delas, vilket leder till att vissa förfrågningar inte behandlas korrekt。 Följande problem kommer att uppstå:
ASP.NET Webbplatsen kan refereras till enligt följande:
Vanligt använda lösningar är följande:
Använd databasen för att lagra SESSIONEN
Eftersom varje server behöver använda samma session kan vi lagra sessionen i samma databas, varje gång vi öppnar går vi till databasen för att kontrollera om denna session finns eller om den har gått ut, och sedan kan vi synkronisera sessionen för flera servrar;
Förtjänst:Att använda denna metod är enkelt, bekvämt och lätt att komma igång;
Brist:Att använda databasen för att synkronisera sessioner kommer att öka databasens IO och öka belastningen på databasen. Samtidigt måste varje åtkomst avlyssna förfrågningar och fråga databasen, vilket resulterar i ett extra åtkomstlager och bortkastad session i databasen.
Använd en cache-mekanism som Memcache eller Redis för att lagra SESSIONEN
Att använda distribuerade cachemekanismer som memcache eller redis för att lagra sessionsdata är en populär lösning för lastbalansering och synkrona sessioner i många storskaliga projekt. Dess princip är att projektet använder memcachen eller redis-cachen på samma plats, när användaren loggar in lagras sessionen i cachen, och oavsett vilken server i projektet som nås, hämtas sessionscachen från samma plats, så att sessionssynkronisering enkelt kan genomföras;
Förtjänst:Att använda cache för att synkronisera sessioner ökar inte belastningen på databasen, och du behöver inte manuellt bedöma om sessionen existerar eller förfaller, vilket eliminerar en del affärslogik.
Brist:Memcache eller Redis delar in minnet i många specifikationer av lagringsblock, och det finns block med storlek, vilket också avgör att Memcache eller Redis inte kan utnyttja minnet fullt ut, vilket leder till minnesfragmentering, och om lagringsblocken är otillräckliga kommer även minnesöverflöd att uppstå.
Utnyttja ip_hash-mönstret i Nginx
Denna teknik, även känd som sessionsföring, är den ip_hash teknologin i nginx som låter dig göra det möjligtFörfrågningar från en viss IP-adress är fastnålade till samma backend-applikationsserver, så att en klient och en backend under denna IP kan etablera en stabil session.
(Men det finns också en nackdel om operatörens nätverk är mer instabilt och inflytande,Egress IP är dynamiskJa, det kommer att finnas problem med denna metod. )
Testmetoden är att öppna två platser baserade på docker,Du behöver skapa en ny index.html-fil under katalogerna /data/testsite/a respektive /data/testsite/b, kommandot är följande:
Åtkomst via en webbläsare som visas nedan:
Om du skapar en ny nginx-container baserad på Docker, utan att använda ip_hash teknik, kan förfrågan skickas till olika backend-servrar, som visas i figuren nedan:
Med ip_hash teknik, skapa en ny /data/testsite/nginx.conf-fil med följande konfiguration:
Docker-startkommandot är följande:
(Cookiebaserad sessionshantering, som kan konsulteras i den fastklistrade modulen, utelämnades)
Nginx-konfiguration:Inloggningen med hyperlänken är synlig.
(Slut)
|