Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 2945|Antwoord: 0

Nginx load balancing pakt het backend SESSION single point probleem aan

[Link kopiëren]
Geplaatst op 10-01-2023 20:38:39 | | | |
Vereisten: Gebruik Nginx om een reverse proxy te bouwen, verantwoordelijk voor het plannen van alle verzoeken, de backend wordt ontwikkeld door ASP.NET MVC en op meerdere verschillende servers geïmplementeerd, waarmee een backendcluster ontstaatSessie-informatie kan niet worden gedeeld, waardoor sommige verzoeken niet correct worden verwerkt。 De volgende problemen zullen zich voordoen:





ASP.NET De website kan als volgt worden aangeduid:

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

. Netgedistribueerde architectuur: Sessiedeling gebaseerd op Redis
https://www.itsvse.com/thread-5189-1-1.html

Veelgebruikte oplossingen zijn als volgt:

Gebruik de database om de SESSION op te slaan

Omdat elke server dezelfde sessie moet gebruiken, kunnen we de sessie in dezelfde database opslaan; elke keer dat we toegang hebben, gaan we naar de database om te controleren of deze sessie is of dat deze sessie is verlopen, en dan kunnen we de sessie van meerdere servers synchroniseren;

Verdienen:Deze methode gebruiken is eenvoudig, handig en eenvoudig om mee te beginnen;

Gebrek:Het gebruik van de database om sessies te synchroniseren verhoogt de IO van de database en vergroot de belasting op de database. Tegelijkertijd moet elke toegang verzoeken onderscheppen en de database ondervragen, wat resulteert in een extra toegangslaag en verspilde sessietijd in de database.


Gebruik een cachingmechanisme zoals Memcache of Redis om de SESSIE op te slaan

Het gebruik van gedistribueerde cachingmechanismen zoals memcache of redis om sessiegegevens op te slaan is een populaire oplossing voor load balancing en synchrone sessies in veel grootschalige projecten. Het principe is dat het project de memcache of redis cache op dezelfde plek gebruikt; wanneer de gebruiker inlogt, wordt de sessie in de cache opgeslagen, en ongeacht welke server van het project wordt benaderd, wordt de sessiecache van dezelfde plek verkregen, zodat sessiesynchronisatie eenvoudig mogelijk is;

Verdienen:Het gebruik van cache om sessies te synchroniseren verhoogt de belasting voor de database niet, en je hoeft ook niet handmatig te beoordelen of de sessie bestaat of vervalt, waardoor sommige bedrijfslogica verdwijnt.

Gebrek:Memcache of Redis verdeelt het geheugen in veel specificaties van opslagblokken, en er zijn blokken met grootte, wat ook bepaalt dat Memcache of Redis het geheugen niet volledig kan benutten, wat geheugenfragmentatie veroorzaakt, en als de opslagblokken onvoldoende zijn, zal er ook geheugenoverloop optreden.

Maak gebruik van het ip_hash-patroon in Nginx

Deze techniek, ook wel sessie bijhouden genoemd, is de ip_hash technologie in nginx waarmee je het mogelijk maaktVerzoeken van een bepaald IP-adres worden vastgezet op dezelfde backend applicatieserver, zodat een client en een backend onder dit IP een stabiele sessie kunnen opzetten.

(Maar er is ook een nadeel als het netwerk van de operator onstabieler en onstabieler is,Egress IP is dynamischJa, er zullen problemen zijn met deze methode. )

De testmethode is om twee locaties te openen op basis van docker,Je moet een nieuw index.html-bestand aanmaken onder respectievelijk de directories /data/testsite/a en /data/testsite/b, het commando is als volgt:

Toegang via een browser zoals hieronder weergegeven:



Als je een nieuwe nginx-container maakt op basis van Docker, zonder ip_hash technologie te gebruiken, kan het verzoek naar verschillende backendservers worden gestuurd, zoals te zien is in de onderstaande figuur:



Met ip_hash technologie maak je een nieuw /data/testsite/nginx.conf-bestand aan met de volgende configuratie:

Het docker-opstartcommando is als volgt:




Cookie-gebaseerde sessiebeheer, die in de sticky-module kan worden geraadpleegd, is weggelaten

Nginx-configuratie:De hyperlink-login is zichtbaar.

(Einde)




Vorig:【Practical Action】Gebruik Docker om een Gitlab privérepository te bouwen
Volgend:IIS URL Herschrijfmodule Regel-clearing
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com