Megjelent a HAProxy 2.0 HTTP/TCP terhelésmegosztó.

Megjelent terheléselosztó kiadás HAProxy 2.0, amely lehetővé teszi a HTTP-forgalom és 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édelmi eszközökkel) és végzi az adatok elsődleges szűrését (például képes elemezni a HTTP-fejléceket, szűrni a hibás kérésparaméterek átadását, blokkolni az SQL-injekciót és XSS-t, csatlakoztatni a tartalomfeldolgozó ügynököket). Az HAProxy szintén képes MITM végrehajtására, de blokkolódnak a Firefox tanúsítvány-tárolójának használatakor); a komponensek kölcsönhatásának koordinálására mikroszolgáltatásokra épülő rendszerekben. A projekt kódja C nyelven íródott és szállítva van GPLv2 licenc alatt áll. A projektet számos nagy weboldalon használják, beleértve az Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter és Vimeo oldalakat.

A kiadás fontos jellemzői:

  • Új API került bemutatásra Data Plan, amely lehetővé teszi a HAProxy beállításainak élő kezelését REST Web API-n keresztül. Beleértve lehetőség van backendek és szerverek dinamikus hozzáadására és eltávolítására, ACL-k létrehozására, kérések irányításának módosítására, a kezelők IP-hez való kötésének megváltoztatására;
  • Hozzáadva a nbthread direktíva, amely lehetővé teszi a HAProxy által használt szálak számának beállítását a többmagos CPU-k optimalizálása érdekében. Alapértelmezés szerint a munkaszálak száma a jelenlegi környezet CPU-magjainak számától függően kerül meghatározásra, míg felhőalapú környezetek esetében alapértelmezés szerint egy szál van beállítva. Szoros határok megadásához MAX_THREADS és MAX_PROCS összerendelési lehetőségek lettek hozzáadva, amelyek korlátozzák a szálak és folyamatok számának felső határát;
  • Egyszerűsítve a bind direktíva használata a kezelők hálózati címekhez való kötésére. A beállítás során nem szükséges a folyamat paramétereinek meghatározása — alapértelmezés szerint a kapcsolatok a szálak között fognak megoszlani az aktív kapcsolatok száma alapján.
  • Egyszerűsítve a naplók beállítása elszigetelt konténerek indításakor — a napló most már a stdout és stderr irányába, valamint bármely létező fájleltérre közvetíthető (például „log fd@1 local0”);
  • Alapértelmezetten engedélyezve van az HTX (Native HTTP Representation) támogatás, amely lehetővé teszi a terheléselosztást kiterjesztett funkcionalitások, például end-to-end HTTP/2, Layer 7 Retry és gRPC alkalmazásával. Az HTX nem helyettesíti a fejlécet a helyén, hanem az adattitkosítást új fejléc hozzáadásával és a régi eltávolításával végzi a lista végén, lehetővé téve bármilyen kiterjesztett HTTP protokollvariáns manipulálását, megőrzi a fejléc eredeti szemantikáját, és jobb teljesítmény elérését teszi lehetővé az HTTP/2 HTTP/1.1-re és viszont történő közvetítésekor.
  • Hivatalosan hozzáadva a végpontok közötti HTTP/2 üzemmód támogatása (minden szakasz kezelése HTTP/2-ben, beleértve a háttérszolgáltatásokkal való kapcsolódást is, nem csak a proxy és az ügyfél közötti interakciót);
  • Teljes gRPC protokoll kétirányú proxyzási támogatás bevezetve gRPC folyamok elemzésével, egyedi üzenetek kiemelésével, a gRPC forgalom naplózásával és üzenetek szűrésével ACL segítségével. A gRPC lehetővé teszi a különböző programozási nyelveken írt mikroszolgáltatások működését, amelyek egy univerzális API-n keresztül kommunikálnak egymással. A gRPC hálózati interakciója a HTTP/2 protokoll fölött valósul meg, és a Protocol Buffers adatsorozásához épül.
  • A „Layer 7 Retry” üzemmód támogatása hozzáadva, lehetővé téve HTTP kérések újraküldését programhibák esetén, amelyek nem kapcsolódnak a hálózati kapcsolat létesítésének problémáihoz (például ha nincs válasz, vagy üres válasz érkezik a POST kérésre). Az üzemmód kikapcsolásához az „http-request” opcióhoz hozzáadtuk a „disable-l7-retry” ismérvét, míg a finomhangoláshoz a defaults, listen és backend szekciókhoz új opció, a „retry-on” került. Az újraküldéshez az alábbi ismérvek érhetők el: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, valamint a visszatérő állapotkódokkal való összekapcsolás (404 és hasonlók);
  • Új folyamatkezelőt (Process Manager) valósítottunk meg, amely lehetővé teszi külső végrehajtható fájlok meghívásának kezelését az HAProxy számára.
    Például külső feldolgozóként valósult meg az API Data Plan (/usr/sbin/dataplaneapi), valamint különféle Offload-folyamatkezelő motorok;
  • .NET Core, Go, Lua és Python számára hozzáadva az SPOE (Stream Processing Offload Engine) és SPOP (Stream Processing Offload Protocol) kiterjesztések fejlesztéséhez szükséges kötödések. Korábban a kiterjesztés fejlesztése csak C nyelven volt támogatott;
  • Hozzáadtunk egy külső feldolgozót spoa-mirror (\/usr\/sbin\/spoa-mirror) a kérések egy külön szerverre való tükörre állításához (például a munkafolyamat egy részének másolásához az kísérleti környezet valós terhelés mellett történő tesztelésére);
  • Bemutatva HAProxy Kubernetes Ingress Controller a Kubernetes platform integrációjának biztosítása érdekében;
  • Beépített támogatást kapott a statisztikák exportálásához a monitoring rendszerbe Prometheus;
  • Kiterjesztettük a Peers Protocol protokollt, amelyet más csomópontokkal való információcserére használnak az HAProxy-val. Beleértve a Heartbeat és a titkosított adatátvitel támogatását;
  • A "log" direktívához hozzáadtuk a "sample" paramétert, amely lehetővé teszi, hogy csak egy részét a kéréseknek rögzítsük a naplóban, például 1 az 10-ből, elemző minták képzésére;
  • Hozzáadtunk egy automatikus profilozási módot (profiling.tasks direktíva, amely auto, on és off értékeket vehet fel). Az automatikus profilozás akkor aktiválódik, ha a késleltetés átlagos értéke meghaladja az 1000 ms-ot. A profilozási adatok megtekintésére a Runtime API-ban hozzáadtuk a "show profiling" parancsot, vagy lehetőség van a statisztikák naplózására;
  • Hozzáadtuk a b_backend szerverek elérésének támogatását SOCKS4 protokollal;
  • Hozzáadtuk a végponttól végpontig (end-to-end, a kérelem feldolgozásának útvonalán, beleértve a backend-et) a TCP-kapcsolatok gyors megnyitásának (TFO — TCP Fast Open, RFC 7413) támogatását, amely lehetővé teszi a kapcsolat létesítési lépések számának csökkentését az első és második lépés egy lépésbe való kombinálásával a klasszikus 3 lépéses kapcsolat-párbeszéd folyamatában, és lehetőséget ad az adatok elküldésére a kapcsolat létesítési fázis kezdetén;
  • Új műveletek kerültek hozzáadásra:
    • "http-request replace-uri" URL-cím cseréje reguláris kifejezés használatával;
    • "tcp-request content do-resolve" és "http-request do-resolve" a gazdagép nevének feloldására;
    • "tcp-request content set-dst" és "tcp-request content set-dst-port" a cél IP-cím és port helyettesítésére.
  • Új konvertáló modulok kerültek hozzáadásra:
    • aes_gcm_dev minták AES128-GCM, AES192-GCM és AES256-GCM algoritmusokkal történő dekódolásra;
    • protobuf a Protocol Buffers üzenetek mezőinek kiemelésére;
    • ungrpc a gRPC üzenetek mezőinek kiemelésére.

    Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster