Öt évvel a 2.0 ág létrehozása után megjelent a HAProxy 3.0 terheléselosztó verziója, amely lehetővé teszi a HTTP-forgalom és a tetszőleges TCP-kérések elosztását egy szervercsoport között, figyelembe véve számos tényezőt (például ellenőrzi a szerverek elérhetőségét, értékeli a terhelési szintet, rendelkezik DDoS elleni védekezési eszközökkel) és végrehajtva az adatok előzetes szűrését (például képes HTTP-fejlécek elemezésére, hibás kérésparaméterek kiszűrésére, SQL beszúrás és XSS blokkolására, tartalomfeldolgozó ügynökök bekötésére). A HAProxy mikroszolgáltatás-architektúrák alapján működő rendszerek komponenseinek kölcsönhatásának koordinálására is használható. A projekt kódját C nyelven írták, és GPLv2 licenc alatt érhető el. A projektet számos nagy weboldalon használják, többek között az Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter és Vimeo.
A HAProxy 3.0 ág a hosszú távú támogatású (LTS) kiadásokhoz került, és 2029-ig lesz karbantartva. Kulcsfontosságú változások:
- A konfigurációhoz új "crt-store" szekció került hozzáadásra a TLS-tanúsítványok tárolásának és használatának beállításához. A korábban elérhető "crt-list" beállításhoz képest a crt-store tanúsítványtárolója el van választva azok frontend használatától, lehetővé téve az egyes tanúsítványkomponensek (tanúsítványfájlok, kulcsok és OCSP adatok) tárolásának egyedi megadását.
- Lehetőség nyílt korlátozások megadására HTTP/2 kérésekkel kapcsolatban, amelyeket a protokoll enged, de problémákat okozhatnak. Például a CONTINUATION képkockák küldése DoS-támadásokat okozhat (Continuation flood).
- Új "guid" konfigurációs direktíva került hozzáadásra, amely használható a "frontend", "backend" és "listen" szekciókban. A direktíva egyedi azonosítót köt ezekhez a szekciókhoz, lehetővé téve a szekcióhoz kapcsolódó statisztikák megőrzését újraindítás után (a Statisztika állapot nem kerül visszaállításra). A statisztika fájlba való mentésére új "dump stats-file" parancs került bevezetésre, míg új "stats-file" konfigurációs direktíva került hozzáadásra a fájlból való olvasásra a újraindítást követően.
- A Syslog üzenetek terheléselosztási lehetőségei kibővültek. Lehetőség nyílt súlyozott tényezők megadására a backendekkel kapcsolatos szerver sorokhoz.
- JSON és CBOR megjelenítésben támogatást kaptak a log sorok formázásához.
- Bővítettük az információkinyerési funkciók által elérhető adatokat, például kérhetjük az HTTP-munkamenetek számát a háttér- és frontendhez, a kérés feldolgozására várakozó sor méretét és a megengedett egyidejű munkamenetek számát.
- Javítottuk az egy szálú Lua-személyzeti teljesítményét, amely a 'lua-load' direktíva segítségével kerül betöltésre.
- Jelentősen javítottuk a stick-table direktíva használatával létrehozott memóriaterületek teljesítményét. Például egy 80 szálas rendszeren a teljesítmény hattal nőtt.
- Több webhellyel rendelkező konfigurációkban, amelyek TLS-tanúsítvány a TLS SNI kiterjesztés által továbbított host-azonosító alapján kerülnek kiválasztásra, hozzáadtunk egy 'default-crt' argumentumot, amely lehetővé teszi az alapértelmezett tanúsítvány megadását, amelyet akkor választanak, ha a meglévő tanúsítványok nem egyeznek a webhellyel.
- Új 'set-fc-tos' és 'set-bc-tos' műveletek kerültek hozzáadásra, amelyek segítségével be lehet állítani a DS (Differentiated Services) mezőt az IP-csomagokban a háttér- vagy frontend oldalon, meghatározva a forgalom prioritását.
- Hozzáadtuk a 'set-fc-mark' és 'set-bc-mark' műveleteket, amelyek lehetővé teszik az IP-csomagok megjelölését a háttér- vagy frontend oldalon, például egy adott útvonal-táblához való későbbi hozzárendelés céljából.
- Támogatást kaptak az UUIDv7 formátumban történő azonosítók létrehozásához.
- Lehetőség nyílt az '@virt' prefix használatára virtuális ACL és Map fájlok létrehozásához, amelyek nem kerülnek tárolásra a lemezen. A virtuális ACL és Map fájlok tartalmát a Runtime API segítségével adjuk hozzá és távolítjuk el. Ezenkívül elérhető az '@opt' prefix, amelynél a virtuális fájlok csak akkor alkalmazhatók, ha a tényleges fájl nem található a lemezen.
- Visszamenőleges kompatibilitást sértő változások történtek: a Runtime API-ba egy kérésben több parancs küldése tilos, amelyet új sorral választunk el; a dinamikus szerverek; szigorították az egyedi URI-k ellenőrzését.
Forrás: opennet.ru
