HTTP/TCP-tasapainottimen HAProxy 2.0 julkaisu

julkaistu kuormantasaajan vapautus HA-välityspalvelin 2.0, jonka avulla voit jakaa HTTP-liikennettä ja mielivaltaisia ​​TCP-pyyntöjä palvelinryhmän kesken ottaen huomioon monet tekijät (esimerkiksi se tarkistaa palvelimien saatavuuden, arvioi kuormitustasoa, on DDoS-vastatoimia) ja suorittaa ensisijaisen datasuodatuksen ( Voit esimerkiksi jäsentää HTTP-otsikoita, suodattaa virheellisiä kyselyparametreja, estää SQL- ja XSS-korvaukset, yhdistää sisällönkäsittelyagentteja). HAProxy voi myös Käytä koordinoida komponenttien vuorovaikutusta mikropalveluarkkitehtuuriin perustuvissa järjestelmissä. Projektin koodi on kirjoitettu C- ja toimitetaan lisensoitu GPLv2:lla. Projektia käytetään monilla suurilla sivustoilla, kuten Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter ja Vimeo.

Tärkeimmät julkaisuominaisuudet:

  • Uusi API esitelty Data suunnitelma, jonka avulla voit hallita HAProxy-asetuksia lennossa REST Web API:n kautta. Mukaan lukien, voit dynaamisesti lisätä ja poistaa taustaohjelmia ja palvelimia, luoda ACL-luetteloita, muuttaa pyyntöjen reititystä, muuttaa käsittelijän sidoksia IP-osoitteeksi;
  • Lisätty nbthread-direktiivi, jonka avulla voit määrittää HAProxyssa käytettävien säikeiden määrän optimoimaan suorituskykyä moniytimisissä prosessoreissa. Oletuksena työsäikeiden määrä valitaan nykyisessä ympäristössä käytettävissä olevien CPU-ytimien mukaan, ja pilviympäristöissä oletusarvo on yksi säie. Kovien rajojen asettamiseksi on lisätty kokoonpanovaihtoehdot MAX_THREADS ja MAX_PROCS, mikä rajoittaa säikeiden ja prosessien lukumäärän ylärajaa.
  • Sidosdirektiivin käyttöä käsittelijöiden sitomiseen verkko-osoitteisiin on yksinkertaistettu. Asetuksissa ei enää tarvitse määrittää prosessiparametreja - oletusarvoisesti yhteydet jaetaan säikeiden kesken aktiivisten yhteyksien lukumäärän mukaan.
  • Lokien määrittäminen ajettaessa eristetyissä säilöissä on yksinkertaistettu - loki voidaan nyt lähettää stdout- ja stderr-tiedostoihin sekä mihin tahansa olemassa olevaan tiedostokuvaajaan (esim. "log fd@1 local0");
  • HTX (Native HTTP Representation) -tuki on oletusarvoisesti käytössä, mikä mahdollistaa tasapainotuksen käytettäessä edistyneitä ominaisuuksia, kuten päästä päähän HTTP/2, Layer 7 Retries ja gRPC. HTX ei korvaa otsikoita paikoillaan, mutta vähentää muokkaustoiminnon poistamalla ja lisäämällä uuden otsikon luettelon loppuun, jolloin voit manipuloida HTTP-protokollan laajennettuja muunnelmia, säilyttää otsikoiden alkuperäisen semantiikan ja antaa sinulle mahdollisuuden paremman suorituskyvyn saavuttamiseksi, kun HTTP/2 käännetään HTTP/1.1:ksi ja päinvastoin;
  • Lisätty virallinen tuki End-to-End HTTP/2-tilalle (kaikki HTTP/2-vaiheet, mukaan lukien kutsut taustajärjestelmään, ei vain välityspalvelimen ja asiakkaan välinen vuorovaikutus);
  • Täysi tuki gRPC-protokollan kaksisuuntaiselle välityspalvelimelle on otettu käyttöön mahdollisuudella jäsentää gRPC-virtoja, korostaa yksittäisiä viestejä, heijastaa gRPC-liikennettä lokissa ja suodattaa viestejä ACL:ien avulla. gRPC:n avulla voit järjestää mikropalveluiden työn eri ohjelmointikielillä, jotka ovat vuorovaikutuksessa keskenään yleisen API:n avulla. Verkkoviestintä gRPC:ssä on toteutettu HTTP/2-protokollan päälle ja perustuu protokollapuskurien käyttöön tietojen sarjoituksessa.
  • Lisätty tuki "Layer 7 Retries" -tilalle, jonka avulla voit lähettää toistuvia HTTP-pyyntöjä ohjelmistovirheiden yhteydessä, jotka eivät liity verkkoyhteyden muodostamiseen liittyviin ongelmiin (esimerkiksi jos vastausta ei ole tai vastaus on tyhjä POST-pyyntö). Tilan poistamiseksi käytöstä "disable-l7-retry" -lippu on lisätty "http-pyyntö" -vaihtoehtoon ja "retry-on" -vaihtoehto on lisätty oletus-, kuuntelu- ja taustaosien hienosäätöä varten. Seuraavat merkit ovat käytettävissä uudelleenlähetystä varten: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, sekä sitoutuminen palautustilakoodeihin (404 jne.) ;
  • Uusi prosessinhallinta on otettu käyttöön, jonka avulla voit määrittää ulkoisten suoritettavien tiedostojen kutsumisen HAProxyn käsittelijillä.
    Esimerkiksi Data Plan API (/usr/sbin/dataplaneapi) sekä erilaiset Offload-virrankäsittelykoneet on toteutettu tällaisen ulkoisen käsittelijän muodossa;

  • NET Corelle, Golle, Lualle ja Pythonille on lisätty sidoksia SPOE (Stream Processing Offload Engine) ja SPOP (Stream Processing Offload Protocol) -laajennusten kehittämiseksi. Aiemmin laajennuskehitystä tuettiin vain C;
  • Lisätty ulkoinen spoa-peilikäsittelijä (/usr/sbin/spoa-mirror) pyyntöjen peilaamiseksi erilliseen palvelimeen (esimerkiksi osan tuotantoliikenteen kopioimiseksi kokeellisen ympäristön testaamiseksi todellisessa kuormituksessa);
  • Lähettäjä HAProxy Kubernetes Ingress Controller varmistaa integraatio Kubernetes-alustan kanssa;
  • Lisätty sisäänrakennettu tuki tilastojen viennille seurantajärjestelmään Prometheus;
  • Peers-protokollaa, jota käytetään tietojen vaihtamiseen muiden HAProxya käyttävien solmujen kanssa, on laajennettu. Sisältää lisätyn Heartbeatin ja salatun tiedonsiirron tuen;
  • "Sample"-parametri on lisätty "loki"-direktiiviin, jonka avulla voit tallentaa lokiin vain osan pyynnöistä, esimerkiksi 1/10, analyyttisen näytteen muodostamiseksi;
  • Lisätty automaattinen profilointitila (profiling.tasks-direktiivi, joka voi ottaa arvot auto, päälle ja pois). Automaattinen profilointi on käytössä, jos keskimääräinen latenssi ylittää 1000 ms. Profilointitietojen katselua varten Runtime API:hen on lisätty "näytä profilointi" -komento tai on mahdollista nollata tilastot lokiin;
  • Lisätty tuki taustapalvelimien käyttämiselle SOCKS4-protokollan avulla;
  • Lisätty päästä päähän -tuki TCP-yhteyksien nopean avaamisen mekanismille (TFO - TCP Fast Open, RFC 7413), jonka avulla voit vähentää yhteydenmuodostusvaiheiden määrää yhdistämällä ensimmäinen yhdeksi pyynnöksi ja toinen vaihe klassinen 3-vaiheinen yhteysneuvotteluprosessi ja mahdollistaa tiedon lähettämisen yhteyden muodostamisen alkuvaiheessa;
  • Uusia toimintoja lisätty:
    • "http-pyyntö korvaa-uri" korvaa URL-osoitteen säännöllisellä lausekkeella;
    • "tcp-request content do-resolve" ja "http-request do-resolve" isäntänimen ratkaisemiseksi;
    • "tcp-request content set-dst" ja "tcp-request content set-dst-port" korvaavat kohde-IP-osoitteen ja -portin.
  • Lisätty uusia muunnosmoduuleja:
    • aes_gcm_dev virtojen salauksen purkamiseen AES128-GCM-, AES192-GCM- ja AES256-GCM-algoritmeilla;
    • protobuf kenttien poimimiseksi protokollapuskuriviesteistä;
    • ungrpc poimimaan kentät gRPC-viesteistä.

    Lähde: opennet.ru

Lisää kommentti