HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

QUIC (Quick UDP Internet Connections) on UDP:n päällä oleva protokolla, joka tukee kaikkia TCP:n, TLS:n ja HTTP/2:n ominaisuuksia ja ratkaisee suurimman osan niiden ongelmista. Sitä kutsutaan usein uudeksi tai "kokeelliseksi" protokollaksi, mutta se on kestänyt kokeellisen vaiheen kauan: kehitystä on jatkunut yli 7 vuotta. Tänä aikana protokolla ei onnistunut tulemaan standardiksi, mutta siitä tuli silti laajalle levinnyt. Esimerkiksi Googlen ja Facebookin kaltaiset jättiläiset käyttävät QUIC:ia nopeuttamaan liikennettä ja vähentämään viiveitä mobiiliverkoissa, ja IETF julisti protokollan haaransa HTTP/3-standardin perustaksi (vaikka HTTP/2 käyttää vain 44.8% sivustot).

Käsite

QUIC kehitettiin korvaamaan vanhan TCP:n, joka oli alun perin suunniteltu pienihäviöisille langallisille verkoille. TCP toimittaa paketit järjestyksessä, joten jos yksi paketti katoaa, koko jono pysähtyy (linjan pään esto), mikä vaikuttaa negatiivisesti yhteyden laatuun ja vakauteen. Massiivisten häviöiden välttämiseksi solukkoverkot turvautuvat suurten puskureiden käyttöön, mikä puolestaan ​​johtaa redundanssiin ja väärään negatiiviseen protokollaan (puskurointi). Lisäksi TCP käyttää paljon aikaa yhteyden muodostamiseen: SYN/ACK- ja TLS-pyynnöt käsitellään erikseen, mikä vaatii kolme kiertoa yhden sijaan, kuten QUIC tekee.

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

Koska QUIC yhdistää TCP-korvauksen ja TLS 1.3:n toteutuksen, kaikki yhteydet ovat aina salattuja, eikä tällaisen liikenteen salauksen purku ole helpompaa kuin jos se menisi HTTPS:n yli. Lisäksi QUIC on toteutettu sovellustasolla, koska TCP-pinon täydellinen korvaaminen vaatisi ikuisuus.

Huolimatta HTTP/2:n multipleksoinnin tuesta, pää-of-line-eston ongelma jäi siihen, koska paketit piti toimittaa järjestyksessä. QUIC on toteutettu UDP:n päälle, joten siinä ei periaatteessa ole estoa, ja jotta paketit eivät katoa ikuisesti, ne on numeroitu ja voivat sisältää osia "naapureista", mikä tarjoaa redundanssin. Lisäksi QUIC jakaa monoliittisen jonon useiksi säikeiksi erityyppisiä pyyntöjä varten yhden yhteyden sisällä. Siten jos paketti katoaa, ongelmia voi ilmetä vain yhdelle jonolle (esimerkiksi tietyn tiedoston siirtämisessä):

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

Käyttää

Aluksi QUIC kehitettiin Googlessa, ja se oli pitkälti räätälöity käytettäväksi yrityksen sisällä. Vuonna 2013 se siirrettiin IETF:lle standardointia varten (joka on edelleen käynnissä), ja nyt jokainen voi osallistua protokollan kehittämiseen ehdottamalla, mitä häneltä puuttuu. IETF-työryhmä järjestää vuosittain kokouksia, joissa hyväksytään uusi standardi ja keskustellaan innovaatioista. Tätä QUIC-toteutusta pidetään tärkeimpänä, ja sen perusteella HTTP/3-standardi on sertifioitu.

Toistaiseksi ei ole puhuttu HTTP/3:n sisällyttämisestä pääprotokollaksi, koska se ei ole vielä valmis ja sitä ei juuri tueta:

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

Mutta QUIC voidaan toteuttaa kuljetuksena sovelluksen ja palvelimen välillä, mikä onnistui Uberissa:

Uberin kommentti QUICin käyttöönotosta

QUIC:n upottaminen onnistuneesti ja sovellusten suorituskyvyn parantaminen huonoissa yhteysympäristöissä korvasi vanhan pinon (HTTP/2 over TLS/TCP) QUIC-protokollalla. Käytimme verkkokirjastoa Cronet ja Chromium-projektit, joka sisältää protokollan alkuperäisen Google-version - gQUIC. Tätä toteutusta myös parannetaan jatkuvasti uusimman IETF-spesifikaation mukaisesti.

Integroimme ensin Cronetin Android-sovelluksiimme QUIC-tuen lisäämiseksi. Integraatio toteutettiin siten, että muuttokustannukset pienenivät mahdollisimman paljon. Sen sijaan, että kirjastoa käyttänyt vanha verkkopino korvattaisiin kokonaan OkHttp, olemme integroineet Cronetin OkHttp API -kehykseen. Tekemällä integroinnin tällä tavalla vältimme muutoksia verkkopuheluihimme (jotka käyttävät Uusinnat) API-tasolla.

Android-laitteiden tapaan otimme Cronetin käyttöön iOS:n Uber-sovelluksiin sieppaamalla HTTP-liikenteen verkosta. APIkäyttämällä NSURL-protokolla. Tämä iOS Foundationin tarjoama abstraktio käsittelee protokollakohtaisia ​​URL-tietoja ja varmistaa, että voimme integroida Cronetin iOS-sovelluksiimme ilman merkittäviä siirtokustannuksia.

otettu tämä käännös Uber-artikkeleita

Taustalla he saivat QUIC-yhteyksiä Google Cloud lb:n kautta, mikä tukee protokollaa vuoden 2018 puolivälistä lähtien.

Ei ole yllätys, että Google Cloud toimii hyvin Googlen kehittämän protokollan kanssa, mutta mitkä ovat vaihtoehdot?

nginx

Ei kauan sitten CloudFlare Yritin ylittää nginx (joka ei tue HTTP/3:a oletuksena) Quiche-työkalullaan. Toteutus on saatavana yhtenä .patch-tiedostona, jonka mukana tulee asennusopas:

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

Täällä voit liittää moduulit tarvittaessa

./configure                          	
   	--prefix=$PWD                       	
   	--with-http_ssl_module              	
   	--with-http_v2_module               	
   	--with-http_v3_module               	
   	--with-openssl=../quiche/deps/boringssl 
   	--with-quiche=../quiche
 make

Jäljelle jää vain ottaa HTTP/3-tuki käyttöön

events {
    worker_connections  1024;
}

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Request buffering in not currently supported for HTTP/3.
        proxy_request_buffering off;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Yhteyden muodostaminen HTTP/3:n kautta ei vielä ole mahdollista tavallisissa selaimissa, mutta voit käyttää Chrome Canary ja ajaa sitä lipun kanssa --enable-quic, siirry palvelimellesi tai esimerkiksi quic.rocks-sivustolle ja katso yhteystyyppiä Kehittäjätyökaluissa:
HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen
HTTP/3:n sijaan se kirjoitetaan http2+quic/99, mutta se on pohjimmiltaan sama asia.

Muut tekniikat

  • QUIC tukee myös LiteSpeed (joka liittyi Facebookiin HTTP/3:n kautta suurella fanfaarilla) ja progressiivinen Mailapoika. Apache ei voi tehdä sitä vielä, mutta työ on käynnissä täydessä vauhdissa.
  • 21. tammikuuta päivitetty WebRTC:n standardiluonnos
  • Juuri toissapäivänä Microsoft avautui msquic-toteutuskoodi, jossa kaikki IETF-standardin toiminnot eivät ole vielä saatavilla, mutta tämä on jo suuri läpimurto.

Johtopäätös

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

Kiinnostus QUICia kohtaan on epävakaa, mutta kasvaa, ja sen standardoiminen on käynnissä. Protokollan uusia toteutuksia ilmestyy lähes joka kuukausi, ja joka vuosi yhä useammat kehittäjät ovat vakuuttuneita siitä, että QUIC on tulevaisuus. Protokolla on jopa mahdollista sisällyttää tuleviin TCP-pinon versioihin, mikä tarkoittaa, että ennemmin tai myöhemmin koko Internet siirtyy vakaampiin ja nopeampiin yhteyksiin.

Jo nyt voit määrittää QUIC-vuorovaikutuksen infrastruktuurillesi tai jopa antaa sen selaimille - ne kaikki suunnittelevat lisäävänsä protokollan tuen, ja surulliset tilastot caniusen kanssa muuttuvat iloisemmiksi.

HTTP UDP:n kautta - QUIC-protokollan hyvä hyödyntäminen

Lähde: will.com

Lisää kommentti