Vydání HTTP/TCP balanceru HAProxy 2.0

zveřejněno uvolnění vyvažovače zátěže HA Proxy 2.0, který umožňuje distribuovat HTTP provoz a libovolné TCP požadavky mezi skupinu serverů s přihlédnutím k mnoha faktorům (například kontroluje dostupnost serverů, posuzuje úroveň zatížení, má protiopatření DDoS) a provádí primární filtrování dat ( můžete například analyzovat hlavičky HTTP, filtrovat přenosové nesprávné parametry dotazu, blokovat substituci SQL a XSS, připojovat agenty zpracování obsahu). HAProxy může také aplikovat koordinovat interakci komponent v systémech založených na architektuře mikroslužeb. Kód projektu je napsán v jazyce C a dodáváno pod licencí GPLv2. Projekt se používá na mnoha velkých webech, včetně Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter a Vimeo.

Klíčové vlastnosti uvolnění:

  • Představeno nové API Datový tarif, který umožňuje spravovat nastavení HAProxy za běhu přes REST Web API. Včetně toho, že můžete dynamicky přidávat a odebírat backendy a servery, vytvářet ACL, měnit směrování požadavků, měnit vazby handlerů na IP;
  • Přidána direktiva nbthread, která umožňuje konfigurovat počet vláken používaných v HAProxy pro optimalizaci výkonu na vícejádrových CPU. Ve výchozím nastavení je počet pracovních vláken vybrán v závislosti na jádrech CPU dostupných v aktuálním prostředí a v cloudových prostředích je výchozím nastavením jedno vlákno. Pro nastavení pevných limitů byly přidány možnosti sestavení MAX_THREADS a MAX_PROCS, které omezují horní limit počtu vláken a procesů;
  • Použití direktivy bind pro obslužné rutiny vazby na síťové adresy bylo zjednodušeno. Při nastavování již není nutné definovat parametry procesu – ve výchozím nastavení budou spojení rozdělena mezi vlákna v závislosti na počtu aktivních spojení.
  • Nastavení protokolů při běhu v izolovaných kontejnerech bylo zjednodušeno – protokol lze nyní odeslat do stdout a stderr, stejně jako do jakéhokoli existujícího deskriptoru souboru (například „log fd@1 local0“);
  • Podpora HTX (Native HTTP Representation) je ve výchozím nastavení povolena, což umožňuje vyvážení při používání pokročilých funkcí, jako je end-to-end HTTP/2, Layer 7 Retries a gRPC. HTX nenahrazuje hlavičky na místě, ale redukuje operaci úpravy na odstranění a přidání nové hlavičky na konec seznamu, což vám umožní manipulovat s jakýmikoli rozšířenými variantami protokolu HTTP, zachová původní sémantiku hlaviček a umožní vám pro dosažení vyššího výkonu při překladu HTTP/2 na HTTP/1.1 a naopak;
  • Přidána oficiální podpora pro End-to-End režim HTTP/2 (zpracování všech fází v HTTP/2, včetně volání do backendu a nejen interakce mezi proxy a klientem);
  • Byla implementována plná podpora obousměrného proxy protokolu gRPC se schopností analyzovat toky gRPC, zvýrazňovat jednotlivé zprávy, odrážet provoz gRPC v protokolu a filtrovat zprávy pomocí ACL. gRPC vám umožňuje organizovat práci mikroslužeb v různých programovacích jazycích, které se vzájemně ovlivňují pomocí univerzálního API. Síťová komunikace v gRPC je implementována nad protokolem HTTP/2 a je založena na použití protokolových vyrovnávacích pamětí pro serializaci dat.
  • Přidána podpora pro režim „Layer 7 Retries“, který umožňuje odesílat opakované požadavky HTTP v případě selhání softwaru, které nesouvisejí s problémy při navazování síťového připojení (například pokud neexistuje žádná odpověď nebo prázdná odpověď na požadavek POST). Chcete-li režim zakázat, byl k volbě „http-request“ přidán příznak „disable-l7-retry“ a byla přidána možnost „retry-on“ pro jemné doladění v sekcích výchozí nastavení, poslech a backend. Pro opětovné odeslání jsou k dispozici následující znaky: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, stejně jako vazba na návratové stavové kódy (404 atd.) ;
  • Byl implementován nový správce procesů, který umožňuje konfigurovat volání externích spustitelných souborů s handlery pro HAProxy.
    Například rozhraní Data Plan API (/usr/sbin/dataplaneapi), stejně jako různé stroje pro zpracování Offload stream, jsou implementovány ve formě takového externího handleru;

  • Byly přidány vazby pro .NET Core, Go, Lua a Python pro vývoj rozšíření SPOE (Stream Processing Offload Engine) a SPOP (Stream Processing Offload Protocol). Dříve byl vývoj rozšíření podporován pouze v C;
  • Přidán externí obslužný program spoa-mirror (/usr/sbin/spoa-mirror) pro zrcadlení požadavků na samostatný server (například pro kopírování části produkčního provozu pro testování experimentálního prostředí při reálné zátěži);
  • Předložené HAProxy Kubernetes Ingress Controller zajistit integraci s platformou Kubernetes;
  • Přidána vestavěná podpora pro export statistik do monitorovacího systému Prometheus;
  • Protokol Peers, používaný k výměně informací s ostatními uzly provozujícími HAProxy, byl rozšířen. Včetně přidané podpory pro Heartbeat a šifrovaného přenosu dat;
  • Do direktivy „log“ byl přidán parametr „sample“, který umožňuje uložit do protokolu pouze část požadavků, například 1 z 10, a vytvořit tak analytický vzorek;
  • Přidán režim automatického profilování (direktiva profiling.tasks, která může nabývat hodnot auto, on a off). Automatické profilování je povoleno, pokud průměrná latence překročí 1000 ms. Pro zobrazení profilovacích dat byl do Runtime API přidán příkaz „show profileing“ nebo je možné resetovat statistiky do protokolu;
  • Přidána podpora pro přístup k backendovým serverům pomocí protokolu SOCKS4;
  • Přidána end-to-end podpora pro mechanismus pro rychlé otevírání TCP spojení (TFO - TCP Fast Open, RFC 7413), který umožňuje snížit počet kroků nastavení spojení spojením prvního do jednoho požadavku a druhého kroku klasický proces vyjednávání spojení ve 3 krocích a umožňuje odesílat data v počáteční fázi navazování spojení;
  • Přidány nové akce:
    • "http-request replace-uri" pro nahrazení URL pomocí regulárního výrazu;
    • „tcp-request content do-resolve“ a „http-request do-resolve“ pro vyřešení názvu hostitele;
    • „tcp-request content set-dst“ a „tcp-request content set-dst-port“ nahrazují cílovou IP adresu a port.
  • Přidány nové konverzní moduly:
    • aes_gcm_dev pro dešifrování toků pomocí algoritmů AES128-GCM, AES192-GCM a AES256-GCM;
    • protobuf pro extrahování polí ze zpráv Protocol Buffers;
    • ungrpc pro extrahování polí ze zpráv gRPC.

    Zdroj: opennet.ru

Přidat komentář