**Vyrovnávanie záťaže** (iné názvy: **vyrovnavánie zaťaženia**, **symetrizácia záťaže**; angl. Load balancing) je v sieťových riešeniach technika, ktorá rozmiestňuje záťaž medzi dvoma a viacerými počítačmi, sieťovými pripojeniami, procesormi, pevnými diskami alebo inými zdrojmi s cieľom dosiahnuť optimálne využitie zdrojov, maximalizovanie priepustnosti, minimalizovanie času odozvy a predídeniu preťaženia. Využívanie viacerých komponentov s load balancing namiesto jedného komponentu, môže zvýšiť spoľahlivosť pomocou redundancie. Servisa Load Balancing je zvyčajne zabezpečená dedikovaným hardvérovým zariadením (ako viacvrstvový switch alebo DNS server).

Internetové servisy
-------------------

Jedna z najbežnejších aplikácií load balancingu je poskytnúť jednu internetovú servisu z viacerých serverov, označované ako serverová farma. Populárne webové stránky, veľké IRC siete, širokopásmové FTP stránky, NNTP servery a DNS servery využívajú systém load balancing.

Pre internetové servisy, load balancing je zvyčajne program, ktorý počúva na porte, na ktorý sa pripojí externý klient. Následne prepošle na jeden z koncových serverov, ktorý zvyčajne odpovie load balanceru. Toto povoľuje odpovedať klientu bez toho aby vedel o delení záťaže. taktiež to predchádza, aby klienti priamo pristupovali na koncové servre, takže to má aj bezpečnostnú úlohu, tým že interná štruktúra je skrytá a predchádza útokom na sieťové jadro a spusteniu servís na iných portoch.
Niektoré load balancere poskytujú funkciu, ktorá vykoná určitú operácu ak všetky koncové servre sú nedostupné. Môže to zahrňovať preposielanie požiadavkov na záložný load balancer alebo zobrazovať poruchovú hlášku.

one.example.org 1.1.1.1
two.example.org 2.2.2.2
www.example.org NS one.example.org
www.example.org NS two.example.org

Alternatívna metóda load balancingu, ktorá zvyčajne nevyžaduje dedikovaný software alebo hardware, sa vola ROUND ROBIN DNS. Je to technika, viac IP adries sú priradené k jednému doménovému menu (napríklad www.example.org), klienty si sami určia, na ktorý server sa pripoja. Nevýhoda používania dedikovaného load balancera je, že zverejní klientom existenciu koncových serverov. Táto technika má aj iné výhody a nevýhody, záleží na stupni kontroly nad DNS serverom a žiadanej granulity load balancingu. Ďalšia z techník pre DNS používajúce Load balancing, ktorá je oveľa inteligentnejšia ako jedoduchý Round Robin, je delegovanie stránky www.example.org ako pod-doménu, ktorej zóny budú vybavované každým zo serverov, ktoré servisuju web stránku. Táto technika pracuje čiastočne dobre tam, kde jednotlivé servre sú rozmiestnené po internete.

Príklad:
Hoci súbor zón pre www.example.org na každom serveri bude rozdielny ako to, že každý server priradí svoju vlastnú IP adresu ako záznam A. na serveri "one" súbor zón na www.example.org nám povie:

@ in a 1.1.1.1

Na serveri "two" rovnaký súbor zóny nám vráti:

@ in a 2.2.2.2

Tým pádom, ak server je nedostupný, jeho DNS nebude odpovedať a web servisa nedostane žiadnu požiadavku. Taktiež ak sieť začne byť preťažená, nespoľahlivosť DNS spôsobí, že menej HTTP požiadaviek dosiahne server. Ďalej DNS odpoveď, ktorá sa vráti k požadovateľovi, bude takmer vždy najrýchlejšia zo servera v sieti, ktorá sa nachádza najbližšie k odosielateľovi – zabezpečuje geo-sensitive load balancing. Krátke TTL na záznam A takisto pomôže zaistiť, že prenos je presmerovaný v čo najkratšom čase, ak server vypadne.
Rôzne plánovacie algoritmy sú používané load balancermi, na určenie, ktorému koncovému serveru treba prideliť požiadavku. Jednoduché algoritmy zahŕňajú náhodný výber alebo roud robin. Zložitejšie zvažujú aj rôzne faktory ako sú: vyťaženosť servera, čas poslednej odpovede, upload/download status, počet aktívnych pripojení, geografická lokácia, možnosti servera alebo koľko prenosu bolo pridelené serveru za poslednú dobu. Vysoko výkonné systémy môžu využívať viaceré vrstvy load balancingu.
Okrem používania hardvérového riešenia na dosiahnutie load balancingu, je možné využiť aj softvérové, ktoré zahŕňa aj open source riešenia. Príklad zahŕňa aj doplnok mod\_proxy\_balancer pre Appache web server, Varnish, alebo Pround.
Vo viacvrstvovej architektúre, terminológia zahŕňa aj výrazy Bowties a Stovepipes. Stovpipes prezentuje situáciu, keď je transakcia, ktorá je odoslaná na najvyššiu vrstvu, ide po statickej ceste cez pole zariadení a softvéru za load balancerom, aby dosiahol svoj cieľ. Eventuélne, ak sú použité Bowties, na každej vrstve si transakcia môže zvoliť jednu z ciest, po tom ako ju aplikácie na jednotlivých vrstvách spracujú. Sieťové diagramy s tokom operácií sa podobajú na Stovepipes alebo Bowties alebo hybridným architektúram založené na presnej potrebe jednotlivých vrstiev.

Vytrvalosť
----------

Dôležitou otázkou ohľadom load balancingu je ako spravovať informácie, ktoré musia byť sprostredkované medzi viacerými dopytmi počas pripojenia určitého užívateľa. Ak sú tieto informácie uložené lokálne na koncovom serveri, potom nasledujúca požiadavka idúca na iný server, by nebola schopná tieto údaje nájsť a použiť. Mohli by tam byť uložené informácie, ktoré by sa museli nanovo prepočitať, ale to by mohlo viesť k problému výkonu load balancingu…

Jedno riešenie na úložisko dát je poslať všetky požiadavky počas relácie jedného užívateľa na rovnaký server. Je to známe ako vytrvalosť alebo súdržnosť. Slabá stránka tejto techniky sú techniky pri automatických výpadkoch. Ak koncový server má výpadok, tak informácie relácie sa stanú nedostupné. Rovnaký problém je zväčša relevantný pre centrálne databázové servery, aj keď webová servery sú "bez stavu" a nie "súdržné".
Priradenie k určitému serveru môže byť založené na užívateľskom mene, IP adrese klienta alebo náhodnom pridelení. Kvôli DHCP, prekladu sieťových adries a webových proxy, adresy klientov sa môžu počas jednej relácie zmeniť a služba sa stane nedostupnou. Náhodné pridelenia sa ukladajú na load balancingu, čo zvyšuje nároky na úložisko dát. Ak je load balancer nahradený alebo sa poškodí, informácie sa môžu stratiť a priradenia sa musia vymazať po uplynutí timeoutu alebo počas vysokej záťaže, aby sa predišlo presahnutiu miesta dostupného pre tabuľky priradenia. Metóda náhodného pridelenia taktiež vyžaduje aby klient udržiaval určitý stav, čo môže byť problém, napríklad, keď webový prehliadač zablokoval ukladanie cookies. Inteligentnejší load balancer využíva viaceré techniky udržiavania aby sa vyhol spomenutým chybám.
Iné riešenie is udržiavať dáta relácie v databáze. Vo všeobecnosti je to horšie na výkon, lebo to zvyšuje vyťaženosť databázy: databáza je najlepšie využívať pre krátkodobé dáta ako pre dáta relácií. Aby sme predišli tomu, že sa databáza stane single point of failure, a zvýšiť rozšíriteľnosť, databáza sa často replikuje medzi viacerými strojmi a load balancing je využitý na rozširovanie dopytov medzi replikátmi. Microsoftový produkt ASP.net State Server je ukážkou databázy pre relácie. Všetky servery vo web farme ukladajú dáta o relácii na State Serveri a každý zo serverov webovej farmy môže tieto dáta získať.

Našťastie existujú viac učinné prístupy. Najbežnejší prípad, keď klient je internetový prehliadač, dáta relácie môžu byť uložené priamo v prehliadači. jedna z techník je použitie cookies, využívajúce časovú známku a kódovanie. Ďalšou metódou je URL rewriting. Ukladanie dát o relácii v kliente je vo všeobecnosti preferované riešenie: potom load balancer môže jednoducho rozhodnúť, ktorý koncový server vybere na vykonanie požiadavky. Hoci táto metóda nie je úplne vhodné pre niektoré komplexné biznis riešenia, pri ktorých vyťažnie dát relácií je príliš veľké alebo prepočítavanie každej požiadavky na serveri je realizovateľný a URL rewriting nie je dovolené z hľadiska bezpečnosti, lebo užívateľ môže jednoducho upraviť zadávanú URL, čo zmení dáta reláacii.

Funkcie Load balanceru
----------------------

* Hardvérový a softvérovy load balancere môžu obsahovať množstvo rôznych vlastností a funkcií.
* asymmetric load: hodnota, ktorá môže byť manuálne pridelená, urcitému serveru sa prideluje väčšia alebo menšia časť požiadaviek. Využíva sa to v prípade, keď niektoré servre majú výšší/nižší výkon ako ostatné.
* priority activation: keď počet dostupných serverov spadne pod určitú hranicu alebo záťaž vystúpi na určitú hodnotu, vypnuté servre sa zapnú.
* SSL offload and Accelaration: SSL aplikácie môžu vytvoriť vysokú záťaž na zdroje web servera, špeciálne na CPU a koncový užívateľ môžu postrehnúť pomalé odozvy. Na vyriešenie tohto problému v špecializovanom hardvéri môže byť použitý Load balancer s možnosťou SSL offloading. Keď load balancer pracuje s SSL pripojením, nosnosť záťaže web servera sa zníži a teda výkon pre koncového užívateľa sa nezníži.
* ochrana pred útokom Distributed Denial of Service (DDoS): load balancer poskytuje funkciu ako SYN cookies a delayed binding (koncový server nevidí klient až kým nie je ukončené nadväzovanie spojenia) na zníženie možnosti útoku SYN flood.
* HTTP kompresia: redukuje množstvo dát prenášaných HTTP objektom využtím gzip kompresie prístupnej vo všetkých moderných prehliadačoch
* TCP offload: rôzny výrobcovia používajú rôzne mená pre toto, ale idea je, že každá HTTP požiadavka od každého klienta je rôzne tcp pripojenie. Táto funkcia využíva HTTP/1.1 na spojenie viacerých HTTP požiadaviek od viacerých klientov to jediného TCP soketu pre koncový server.
* TCP buffering: load balancer môže načítať odpovede zo servera and postupne ich poskytovať "pomalému" klientu, pričom umožní serveru prejsť k ďalšej úlohe.
* Direct Server Return: možnosť asimetrického rozdelovania záťaže, kde požiadavka a odpoveď majú rozdielnu sieťovú cestu.
* health checking: load balancer zoraďuje servery podľa zdravia aplikačnej vrstvy a poškodené vyradí.
* HTTP caching: load balancer môže ukladať statický obsah, a teda niektoré požiadavky môžu byť vybavené bez kontaktovania web servera.
* Content filtering: niektoré load balancere sú schopné si ľubovoľne upravovať prenos na ceste.
* HTTP security: niektoré load balancere môžu ukryť chybovú hlášku HTTP, odstránia hlavičku s identifikáciou servera z HTTP odpovede a zašifrovať cookies tak, že koncový užívateľ nemôže nimi manipulovať.
* Priority queuing: taktiež známe ako rate shaping, schopnosť prideliť rôznu prioritu rôznym prenosom.
* Content aware switching: väčšina load balancerov môžu poslať požiadavky rôznym serverom vzhľadom na požadovanú URL.
* Client authentication: zaručiť užívateľom proti rôznym zdrojom autentifikovania pred udelením prístupu na webovú stránku.
* Programatic traffic manipulation: minimálne jeden load balancer povoľuje použitie skriptovacieho jazyka, aby povolil voliteľné metódy load balancingu, ľubovoľnú manipuláciu prenosov a i.
* Firewall: priame spojenia na koncový server sú zabránené z bezpečnostných dôvodov.
* Intrusion Preventing System: k sieťovej/prenosovej vrstve chránenej firewallom ponúka navyše bezpečnosť aplikačnej vrstvy.

V telekomunikáciách
-------------------

Load balancing môže byť užitočný pri spravovaní redundantných komunikačných liniek. Napríklad spoločnosť môže mať viacero internetových pripojení zabezpečujúcich prístup na internet v prípade, že jedno z nich sa preruší.
Výpadkový zriadenie znamená, že jedna linka je určená pre normálne využívanie, zatial čo druhá je používaná iba v prípade poruchy prvej.
S Load balancingom môžu byť obe linky používané súčasne. Zariadenie alebo program rozhoduje, ktorá linka je dostupná na posielanie paketov a nepošle pakety linkou, ktorá má výpadok. Táto možnosť využívania viacerých liniek súčasne zvyšuje dostupnú šírku pásma.
Hlavné telekomunikačné spoločnosti majú viaceré cesty v ich sieťovaní alebo do externých sietí. Využívajú omnoho sofistikovanejší load balancing to prepnutie z jednej cesty do druhej, aby sa vyhli preťaženiu siete jednotlivých liniek a niekedy minimalizuje cenu prenosu medzi sieťami alebo zvyšuje spoľahlivosť siete.
Iný spôsob využívania load balancingu je na monitorovanie sieťových pripojení. Load balancer môže byť použitý na rozdelenie obrovských dátových tokov do niekoľkých menších tokov a použiť niekoľko sieťových analyzérov. Je to veľmi užitočné pri monitorovaní rýchlych sietí ako 10GbE alebo STM64.

Vzťah s failover
----------------

Load balancing je často použitý na implementovanie failover – prolongácia servisy po chybe jedného alebo viacerých jej komponentov. Komponenty sú neustále monitorované a ak prestanú odpovedať, load balancer je informovaný a prestane im posielať požiadavky. Hneď ako začne server opäť odpovedať, Load balancer ich zaradí naspäť do zoznamu a preposiela požiadavky. Aby toto fungovalo, musí byť minimálne jeden komponent presahujúci kapacitu servisy. toto je oveľa menej drahé a viac flexibilné riešenie ako failover postupy kde jediný "živý" komponent je spárovaný s jediným "backup" komponentom, ktoré nahradí v prípade, že prvý komponent vypadne. Niektoré tymy RAID systému umožňuje taktiež využit hot spare pre podobné účely.

Referencie
----------

1. 1 2 3  Výkladový terminologický slovník elektronických komunikácií - 2017 (anglicko-slovenský a slovensko-anglický).
ISBN 978-80-89906-01-7.