Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 2945|Risposta: 0

Nginx bilanciamento del carico affronta il problema del backend SESSION single point

[Copiato link]
Pubblicato su 10/01/2023 20:38:39 | | | |
Requisiti: Usa Nginx per costruire un reverse proxy, responsabile della programmazione di tutte le richieste, il backend è sviluppato da ASP.NET MVC e distribuito su più server diversi, formando un cluster backendLe informazioni sulla sessione non possono essere condivise, il che comporta alcune richieste non processate correttamente。 I seguenti problemi sorgeranno:





ASP.NET Il sito web può essere chiamato come segue:

asp.net condivisione sessione (tramite StateServer)
https://www.itsvse.com/thread-6613-1-1.html

. Architettura distribuita net: condivisione di sessione basata su Redis
https://www.itsvse.com/thread-5189-1-1.html

Le soluzioni comunemente utilizzate sono le seguenti:

Usa il database per memorizzare la SESSION

Poiché ogni server deve usare la stessa sessione, possiamo memorizzare la sessione nello stesso database; ogni volta che accediamo, andiamo al database per verificare se questa sessione è esistente o se è scaduta, e poi possiamo sincronizzare la sessione di più server;

Merito:Usare questo metodo è semplice, comodo e facile per iniziare;

Mancanza:L'utilizzo del database per sincronizzare le sessioni aumenterà l'IO del database e il carico sul database. Allo stesso tempo, ogni accesso deve intercettare le richieste e interrogare il database, causando un ulteriore livello di accesso e tempo sprecato di sessione del database.


Usa un meccanismo di cache come Memcache o Redis per memorizzare la SESSION

L'uso di meccanismi di cache distribuiti come memcache o redis per memorizzare i dati delle sessioni è una soluzione popolare per il bilanciamento del carico e sessioni sincrone in molti progetti di grande scala. Il suo principio è che il progetto utilizza la cache memcache o redis nello stesso punto; quando l'utente effettua il login, la sessione viene memorizzata nella cache e poi, indipendentemente dal server del progetto a cui si accede, la cache della sessione viene ottenuta dallo stesso posto, così che la sincronizzazione della sessione sia facilmente realizzabile;

Merito:Usare la cache per sincronizzare le sessioni non aumenterà il carico sul database, né sarà necessario giudicare manualmente se la sessione esiste o scade, eliminando così parte della logica di business.

Mancanza:Memcache o Redis dividono la memoria in molte specifiche di blocchi di archiviazione, e ci sono blocchi di dimensioni, che determinano anche che Memcache o Redis non possono sfruttare completamente la memoria, il che causerebbe frammentazione della memoria e, se i blocchi di memoria sono insufficienti, si verificherà anche un overflow di memoria.

Sfrutta il modello ip_hash in Nginx

Questa tecnica, nota anche come sessione, è la ip_hash tecnologia in nginx che ti permette diLe richieste da un certo indirizzo IP sono fissate allo stesso server applicativo backend, così che un client e un backend sotto questo IP possano stabilire una sessione stabile.

(Ma c'è anche uno svantaggio, se la rete dell'operatore è più volatile e instabile,L'IP di uscita è dinamicaSì, ci saranno problemi con questo metodo. )

Il metodo di prova consiste nell'aprire due siti basati su docker,Devi creare un nuovo file index.html sotto le directory /data/testsite/a e /data/testsite/b, rispettivamente, il comando è il seguente:

Accesso tramite browser come mostrato di seguito:



Se crei un nuovo container nginx basato su Docker, senza utilizzare ip_hash tecnologia, la richiesta può essere inviata a diversi server backend, come mostrato nella figura sottostante:



Utilizzando ip_hash tecnologia, crea un nuovo file /data/testsite/nginx.conf con la seguente configurazione:

Il comando di avvio di Docker è il seguente:




Il mantenimento delle sessioni basato su cookie, che può essere consultato nel modulo fissato, è stato omesso

Configurazione Nginx:Il login del link ipertestuale è visibile.

(Fine)




Precedente:【Azione pratica】Usa Docker per costruire un repository privato su Gitlab
Prossimo:Pulizia delle regole del modulo di riscrittura URL IIS
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com