Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 2945|Svare: 0

Nginx lastbalansering løser backend SESSION enkeltpunktproblemet

[Kopier lenke]
Publisert på 10.01.2023 20:38:39 | | | |
Krav: Bruk Nginx til å bygge en reverse proxy, ansvarlig for å planlegge alle forespørsler, backend utvikles av ASP.NET MVC og distribueres til flere forskjellige servere, og danner en backend-klyngeSesjonsinformasjon kan ikke deles, noe som fører til at noen forespørsler ikke behandles korrekt。 Følgende problemer vil oppstå:





ASP.NET Nettstedet kan refereres til som følger:

asp.net sesjonsdeling (via StateServer)
https://www.itsvse.com/thread-6613-1-1.html

. Netdistribuert arkitektur: Sesjonsdeling basert på Redis
https://www.itsvse.com/thread-5189-1-1.html

Vanlig brukte løsninger er som følger:

Bruk databasen til å lagre SESJONEN

Siden hver server må bruke samme økt, kan vi lagre sesjonen i samme database, og hver gang vi får tilgang går vi til databasen for å sjekke om det finnes denne økten eller om den har utløpt, og deretter kan vi synkronisere sesjonen til flere servere;

Fortjeneste:Å bruke denne metoden er enkelt, praktisk og lett å komme i gang;

Brist:Å bruke databasen til å synkronisere økter vil øke IO i databasen og øke belastningen på databasen. Samtidig må hver tilgang avskjære forespørsler og spørre databasen, noe som resulterer i et ekstra lag med tilgang og bortkastet sesjonstid i databasen.


Bruk en cache-mekanisme som Memcache eller Redis for å lagre SESSION

Bruk av distribuerte cache-mekanismer som memcache eller redis for å lagre sesjonsdata er en populær løsning for lastbalansering og synkrone økter i mange store prosjekter. Prinsippet er at prosjektet bruker memcache- eller redis-cachen på samme sted; når brukeren logger inn, lagres sesjonen i cachen, og uansett hvilken server i prosjektet som brukes, vil sesjonscachen bli hentet fra samme sted, slik at sesjonssynkronisering lett kan realiseres;

Fortjeneste:Å bruke cache for å synkronisere økter vil ikke øke belastningen på databasen, og du trenger heller ikke manuelt å vurdere om sesjonen eksisterer eller utløper, noe som eliminerer noe forretningslogikk.

Brist:Memcache eller Redis deler minne inn i mange spesifikasjoner av lagringsblokker, og det finnes blokker med størrelse, noe som også avgjør at Memcache eller Redis ikke kan utnytte minnet fullt ut, noe som vil føre til minnefragmentering, og hvis lagringsblokkene er utilstrekkelige, vil også minneoverløp oppstå.

Utnytt ip_hash-mønsteret i Nginx

Denne teknikken, også kjent som session keeping, er den ip_hash teknologien i nginx som lar deg gjøre det muligForespørsler fra en bestemt IP-adresse er festet til samme backend-applikasjonsserver, slik at en klient og en backend under denne IP-en kan etablere en stabil sesjon.

(Men det er også en ulempe hvis operatørens nettverk er mer ustabilt og ustabilt,Egress IP er dynamiskJa, det vil være problemer med denne metoden. )

Testmetoden er å åpne to steder basert på docker,Du må opprette en ny index.html-fil under henholdsvis /data/testsite/a og /data/testsite/b, kommandoen er som følger:

Tilgang via en nettleser som vist nedenfor:



Hvis du oppretter en ny nginx-container basert på Docker, uten å bruke ip_hash teknologi, kan forespørselen sendes til forskjellige backend-servere, som vist i figuren under:



Ved å bruke ip_hash teknologi, opprett en ny /data/testsite/nginx.conf-fil med følgende konfigurasjon:

Docker-oppstartskommandoen er som følger:




Cookie-basert sesjonsføring, som kan konsulteres i den faste modulen, utelates

Nginx-konfigurasjon:Innloggingen med hyperkoblingen er synlig.

(Slutt)




Foregående:【Praktisk handling】Bruk Docker for å bygge et privat Gitlab-repositorium
Neste:IIS URL-omskriving av modulregelen rydder
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com