HTTP preko UDP - dobro korištenje QUIC protokola

HTTP preko UDP - dobro korištenje QUIC protokola

QUIC (Quick UDP Internet Connections) je protokol povrh UDP-a koji podržava sve značajke TCP-a, TLS-a i HTTP/2 i rješava većinu njihovih problema. Često se naziva novim ili "eksperimentalnim" protokolom, ali je odavno nadživio eksperimentalnu fazu: razvoj traje više od 7 godina. Tijekom tog vremena protokol nije uspio postati standard, ali je ipak postao široko rasprostranjen. Na primjer, QUIC koriste divovi kao što su Google i Facebook za ubrzavanje prometa i smanjenje kašnjenja u mobilnim mrežama, a IETF je svoj račvanje protokola proglasio osnovom za HTTP/3 standard (iako HTTP/2 koristi samo 44.8% stranice).

koncept

QUIC je razvijen kao zamjena za naslijeđeni TCP, koji je izvorno dizajniran za žičane mreže s malim gubicima. TCP isporučuje pakete redom, tako da ako se jedan paket izgubi, cijeli red se zaustavlja (head-of-line blocking), što negativno utječe na kvalitetu i stabilnost veze. Da bi se izbjegle velike gubitke, mobilne mreže pribjegavaju korištenju velikih međuspremnika, što zauzvrat dovodi do redundancije i lažno negativnog odgovora protokola (bufferbloat). Osim toga, TCP troši puno vremena na uspostavljanje veze: SYN/ACK i TLS zahtjevi obrađuju se odvojeno, zahtijevajući tri kružna putovanja umjesto jednog, kao što to čini QUIC.

HTTP preko UDP - dobro korištenje QUIC protokola

Budući da QUIC kombinira zamjenu TCP-a i implementaciju TLS-a 1.3, sve su veze uvijek šifrirane, a dešifriranje takvog prometa nije lakše nego da ide preko HTTPS-a. Uz to, QUIC je implementiran na razini aplikacije, jer bi bila potrebna potpuna zamjena TCP stoga vječnost.

Unatoč podršci za multipleksiranje u HTTP/2, problem blokiranja head-of-line ostao je prisutan zbog potrebe da se paketi isporučuju redom. QUIC je implementiran povrh UDP-a, tako da u načelu nema blokiranja, a kako bi se spriječio zauvijek gubitak paketa, oni su numerirani i mogu sadržavati dijelove "susjeda", čime se osigurava redundantnost. Uz to, QUIC dijeli monolitni red čekanja u više niti za različite vrste zahtjeva unutar jedne veze. Stoga, ako se paket izgubi, problemi mogu nastati samo za jedan red (na primjer, za prijenos određene datoteke):

HTTP preko UDP - dobro korištenje QUIC protokola

Koristiti

U početku je QUIC razvijen unutar Googlea i bio je u velikoj mjeri prilagođen za korištenje unutar tvrtke. 2013. je prebačen na IETF na standardizaciju (koja još uvijek traje), a sada svatko može sudjelovati u razvoju protokola predlažući ono što mu nedostaje. Radna skupina IETF-a organizira godišnje sastanke tijekom kojih se odobrava novi standard i raspravlja o inovacijama. Ova implementacija QUIC-a smatra se glavnom i na njoj je certificiran HTTP/3 standard.

Zasad nema govora o uključivanju HTTP/3 kao glavnog protokola, jer još nije gotov i gotovo da nije podržan:

HTTP preko UDP - dobro korištenje QUIC protokola

Ali QUIC se može implementirati kao prijenos između aplikacije i poslužitelja, što je Uber uspješno napravio:

Uberov komentar na uvođenje QUIC-a

Kako bismo uspješno ugradili QUIC i poboljšali izvedbu aplikacije u okruženjima s lošom povezanošću, zamijenili smo stari stog (HTTP/2 preko TLS/TCP) s QUIC protokolom. Koristili smo mrežnu knjižnicu Cronet od Chromium projekti, koji sadrži originalnu, Google verziju protokola - gQUIC. Ova implementacija se također stalno poboljšava kako bi slijedila najnoviju IETF specifikaciju.

Prvo smo integrirali Cronet u naše Android aplikacije kako bismo dodali podršku za QUIC. Integracija je provedena na način da se maksimalno smanje troškovi migracije. Umjesto potpune zamjene starog mrežnog stoga koji je koristio knjižnicu OkHttp, integrirali smo Cronet POD OKHttp API framework. Izvodeći integraciju na ovaj način, izbjegli smo promjene u našim mrežnim pozivima (koje koriste Retrofit) na razini API-ja.

Slično pristupu za Android uređaje, implementirali smo Cronet u Uberove aplikacije na iOS-u, presrećući HTTP promet s mreže APIkoristeći NSURLProtocol. Ova apstrakcija, koju pruža iOS Foundation, obrađuje URL podatke specifične za protokol i osigurava da možemo integrirati Cronet u naše iOS aplikacije bez značajnih troškova migracije.

preuzeto iz ovaj prijevod Uber članci

Na pozadini su uhvatili QUIC veze putem Google Cloud lb, što podržava protokol od sredine 2018.

Nije iznenađenje da Google Cloud odlično radi s protokolom koji je razvio Google, ali koje su alternative?

Nginx

Nedavno CloudFlare Pokušao sam prijeći nginx (koji prema zadanim postavkama ne podržava HTTP/3) sa svojim Quiche alatom. Implementacija je dostupna kao jedna datoteka .patch koja dolazi s vodičem za instalaciju:

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

Ovdje možete spojiti svoje module ako je potrebno

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

Ostaje samo omogućiti HTTP/3 podršku

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';
    }
}

Još nije moguće povezati se putem HTTP/3 u običnim preglednicima, ali možete koristiti Chrome Canary i trči ga sa zastavom --enable-quic, idite na svoj poslužitelj ili, na primjer, stranicuquic.rocks i pogledajte vrstu veze u alatima za razvojne programere:
HTTP preko UDP - dobro korištenje QUIC protokola
Umjesto HTTP/3 je napisano http2+quic/99, ali to je u biti ista stvar.

Ostale tehnologije

Zaključak

HTTP preko UDP - dobro korištenje QUIC protokola

Interes za QUIC je nestabilan, ali raste i radi se na njegovoj standardizaciji. Nove implementacije protokola pojavljuju se gotovo svaki mjesec, a svake godine sve je više programera uvjerenih da je QUIC budućnost. Moguće je čak uključiti protokol u buduće verzije TCP stacka, što znači da će prije ili kasnije cijeli Internet prijeći na stabilnije i brže veze.

Već sada možete konfigurirati QUIC interakciju za svoju infrastrukturu ili je čak dati preglednicima - svi oni planiraju dodati podršku za protokol, a tužna statistika s caniuseom postat će veselija.

HTTP preko UDP - dobro korištenje QUIC protokola

Izvor: www.habr.com

Dodajte komentar