Vydanie vyrovnávacieho nástroja HTTP/TCP HAProxy 2.0

publikovaný uvoľnenie vyrovnávača zaťaženia HA Proxy 2.0, ktorý vám umožňuje distribuovať HTTP prevádzku a ľubovoľné TCP požiadavky medzi skupinu serverov, pričom zohľadňuje mnoho faktorov (napríklad kontroluje dostupnosť serverov, hodnotí úroveň zaťaženia, má protiopatrenia DDoS) a vykonáva primárne filtrovanie dát ( môžete napríklad analyzovať hlavičky HTTP, filtrovať nesprávne parametre dotazu pri prenose, blokovať nahradenie SQL a XSS, pripojiť agentov na spracovanie obsahu). HAProxy môže tiež uplatniť koordinovať interakciu komponentov v systémoch založených na architektúre mikroslužieb. Kód projektu je napísaný v jazyku C a dodávané pod licenciou GPLv2. Projekt sa používa na mnohých veľkých stránkach vrátane Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter a Vimeo.

Kľúčové vlastnosti vydania:

  • Zavedené nové API Dátový plán, ktorý vám umožňuje spravovať nastavenia HAProxy za behu cez REST Web API. Vrátane toho, že môžete dynamicky pridávať a odstraňovať backendy a servery, vytvárať ACL, meniť smerovanie požiadaviek, meniť väzby obsluhy na IP;
  • Pridaná direktíva nbthread, ktorá umožňuje konfigurovať počet vlákien používaných v HAProxy na optimalizáciu výkonu na viacjadrových CPU. V predvolenom nastavení sa počet pracovných vlákien vyberá v závislosti od jadier CPU dostupných v aktuálnom prostredí a v cloudových prostrediach je predvolene jedno vlákno. Na nastavenie pevných limitov boli pridané možnosti zostavy MAX_THREADS a MAX_PROCS, ktoré obmedzujú horný limit počtu vlákien a procesov;
  • Použitie príkazu bind pre obslužné programy viazania na sieťové adresy bolo zjednodušené. Pri nastavovaní už nie je potrebné definovať parametre procesu – štandardne sa spojenia rozdelia medzi vlákna v závislosti od počtu aktívnych spojení.
  • Nastavenie protokolov pri spustení v izolovaných kontajneroch bolo zjednodušené – protokol je teraz možné odoslať do stdout a stderr, ako aj do akéhokoľvek existujúceho deskriptora súboru (napríklad „log fd@1 local0“);
  • Podpora pre HTX (Native HTTP Representation) je predvolene povolená, čo umožňuje vyváženie pri používaní pokročilých funkcií, ako sú end-to-end HTTP/2, Layer 7 Retries a gRPC. HTX nenahrádza hlavičky na mieste, ale redukuje operáciu úpravy na odstránenie a pridanie novej hlavičky na koniec zoznamu, čo vám umožňuje manipulovať s akýmikoľvek rozšírenými variantmi protokolu HTTP, pričom zachováva pôvodnú sémantiku hlavičiek a umožňuje vám dosiahnuť vyšší výkon pri preklade HTTP/2 na HTTP/1.1 a naopak;
  • Pridaná oficiálna podpora pre End-to-End režim HTTP/2 (spracovanie všetkých fáz v HTTP/2, vrátane volaní na backend, a nielen interakcie medzi proxy a klientom);
  • Bola implementovaná plná podpora obojsmerného proxy protokolu gRPC so schopnosťou analyzovať toky gRPC, zvýrazňovať jednotlivé správy, odrážať prevádzku gRPC v protokole a filtrovať správy pomocou ACL. gRPC vám umožňuje organizovať prácu mikroslužieb v rôznych programovacích jazykoch, ktoré navzájom spolupracujú, pomocou univerzálneho API. Sieťová komunikácia v gRPC je implementovaná nad protokolom HTTP/2 a je založená na použití protokolových vyrovnávacích pamätí na serializáciu dát.
  • Pridaná podpora pre režim „Layer 7 Retries“, ktorý vám umožňuje odosielať opakované požiadavky HTTP v prípade zlyhania softvéru, ktoré nesúvisia s problémami pri vytváraní sieťového pripojenia (napríklad ak neexistuje žiadna odpoveď alebo prázdna odpoveď na POST žiadosť). Na deaktiváciu režimu bol pridaný príznak „disable-l7-retry“ k voľbe „http-request“ a možnosť „retry-on“ bola pridaná na jemné doladenie v predvolených nastaveniach, počúvaní a backend sekciách. Na opätovné odoslanie sú k dispozícii nasledujúce znaky: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, ako aj väzba na návratové stavové kódy (404 atď.) ;
  • Bol implementovaný nový správca procesov, ktorý umožňuje konfigurovať volanie externých spustiteľných súborov s obslužnými programami pre HAProxy.
    Napríklad API dátového plánu (/usr/sbin/dataplaneapi), ako aj rôzne Offload stream processing engine, sú implementované vo forme takéhoto externého handlera;

  • Boli pridané väzby pre .NET Core, Go, Lua a Python na vývoj rozšírení SPOE (Stream Processing Offload Engine) a SPOP (Stream Processing Offload Protocol). Predtým bol vývoj rozšírení podporovaný iba v C;
  • Pridaný externý obslužný program spoa-mirror (/usr/sbin/spoa-mirror) na zrkadlenie požiadaviek na samostatný server (napríklad na kopírovanie časti produkčnej prevádzky na testovanie experimentálneho prostredia pri reálnom zaťažení);
  • Predloženej HAProxy Kubernetes Ingress Controller zabezpečiť integráciu s platformou Kubernetes;
  • Pridaná vstavaná podpora pre export štatistík do monitorovacieho systému Prometheus;
  • Protokol Peers, ktorý sa používa na výmenu informácií s inými uzlami, na ktorých beží HAProxy, bol rozšírený. Vrátane pridanej podpory pre Heartbeat a šifrovaný prenos dát;
  • Do direktívy „log“ bol pridaný parameter „sample“, ktorý vám umožňuje uložiť do protokolu iba časť požiadaviek, napríklad 1 z 10, na vytvorenie analytickej vzorky;
  • Pridaný režim automatického profilovania (smernica profiling.tasks, ktorá môže mať hodnoty auto, on a off). Automatické profilovanie je povolené, ak priemerná latencia presiahne 1000 ms. Na zobrazenie profilovacích údajov bol do Runtime API pridaný príkaz „show profileing“ alebo je možné resetovať štatistiky do protokolu;
  • Pridaná podpora pre prístup k backend serverom pomocou protokolu SOCKS4;
  • Pridaná end-to-end podpora pre mechanizmus rýchleho otvárania TCP spojení (TFO - TCP Fast Open, RFC 7413), ktorý umožňuje znížiť počet krokov nastavenia spojenia spojením prvého do jednej požiadavky a druhého kroku klasický 3-krokový proces vyjednávania o pripojení a umožňuje odosielať dáta v počiatočnej fáze nadviazania spojenia;
  • Pridané nové akcie:
    • „http-request replace-uri“ na nahradenie adresy URL pomocou regulárneho výrazu;
    • „tcp-request content do-resolve“ a „http-request do-resolve“ na vyriešenie názvu hostiteľa;
    • „tcp-request content set-dst“ a „tcp-request content set-dst-port“ na nahradenie cieľovej IP adresy a portu.
  • Pridané nové konverzné moduly:
    • aes_gcm_dev na dešifrovanie tokov pomocou algoritmov AES128-GCM, AES192-GCM a AES256-GCM;
    • protobuf na extrakciu polí zo správ Protocol Buffers;
    • ungrpc na extrahovanie polí zo správ gRPC.

    Zdroj: opennet.ru

Pridať komentár