HAProxy je nástroj, který umožňuje směrovat požadavky na dostupné servery podle různých pravidel. Podporuje TCP i HTTP protokoly. Je open-source, existuje k němu i placená verze a stará se o něj společnost HAProxy Technologies.
Nejčastější použití je nasazení jako front-end load balancer. Ten je obvykle dostupný z veřejné sítě a požadavky od klientů přeposílá backend serverům, které je vyřizují.
Když vyšla před dvěma roky LTS verze HAProxy 1.8, největší novinkou byla podpora Hitless Reloads podpora HTTP/2, možnost backend discovery a dostupnost nového Runtime API pro zjišťování a změnu konfigurace. Využitelnost HAProxy v prostředí, kde používáme dynamické backendy, tím výrazně vzrostla.
Tento týden vyšla nová verze 2.0. Co se změnilo od verze 1.8?
Část změn už byla představena ve verzi 1.9. V té bylo kompletně přepracováno zpracování HTTP protokolu novou implementací HTX. Tím se vývojářům uvolnily ruce k pohodlnější implementaci HTTP/2. Ve verzi 1.9 bylo HTX standardně vypnuté a zapínalo se pomocí volby option http-use-htx
. Ve verzi 2.0 je už zapnutá.
Protože máme k dispozici HTX, je tedy možné používat HTTP/2 spojení jak směrem ke klientům, tak směrem k backend serverům.
Při implementaci HTTP/2 přibyly i nové extraktory (converters) pro podporu gRPC,protobuf
a ungrpc
, které umožňují připravovat pravidla podle parametrů z gRPC API.
Na aplikační úrovni přibyla možnost L7 retries, v případě nefunkčnosti jednoho backend serveru teď HAProxu umí požadavek zkusit poslat znovu na jiný backend server. Co přesně znamená „nefunkčnost“ je možné nastavit pomocí klíčového slova retry-on
.
V dnešním prostředí, kde backend servery mizí a zase se objevují, můžeme chtít měnit konfiguraci load balanceru velmi rychle. HAProxy k tomuto účelu poskytuje nové Data Plane API. Data Plane API je řešeno samostatným procesem, který přijímá REST požadavky od uživatele a upravuje podle toho konfiguraci HAProxy. Změny je možné zadávat i v jednoduchých transakcích, takže můžeme provést několik změn konfigurace najednou.
Protože některé části démona běží jako samostatné vedlejší procesy (v originále sidecar process), byl do HAProxy přidán Process Manager. Při startu HAProxy teď hlavní proces umí spustit i další procesy – třeba právě Data Plane API démona.
V HAProxy 1.7 přibyl nástroj SPOE (Stream Processing Offload Engine), který nabízí možnost zpracovávat provoz pomocí externích programů. Bylo tak možné psát rozšiřující nástroje pro HAProxy nejenom v zabudovaném Lua. S verzí HAProxy 2.0 se přišly SPOE knihovny i pro další programovací jazyky – v současné době to je C, .NET, Go, Lua a Python.
Jako SPOE je implementován například mirror daemon, který jak název napovídá, umožňuje udělat kopii příchozího provozu a poslat ji na druhý server. To může být velmi výhodné například pro ladění.
V únoru 2017 vznikl nezávislý Kubernetes Ingress Controller implementovaný pomocí HAProxy. HAProxy Technologies k němu postupně poskytovala nové funkce. Pro HAProxy 2.0 nakonec vznikl nový K8S Ingress controller podporovaný přímo HAProxy Technologies.
Při běhu v dynamickém prostředí je zvykem aplikace monitorovat, často nástrojem Prometheus. Ve starších verzích HAProxy se pro export metrik používal samostatný haproxy_exporer, který sbíral metriky pomocí Stats Page. Ve verzi 2.0 je možné HAProxy zkompilovat s integrovaným exporterem, který sbírá metriky přímo z běžícího programu.
Další vylepšení sice nejsou menší, ale nejsou z venku tolik vidět. Patří sem například:
- vylepšení Peers Protocol. Ten se používá pro synchronizací více instancí HAProxy clusteru.
- vylepšení balancingu. Byl přidán nový algoritmus Power of Two, který by měl pro spravedlivěji rozdělovat požadavky na backend servery.
- přidání log sampling. Je možné logovat pouze každý n-tý požadavek na server.
- přidání auto profilingu. Parametrem
profiling.task auto
je možné zapnout CPU Profiling automaticky jenom v případě, že se HAProxy cítí přetížený. Příkazemshow profiling
pak můžeme zjistit detaily i využití jednotlivých částí HAProxy. - TCP Fast Open. Klientům je možné vracet odpovědi už při navazování TCP spojení.
- konfigurační jazyk HAProxy byl rozšířen o další akce, konvertery a fetches (sběrače?).
Velmi zajímavě vypadají i funkce připravované pro následující verzi HAProxy 2.1. Můžeme se těšit na podporu UDP, podporu OpenTracing a dynamické aktualizace TLS certifikátů. Nové verze by měly vycházet jednou za dva roky místo jednou za rok.