Cuprins[Ascunde][Spectacol]
Disponibilitatea aplicațiilor nu a fost niciodată luată la fel de în serios ca astăzi, când folosim aplicații pentru mai mult decât pentru comunicare, fie personală sau profesională și când aplicațiile sunt afacerea.
Aplicațiile care nu sunt în mod constant online sau sunt instabile își pierd utilizatorii și relevanța, devenind în cele din urmă învechite. S-a întâmplat într-o clipită. Pentru că internetul nu doarme niciodată și funcționează 24 de ore pe zi, 7 zile pe săptămână, aceeași idee trebuie să se aplice aplicațiilor.
Scalabilitatea este esențială pentru a face acest lucru și pentru a asigura disponibilitatea aplicației. Echilibrarea sarcinii este una dintre cele mai importante componente în asigurarea disponibilității. Mulți oameni încă mai cred că echilibrarea încărcăturii poate fi realizată cu un script simplu.
Cu toate acestea, acesta nu este cazul. Numai acesta oferă acces la programe din întreaga lume — în orice moment și de pe orice dispozitiv.
În această postare, vom arunca o privire profundă asupra echilibrării încărcării, a algoritmilor săi și a modului în care aceasta se leagă de microservicii, printre altele. Sa incepem!
Ce este echilibrarea sarcinii?
Pe măsură ce cererea pentru un site web sau o aplicație de afaceri crește, un singur server nu va putea în curând să facă față întregii sarcini. Organizațiile distribuie volumul de lucru pe numeroase servere pentru a satisface cererea. Această metodă, cunoscută sub denumirea de „echilibrare a încărcăturii”, împiedică supraîncărcarea unui singur server, ceea ce îl poate determina încetinirea, eliminarea solicitărilor sau chiar blocarea.
Echilibrarea încărcăturii distribuie traficul de rețea în mod egal pentru a evita eșecul din cauza supraîncărcării resurselor. Aplicațiile, site-urile web, bazele de date și alte resurse computerizate funcționează mai bine și sunt mai disponibile folosind această metodă. De asemenea, ajută la procesarea corectă și în timp util a solicitărilor utilizatorilor.
Din perspectiva utilizatorului, echilibrarea încărcăturii servește ca un intermediar nevăzut între un client și o colecție de servere, asigurând că cererile de conexiune nu sunt abandonate. Aplicațiile, site-urile web, bazele de date și serviciile online s-ar prăbuși cel mai probabil dacă cererea ar deveni prea mare fără echilibrarea încărcăturii.
Sute de mii de solicitări ale utilizatorilor pot fi trimise la un singur site web cu trafic ridicat în același timp. Sunt necesare mai multe servere pentru a popula corect paginile web cu conținutul solicitat, cum ar fi text, imagini, video și streaming audio. Echilibrarea încărcăturii este folosită în mod obișnuit în fermele de servere de site-uri web cu trafic ridicat, precum și în serverele DNS, bazele de date și site-urile FTP (File Transfer Protocol).
Dacă un singur server este supraîncărcat, acesta ar putea funcționa prost sau chiar se poate prăbuși. Echilibratoarele de încărcare reduc șansele de nefuncționare prin distribuirea uniformă a cererilor utilizatorilor între o colecție de servere. Dacă unul dintre serverele din grup eșuează, traficul este redirecționat către alte servere din grup. Un echilibrator de încărcare adaugă automat noi servere în procesul de distribuție a traficului atunci când acestea sunt adăugate la pool-ul de servere.
Cum funcționează echilibrarea încărcăturii?
Funcționează după cum urmează:
- Când un client primește o solicitare, cum ar fi printr-un browser sau o aplicație, încearcă să se conecteze la server.
- Când un echilibrator de încărcare primește o solicitare, o direcționează către unul dintre serverele dintr-un grup de servere pe baza modelelor stabilite de algoritm (sau fermă).
- Serverul primește cererea de conectare și răspunde clientului prin echilibrul de încărcare.
- Când echilibratorul de încărcare primește răspunsul, acesta potrivește adresa IP a clientului cu adresa IP a serverului selectat. După aceea, răspunsul este transmis cu pachetul.
- Descărcarea SSL este procesul de decriptare a datelor folosind protocolul de criptare Security Socket Layer, astfel încât serverele să nu fie nevoite.
- Procesul se repetă până la sfârșitul sesiunii.
Metode de echilibrare a sarcinii
Pentru a selecta care dintre serverele dintr-o fermă de servere primește următoarea solicitare, fiecare tehnică de echilibrare a sarcinii folosește un set de criterii. Există cinci abordări tipice pentru echilibrarea sarcinii:
- Round Robin: Aceasta este abordarea implicită și funcționează așa cum pare. Echilibratorul de încărcare distribuie cererile într-un model rotativ, începând cu primul server din grup și mergând în jos, unde așteaptă să fie apelat din nou. Această metodă asigură că fiecare server gestionează aproximativ același număr de conexiuni.
- Round Robin ponderat: Această abordare atribuie fiecărui server o greutate (sau preferință) care este în general proporțională cu capacitatea sa. Cu cât un server primește mai multe solicitări, cu atât greutatea este mai mare. De exemplu, un server cu o valoare de greutate de două primește de două ori mai multe cereri decât un server cu o valoare de greutate de unu.
- Sesiune lipicioasă: Această abordare, cunoscută și sub numele de persistență de sesiune, conectează anumiți clienți și servere pe durata unei sesiuni. Pentru a stabili legătura, echilibratorul de încărcare folosește un cookie sau adresa IP a utilizatorului pentru a identifica un atribut de utilizator. Odată stabilită conexiunea, solicitările utilizatorului sunt direcționate către același server până la sfârșitul sesiunii. Acest lucru optimizează resursele de rețea, îmbunătățind și experiența utilizatorului.
- Cele mai puține conexiuni: Această strategie presupune că toate cererile au ca rezultat o sarcină egală a serverului. Ca rezultat, serverul cu cel mai mic număr de solicitări primește următoarea cerere.
- IP Hash: Acest algoritm generează o cheie hash unică bazată pe adresele IP sursă și destinație ale clientului și serverului. Cheia este folosită pentru a ruta cererea și permite reluarea unei conexiuni pierdute cu același server.
Hardware vs. Echilibratoare de încărcare software
Hardware Load Balancer
Hardware-ul fizic, cum ar fi un aparat, alcătuiește echilibratorii de încărcare hardware. Acestea direcționează traficul către servere în funcție de factori precum numărul de conexiuni existente, utilizarea procesorului și performanța serverului. Echilibratoarele de încărcare hardware au firmware proprietar care trebuie menținut și actualizat atunci când devin disponibile versiuni noi și remedieri de securitate.
Echilibratoarele de încărcare hardware oferă adesea performanțe și control mai ridicate, precum și o gamă mai largă de capabilități, cum ar fi autentificarea Kerberos și accelerarea hardware SSL, dar necesită un anumit nivel de expertiză în management și întreținere. Deoarece echilibratoarele de încărcare hardware sunt mai puțin flexibile și mai puțin scalabile decât echilibratoarele de încărcare software, există tendința de a supraproviziona echilibratoarele de încărcare hardware.
Software Load Balancer
Echilibratoarele de încărcare software sunt de obicei mai ușor de configurat decât omologii lor hardware. De asemenea, sunt mai rentabile și mai adaptabile și funcționează bine cu mediile de dezvoltare software. Metoda software vă permite să personalizați echilibratorul de încărcare la cerințele exacte ale mediului dumneavoastră. Flexibilitatea sporită poate veni în detrimentul timpului suplimentar petrecut pentru configurarea echilibratorului de sarcină.
Echilibratoarele software vă oferă o flexibilitate mai mare de a face modificări și actualizări decât cele hardware, care au o abordare mai închisă. Mașinile virtuale preambalate pot fi folosite ca echilibrare a încărcăturii software (VM). Mașinile virtuale vă vor economisi ceva timp de setare, dar este posibil să nu aibă toate funcționalitățile disponibile în omologii lor hardware.
Implementare simplă de echilibrare a sarcinii
Vom folosi biblioteca Spring Cloud pentru a construiți aplicații care se conectează la alte aplicații într-un mod echilibrat de încărcare. În timpul procesării cererilor de servicii de la distanță, putem construi cu ușurință echilibrarea sarcinii folosind orice tehnică ne place. Luați în considerare următorul cod ca exemplu. Vom începe cu o aplicație server de bază.
Serverul va avea un singur punct final HTTP și va fi operat în mai multe cazuri. Apoi vom construi o aplicație client care utilizează Load Balancer pentru a distribui solicitările pe mai multe instanțe de server.
server de
Începem cu un element de bază Cizmă de primăvară aplicație pentru serverul nostru exemplu:
Pentru început, injectăm o variabilă personalizabilă numită instance_ID. Acest lucru ne ajută să facem distincția între numeroasele instanțe care funcționează. După aceea, creăm un singur punct final HTTP GET care returnează un mesaj și un ID de instanță.
Instanța implicită cu ID 1 va funcționa pe portul 8080. Trebuie doar să adăugăm câțiva parametri de program pentru a lansa oa doua instanță:
Client
Să aruncăm o privire acum la codul clientului. Aici intervine Load Balancer, așa că să începem prin a-l încorpora în aplicația noastră:
După aceea, dezvoltăm o implementare a ServiceInstanceListSupplier. Aceasta este una dintre cele mai importante interfețe din Load Balancer. Specifică modul în care găsim instanțe de servicii accesibile.
Vom codifica două instanțe separate ale serverului nostru exemplu în aplicația noastră exemplu. Acestea rulează pe același sistem, dar folosesc porturi separate:
Creați o clasă LoadBalancerConfiguration acum:
Această clasă are un singur scop: creează un generator WebClient cu încărcare echilibrată pentru a face cereri de la distanță. Adnotarea noastră folosește un nume fictiv pentru serviciu.
Acest lucru se datorează faptului că, cel mai probabil, nu vom ști dinainte numele de gazdă și porturile exacte pentru rularea instanțelor. Ca rezultat, folosim un nume fictiv ca substituent, iar cadrul va înlocui informațiile reale atunci când selectează o instanță care rulează.
Apoi, să facem o clasă de configurare care va fi folosită pentru a instanția furnizarea de instanțe de serviciu. Rețineți că folosim același alias ca înainte:
Acum putem construi aplicația client real. Să trimitem 10 interogări către serverul de probă folosind bean-ul WebClient de mai devreme:
Putem vedea din rezultat că echilibrăm încărcarea între două instanțe separate:
Echilibrarea sarcinii în microservicii
Arhitectura de microservicii este folosită de mai multe companii, precum Netflix și Amazon, pentru a dezvolta aplicații de afaceri ca un set de servicii slab conectate. Hyperscale și livrare continuă pentru aplicații complicate este doar două dintre motivele pentru a trece la această arhitectură distribuită, slab conectată.
Echipele acestor întreprinderi au implementat strategii Agile și DevOps pentru a produce aplicații mai rapid și cu o rată de eșec mai mică decât metodele tradiționale. Cu toate acestea, trebuie să găsiți un echilibru între complexitatea arhitecturii distribuite și cerințele aplicației, cerințele de scalare și limitările de timp de lansare pe piață.
De atâția ani, controlorii de livrare a aplicațiilor (ADC) au fost esențiali pentru îndeplinirea cerințelor de nivel de serviciu pentru aplicațiile corporative găzduite on-premise sau în cloud. Un client care interacționează cu o aplicație bazată pe microservicii nu trebuie să știe despre instanțele care o furnizează pentru a crește clientul și microserviciile în mod independent.
Aceasta este tocmai decuplarea oferită de un proxy invers sau de un echilibrator de încărcare. Din nou, echilibrarea încărcăturii este soluția pentru a ne asigura că microserviciile pot face față cererii, securității și disponibilității.
Când combinați echilibrarea încărcării tradiționale Nord-Sud între aplicațiile bazate pe client și microservicii cu implementarea Est-Vest pentru scalabilitate orizontală, obțineți un impuls substanțial. Obiectivul este de a menține mediul sigur și reglementat cerut de IT fără a sacrifica agilitatea de dezvoltare sau Automatizare DevOps cerințe.
Beneficii
Echilibrarea încărcăturii oferă diverse beneficii prin îmbunătățirea utilizării resurselor, a livrării datelor și a timpului de răspuns pentru site-uri web și aplicații cu trafic ridicat, precum și pentru bazele de date care primesc un număr mare de interogări. Echilibrarea sarcinii asigură că solicitările utilizatorilor sunt îndeplinite rapid și corect în scenariile cu trafic ridicat.
Ele scutesc utilizatorii de agravarea de a se confrunta cu programe și resurse lente. Echilibrarea sarcinii ajută, de asemenea, la evitarea timpului de nefuncționare și la simplificarea securității, scăzând riscul pierderii productivității și a câștigurilor pentru compania dvs.
- Echilibrarea încărcăturii oferă flexibilitatea de a adăuga și elimina servere conform cererii, în plus față de gestionarea traficului la o eficiență optimă. Deoarece traficul este redirecționat către alte servere în timpul întreținerii, este, de asemenea, fezabil să se întreprindă întreținerea serverului fără a perturba utilizatorii.
- Echilibrarea sarcinii oferă redundanță încorporată prin împărțirea traficului între un set de servere. Puteți redirecționa imediat sarcina către alte servere dacă unul eșuează, minimizând impactul asupra utilizatorilor.
- În cazul în care utilizarea unei aplicații sau a unui site web crește, traficul crescut ar putea să-i degradeze performanța dacă nu este gestionat eficient. Cu echilibrarea sarcinii, puteți adăuga un server real sau virtual pentru a satisface cererea fără a întrerupe serviciul. Echilibratorul de încărcare identifică noi servere pe măsură ce intră online și le încorporează fără efort în operațiune. Această metodă este de preferat migrației unui site web de pe un server supraîncărcat la unul nou, ceea ce implică adesea o perioadă de nefuncționare.
Concluzie
Echilibrarea sarcinii este o componentă critică a sistemelor moderne, tolerante la erori. Putem construi pur și simplu aplicații care distribuie cereri către mai multe instanțe de servicii folosind diverse abordări de echilibrare a sarcinii. Companiile trebuie să suporte sisteme IT complicate pentru a furniza aplicații în siguranță.
Configurarea, implementarea și întreținerea microserviciilor pe mai multe domenii pot fi predispuse la erori, costisitoare și consumatoare de timp. IT ar trebui să utilizeze cele mai bune practici și tehnologii de automatizare, vizibilitate, analiză și orchestrare care sunt compatibile cu procesele lor agile și DevOps pentru a facilita configurarea și întreținerea acestor microservicii.
Lasă un comentariu