Eliberarea echilibrului HTTP/TCP HAProxy 2.0

publicat eliberarea echilibrului de sarcină HA Proxy 2.0, care vă permite să distribuiți traficul HTTP și solicitările TCP arbitrare între un grup de servere, ținând cont de mulți factori (de exemplu, verifică disponibilitatea serverelor, evaluează nivelul de încărcare, are contramăsuri DDoS) și efectuează filtrarea primară a datelor ( de exemplu, puteți analiza antetele HTTP, filtra parametrii de interogare incorecți de transmisie, puteți bloca înlocuirea SQL și XSS, puteți conecta agenți de procesare a conținutului). HAProxy poate, de asemenea aplica pentru a coordona interacțiunea componentelor în sisteme bazate pe arhitectura de microservicii. Codul proiectului este scris în C și furnizat licențiat conform GPLv2. Proiectul este folosit pe multe site-uri mari, inclusiv Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter și Vimeo.

Caracteristici cheie de lansare:

  • A fost introdus un nou API Plan de date, care vă permite să gestionați setările HAProxy din mers prin REST Web API. Inclusiv, puteți adăuga și elimina în mod dinamic backend-uri și servere, puteți crea ACL-uri, puteți modifica rutarea cererilor, puteți schimba legăturile handler-ului la IP;
  • S-a adăugat directiva nbthread, care vă permite să configurați numărul de fire utilizate în HAProxy pentru a optimiza performanța pe procesoarele multi-core. În mod implicit, numărul de fire de lucru este selectat în funcție de nucleele CPU disponibile în mediul curent, iar în mediile cloud, implicit este un fir. Pentru a seta limite stricte, au fost adăugate opțiunile de asamblare MAX_THREADS și MAX_PROCS, limitând limita superioară a numărului de fire și procese;
  • Utilizarea directivei bind pentru legarea handler-urilor la adresele de rețea a fost simplificată. La configurare, nu mai este necesară definirea parametrilor de proces - implicit, conexiunile vor fi distribuite între fire în funcție de numărul de conexiuni active.
  • Configurarea jurnalelor atunci când rulează în containere izolate a fost simplificată - jurnalul poate fi trimis acum la stdout și stderr, precum și la orice descriptor de fișier existent (de exemplu, „log fd@1 local0”);
  • Suportul pentru HTX (Native HTTP Representation) este activat în mod implicit, permițând echilibrarea atunci când se utilizează funcții avansate, cum ar fi HTTP/2 end-to-end, reîncercări Layer 7 și gRPC. HTX nu înlocuiește anteturile pe loc, dar reduce operația de modificare la eliminarea și adăugarea unui nou antet la sfârșitul listei, ceea ce vă permite să manipulați orice variante extinse ale protocolului HTTP, păstrând semantica originală a antetelor și permițându-vă pentru a obține performanțe mai mari la traducerea HTTP/2 în HTTP/1.1 și invers;
  • S-a adăugat suport oficial pentru modul End-to-End HTTP/2 (procesarea tuturor etapelor în HTTP/2, inclusiv apelurile către backend, și nu doar interacțiunea dintre proxy și client);
  • A fost implementat suport complet pentru proxy bidirecțional al protocolului gRPC cu capacitatea de a analiza fluxurile gRPC, evidențiind mesajele individuale, reflectând traficul gRPC în jurnal și filtrarea mesajelor folosind ACL-uri. gRPC vă permite să organizați munca microserviciilor în diferite limbaje de programare care interacționează între ele folosind un API universal. Comunicarea în rețea în gRPC este implementată pe lângă protocolul HTTP/2 și se bazează pe utilizarea protocolului tampon pentru serializarea datelor.
  • S-a adăugat suport pentru modul „Layer 7 Retries”, care vă permite să trimiteți solicitări HTTP repetate în cazul defecțiunilor software care nu sunt legate de probleme de stabilire a unei conexiuni la rețea (de exemplu, dacă nu există niciun răspuns sau un răspuns gol la un cerere POST). Pentru a dezactiva modul, steagul „disable-l7-retry” a fost adăugat la opțiunea „http-request”, iar opțiunea „retry-on” a fost adăugată pentru reglarea fină a secțiunilor implicite, ascultare și backend. Următoarele semne sunt disponibile pentru retrimitere: all-retryable-errors, none, conn-failure, empty-response, junk-response, răspuns-timeout, 0rtt-rejected, precum și obligativitatea pentru returnarea codurilor de stare (404 etc.) ;
  • A fost implementat un nou manager de proces, care vă permite să configurați apelarea fișierelor executabile externe cu handlere pentru HAProxy.
    De exemplu, API-ul Data Plan (/usr/sbin/dataplaneapi), precum și diverse motoare de procesare a fluxului Offload, sunt implementate sub forma unui astfel de handler extern;

  • Au fost adăugate legături pentru .NET Core, Go, Lua și Python pentru dezvoltarea extensiilor SPOE (Stream Processing Offload Engine) și SPOP (Stream Processing Offload Protocol). Anterior, dezvoltarea extensiilor era suportată doar în C;
  • S-a adăugat un handler extern spoa-mirror (/usr/sbin/spoa-mirror) pentru oglindirea cererilor pe un server separat (de exemplu, pentru copierea unei părți din traficul de producție pentru testarea unui mediu experimental sub o încărcare reală);
  • Introdus Controller de intrare HAProxy Kubernetes pentru a asigura integrarea cu platforma Kubernetes;
  • S-a adăugat suport încorporat pentru exportul de statistici în sistemul de monitorizare Prometeu;
  • Protocolul Peers, folosit pentru a face schimb de informații cu alte noduri care rulează HAProxy, a fost extins. Inclusiv suport suplimentar pentru Heartbeat și transmisie de date criptate;
  • Parametrul „sample” a fost adăugat la directiva „log”, care vă permite să descărcați doar o parte din cereri în jurnal, de exemplu 1 din 10, pentru a forma un eșantion analitic;
  • S-a adăugat modul automat de profilare (directiva profiling.tasks, care poate lua valorile auto, on și off). Profilarea automată este activată dacă latența medie depășește 1000 ms. Pentru a vizualiza datele de profilare, comanda „show profileing” a fost adăugată la Runtime API sau este posibil să resetați statisticile în jurnal;
  • S-a adăugat suport pentru accesarea serverelor backend folosind protocolul SOCKS4;
  • S-a adăugat suport end-to-end pentru mecanismul de deschidere rapidă a conexiunilor TCP (TFO - TCP Fast Open, RFC 7413), care vă permite să reduceți numărul de pași de configurare a conexiunii, combinând primul într-o singură cerere și al doilea pas de procesul clasic de negociere a conexiunii în 3 pași și face posibilă trimiterea datelor în stadiul inițial de stabilire a conexiunii;
  • Acțiuni noi adăugate:
    • „http-request replace-uri” pentru a înlocui adresa URL folosind o expresie regulată;
    • „tcp-request content do-resolve” și „http-request do-resolve” pentru rezolvarea numelui de gazdă;
    • „tcp-request content set-dst” și „tcp-request content set-dst-port” pentru a înlocui adresa IP și portul țintă.
  • S-au adăugat noi module de conversie:
    • aes_gcm_dev pentru decriptarea fluxurilor folosind algoritmii AES128-GCM, AES192-GCM și AES256-GCM;
    • protobuf pentru a extrage câmpuri din mesajele Protocol Buffers;
    • ungrpc pentru a extrage câmpuri din mesajele gRPC.

    Sursa: opennet.ru

Adauga un comentariu