Vydání HTTP/TCP vyrovnávače zátěže HAProxy 2.0

Byl zveřejněn vydání load balanceru HAProxy 2.0, který umožňuje distribuovat HTTP provoz a libovolné TCP požadavky mezi skupinou serverů, bere v úvahu řadu faktorů (například kontroluje dostupnost serverů, hodnotí úroveň zátěže, má prostředky proti DDoS) a provádí primární filtraci dat (například je možné analyzovat HTTP hlavičky, filtrovat předávání nesprávných parametrů požadavku, blokovat SQL injection a XSS, zapojovat agenty pro zpracování obsahu). HAProxy také může být aplikovány pro koordinaci interakce komponent v systémech založených na mikroservisní architektuře. Kód projektu je napsán v jazyce C a dodává se je licencován pod 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 vydání:

  • Představené nové API Data Plan, které umožňuje spravovat nastavení HAProxy za běhu prostřednictvím REST Web API. Mezi jiným lze dynamicky přidávat a odstraňovat backendy a servery, vytvářet ACL, měnit směrování požadavků, měnit vazby zpracovatelů na IP;
  • Byla přidána direktiva nbthread, která umožňuje nastavit počet vláken používaných v HAProxy pro optimalizaci provozu na vícejádrových CPU. Ve výchozím nastavení se počet pracovních vláken vybírá podle dostupných jader CPU v aktuálním prostředí, a v cloudových prostředích se ve výchozím nastavení nastavuje jedno vlákno. Pro stanovení přísných limitů byly přidány možnosti sestavení MAX_THREADS a MAX_PROCS, které omezují horní mez pro počet vláken a procesů;
  • Bylo zjednodušeno používání direktivy bind pro připojení zpracovatelů k síťovým adresám. Při konfiguraci už není povinné definovat parametry procesu — ve výchozím nastavení budou spojení rozdělena mezi vlákna podle počtu aktivních spojení.
  • Byla zjednodušena konfigurace logů při spuštění v izolovaných kontejnerech — log nyní lze směrovat do stdout a stderr, a také do jakéhokoli existujícího souborového deskriptoru (například „log fd@1 local0“);
  • Ve výchozím nastavení je aktivována podpora HTX (Native HTTP Representation), která zajišťuje vyvažování při využívání rozšířených funkcí, jako jsou end-to-end HTTP/2, Layer 7 Retries a gRPC. HTX nenahrazuje hlavičky na místě, ale provádí operaci úpravy tím, že odstraňuje a přidává novou hlavičku na konec seznamu, což umožňuje manipulaci s jakýmikoli rozšířenými variantami protokolu HTTP, přičemž zachovává původní sémantiku hlaviček a umožňuje dosáhnout vyšší výkonnosti při překladu HTTP/2 na HTTP/1.1 a naopak;
  • Byla přidána oficiální podpora režimu End-to-End HTTP/2 (zpracování všech fází v HTTP/2, včetně volání na backend, a nikoli pouze interakce proxy s klientem);
  • Byla implementována kompletní podpora obousměrného proxy protokolu gRPC s možností analýzy gRPC toků, zviditelňující jednotlivé zprávy, odrážející gRPC provoz v logu a filtrující zprávy pomocí ACL. gRPC umožňuje organizaci mikroservisů v různých programovacích jazycích, které spolu komunikují prostřednictvím univerzálního API. Síťová interakce v gRPC je realizována nad protokolem HTTP/2 a je založena na použití Protocol Buffers pro serializaci dat.
  • Byla přidána podpora režimu „Layer 7 Retries“, který umožňuje odesílat opětovné HTTP požadavky v případě softwarových závad, které nejsou spojeny s problémy nastavování síťového připojení (např. při absenci odpovědi nebo prázdné odpovědi na POST požadavek). Pro vypnutí režimu byl do možnosti „http-request“ přidán příznak „disable-l7-retry“ a pro jemné nastavení se v sekcích defaults, listen a backend objevila možnost „retry-on“. Jsou dostupné následující znaky pro opětovné odeslání: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, a také vazba na vracené kódy stavu (404 atd.);
  • Byl realizován nový správce procesů (Process Manager), který umožňuje nastavit volání externích spustitelných souborů s obslužnými programy pro HAProxy.
    Například ve formě takového externího obslužného programu byl realizován API Data Plan (/usr/sbin/dataplaneapi), stejně jako různé enginy pro zpracování toků Offload;
  • Pro .NET Core, Go, Lua a Python byly přidány vazby pro vývoj rozšíření SPOE (Stream Processing Offload Engine) a SPOP (Stream Processing Offload Protocol). Dříve byla podpora vývoje rozšíření k dispozici pouze pro C;
  • Byl přidán externí zpracovatel spoa-mirror (/usr/sbin/spoa-mirror) pro zrcadlení požadavků na samostatný server (například pro kopírování části pracovního provozu pro testování experimentálního prostředí s reálným zatížením);
  • Představení HAProxy Kubernetes Ingress Controller pro zajištění integrace s platformou Kubernetes;
  • Byla přidána vestavěná podpora exportu statistik do monitorovacího systému Prometheus;
  • Byl rozšířen protokol Peers Protocol, používaný pro výměnu informací s jinými uzly s HAProxy. Byla přidána podpora Heartbeat a šifrovaného přenosu dat;
  • Do direktivy „log“ byl přidán parametr „sample“, který umožňuje zapisovat do logu pouze část požadavků, například 1 z 10, pro vytvoření analytického vzorku;
  • Byl přidán režim automatického profilování (direktiva profiling.tasks, která může mít hodnoty auto, on a off). Automatické profilování se aktivuje v případě, že průměrná doba latence přesáhne hranici 1000 ms. Pro zobrazení dat profilování byla do Runtime API přidána příkaz „show profiling“ nebo je možné vyprázdnit statistiky do logu;
  • Byla přidána podpora pro přístup k backendovým serverům pomocí protokolu SOCKS4;
  • Byla přidána koncová (end-to-end) podpora mechanismu rychlého otevírání TCP připojení (TFO — TCP Fast Open, RFC 7413), který umožňuje zkrátit počet kroků při navazování připojení tím, že spojuje první a druhý krok klasického 3-krokového procesu do jednoho požadavku a umožňuje odesílání dat v počáteční fázi navazování připojení;
  • Byly přidány nové akce:
    • „http-request replace-uri“ pro výměnu URL pomocí regulárního výrazu;
    • „tcp-request content do-resolve“ a „http-request do-resolve“ pro rozlišení hostitelského jména;
    • „tcp-request content set-dst“ a „tcp-request content set-dst-port“ pro vložení cílové IP adresy a portu.
  • Byly 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 extrakci polí z zpráv Protocol Buffers;
    • ungrpc pro extrakci polí z zpráv gRPC.

    Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster