1. Cos'è il bilanciamento del carico Un nuovo sito web non dovrebbe essere bilanciato dal carico, perché il volume di traffico non è grande, quindi non c'è bisogno di fare queste cose. Tuttavia, con la rapida crescita del traffico e del traffico dei siti web, un singolo server è limitato dalle proprie condizioni hardware ed è difficile resistere a un numero così elevato di visite. In questo caso, ci sono due opzioni tra cui scegliere: 1. Aggiornare l'hardware di un singolo server, da dual-core a quad-core, aumentare la memoria, ecc. 2. Aumentare il numero di server per condividere il carico dei server. Raggiungere l'obiettivo di aumentare la larghezza di banda di rete e aumentare la potenza di elaborazione del server. Il primo metodo può essere inteso come sviluppo verticale, che è sempre limitato. Il secondo metodo è la scelta giusta per risolvere il problema I metodi di bilanciamento del carico possono essere divisi in due direzioni: una è utilizzare il software per ottenere il bilanciamento del carico, l'altra è implementare il bilanciamento del carico hardware (inclusa la combinazione di hardware e software) Usa software per ottenere il bilanciamento del carico, e il processo di bilanciamento del carico consuma anche alcune risorse di sistema e aumenta i tempi di risposta. Ad esempio, LVS, nginx, haproxy, apache, ecc., questi software di bilanciamento del carico basati su applicazioni sono adatti a siti web che non hanno un numero particolarmente elevato di visite. Se hai un sito web con un gran numero di visite come Sina e 163, usare hardware per implementare il bilanciamento del carico è la scelta più ovvia. Esistono molti algoritmi di bilanciamento del carico, incluso il bilanciamento basato sul numero di richieste, gli indirizzi IP radici e gli algoritmi basati sul traffico. Ci sono due algoritmi che uso spesso. Una si basa sul numero di richieste A, può rendersi conto che ogni server può condividere equamente la richiesta del cliente e, se uno dei server si blocca, non causerà un impatto negativo. b. Lo stato tra i server deve essere sincronizzato, come la sessione, e sono necessari altri mezzi per sincronizzare questi stati. Uno è secondo la proprietà intellettuale R, ip_hash algoritmo può mappare un IP a un server, il che può risolvere il problema della sincronizzazione delle sessioni b. La cosa negativa di ip_hash è che se uno dei server si spegne, gli utenti mappati su quel server verranno depressi. c, ip_hash può facilmente portare a un carico sbilanciato, ora il governo del granchio di fiume filtra le parole chiave di ricerca di Google, spesso scoprirai che Google non riesce ad aprirsi, ma dopo un po' andrà bene. Questo ha deprimito quegli appassionati di Google, e molti utenti sono andati all'estero in cerca di agenti. Se ciò accade, questi proxy verranno assegnati allo stesso server, causando carichi sbilanciati e persino guasti.
Secondo, cosa sta tenendo una sessione e qual è la sua funzione Session hold si riferisce a un meccanismo sul bilanciatore di carico che garantisce che le richieste di accesso associate allo stesso utente vengano distribuite allo stesso server durante il bilanciamento del carico. Cosa fa il session hold, per fare un esempio Se una richiesta di accesso utente viene assegnata al server A e si collega al server A, e in poco tempo questo utente invia un'altra richiesta, se non c'è funzione di blocco sessione, la richiesta di questo utente probabilmente sarà assegnata al server B; in questo momento non c'è accesso al server B, quindi devi effettuare di nuovo il login, ma l'utente non sa dove è assegnata la sua richiesta, l'utente ha la sensazione di essere loggato, perché deve effettuare il login di nuovo? L'esperienza utente è molto negativa. E se acquisti qualcosa su Taobao, da login = "Shoot something=" aggiungi indirizzo = "per pagare", questa è una serie di processi, che può essere intesa anche come un processo operativo, tutta questa serie di processi operativi dovrebbe essere completata da un solo server e non può essere assegnata a server diversi dal bilanciatore di carico. La sessione di mantenimento ha un limite di tempo (eccetto per i server che sono mappati su uno fisso, come ip_hash), e vari strumenti di bilanciamento del carico forniscono questa impostazione di tempo di sessione, LVS, Apache, ecc. Anche il linguaggio PHP offre un session.gc_maxlifetime per impostare il tempo di attesa della sessione Il tempo di mantenimento della sessione dovrebbe essere impostato più del tempo di sopravvivenza della sessione, il che può ridurre la necessità di sincronizzare le sessioni, ma non può essere eliminato. Quindi è ancora necessario sincronizzare le sessioni.
Terzo, sincronizzazione delle sessioni Perché la sincronizzazione delle sessioni? È stato menzionato quando si parla di sessione. Per maggiori informazioni, vedi Tre metodi di sincronizzazione delle sessioni in un cluster web
Esistono tre metodi di sincronizzazione delle sessioni in un cluster web
Dopo aver fatto un cluster web, considererai sicuramente prima la sincronizzazione delle sessioni, perché dopo il bilanciamento del caricamento, lo stesso accesso IP alla stessa pagina sarà assegnato a server diversi. Questo articolo propone tre modi diversi per risolvere questo problema in base a questa situazione: Per prima cosa, usa il database per sincronizzare la sessione Non ho usato questo metodo durante la sincronizzazione di sessioni multi-server, ma se dovevo usarlo, ho pensato a due metodi: 1. Utilizzare un computer di fascia bassa per costruire un database che memorizzi la sessione del server web, oppure costruire questo database speciale sul file server; quando l'utente accede al webserver, si reca su questo database speciale per verificare la situazione della sessione e raggiungere lo scopo della sincronizzazione. 2. Questo metodo consiste nel mettere la tabella in cui è memorizzata la sessione insieme ad altre tabelle del database; se anche MySQL è clusterizzato, ogni nodo MySQL deve avere questa tabella e la tabella dati di questa sessione deve essere sincronizzata in tempo reale. Spiegazione: Utilizzare il database per sincronizzare le sessioni aumenterà il carico sul database, che è intrinsecamente soggetto a colli di bottiglia. Il primo dei due metodi sopra descritti è migliore, che separa la tabella in cui la sessione è posizionata indipendentemente, riducendo il carico sul database reale 2. Utilizzare i cookie per sincronizzare le sessioni La sessione è la situazione dei file memorizzata sul lato server, e il cookie è la situazione dei file sul client, come ottenere la sincronizzazione? Il metodo è molto semplice, cioè inserire la sessione generata dalla pagina visita dell'utente nel cookie, cioè usare il cookie come stazione di rilancio. Visiti il server web A, generi una sessione e la inserisci nel cookie, il tuo accesso viene assegnato al server web B, a questo punto il server web B giudica prima se il server ha questa sessione, altrimenti vai a vedere se c'è questa sessione nel cookie del client, altrimenti significa che la sessione non è realmente salvata, se ce n'è una nel cookie, Sincronizza il sessoin nel cookie con il server web B, così che la sessione possa essere sincronizzata. Nota: Questo metodo è semplice e comodo da implementare, e non aumenterà il carico sul database, ma se il client disabilita i cookie, la sessione non potrà essere sincronizzata, il che comporterebbe perdite al sito web; I cookie non sono altamente sicuri e, sebbene siano stati criptati, possono comunque essere falsificati.
3. Usa memcache per sincronizzare le sessioni Memcache può essere distribuito e, senza questa funzione, non può essere utilizzato per la sincronizzazione delle sessioni. Può combinare la memoria del server web per creare un "mempool", indipendentemente dal server che genera sessoin, può essere inserito in questo "mempool" e tutto il resto può essere usato. Vantaggi: sincronizzare le sessioni in questo modo non aumenta il carico sul database, e la sicurezza è notevolmente migliorata rispetto all'uso dei cookie, e mettere le sessioni in memoria è molto più veloce che leggere dai file. Svantaggi: memcache divide la memoria in molte specifiche di blocchi di archiviazione, ci sono blocchi e dimensioni, questo metodo determina anche memcache che non può sfruttare completamente la memoria, producendo frammentazione della memoria; se il blocco di memoria è insufficiente, produce anche un sovraplessamento di memoria.
Quarto, sommario Tutti e tre i metodi sopra menzionati sono fattibili Il primo metodo, quello che influenza maggiormente la velocità del sistema, non è raccomandato; Il secondo metodo ha buoni risultati, ma i rischi per la sicurezza sono gli stessi; Il terzo metodo, personalmente penso che il terzo sia il migliore, consiglio a tutti di usarlo;
|