Cinque anni dopo la formazione della versione 2.0, è stato pubblicato il rilascio del bilanciatore di carico HAProxy 3.0, che permette di distribuire il traffico HTTP e le richieste TCP arbitrarie tra un gruppo di server, tenendo conto di diversi fattori (ad esempio, verifica la disponibilità dei server, valuta il livello di carico, ha strumenti per contrastare attacchi DDoS) e conducendo un filtro preliminare dei dati (ad esempio, può analizzare le intestazioni HTTP, filtrare il passaggio di parametri di richiesta non validi, bloccare l'iniezione SQL e XSS, collegare agenti di elaborazione contenuti). HAProxy può anche essere utilizzato per coordinare l'interazione dei componenti nei sistemi basati su architettura a microservizi. Il codice del progetto è scritto in C e viene distribuito sotto licenza GPLv2. Il progetto è utilizzato su molti grandi siti, tra cui Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter e Vimeo.
La versione HAProxy 3.0 è classificata come un rilascio con supporto a lungo termine (LTS) e sarà supportata fino al 2029. Modifiche principali:
- È stata aggiunta una nuova sezione di configurazione "crt-store" per gestire la memorizzazione e l'uso dei certificati TLS. A differenza della precedente configurazione crt-list, in crt-store il deposito dei certificati è separato dal loro utilizzo nel frontend, permettendo di specificare individualmente il luogo di memorizzazione di ciascuno dei componenti del certificato (file con certificati, chiavi e dati OCSP).
- È stata aggiunta la possibilità di impostare limiti per le richieste utilizzando HTTP/2, consentito dal protocollo, ma capace di causare problemi. Ad esempio, l'invio di uno stream di frame CONTINUATION potrebbe portare a un attacco DoS Continuation flood.
- È stata introdotta una nuova direttiva di configurazione "guid", utilizzabile nelle sezioni "frontend", "backend" e "listen". La direttiva associa a queste sezioni un identificatore unico, consentendo di mantenere le statistiche associate alla sezione anche dopo un riavvio (lo stato della pagina Stats non verrà reimpostato). Per salvare le statistiche in un file è stata aggiunta una nuova comando "dump stats-file", mentre per leggere da un file dopo il riavvio è stata introdotta una nuova direttiva di configurazione "stats-file".
- Sono state ampliate le possibilità di bilanciamento dei messaggi Syslog. È stata aggiunta la possibilità di assegnare pesi alle righe di log associate ai server nei backend.
- È stata aggiunta la supporto per il formato delle righe di log nella rappresentazione JSON e CBOR.
- Sono state ampliate le informazioni che possono essere ottenute utilizzando le funzioni di estrazione, ad esempio, è possibile richiedere informazioni sul numero di sessioni HTTP aperte per il backend e il frontend, sulla dimensione della coda di attesa per l'elaborazione della richiesta e sul numero massimo di sessioni simultanee consentite.
- È stata migliorata la performance degli script Lua a thread singolo caricati tramite la direttiva «lua-load».
- La performance delle aree di storage in memoria create tramite la direttiva stick-table è significativamente migliorata. Ad esempio, su un sistema con 80 thread, la performance è aumentata di 6 volte.
- Nelle configurazioni con più siti, in cui certificato TLS la selezione avviene in base all'identificatore host trasmesso tramite l'estensione SNI di TLS, è stato aggiunto il parametro «default-crt», che consente di specificare un certificato predefinito scelto se non è stato possibile associare i certificati esistenti al sito.
- Sono state aggiunte le azioni «set-fc-tos» e «set-bc-tos» per l'inserimento, lato backend o frontend, del campo DS (Differentiated Services) nei pacchetti IP, che determina la priorità del traffico.
- Sono state aggiunte le azioni «set-fc-mark» e «set-bc-mark», attraverso cui è possibile contrassegnare i pacchetti IP lato backend o frontend, ad esempio, per un successivo legame a una specifica tabella di routing.
- È stato aggiunto il supporto per la creazione di identificatori nel formato UUIDv7.
- È stata implementata la possibilità di utilizzare il prefisso «@virt» per creare file ACL e Map virtuali che non vengono salvati su disco. Il contenuto dei file ACL e Map virtuali viene aggiunto e rimosso tramite l'API Runtime. È disponibile anche il prefisso «@opt», in cui i file virtuali vengono applicati solo in assenza di un file reale su disco.
- Sono state apportate modifiche che rompono la retrocompatibilità: è vietato inviare più comandi all'API Runtime in una sola richiesta separandoli con il carattere di nuova linea; è vietato impostare la parola chiave «enabled» per le dinamiche server; è stata intensificata la verifica degli URI non standard.
Fonte: opennet.ru
