Izdanje HTTP/TCP balansera HAProxy 2.0

objavljeno oslobađanje balansera opterećenja HA Proxy 2.0, koji vam omogućava da distribuirate HTTP promet i proizvoljne TCP zahtjeve između grupe servera, uzimajući u obzir mnoge faktore (na primjer, provjerava dostupnost servera, procjenjuje nivo opterećenja, ima DDoS protumjere) i provodi primarno filtriranje podataka ( na primjer, možete raščlaniti HTTP zaglavlja, filtrirati prijenos neispravnih parametara upita, blokirati SQL i XSS zamjenu, povezati agente za obradu sadržaja). HAProxy također može primijeniti da koordinira interakciju komponenti u sistemima baziranim na arhitekturi mikroservisa. Kod projekta je napisan u C i isporučuje se licenciran pod GPLv2. Projekat se koristi na mnogim velikim sajtovima, uključujući Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter i Vimeo.

Ključne karakteristike izdanja:

  • Uveden novi API Data plan, koji vam omogućava da upravljate HAProxy postavkama u hodu putem REST Web API-ja. Uključujući, možete dinamički dodavati i uklanjati backendove i servere, kreirati ACL-ove, mijenjati rutiranje zahtjeva, mijenjati veze rukovatelja za IP;
  • Dodata je direktiva nbthread, koja vam omogućava da konfigurišete broj niti koje se koriste u HAProxy-u za optimizaciju performansi na višejezgrenim CPU-ima. Prema zadanim postavkama, broj radnih niti se bira u zavisnosti od CPU jezgri dostupnih u trenutnom okruženju, au okruženjima oblaka zadana je jedna nit. Za postavljanje čvrstih ograničenja, dodane su opcije sklapanja MAX_THREADS i MAX_PROCS, ograničavajući gornju granicu na broj niti i procesa;
  • Upotreba direktive vezivanja za povezivanje rukovaoca sa mrežnim adresama je pojednostavljena. Prilikom postavljanja više nije potrebno definirati procesne parametre - po defaultu, veze će biti raspoređene među nitima ovisno o broju aktivnih veza.
  • Postavljanje dnevnika prilikom pokretanja u izolovanim kontejnerima je pojednostavljeno - dnevnik se sada može poslati na stdout i stderr, kao i na bilo koji postojeći deskriptor datoteke (na primjer, “log fd@1 local0”);
  • Podrška za HTX (Native HTTP Representation) je podrazumevano omogućena, omogućavajući balansiranje kada se koriste napredne funkcije kao što su end-to-end HTTP/2, Layer 7 Retries i gRPC. HTX ne zamjenjuje zaglavlja na mjestu, ali svodi operaciju modifikacije na uklanjanje i dodavanje novog zaglavlja na kraj liste, što vam omogućava da manipulišete svim proširenim varijantama HTTP protokola, čuvajući originalnu semantiku zaglavlja i omogućavajući vam za postizanje većih performansi pri prevođenju HTTP/2 u HTTP/1.1 i obrnuto;
  • Dodata zvanična podrška za End-to-End HTTP/2 režim (obrada svih faza u HTTP/2, uključujući pozive na pozadinu, a ne samo interakciju između proxyja i klijenta);
  • Implementirana je puna podrška za dvosmjerno proxying gRPC protokola sa mogućnošću raščlanjivanja gRPC tokova, isticanja pojedinačnih poruka, odražavanja gRPC prometa u dnevniku i filtriranja poruka pomoću ACL-ova. gRPC vam omogućava da organizirate rad mikroservisa u različitim programskim jezicima koji međusobno komuniciraju koristeći univerzalni API. Mrežna komunikacija u gRPC-u implementirana je na vrhu HTTP/2 protokola i bazirana je na korištenju Protocol Buffers za serijalizaciju podataka.
  • Dodata podrška za režim „Ponovnih pokušaja sloja 7“, koji vam omogućava slanje ponovljenih HTTP zahtjeva u slučaju kvarova softvera koji nisu povezani s problemima pri uspostavljanju mrežne veze (na primjer, ako nema odgovora ili je prazan odgovor na POST zahtjev). Da biste onemogućili režim, zastavica "disable-l7-retry" je dodana opciji "http-request", a opcija "retry-on" je dodana za fino podešavanje u zadanim sekcijama, za slušanje i backend. Sljedeći znakovi su dostupni za ponovno slanje: sve-ponovne-greške, nema, conn-failure, prazan-odgovor, neželjeni-odgovor, vremensko ograničenje odgovora, 0rtt-odbijeno, kao i vezivanje za vraćanje statusnih kodova (404, itd.) ;
  • Implementiran je novi upravitelj procesa koji vam omogućava da konfigurirate pozivanje eksternih izvršnih datoteka s rukovateljima za HAProxy.
    Na primjer, Data Plan API (/usr/sbin/dataplaneapi), kao i razni motori za obradu Offload stream-a, implementirani su u obliku takvog vanjskog rukovatelja;

  • Vezivanja su dodana za .NET Core, Go, Lua i Python za razvoj ekstenzija SPOE (Stream Processing Offload Engine) i SPOP (Stream Processing Offload Protocol). Ranije je razvoj ekstenzija bio podržan samo u C;
  • Dodan eksterni obrađivač spoa-mirror (/usr/sbin/spoa-mirror) za preslikavanje zahtjeva na poseban server (na primjer, za kopiranje dijela proizvodnog prometa za testiranje eksperimentalnog okruženja pod realnim opterećenjem);
  • Poslao HAProxy Kubernetes Ingress Controller osigurati integraciju sa Kubernetes platformom;
  • Dodata ugrađena podrška za izvoz statistike u sistem za praćenje Prometej;
  • Proširen je Peers protokol, koji se koristi za razmjenu informacija s drugim čvorovima koji koriste HAProxy. Uključujući dodatnu podršku za Heartbeat i šifrovani prenos podataka;
  • Parametar “sample” je dodat u “log” direktivu, koja vam omogućava da izbacujete samo dio zahtjeva u dnevnik, na primjer 1 od 10, kako biste formirali analitički uzorak;
  • Dodan režim automatskog profiliranja (profiling.tasks direktiva, koja može uzeti vrijednosti auto, on i off). Automatsko profiliranje je omogućeno ako prosječna latencija prelazi 1000 ms. Za pregled podataka profiliranja, komanda “show profiling” je dodana Runtime API-ju ili je moguće resetirati statistiku u dnevnik;
  • Dodata podrška za pristup backend serverima koristeći SOCKS4 protokol;
  • Dodata je end-to-end podrška za mehanizam za brzo otvaranje TCP konekcija (TFO - TCP Fast Open, RFC 7413), što vam omogućava da smanjite broj koraka podešavanja veze kombinovanjem prvog u jedan zahtjev i drugog koraka klasični proces pregovaranja o povezivanju u 3 koraka i omogućava slanje podataka u početnoj fazi uspostavljanja veze;
  • Dodane su nove akcije:
    • "http-request replace-uri" za zamjenu URL-a pomoću regularnog izraza;
    • “tcp-request content do-resolve” i “http-request do-resolve” za rješavanje imena hosta;
    • “tcp-request content set-dst” i “tcp-request content set-dst-port” za zamjenu ciljne IP adrese i porta.
  • Dodani novi moduli konverzije:
    • aes_gcm_dev za dešifrovanje tokova pomoću AES128-GCM, AES192-GCM i AES256-GCM algoritama;
    • protobuf za izdvajanje polja iz Protocol Buffers poruka;
    • ungrpc za izdvajanje polja iz gRPC poruka.

    izvor: opennet.ru

Dodajte komentar