Rilascio del bilanciatore HTTP/TCP HAProxy 2.0

pubblicato rilascio del bilanciatore del carico Proxy HA 2.0, che consente di distribuire il traffico HTTP e le richieste TCP arbitrarie tra un gruppo di server, tenendo conto di molti fattori (ad esempio, controlla la disponibilità dei server, valuta il livello di carico, dispone di contromisure DDoS) ed effettua il filtraggio primario dei dati ( ad esempio, è possibile analizzare intestazioni HTTP, filtrare parametri di query errati di trasmissione, bloccare la sostituzione SQL e XSS, connettere agenti di elaborazione dei contenuti). HAProxy può anche applicare coordinare l'interazione dei componenti in sistemi basati su un'architettura a microservizi. Il codice del progetto è scritto in C e in dotazione concesso in licenza con GPLv2. Il progetto è utilizzato su molti siti di grandi dimensioni, tra cui Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter e Vimeo.

Caratteristiche di rilascio chiave:

  • Introdotta la nuova API Piano dati, che consente di gestire al volo le impostazioni HAProxy tramite API Web REST. Inoltre, puoi aggiungere e rimuovere dinamicamente backend e server, creare ACL, modificare il routing delle richieste, modificare i collegamenti del gestore all'IP;
  • Aggiunta la direttiva nbthread, che consente di configurare il numero di thread utilizzati in HAProxy per ottimizzare le prestazioni su CPU multi-core. Per impostazione predefinita, il numero di thread di lavoro viene selezionato in base ai core della CPU disponibili nell'ambiente corrente e negli ambienti cloud l'impostazione predefinita è un thread. Per impostare limiti rigidi, sono state aggiunte le opzioni di assembly MAX_THREADS e MAX_PROCS, limitando il limite superiore al numero di thread e processi;
  • L'uso della direttiva bind per vincolare i gestori agli indirizzi di rete è stato semplificato. Durante la configurazione non è più necessario definire i parametri del processo: per impostazione predefinita le connessioni verranno distribuite tra i thread in base al numero di connessioni attive.
  • L'impostazione dei log durante l'esecuzione in contenitori isolati è stata semplificata: ora il log può essere inviato a stdout e stderr, nonché a qualsiasi descrittore di file esistente (ad esempio, "log fd@1 local0");
  • Il supporto per HTX (rappresentazione HTTP nativa) è abilitato per impostazione predefinita, consentendo il bilanciamento quando si utilizzano funzionalità avanzate come HTTP/2 end-to-end, tentativi Layer 7 e gRPC. HTX non sostituisce le intestazioni esistenti, ma riduce l'operazione di modifica alla rimozione e all'aggiunta di una nuova intestazione alla fine dell'elenco, che consente di manipolare eventuali varianti estese del protocollo HTTP, preservando la semantica originale delle intestazioni e consentendoti ottenere prestazioni più elevate durante la conversione da HTTP/2 a HTTP/1.1 e viceversa;
  • Aggiunto supporto ufficiale per la modalità HTTP/2 End-to-End (elaborazione di tutte le fasi in HTTP/2, comprese le chiamate al backend, e non solo l'interazione tra proxy e client);
  • È stato implementato il supporto completo per il proxy bidirezionale del protocollo gRPC con la possibilità di analizzare i flussi gRPC, evidenziando singoli messaggi, riflettendo il traffico gRPC nel registro e filtrando i messaggi utilizzando le ACL. gRPC consente di organizzare il lavoro dei microservizi in vari linguaggi di programmazione che interagiscono tra loro utilizzando un'API universale. La comunicazione di rete in gRPC è implementata sul protocollo HTTP/2 e si basa sull'uso dei buffer di protocollo per la serializzazione dei dati.
  • Aggiunto il supporto per la modalità “Layer 7 Retries”, che consente di inviare richieste HTTP ripetute in caso di guasti software non legati a problemi nello stabilire una connessione di rete (ad esempio, se non c'è risposta o una risposta vuota a un richiesta POST). Per disabilitare la modalità, il flag "disable-l7-retry" è stato aggiunto all'opzione "http-request" ed è stata aggiunta l'opzione "retry-on" per la messa a punto delle sezioni predefinite, ascolto e backend. Sono disponibili i seguenti segnali per il reinvio: tutti gli errori riproducibili, nessuno, conn-fallimento, risposta vuota, risposta spazzatura, timeout risposta, 0rtt-rifiutato, nonché associazione per restituire codici di stato (404, ecc.) ;
  • È stato implementato un nuovo gestore processi che consente di configurare la chiamata di file eseguibili esterni con gestori per HAProxy.
    Ad esempio, l'API Data Plan (/usr/sbin/dataplaneapi), così come vari motori di elaborazione del flusso Offload, sono implementati sotto forma di tale gestore esterno;

  • Sono state aggiunte associazioni per .NET Core, Go, Lua e Python per lo sviluppo di estensioni SPOE (Stream Processing Offload Engine) e SPOP (Stream Processing Offload Protocol). In precedenza, lo sviluppo delle estensioni era supportato solo in C;
  • Aggiunto un gestore spoa-mirror esterno (/usr/sbin/spoa-mirror) per il mirroring delle richieste su un server separato (ad esempio, per copiare parte del traffico di produzione per testare un ambiente sperimentale sotto un carico reale);
  • Introdotto Controller di ingresso Kubernetes HAProxy garantire l'integrazione con la piattaforma Kubernetes;
  • Aggiunto supporto integrato per l'esportazione delle statistiche al sistema di monitoraggio Prometeo;
  • Il protocollo Peers, utilizzato per scambiare informazioni con altri nodi che eseguono HAProxy, è stato esteso. Compreso il supporto aggiuntivo per Heartbeat e trasmissione dati crittografati;
  • Alla direttiva “log” è stato aggiunto il parametro “sample”, che permette di scaricare nel log solo una parte delle richieste, ad esempio 1 su 10, per formare un campione analitico;
  • Aggiunta la modalità di profilazione automatica (direttiva profiling.tasks, che può assumere i valori automaticamente, attivarli e disattivarli). La profilazione automatica è abilitata se la latenza media supera i 1000 ms. Per visualizzare i dati di profilazione è stato aggiunto alle Runtime API il comando “mostra profilazione” oppure è possibile azzerare le statistiche nel log;
  • Aggiunto supporto per l'accesso ai server backend utilizzando il protocollo SOCKS4;
  • Aggiunto supporto end-to-end per il meccanismo di apertura rapida delle connessioni TCP (TFO - TCP Fast Open, RFC 7413), che consente di ridurre il numero di passaggi di impostazione della connessione combinando il primo in un'unica richiesta e il secondo passaggio di il classico processo di negoziazione della connessione in 3 fasi e consente di inviare dati nella fase iniziale di creazione di una connessione;
  • Nuove azioni aggiunte:
    • "http-request replace-uri" per sostituire l'URL utilizzando un'espressione regolare;
    • “tcp-request content do-resolve” e “http-request do-resolve” per la risoluzione del nome host;
    • "tcp-request content set-dst" e "tcp-request content set-dst-port" per sostituire l'indirizzo IP e la porta di destinazione.
  • Aggiunti nuovi moduli di conversione:
    • aes_gcm_dev per decrittografare i flussi utilizzando gli algoritmi AES128-GCM, AES192-GCM e AES256-GCM;
    • protobuf per estrarre campi dai messaggi dei buffer di protocollo;
    • ungrpc per estrarre i campi dai messaggi gRPC.

    Fonte: opennet.ru

Aggiungi un commento