Cerințe: Folosește Nginx pentru a construi un reverse proxy, responsabil pentru programarea tuturor cererilor, backend-ul este dezvoltat de ASP.NET MVC și implementat pe mai multe servere diferite, formând un cluster backendInformațiile despre sesiune nu pot fi partajate, ceea ce duce la procesarea corectă a unor cereri。 Următoarele probleme vor apărea:
ASP.NET Site-ul poate fi denumit astfel:
Soluțiile utilizate frecvent sunt următoarele:
Folosește baza de date pentru a stoca SESSION
Deoarece fiecare server trebuie să folosească aceeași sesiune, putem stoca sesiunea în aceeași bază de date, de fiecare dată când accesăm, mergem în baza de date să verificăm dacă există această sesiune sau dacă aceasta a expirat, iar apoi putem sincroniza sesiunea mai multor servere;
Merit:Folosirea acestei metode este simplă, convenabilă și ușor de început;
Neajuns:Folosirea bazei de date pentru a sincroniza sesiunile va crește IO-ul bazei de date și va crește povara asupra acesteia. În același timp, fiecare acces trebuie să intercepteze cererile și să interogheze baza de date, rezultând un strat suplimentar de acces și timp irosit de sesiune în baza de date.
Folosiți un mecanism de cache precum Memcache sau Redis pentru a stoca SESSION
Utilizarea mecanismelor de cache distribuite, precum memcache sau redis, pentru stocarea datelor de sesiune este o soluție populară pentru echilibrarea încărcării și sesiuni sincrone în multe proiecte de mari dimensiuni. Principiul său este că proiectul folosește cache-ul memcache sau redis în același loc, când utilizatorul se autentifică, sesiunea va fi stocată în cache, iar indiferent de serverul proiectului accesat, cache-ul de sesiune va fi obținut din același loc, astfel încât sincronizarea sesiunii să fie realizată ușor;
Merit:Folosirea cache-ului pentru a sincroniza sesiunile nu va crește povara asupra basei de date și nici nu trebuie să judeci manual dacă sesiunea există sau expiră, eliminând astfel o parte din logica de business.
Neajuns:Memcache sau Redis împarte memoria în multe specificații de blocuri de stocare, iar există blocuri cu dimensiuni, ceea ce determină, de asemenea, că memcache sau redis nu pot utiliza complet memoria, ceea ce va produce fragmentare a memoriei, iar dacă blocurile de stocare sunt insuficiente, va apărea și suprasaturarea memoriei.
Folosește modelul ip_hash în Nginx
Această tehnică, cunoscută și sub numele de menținerea sesiunilor, este ip_hash tehnologie din nginx care îți permiteCererile de la o anumită adresă IP sunt fixate pe același server de aplicații backend, astfel încât un client și un backend sub acest IP să poată stabili o sesiune stabilă.
(Dar există și un dezavantaj, dacă rețeaua operatorului este mai volatilă și mai instabilă,IP-ul de ieșire este dinamicDa, vor apărea probleme cu această metodă. )
Metoda de testare este deschiderea a două site-uri bazate pe docker,Trebuie să creezi un nou fișier index.html sub directoarele /data/testsite/a și /data/testsite/b, respectiv, comanda este următoarea:
Acces printr-un browser, așa cum este prezentat mai jos:
Dacă creezi un container nginx nou bazat pe Docker, fără a folosi tehnologia ip_hash, cererea poate fi trimisă către diferiți servere backend, așa cum se arată în figura de mai jos:
Folosind tehnologia ip_hash, creați un nou fișier /data/testsite/nginx.conf cu următoarea configurație:
Comanda de pornire Docker este următoarea:
(Menținerea sesiunilor bazată pe cookie-uri, care poate fi consultată în modulul fix, a fost omisă)
Configurația Nginx:Autentificarea cu hyperlink este vizibilă.
(Sfârșit)
|