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:
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)
|