Izdanje HTTP/TCP balansera HAProxy 2.0

Objavljeno otpuštanje balansera opterećenja HA proxy 2.0, koji vam omogućuje distribuciju HTTP prometa i proizvoljnih TCP zahtjeva između grupe poslužitelja, uzimajući u obzir mnoge čimbenike (na primjer, provjerava dostupnost poslužitelja, procjenjuje razinu opterećenja, ima DDoS protumjere) i provodi primarno filtriranje podataka ( na primjer, možete analizirati HTTP zaglavlja, filtrirati prijenos netočnih parametara upita, blokirati SQL i XSS zamjenu, povezati agente za obradu sadržaja). HAProxy također može primijeniti koordinirati interakciju komponenti u sustavima temeljenim na arhitekturi mikroservisa. Projektni kod je napisan u C i isporučuje se licenciran pod GPLv2. Projekt se koristi na mnogim velikim stranicama, uključujući Airbnb, Alibabu, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter i Vimeo.

Ključne značajke izdanja:

  • Predstavljen novi API Data plan, koji vam omogućuje upravljanje HAProxy postavkama u hodu putem REST Web API-ja. Uključujući, možete dinamički dodavati i uklanjati pozadine i poslužitelje, stvarati ACL-ove, mijenjati usmjeravanje zahtjeva, mijenjati vezanja rukovatelja na IP;
  • Dodana je direktiva nbthread koja vam omogućuje da konfigurirate broj niti koje se koriste u HAProxyju za optimizaciju performansi višejezgrenih CPU-a. Prema zadanim postavkama, broj radnih niti je odabran ovisno o CPU jezgrama dostupnim u trenutnom okruženju, a u 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 broja niti i procesa;
  • Pojednostavljena je upotreba direktive za vezanje za rukovatelje vezanjem na mrežne adrese. Prilikom postavljanja više nije potrebno definirati parametre procesa - prema zadanim postavkama veze će biti raspoređene među nitima ovisno o broju aktivnih veza.
  • Postavljanje zapisa kada se izvodi u izoliranim spremnicima je pojednostavljeno - zapisnik 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) omogućena je prema zadanim postavkama, što omogućuje balansiranje pri korištenju naprednih značajki kao što su end-to-end HTTP/2, Layer 7 Retries i gRPC. HTX ne zamjenjuje zaglavlja na mjestu, već smanjuje operaciju izmjene na uklanjanje i dodavanje novog zaglavlja na kraj popisa, što vam omogućuje da manipulirate svim proširenim varijantama HTTP protokola, čuvajući izvornu semantiku zaglavlja i dopuštajući vam postići veću izvedbu pri prevođenju HTTP/2 u HTTP/1.1 i obrnuto;
  • Dodana je službena podrška za način rada End-to-End HTTP/2 (obrada svih faza u HTTP/2, uključujući pozive prema pozadini, a ne samo interakciju između proxyja i klijenta);
  • Implementirana je puna podrška za dvosmjerni proxy gRPC protokola s mogućnošću parsiranja gRPC tokova, isticanja pojedinačnih poruka, odražavanja gRPC prometa u zapisniku i filtriranja poruka pomoću ACL-ova. gRPC vam omogućuje organiziranje rada mikroservisa u različitim programskim jezicima koji međusobno komuniciraju pomoću univerzalnog API-ja. Mrežna komunikacija u gRPC-u implementirana je povrh HTTP/2 protokola i temelji se na korištenju međuspremnika protokola za serijalizaciju podataka.
  • Dodana podrška za način rada "Layer 7 Retries", koji vam omogućuje slanje ponovljenih HTTP zahtjeva u slučaju kvarova softvera koji nisu povezani s problemima uspostavljanja mrežne veze (na primjer, ako nema odgovora ili je prazan odgovor na POST zahtjev). Za onemogućavanje načina rada dodana je zastavica "disable-l7-retry" opciji "http-request", a opcija "ponovno pokušaj" dodana je za fino podešavanje u odjeljcima zadanih postavki, slušanja i pozadine. Sljedeći znakovi dostupni su za ponovno slanje: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, kao i vezanje za povratne statusne kodove (404, itd.) ;
  • Implementiran je novi upravitelj procesa koji vam omogućuje da konfigurirate pozivanje vanjskih izvršnih datoteka s rukovateljima za HAProxy.
    Na primjer, Data Plan API (/usr/sbin/dataplaneapi), kao i različiti strojevi za obradu prijenosa protoka, implementirani su u obliku takvog vanjskog rukovatelja;

  • Vezovi su dodani za .NET Core, Go, Lua i Python za razvoj ekstenzija SPOE (Stream Processing Offload Engine) i SPOP (Stream Processing Offload Protocol). Prethodno je razvoj proširenja bio podržan samo u C-u;
  • Dodan vanjski spoa-mirror rukovatelj (/usr/sbin/spoa-mirror) za zrcaljenje zahtjeva na zasebni poslužitelj (na primjer, za kopiranje dijela proizvodnog prometa za testiranje eksperimentalnog okruženja pod stvarnim opterećenjem);
  • Predstavljeno HAProxy Kubernetes ulazni kontroler osigurati integraciju s platformom Kubernetes;
  • Dodana ugrađena podrška za izvoz statistike u sustav praćenja Prometej;
  • Peers Protocol, koji se koristi za razmjenu informacija s drugim čvorovima koji pokreću HAProxy, je proširen. Uključujući dodatnu podršku za Heartbeat i šifrirani prijenos podataka;
  • Parametar "uzorak" dodan je u direktivu "log", što vam omogućuje da unesete samo dio zahtjeva u dnevnik, na primjer 1 od 10, kako biste formirali analitički uzorak;
  • Dodan način automatskog profiliranja (direktiva profiling.tasks, 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, naredba “show profiling” je dodana u Runtime API ili je moguće resetirati statistiku u dnevnik;
  • Dodana podrška za pristup pozadinskim poslužiteljima pomoću SOCKS4 protokola;
  • Dodana end-to-end podrška za mehanizam za brzo otvaranje TCP veza (TFO - TCP Fast Open, RFC 7413), koja vam omogućuje smanjenje broja koraka postavljanja veze kombiniranjem prvog u jedan zahtjev i drugog koraka klasični proces dogovaranja veze u 3 koraka i omogućuje slanje podataka u početnoj fazi uspostavljanja veze;
  • Nove radnje dodane:
    • "http-request replace-uri" za zamjenu URL-a korištenjem regularnog izraza;
    • “tcp-request content do-resolve” i “http-request do-resolve” za rješavanje imena glavnog računala;
    • “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 dekriptiranje tokova pomoću algoritama AES128-GCM, AES192-GCM i AES256-GCM;
    • protobuf za izdvajanje polja iz poruka međuspremnika protokola;
    • ungrpc za izdvajanje polja iz gRPC poruka.

    Izvor: opennet.ru

Dodajte komentar