Load Balancer
Úvod
Load Balancer je prvkem architektury K2, který lze využít pro rozdělení zátěže mezi více aplikačních serverů. K2 API má tak možnost připojení na více aplikačních serverů současně. Při zasílání požadavku se nejdříve vyhodnotí nejméně vytížený server a ten dostane požadavek ke zpracování.
Obr.: Load Balancer a K2 API
Příklad použití Load Balancer a K2 API:
K2 API přijme požadavek ke zpracování. Pro nejrychlejší zpracování požadavku je osloven Load Balancer. Load Balancer odešle požadavek na všechny AS a zjistí jejich současnou vytíženost. Vyhodnotí nejméně vytížený server a tuto informaci předá K2 API. K2 API tak pošle požadavek rovnou přes vybraný aplikační server Load Balancerem.
LoadBalancer lze také využít pro webovou K2, která při přihlášení uživatele najde nejvhodnější aplikační server a na něj uživatele připojí.
Obr.: Load Balancer a Webová K2
Příklad použití Load Balancer a webová K2:
Webová K2 přijme požadavek na přihlášení uživatele. Aby byl požadavek co nejrychleji zpracován, osloví webová K2 Load Balancer. Ten odešle požadavek na všechny AS a zjistí jejich současnou vytíženost. Informaci o nejméně vytíženém serveru předá webové K2. Webová K2 nejlépe vyhodnocený server využije a dojde tak k nejrychlejšímu zpracování požadavku na přihlášení uživatele. Každý další požadavek daného uživatele už zpracovává konkrétní zvolený AS.
Každá instalace K2 API a webové K2 má vlastní Load Balancer. V instalaci lze tak nastavit konkrétní seznam aplikačních serverů i konfiguraci Load Balanceru, kterou můžeme ovlivnit algoritmus výběru vhodného aplikačního serveru.
Load Balancer vyhodnocuje nejvhodnější aplikační server pro zpracování požadavku ve dvou režimech:
- Načtení a vyhodnocení nejlepšího AS před každým požadavkem na spojení (preLoadingEnabled=false)
- Před každým požadavkem na vytvoření connection se obešlou aplikační servery s požadavkem na jejich statistiky, ty se zpracují a vyhodnotí. Pro daný požadavek se poté použije nejvhodnější AS.
- Načtení a vyhodnocení nejlepšího AS průběžně (preLoadingEnabled=true)
- V určeném časovém intervalu se načítají statistiky a vyhodnocuje se nejlepší AS. Každý požadavek na connection se vyhodnotí na základě předpočítaného výsledku statistik.
Parametry Load Balanceru
- requestTimeout:(default 1s) - čas, ve kterém musí AS poslat své statistiky. Pokud se do tohoto času nepodaří s AS navázat spojení, nebo AS do tohoto času neodpoví, AS se pro toto konkrétní vyhodnocení vypustí. Při dalším požadavku se opět zařadí do seznamu možných aplikačních serverů.
- validTimeout: (default 0 u preLoadingEnabled=false, 1000- preLoadingEnabled=true) - čas, po který jsou zjištěné statistiky a tím i nejlepší AS platné.
- maxHistoryCount:(default 0) - počet záznamů v historii. Pokud je počet 0, historie se nezaznamenává. Používá se pouze pro ladění optimálního nastavení parametrů, kdy můžeme nahlédnout do historie rozdělení requestů a na základě toho parametry upravovat.
- preLoadingEnabled:(default false) - zapnutí/vypnutí režimu s průběžným načítáním statistik. Pokud je nastaveno na true, pak validTimeout znamená časový interval, ve kterém se aktualizují statistiky.
- sekce appServers definuje aplikační servery, které budou Load Balancerem využívány. Defaultní je ten, který je použitý v konfiuguraci K2 API/Web K2
- Př. pro K2 API (Webová K2 je obdobná jen se konfigurace provádí v JSON) "<add server="." pipe="ScriptService"/>"
- server: IP nebo jméno PC
- pipe: jméno pipe AS
- sekce multiplier slouží k nastavení váhy jednotlivým statistikám a tím k ovlivnění algoritmu výpočtu
- Př. pro K2 API (Webová K2 je obdobná jen se konfigurace provádí v JSON) "<add uid="bscSystemCPUAvg" value="1"/>"
- uid: identifikátor statistiky
bscSystemCPUAvg - průměrné využití CPU za sledovaný čas
bscSystemFreeMemory - aktuální volná paměť systému
bscAppPoolSpandAvg - průměrná doba čekání požadavku na K2 AS, než je obsloužen
bscAppNCLSessions - počet připojených uživatelů webové K2
bscAppAnonymousSessions - počet anonymních vláken pro K2 API
bscAppSchedulerSessions - počet běžících plánovaných úloh
- value: hodnota, kterou se bude násobit přijatá hodnota statistiky z AS. Tím je možné ovlivnit váhu daného parametru.
Hodnota 0 vypne vyhodnocení tohoto parametru při výpočtu.
Pokud se v kterémkoliv režimu nespojí Load Balancer s AS v požadovaném časovém intervalu, nebo AS v zadaném čase nedodá statistiky, je pro daný průchod AS z vyhodnocení vyřazen. V dalším průchodu se Load Balancer opět bude pokoušet s daným AS spojit.