Locked History Actions

Load Balancer

Įvadas

Susipažinsime su apkrovos balanseriu (load balancer), išnagrinėsime jo bendra architektūrą, sužinosime kaip yra skirstomas užklausų srautas, kokie yra tokios technologijos privalumai ir su kokiomis problemomis apkrovos balanseris gali susidurti.

Aprašymas

Apkrovos balansavimas (load balancing) – programiniame lygyje tai yra procesas efektyviai skirstantis ateinantį užklausų srautą per keletą aplikacijos serverių.

Modernios aplikacijos, kuriomis naudojasi dešimtys tūkstančių vartotojų, naudoja apkrovos balansavimą, kad užtikrintu aplikacijos greitį ir patikimumą. Tokia programinė technologija sutaupo laiko ir pinigų, kai yra atliekami aplikacijos architektūriniai sprendimai. Kaip alternatyva yra fizinis apkrovos balansavimo aparatas, kurį gamina tam tikri tiekėjai ir tokie aparatai turi tiekėjo specifinę programinę įrangą. Tokie įrenginiai yra brangus ir sudėtingi. Todėl aplikacijos kūrimui toks sprendimas yra dažnai atmetamas.

1pav.jpg

  • Pav. 1: "Load balancer" diagrama

Viršuje pateikta diagrama rodo apkrovos balanserio bendrą veikimo principą. Vartotojai naudodamiesi aplikacija internetu siunčia užklausas apkrovos balanserio, kuris toliau šias užklausas nukreipia į mažiausiai apkrautą serverį. Tokia architektūra leidžia efektyviai paskirstyti kliento užklausas arba tinklo apkrovą keliuose serveriuose, užtikrina aukštą prieinamumą ir patikimumą, siunčiant užklausas tik į veikiančius serverius, suteikia lankstumą pridėti arba atimti serverius, kai to reikalauja poreikis.

Taip pat reikia atkreipti dėmesį, kad nebeveikiant vienam serveriui pati aplikacija toliau gali veikti, nes vis dar yra kitų serverių galičių priimti užklausas. Aplikacija nebeveikia tik tada kai apkrovos balanseris nebeveikia.

Užklausų srauto skirtymas ir reguliavimas yra atliekamas pasitelkiant darbų planavimo (scheduling) algoritmais tokiais kaip:

„Round Robin“ – Ateinančios užklausos yra skirtomos nuosekliai per visą serverių grupę. Apačioje esanti iliustracija yra „Round Robin“ algoritmo pavyzdys.

2pav.jpg

  • Pav. 2 Round Robin

„Least Connections“ – užklausa yra siunčiama tam serveriui, kuris turi mažiausiai aktyvių prisijungimų iš vartotojų. Siekiant nustatyti, kuris iš jų turi mažiausiai ryšių, atsižvelgiama į santykinį kiekvieno serverio skaičiavimo pajėgumą.

3pav.jpg

  • Pav. 3 Least Connections

„Least Time“ - Siunčia užklausas į serverį, pasirinktą pagal formulę, sujungiančią

greičiausias atsakymo laikas ir mažiausiai aktyvių ryšių.

4pav.jpg

  • Pav. 4: Least Time

„Hash“ - Paskirsto užklausas pagal jūsų nustatytą raktą, pvz., Kliento IP adresą arba užklausos URL.

5pav.jpg

  • Pav. 5: Hash

„IP Hash“ - Kliento IP adresas naudojamas nustatyti, kuris serveris gauna užklausą.

Skirtingi apkrovos balansavimo algoritmai teikia skirtingą naudą. Apkrovos balansavimo metodo pasirinkimas priklauso nuo jūsų poreikių.

Vienas iš iššūkių su kuriais susiduria apkrovos balanseris yra sesijos išlaikymas tarp kliento ir serverio (Session Persistence). Informacija apie vartotojo seansą dažnai saugoma naršyklėje. Pavyzdžiui, pirkinių krepšelio programoje vartotojo krepšelyje esančios prekės gali būti saugomos naršyklės lygiu, kol vartotojas bus pasirengęs jas įsigyti. Sesijos viduryje pakeitus, kuris serveris gauna užklausas iš to kliento, gali kilti našumo problemų arba tiesioginės operacijos gedimo. Tokiais atvejais labai svarbu, kad visos kliento užklausos seanso metu būtų siunčiamos tam pačiam serveriui.

Išvados

Apkrovos balanseris yra svarbi technologija ir turi tokius privalumus kaip: sumažinta prastova (downtime), lankstus ir dinamiškas serverių valdymas, išsprendžiama dubliavimo problema, užtikrinamas greitis, pastovumas ir patikimumas. Tokia technologija yra reikalinga šiuolaikinėm aplikacijom tiek didelėm, tiek mažom, nes užklausų kiekis yra nenuspėjama problema.

Literatūra

Pav. 1: "Load balancer" diagrama (2020-12-6 23.12)

Pav. 2 Round Robin (2020-12-6 23.12)

Pav. 3 Least Connections (2020-12-6 23.12)

Pav. 4: Least Time (2020-12-6 23.12)