Luboš Račanský
10.6.2013

Load balancer – co vás možná nenapadlo



load balancer

Spíš dříve než později se při vývoji webových aplikací dostanete k tomu, že z nich budete potřebovat vyždímat větší výkon, vystavit je větší zátěži. Jedním ze způsobů je horizontální škálování, kdy přidáte paralelně další servery, před které postavíte load balancer. Nejčastěji budete chtít, aby uživatel byl odbavován pokud možno v rámci jednoho nodu, od toho je známě řešení sticky session. Chtěl bych vás upozornit na drobnosti, které mě osobně hned nenapadly. Jedná se o SSO, access log a identifikace uzlů.

3xx

Load balancer si nějak musí zjišťovat, které nody jsou tzv. živé, na které může uživatele poslat. Třeba tak, že na request na index očekává response s http status kódem 200. Ovšem používáte-li nějaký single sign-on server (SSO), jako například Jasig CAS, tak v případě, kdy nejste přihlášení, obdržíte kód 3xx (přesměrování na login). Přepnete tedy algoritmus sledování uzlů na kontrolu TCP spojení. Nicméně pak se vám bude i uzel vracející http status kód 500 jevit jako provozuschopný. Přepsat pravidlo kontroly tak, aby i kód 3xx byl považován za funkční nod, nemusí být u každého load balanceru triviální. Pak můžete vystavit testovací status stránku, na kterou není navěšené security. Nejlépe, pokud tato stránka provolá všechny backedové systémy, což index ne vždy dělá.

Access log

Po krátkém zamyšlení to nepřekvapí, ale v access logu budete mít stále stejnou IP adresu a to právě tu load balanceru. Řešením je http hlavička X-Forwarded-For. Konkrétně to na Tomcatu vyřešíte následující konfigurací server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-Forwarded-For}i %l %u %t "%r" %s %b" resolveHosts="false" />

 
Identifikace uzlů

Při testování nebo ověřování chyby potřebujete vědět, na jaký uzel vás load balancer poslal. Vhodné je uvádět identifikaci uzlu do patičky třeba vedle verze, běžným uživatelům ovšem skrýt. Na produkci zobrazovat adminům a na testovacím prostředí všem.

V případě chyby se nám osvědčilo vygenerovat její jednoznačný identifikátor (z timestamp a označení uzlu, něco jako 123-456-789-A), který zobrazíme uživateli a samozřejmě zalogujeme. Značně vám to zjednoduší podporu.

Je něco, co překvapilo při používání load balancerů vás?

Vaše emailová adresa nebude zveřejněna

Komentáře

Děkujeme za váš komentář
Další