1. Ce este echilibrarea încărcării Un site nou nu ar trebui să fie echilibrat din punct de vedere al încărcării, deoarece volumul de trafic nu este mare, deci nu este nevoie să se implice în astfel de lucruri. Totuși, odată cu creșterea rapidă a traficului și a traficului site-ului, un singur server este limitat de propriile sale condiții hardware și este dificil să reziste unui număr atât de mare de vizite. În acest caz, există două opțiuni din care poți alege: 1. Actualizarea hardware-ului unui singur server, de la dual-core la quad-core, creșterea memoriei etc. 2. Creșterea numărului de servere pentru a împărți povara serverelor. Pentru a atinge scopul de a crește lățimea de bandă a rețelei și de a crește puterea de procesare a serverului. Prima metodă poate fi înțeleasă ca dezvoltare verticală, care este întotdeauna limitată. A doua metodă este alegerea corectă pentru a rezolva problema Metodele de echilibrare a încărcării pot fi împărțite în două direcții: una este utilizarea software-ului pentru a obține echilibrarea încărcării, iar cealaltă implementarea echilibrării sarcinii hardware (inclusiv combinarea hardware-ului cu software-ul) Se folosește software pentru a obține echilibrarea încărcării, iar procesul de obținere a echilibrării încărcării consumă și unele resurse ale sistemului și crește timpul de răspuns. De exemplu, LVS, nginx, haproxy, apache etc., aceste software de echilibrare a încărcării bazate pe aplicații sunt potrivite pentru site-uri care nu au un număr deosebit de mare de vizite. Dacă ai un site cu un număr mare de vizite, precum Sina și 163, folosirea hardware-ului pentru a implementa echilibrarea încărcării este cea mai evidentă alegere. Există mulți algoritmi de echilibrare a încărcării, inclusiv echilibrarea sarcinii bazată pe numărul de cereri, adresele IP rădăcină și algoritmi bazați pe trafic. Sunt doi algoritmi pe care îi folosesc adesea. Una se bazează pe numărul de cereri A, poate realiza că fiecare server poate partaja cererea clientului în mod egal, iar dacă unul dintre servere cade, nu va cauza un impact negativ. b. Starea dintre servere trebuie să fie sincronizată, cum ar fi sesiunea, și sunt necesare alte mijloace pentru a sincroniza aceste stări. Unul este conform IP-ului Un algoritm ip_hash poate mapa un IP către un server, ceea ce poate rezolva problema sincronizării sesiunilor b. Partea proastă la ip_hash este că, dacă unul dintre servere cade, utilizatorii mapați pe acest server vor fi deprimați. C, ip_hash poate duce ușor la dezechilibru al sarcinii, acum guvernul crabului de râu filtrează cuvintele-cheie de căutare ale Google, vei vedea adesea că Google nu poate deschide, dar va fi bine după un timp. Acest lucru i-a făcut pe pasionații Google să se simtă deprimați, iar mulți utilizatori au plecat în străinătate pentru a găsi agenți. Dacă se întâmplă acest lucru, acești proxy-uri vor fi atribuiți aceluiași server, cauzând încărcare dezechilibrată și chiar defecte.
În al doilea rând, ce se desfășoară o sesiune și care este funcția ei Menținerea sesiunii se referă la un mecanism de pe load balancer care asigură că cererile de acces asociate aceluiași utilizator sunt distribuite către același server în timp ce se efectuează echilibrarea încărcării. Ce face Session Hold, dați un exemplu Dacă o cerere de acces a utilizatorului este atribuită serverului A și se conectează la serverul A, iar într-un timp scurt acest utilizator trimite o altă cerere, dacă nu există funcție de blocare a sesiunii, cererea utilizatorului este probabil să fie atribuită serverului B, în acest moment nu există autentificare pe serverul B, deci trebuie să te conectezi din nou, dar utilizatorul nu știe unde este atribuită cererea sa, utilizatorul are impresia că este conectat, de ce trebuie să se conecteze din nou, experiența utilizatorului este foarte proastă. Și dacă cumperi ceva pe Taobao, din login = "Shoot something=" add address = "to pay", aceasta este o serie de procese, care pot fi înțelese și ca un proces operațional, toate aceste procese operaționale trebuie să fie realizate de un singur server și nu pot fi atribuite altor servere de către load balancer. Menținerea sesiunii are o limită de timp (cu excepția serverelor care sunt mapate pe una fixă, cum ar fi ip_hash), iar diverse instrumente de echilibrare a încărcării oferă această setare a timpului de blocare a sesiunii, LVS, apache etc. Chiar și limbajul PHP oferă o session.gc_maxlifetime de a seta timpul de așteptare al sesiunii Timpul de menținere a sesiunii ar trebui stabilit mai mare decât timpul de supraviețuire al sesiunii, ceea ce poate reduce necesitatea sincronizării sesiunilor, dar nu poate fi eliminat. Așadar, sincronizarea sesiunilor trebuie făcute în continuare.
În al treilea rând, sincronizarea sesiunilor De ce sincronizarea sesiunii, s-a menționat când se vorbește despre menținerea sesiunii. Pentru mai multe informații, vezi Trei metode de sincronizare a sesiunilor într-un cluster web
Există trei metode de sincronizare a sesiunilor într-un cluster web
După ce faci un cluster web, vei lua în considerare sincronizarea sesiunilor mai întâi, pentru că după echilibrarea încărcării, același acces IP la aceeași pagină va fi atribuit serverelor diferite. Așadar, acest articol oferă trei moduri diferite de a rezolva această problemă în funcție de această situație: În primul rând, folosește baza de date pentru a sincroniza sesiunea Nu am folosit această metodă când am făcut sincronizare a sesiunilor multi-server, dar dacă ar fi trebuit să o folosesc, m-am gândit la două metode: 1. Folosirea unui calculator de bază de date pentru a construi o bază de date care să stocheze sesiunea serverului web sau construirea acestei baze de date speciale pe serverul de fișiere; când utilizatorul accesează serverul web, va merge la această bază de date specială pentru a verifica situația sesiunii în scopul sincronizării sesiunii. 2. Această metodă este de a pune tabelul unde este stocată sesiunea împreună cu alte tabele de baze de date; dacă mysql este de asemenea clusterizat, fiecare nod mysql trebuie să aibă acest tabel, iar tabelul de date al acestui tabel de sesiune trebuie să fie sincronizat în timp real. Explicație: Folosirea bazei de date pentru a sincroniza sesiunile va crește povara asupra acesteia, care este inerent predispusă la blocaje. Prima dintre cele două metode de mai sus este mai bună, separând tabelul unde este plasată sesiunea independent, reducând povara asupra bazei de date reale 2. Folosirea cookie-urilor pentru a sincroniza sesiunile Session este situația fișierului stocată pe partea de server, iar cookie-ul este situația fișierului pe client, cum se obține sincronizarea? Metoda este foarte simplă, adică să introduci sesiunea generată de pagina de vizită a utilizatorului în cookie, adică să folosești cookie-ul ca stație de retransmisie. Vizitezi serverul web A, generezi o sesiune și o pui în cookie, accesul tău este atribuit serverului web B, în acest moment, serverul web B judecă mai întâi dacă serverul are această sesiune, dacă nu, verifici dacă există această sesiune în cookie-ul clientului, dacă nu, înseamnă că sesiunea nu este salvată cu adevărat, dacă există una în cookie, Sincronizează sesiunea din cookie cu serverul web B, astfel încât sesiunea să poată fi sincronizată. Notă: Această metodă este simplă și convenabilă de implementat și nu va crește povara asupra bazei de date, dar dacă clientul dezactivează cookie-urile, sesiunea nu poate fi sincronizată, ceea ce va aduce pierderi site-ului; Cookie-urile nu sunt extrem de sigure și, deși au fost criptate, pot fi totuși falsificate.
3. Folosirea memcache pentru a sincroniza sesiunile Memcache poate fi distribuit, iar fără această funcție nu poate fi folosit pentru sincronizarea sesiunii. El poate combina memoria din serverul web pentru a crea un "mempool", indiferent care server generează sessoin, acesta poate fi pus în acest "mempool", iar tot restul poate fi folosit. Avantaje: sincronizarea sesiunilor în acest mod nu crește povara asupra bazei de date, iar securitatea este mult îmbunătățită comparativ cu utilizarea cookie-urilor, iar plasarea sesiunilor în memorie este mult mai rapidă decât citirea fișierelor. Dezavantaje: memcache împarte memoria în multe specificații de blocuri de stocare, există blocuri și dimensiuni, astfel se determină și faptul că memcache nu poate utiliza complet memoria, ceea ce va produce fragmentare a memoriei; dacă blocul de stocare este insuficient, va produce și depășire de memorie.
În al patrulea rând, rezumat Toate cele trei metode de mai sus sunt fezabile Prima metodă, cea care afectează cel mai mult viteza sistemului, nu este recomandată; A doua metodă are rezultate bune, dar riscurile de siguranță sunt aceleași; A treia metodă, personal cred că a treia metodă este cea mai bună, recomand tuturor să o folosească;
|