HTTP preko UDP - iskoristite protokol QUIC

HTTP preko UDP - iskoristite protokol QUIC

QUIC (Quick UDP Internet Connections) - protokol na UDP razini koji podržava sve mogućnosti TCP, TLS i HTTP/2, rješavajući većinu njihovih problema. Često ga nazivaju novim ili "eksperimentalnim" protokolom, ali je već dugo vremena izvan faze eksperimenta: razvoj traje više od 7 godina. Tijekom tog razdoblja, protokol nije postao standard, no ipak je stekao široku primjenu. Na primjer, QUIC koriste za ubrzavanje prometa i smanjenje latencije u mobilnim mrežama giganti poput Googlea i Facebooka, dok je IETF proglasio svoj fork protokola temeljem za standard HTTP/3 (uz napomenu da HTTP/2 koristi samo 44.8% web stranica).

Koncept

QUIC je razvijen kao zamjena za zastarjeli TCP, koji je prvotno bio prilagođen žičanim mrežama s niskim postotkom gubitaka. TCP isporučuje pakete redom, pa uslijed gubitka jednog paketa cijela se linija zastoja. (head-of-line blocking) što negativno utječe na kvalitetu i stabilnost veze. Kako bi izbjegle masovne gubitke, mobilne mreže pribjegavaju korištenju velikih bafera, što zauzvrat dovodi do suvišnosti i lažno negativne reakcije protokola (bufferbloat). Osim toga, TCP troši previše vremena za uspostavljanje veze: SYN/ACK i TLS zahtjevi idu odvojeno, zahtijevajući tri roundtrip-a umjesto jednog, kao što to radi QUIC.

HTTP preko UDP - iskoristite protokol QUIC

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

Unatoč podršci za multiplexiranje u HTTP/2, problem head-of-line blocking ostaje zbog potrebe za isporukom paketa redom. QUIC je implementiran preko UDP-a, pa nema zastoja, a kako paketi ne bi trajno gubili, numeriraju se i mogu sadržavati dijelove "susjeda", osiguravajući redundanciju. Također, QUIC dijeli monolitnu liniju na nekoliko tokova za različite vrste zahtjeva unutar jedne veze. Tako, u slučaju gubitka paketa, problemi se mogu javiti samo kod jedne linije (na primjer, pri prijenosu određenog datoteka):

HTTP preko UDP - iskoristite protokol QUIC

Korištenje

QUIC je prvotno razvijen unutar Googlea i bio je prilagođen za internu upotrebu. Godine 2013. prebačen je u IETF radi standardizacije (koja još uvijek traje), te ga sada svatko može unaprijediti predlaganjem onoga što mu nedostaje. IETF radna skupina svake godine organizira sastanke na kojima se odobrava novi standard i raspravlja o inovacijama. Ova implementacija QUIC smatra se osnovnom i na temelju nje se certificira standard HTTP/3.

Za sada se ne razmatra uključivanje HTTP/3 kao glavnog protokola, jer nije dovršen i gotovo se uopće ne podržava:

HTTP preko UDP - iskoristite protokol QUIC

Međutim, QUIC se može implementirati kao transport između aplikacije i servera, što je s uspjehom učinjeno u Uberu:

Uberov komentar o implementaciji QUIC-a

Kako bismo uspješno integrirali QUIC i poboljšali performanse aplikacije u uvjetima loše veze, zamijenili smo stari sloj (HTTP/2 preko TLS/TCP) s protokolom QUIC. Iskoristili smo mrežnu biblioteku Cronet iz Chromium Projects, koja sadrži originalnu Googleovu verziju protokola – gQUIC. Ova se implementacija također neprekidno poboljšava kako bi pratila najnoviju specifikaciju IETF-a.

Najprije smo integrirali Cronet u naše Android aplikacije kako bismo dodali podršku za QUIC. Integracija je izvedena na način koji minimalizira troškove migracije. Umjesto da u potpunosti zamijenimo stari mrežni sloj koji je koristio biblioteku OkHttp, integrirali smo Cronet ispod OkHttp API okvira. Izvršenjem integracije na ovaj način izbjegli smo promjene u našim mrežnim pozivima (koji koriste Retrofit) na razini API-ja.

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

uzeto iz ovog prevedenog Uber članka

Na back-endu su primali QUIC veze preko Google Cloud lb, koji podržava protokol od sredine 2018. godine.

Nije iznenađujuće da Google Cloud dobro surađuje s protokolom koji je razvio Google, ali koje su alternative?

Nginx

Nedavno je CloudFlare pokušao sklopiti nginx (koji po defaultu ne podržava HTTP/3) sa svojim alatom Quiche. Implementacija je dostupna kao jedini .patch datoteka, uz prateći vodič 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 priključiti svoje module po potrebi

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

Samo je potrebno uključiti podršku za HTTP/3

events {
    worker_connections  1024;
}

http {
    server {
        # Omogućite QUIC i HTTP/3.
        listen 443 quic reuseport;

        # Omogućite HTTP/2 (opcionalno).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Omogućite sve TLS verzije (TLSv1.3 je obavezna za QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Buffiranje zahtjeva trenutno nije podržano za HTTP/3.
        proxy_request_buffering off;

        # Dodajte Alt-Svc zaglavlje za pregovaranje HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

U običnim preglednicima trenutno se ne može povezati preko HTTP/3, ali možete uzeti Chrome Canary i pokrenuti ga s oznakom --enable-quic, obratite se svom poslužitelju ili, na primjer, web stranici quic.rocks i provjerite vrstu veze u Developer Tools:
HTTP preko UDP - iskoristite protokol QUIC
Umjesto HTTP/3 piše http2+quic/99, ali to je suštinski isto.

Druge tehnologije

  • QUIC također podržavaju LiteSpeed (koje su se s velikim pompom povezale s Facebookom preko HTTP/3) i napredni Caddy. Apache za sada ne podržava, ali radovi napreduju punim tempom.
  • 21. siječnja je ažuriran nacrt standarda za WebRTC
  • Doslovno prije nekoliko dana Microsoft je otvorio kod svoje implementacije msquic, u kojoj još nisu dostupne sve funkcije iz IETF standarda, ali to je već veliki napredak.

Zaključak

HTTP preko UDP - iskoristite protokol QUIC

Interes za QUIC je nestalan, ali raste, radi se na njegovoj standardizaciji. Nove implementacije protokola pojavljuju se gotovo svakog mjeseca, a svake godine sve više developera uvjerava se da je budućnost u QUIC-u. Dopušteno je čak uključivanje protokola u buduće verzije TCP stoga, što znači da će prije ili kasnije cijeli internet preći na stabilnije i brže veze.

Već sada možete postaviti QUIC interakciju za svoju infrastrukturu ili čak pružiti preglednicima — svi planiraju dodati podršku za protokol, a tužna statistika s caniuse će postati veselija.

HTTP preko UDP - iskoristite protokol QUIC

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster