HTTP preko UDP-a - dobro korištenje QUIC protokola

HTTP preko UDP-a - dobro korištenje QUIC protokola

QUIC (Quick UDP Internet Connections) je protokol na vrhu UDP-a koji podržava sve karakteristike TCP, TLS i HTTP/2 i rješava većinu njihovih problema. Često se naziva novim ili "eksperimentalnim" protokolom, ali je odavno nadživeo eksperimentalnu fazu: razvoj je u toku više od 7 godina. Za to vrijeme 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 proglasio svoju vilicu protokola osnovom za HTTP/3 standard (iako HTTP/2 koristi samo 44.8% web stranice).

Koncept

QUIC je razvijen kao zamjena za naslijeđeni TCP, koji je prvobitno dizajniran za žičane mreže s malim gubicima. TCP isporučuje pakete po redu, tako da ako se jedan paket izgubi, cijeli red se zaustavlja (blokiranje glave linije), što negativno utječe na kvalitetu i stabilnost veze. Da bi se izbjegle masivni gubici, ćelijske mreže pribjegavaju korištenju velikih bafera, što zauzvrat dovodi do redundancije i lažno negativnog odgovora protokola (bufferbloat). Osim toga, TCP troši dosta vremena na uspostavljanje veze: SYN/ACK i TLS zahtjevi se obrađuju odvojeno, zahtijevajući tri povratna puta umjesto jednog, kao što QUIC radi.

HTTP preko UDP-a - dobro korištenje QUIC protokola

Pošto QUIC kombinuje TCP zamenu i implementaciju TLS 1.3, sve veze su uvek šifrovane, a dešifrovanje takvog saobraćaja nije ništa lakše nego da ide preko HTTPS-a. Osim toga, QUIC je implementiran na nivou aplikacije, jer bi bila potrebna potpuna zamjena TCP steka vječnost.

Uprkos podršci za multipleksiranje u HTTP/2, problem blokiranja head-of-line ostao je tu zbog potrebe da se paketi isporučuju po redu. QUIC je implementiran na vrhu UDP-a, tako da u principu nema blokiranja, a kako bi se spriječilo da paketi budu zauvijek izgubljeni, oni su numerirani i mogu sadržavati dijelove "susjeda", što osigurava redundantnost. Osim toga, QUIC dijeli monolitni red u više niti za različite tipove zahtjeva unutar jedne veze. Dakle, ako se paket izgubi, problemi mogu nastati samo za jedan red (na primjer, za prijenos određene datoteke):

HTTP preko UDP-a - dobro korištenje QUIC protokola

Koristite

U početku, QUIC je razvijen u okviru Google-a i uglavnom je bio prilagođen za upotrebu unutar kompanije. 2013. godine je prebačen na IETF na standardizaciju (koja je još u toku), a sada svako može učestvovati u izradi protokola predlažući ono što mu nedostaje. IETF radna grupa organizuje godišnje sastanke tokom kojih se odobrava novi standard i raspravlja o inovacijama. Ova implementacija QUIC-a se smatra glavnom i na njenoj osnovi se certificira HTTP/3 standard.

Za sada nema govora o uključivanju HTTP/3 kao glavnog protokola, jer još nije završen i skoro da nije podržan:

HTTP preko UDP-a - dobro korištenje QUIC protokola

Ali QUIC se može implementirati kao transport između aplikacije i servera, što je uspješno urađeno u Uberu:

Uberov komentar o uvođenju QUIC-a

Da bismo uspješno ugradili QUIC i poboljšali performanse aplikacije u okruženjima sa lošom konektivnošću, zamijenili smo stari stek (HTTP/2 preko TLS/TCP) s QUIC protokolom. Koristili smo mrežnu biblioteku Cronet из Chromium projekti, koji sadrži originalnu, Google verziju protokola - gQUIC. Ova implementacija se također stalno poboljšava kako bi pratila najnoviju IETF specifikaciju.

Prvo smo integrirali Cronet u naše Android aplikacije kako bismo dodali podršku za QUIC. Integracija je obavljena na način da se što više smanje troškovi migracije. Umjesto da u potpunosti zamijenite stari mrežni stog koji je koristio biblioteku OkHttp, integrirali smo Cronet ISPOD OkHttp API okvira. Izvodeći integraciju na ovaj način, izbjegli smo promjene u našim mrežnim pozivima (koje koriste Retrofit) na nivou API-ja.

Slično pristupu za Android uređaje, implementirali smo Cronet u Uber aplikacije na iOS-u, presrećući HTTP promet s mreže APIkoristeći NSURLProtocol. Ova apstrakcija, koju je obezbijedila 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.

uzeto od ovaj prevod Uber članci

Na backendu su uhvatili QUIC veze preko Google Cloud lb, koji podržava protokol od sredine 2018.

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

Nginx

Nedavno CloudFlare Pokušao sam da pređem nginx (koji podrazumevano ne podržava HTTP/3) sa svojim Quiche alatom. Implementacija je dostupna kao jedan .patch fajl, koji dolazi sa uputstvom 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

Sve što ostaje je da omogućite 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';
    }
}

Povezivanje putem HTTP/3 u redovnim pretraživačima još nije moguće, ali možete koristiti Chrome Canary i pokrenite ga sa zastavom --enable-quic, idite na vaš server ili, na primjer, web-mjesto quic.rocks i pogledajte vrstu veze u Alatima za programere:
HTTP preko UDP-a - dobro korištenje QUIC protokola
Umjesto HTTP/3 piše se http2+quic/99, ali to je u suštini ista stvar.

Druge tehnologije

zaključak

HTTP preko UDP-a - dobro korištenje QUIC protokola

Interes za QUIC je nestabilan, ali raste i radi se na njegovoj standardizaciji. Nove implementacije protokola pojavljuju se gotovo svakog mjeseca, a svake godine sve je više programera uvjereno da je QUIC budućnost. Moguće je čak uključiti protokol u buduće verzije TCP steka, š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 pretraživačima - svi oni planiraju dodati podršku za protokol, a tužna statistika s caniuseom će postati veselija.

HTTP preko UDP-a - dobro korištenje QUIC protokola

izvor: www.habr.com

Dodajte komentar