Dopo cinque anni dalla creazione della versione 2.0, è stato pubblicato il rilascio del bilanciatore di carico HAProxy 3.0, che consente di distribuire il traffico HTTP e le richieste TCP arbitrarie tra un gruppo di server, considerando vari fattori (ad esempio, controlla la disponibilità dei server, valuta il livello di carico e dispone di strumenti per contrastare i DDoS) e effettuando una prima filtrazione dei dati (ad esempio, è possibile analizzare le intestazioni HTTP, filtrare il passaggio di parametri errati, bloccare l'iniezione SQL e XSS, collegare agenti di elaborazione dei contenuti). HAProxy può anche essere utilizzato per coordinare l'interazione dei componenti in sistemi basati sull'architettura a microservizi. Il codice del progetto è scritto in linguaggio C e 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 release con supporto a lungo termine (LTS) e sarà supportata fino al 2029. Modifiche chiave:
- È stata aggiunta una nuova sezione "crt-store" alla configurazione per gestire l'archiviazione e l'uso dei certificati TLS. A differenza della precedente impostazione crt-list, in crt-store il deposito dei certificati è separato dal loro utilizzo nel frontend, consentendo di specificare individualmente il luogo di archiviazione di ciascun componente del certificato (file dei certificati, chiavi e dati OCSP).
- È stata aggiunta la possibilità di impostare limitazioni per le richieste utilizzando HTTP/2, consentite dal protocollo, ma potenzialmente problematiche. Ad esempio, l'invio di un flusso di frame CONTINUATION può portare a un attacco DoS known as Continuation flood.
- È stata aggiunta una nuova direttiva di configurazione "guid", che può essere utilizzata nelle sezioni "frontend", "backend" e "listen". La direttiva associa a queste sezioni un identificatore unico, permettendo di conservare le statistiche correlate alla sezione dopo un riavvio (lo stato della pagina Stats non verrà azzerato). Per salvare le statistiche in un file, è stato aggiunto un nuovo comando "dump stats-file", e per leggere dal file dopo il riavvio è stata introdotta una nuova direttiva di configurazione "stats-file".
- Le funzionalità di bilanciamento dei messaggi Syslog sono state ampliate. È stata aggiunta la possibilità di assegnare coefficienti di peso per le righe di log legate ai server.
- È stata aggiunta la supporto per la formattazione delle righe di log in JSON e CBOR.
- Sono stati ampliati i dati che possono essere ottenuti utilizzando le funzioni di estrazione delle informazioni, ad esempio è possibile richiedere dettagli sul numero di sessioni HTTP aperte per il backend e il frontend, sulle dimensioni della coda di attesa per l'elaborazione delle richieste e sul numero consentito di sessioni simultanee.
- È migliorata la performance degli script Lua a thread singolo caricati tramite la direttiva 'lua-load'.
- È stata notevolmente migliorata la performance delle aree di memorizzazione in memoria create tramite la direttiva stick-table. Ad esempio, su un sistema con 80 thread, la performance è aumentata di 6 volte.
- Nelle configurazioni con più siti, in cui un certificato TLS si sceglie in base all'identificatore dell'host trasmesso tramite l'estensione TLS SNI, è stato aggiunto l'argomento 'default-crt', che consente di specificare un certificato predefinito da utilizzare se non è stato possibile abbinare i certificati disponibili al sito.
- Sono state aggiunte le azioni «set-fc-tos» e «set-bc-tos» per l'inserimento nel backend o frontend nei pacchetti IP del campo DS (Differentiated Services), che determina la priorità del traffico.
- Sono state aggiunte le azioni «set-fc-mark» e «set-bc-mark», che consentono di contrassegnare i pacchetti IP nel backend o frontend, ad esempio, per successiva associazione a una determinata tabella di routing.
- È stato aggiunto il supporto per la creazione di identificativi nel formato UUIDv7.
- È stata realizzata la possibilità di utilizzare il prefisso «@virt» per creare file virtuali ACL e Map, che non vengono salvati su disco. Il contenuto dei file virtuali ACL e Map viene aggiunto e rimosso tramite l'API Runtime. È inoltre disponibile il prefisso «@opt» in cui i file virtuali vengono applicati solo in assenza di un file reale su disco.
- Sono state apportate modifiche che violano la compatibilità retroattiva: è vietato inviare più comandi all'API Runtime in una sola richiesta separando con un carattere di fine riga; è vietato impostare la parola chiave «enabled» per i dinamici. serverÈ stata inasprita la verifica degli URI non standard.
Fonte: opennet.ru
