Liberazione di l'equilibriu HTTP / TCP HAProxy 2.0

publicatu liberazione di bilanciatore di carica HA Proxy 2.0, chì vi permette di distribuisce u trafficu HTTP è e dumande TCP arbitrarie trà un gruppu di servitori, tenendu in contu parechji fatturi (per esempiu, verifica a dispunibilità di i servitori, valuta u livellu di carica, hà contramisure DDoS) è eseguisce u filtru di dati primariu ( per esempiu, pudete analizà l'intestazione HTTP, filtrà trasmissioni paràmetri di query incorrecte, bluccà a sostituzione di SQL è XSS, cunnette l'agenti di trasfurmazioni di cuntenutu). HAProxy pò ancu dumandà per coordina l'interazzione di cumpunenti in sistemi basati nantu à l'architettura di microservizi. U codice di u prugettu hè scrittu in C è furnitu licenziatu sottu GPLv2. U prughjettu hè utilizatu in parechji siti grande, cumprese Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter è Vimeo.

Funzioni di liberazione chjave:

  • Novu API introduttu Pianu di Dati, chì vi permette di gestisce i paràmetri HAProxy nantu à a mosca via REST Web API. Cumpresu, pudete aghjunghje dinamicamente è sguassate backends è servitori, creà ACL, cambià l'instradamentu di a dumanda, cambia l'associazioni di u gestore à l'IP;
  • Aggiunta a direttiva nbthread, chì permette di cunfigurà u numeru di fili utilizati in HAProxy per ottimisà u rendiment in CPU multi-core. Per automaticamente, u nùmeru di fili di u travagliu hè sceltu secondu i core di CPU dispunibuli in l'ambiente attuale, è in l'ambienti di nuvola u predeterminatu hè un filu. Per stabilisce limiti duri, l'opzioni di assemblea MAX_THREADS è MAX_PROCS sò state aghjunte, limitendu u limitu superiore in u numeru di filamenti è prucessi;
  • L'usu di a direttiva di ubligatoriu per i gestori di ubligatoriu à l'indirizzi di a rete hè statu simplificatu. Quandu si stallanu, ùn hè più necessariu di definisce i paràmetri di u prucessu - per automaticamente, e cunnessione seranu distribuite trà i fili secondu u numeru di cunnessione attivu.
  • A stallazione di logs quandu si eseguisce in cuntenituri isolati hè stata simplificata - u logu pò avà esse mandatu à stdout è stderr, è ancu à qualsiasi descriptore di file esistenti (per esempiu, "log fd@1 local0");
  • U supportu per HTX (Native HTTP Rappresentazione) hè attivatu per automaticamente, chì permette di equilibrà quandu si usanu funzioni avanzate cum'è HTTP / 2 end-to-end, Layer 7 Retries è gRPC. HTX ùn rimpiazza l'intestazione in u locu, ma riduce l'operazione di mudificazione per sguassà è aghjunghje un novu capu à a fine di a lista, chì vi permette di manipulà qualsiasi varianti allargate di u protokollu HTTP, priservendu a semantica originale di l'intestazione è chì vi permette. per ottene un rendimentu più altu quandu traduce HTTP/2 à HTTP/1.1 è viceversa;
  • Aghjunghje un supportu ufficiale per u modu End-to-End HTTP / 2 (elaborazione di tutte e tappe in HTTP / 2, cumprese chjamate à u backend, è micca solu interazzione trà u proxy è u cliente);
  • U supportu tutale per a proxy bidirezionale di u protocolu gRPC hè statu implementatu cù a capacità di analizà i flussi gRPC, mette in risaltu messagi individuali, riflettendu u trafficu gRPC in u logu è filtrà i missaghji cù ACL. gRPC permette di urganizà u travagliu di i microservizi in diverse lingue di prugrammazione chì interagiscenu cù l'altri utilizendu una API universale. A cumunicazione di rete in gRPC hè implementata nantu à u protocolu HTTP / 2 è hè basatu annantu à l'usu di Protocol Buffers per a serializazione di dati.
  • Aghjunghje supportu per u modu "Layer 7 Retries", chì permette di mandà richieste HTTP ripetute in casu di fallimenti di u software chì ùn sò micca ligati à prublemi chì stabiliscenu una cunnessione di rete (per esempiu, se ùn ci hè micca risposta o una risposta vacante à un dumanda POST). Per disattivà u modu, a bandiera "disable-l7-retry" hè stata aghjunta à l'opzione "http-request", è l'opzione "retry-on" hè stata aghjunta per fine-tuning in e sezioni predeterminate, listen and backend. I seguenti segni sò dispunibuli per resending: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, oltri ubligatoriu à vultà codici statutu (404, etc.) ;
  • Un novu gestore di prucessu hè statu implementatu, chì permette di cunfigurà chjamà i fugliali eseguibili esterni cù gestori per HAProxy.
    Per esempiu, l'API di u Pianu di Dati (/usr/sbin/dataplaneapi), è ancu parechji mutori di trasfurmazioni di u flussu Offload, sò implementati in a forma di un tali gestore esternu;

  • L'associazioni sò state aghjunte per .NET Core, Go, Lua è Python per sviluppà estensioni SPOE (Stream Processing Offload Engine) è SPOP (Stream Processing Offload Protocol). Nanzu, u sviluppu di l'estensione era supportatu solu in C;
  • Aggiuntu un gestore spoa-mirror esternu (/usr/sbin/spoa-mirror) per e richieste di mirroring à un servitore separatu (per esempiu, per copià una parte di u trafficu di produzzione per pruvà un ambiente sperimentale sottu una carica reale);
  • Intruduttu HAProxy Kubernetes Ingress Controller per assicurà l'integrazione cù a piattaforma Kubernetes;
  • Aghjunghje un supportu integratu per l'esportazione di statistiche à u sistema di monitoraghju Prometheus;
  • U Protokollu Peers, utilizatu per scambià infurmazioni cù altri nodi chì currenu HAProxy, hè statu allargatu. Includendu supportu aghjuntu per Heartbeat è trasmissione di dati criptati;
  • U paràmetru "sample" hè statu aghjuntu à a direttiva "log", chì permette di dump solu una parte di e dumande in u logu, per esempiu 1 fora di 10, per furmà una mostra analitica;
  • Aggiuntu un modu di prufilu automaticu (direttiva profiling.tasks, chì pò piglià i valori auto, on and off). U prufilu automaticu hè attivatu se a latenza media supera i 1000 ms. Per vede i dati di prufilu, u cumandimu "mostra profiling" hè statu aghjuntu à l'API Runtime o hè pussibule resettate statistiche à u log;
  • Aghjunghje supportu per accede à i servitori backend utilizendu u protocolu SOCKS4;
  • Aghjunghje un supportu end-to-end per u mecanismu per apre rapidamente e cunnessione TCP (TFO - TCP Fast Open, RFC 7413), chì permette di riduce u numeru di passi di cunfigurazione di cunnessione cumminendu u primu in una dumanda è u sicondu passu di u prucessu classicu di negoziazione di cunnessione di 3-step è permette di mandà dati in u stadiu iniziale di stabilisce una cunnessione;
  • Azzioni novi aghjunte:
    • "http-request replace-uri" per rimpiazzà l'URL cù una espressione regulare;
    • "tcp-request content do-resolve" è "http-request do-resolve" per risolve u nome d'ospite;
    • "tcp-request content set-dst" è "tcp-request content set-dst-port" per rimpiazzà l'indirizzu IP di destinazione è u portu.
  • Aggiunti novi moduli di cunversione:
    • aes_gcm_dev per decrypting streams cù l'algoritmi AES128-GCM, AES192-GCM è AES256-GCM;
    • protobuf per caccià i campi da i missaghji Protocol Buffers;
    • ungrpc per caccià i campi da i missaghji gRPC.

    Source: opennet.ru

Add a comment