HTTP prek UDP - dobra uporaba protokola QUIC

HTTP prek UDP - dobra uporaba protokola QUIC

QUIC (Quick UDP Internet Connections) je protokol poleg UDP, ki podpira vse funkcije TCP, TLS in HTTP/2 ter rešuje večino njihovih težav. Pogosto se imenuje nov ali "eksperimentalni" protokol, vendar je eksperimentalno fazo že zdavnaj preživel: razvoj poteka že več kot 7 let. V tem času protokolu ni uspelo postati standard, a je vseeno postal razširjen. QUIC na primer uporabljajo velikani, kot sta Google in Facebook, za pospešitev prometa in zmanjšanje zamud v mobilnih omrežjih, IETF pa je svojo razcepitev protokola razglasil za osnovo za standard HTTP/3 (čeprav HTTP/2 uporablja samo 44.8% spletna mesta).

Koncept

QUIC je bil razvit kot zamenjava za stari TCP, ki je bil prvotno zasnovan za žična omrežja z majhnimi izgubami. TCP dostavlja pakete po vrstnem redu, tako da se v primeru izgube enega paketa ustavi celotna čakalna vrsta (blokiranje vodje linije), kar negativno vpliva na kakovost in stabilnost povezave. Da bi se izognili velikim izgubam, se mobilna omrežja zatekajo k uporabi velikih medpomnilnikov, kar posledično vodi do redundance in lažno negativnega odziva protokola (bufferbloat). Poleg tega TCP porabi veliko časa za vzpostavljanje povezave: zahteve SYN/ACK in TLS se obdelujejo ločeno, kar zahteva tri povratne poti namesto enega, kot to počne QUIC.

HTTP prek UDP - dobra uporaba protokola QUIC

Ker QUIC združuje zamenjavo TCP in implementacijo TLS 1.3, so vse povezave vedno šifrirane in dešifriranje takšnega prometa ni nič lažje, kot če bi šlo prek HTTPS. Poleg tega je QUIC implementiran na ravni aplikacije, saj bi bila potrebna popolna zamenjava sklada TCP večnost.

Kljub podpori za multipleksiranje v HTTP/2 je problem blokiranja glave vrstice ostal tam zaradi potrebe po dostavi paketov po vrstnem redu. QUIC je implementiran na vrhu UDP, tako da načeloma nima blokiranja, in da preprečimo večno izgubo paketov, so oštevilčeni in lahko vsebujejo dele "sosedov", kar zagotavlja redundanco. Poleg tega QUIC razdeli monolitno čakalno vrsto na več niti za različne vrste zahtev znotraj ene povezave. Tako se lahko v primeru izgube paketa pojavijo težave samo za eno čakalno vrsto (na primer za prenos določene datoteke):

HTTP prek UDP - dobra uporaba protokola QUIC

Uporaba

Sprva je bil QUIC razvit v Googlu in je bil v veliki meri prilagojen za uporabo znotraj podjetja. Leta 2013 je bil prenesen na IETF v standardizacijo (ki še vedno poteka), zdaj pa lahko vsakdo sodeluje pri razvoju protokola tako, da predlaga, kaj mu manjka. Delovna skupina IETF organizira letna srečanja, na katerih se potrdi nov standard in razpravlja o novostih. Ta izvedba QUIC velja za glavno in na njeni osnovi je certificiran standard HTTP/3.

Zaenkrat še ni govora o vključitvi HTTP/3 kot glavnega protokola, ker še ni dokončan in skoraj ni podprt:

HTTP prek UDP - dobra uporaba protokola QUIC

Toda QUIC je mogoče implementirati kot transport med aplikacijo in strežnikom, kar so uspešno izvedli pri Uberju:

Uberjev komentar o uvedbi QUIC

Za uspešno vgradnjo QUIC in izboljšanje delovanja aplikacij v okoljih s slabo povezljivostjo smo zamenjali stari sklad (HTTP/2 prek TLS/TCP) s protokolom QUIC. Uporabili smo mrežno knjižnico Cronet z dne Projekti Chromium, ki vsebuje izvirno, Googlovo različico protokola – gQUIC. Ta izvedba se tudi nenehno izboljšuje, da bi sledila najnovejši specifikaciji IETF.

Cronet smo najprej integrirali v naše aplikacije za Android, da smo dodali podporo za QUIC. Integracijo smo izvedli tako, da smo čim bolj znižali stroške migracije. Namesto popolne zamenjave starega omrežnega sklada, ki je uporabljal knjižnico OkHttp, smo Cronet integrirali POD okvir OkHttp API. S takšno integracijo smo se izognili spremembam naših omrežnih klicev (ki jih uporablja Retrofit) na ravni API-ja.

Podobno kot pri napravah s sistemom Android smo Cronet implementirali v aplikacije Uber v sistemu iOS in prestregli promet HTTP iz omrežja. APIz uporabo NSURLProtocol. Ta abstrakcija, ki jo zagotavlja iOS Foundation, obravnava podatke URL-jev, specifične za protokol, in zagotavlja, da lahko integriramo Cronet v naše aplikacije iOS brez znatnih stroškov selitve.

odvzet od ta prevod Uber članki

Na zaledju so ujeli QUIC povezave prek Google Cloud lb, ki podpira protokol od sredine leta 2018.

Ni presenetljivo, da Google Cloud odlično deluje s protokolom, ki ga je razvil Google, toda kakšne so alternative?

Nginx

Nedolgo nazaj CloudFlare Poskušal sem prestopiti nginx (ki privzeto ne podpira HTTP/3) s svojim orodjem Quiche. Izvedba je na voljo kot ena datoteka .patch, ki je priložena vadnici za namestitev:

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

Tu lahko po potrebi povežete svoje module

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

Vse, kar ostane, je omogočiti podporo za HTTP/3

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

V navadnih brskalnikih še ni mogoče vzpostaviti povezave prek HTTP/3, lahko pa uporabite Chrome Canary in ga vodite z zastavo --enable-quic, pojdite na svoj strežnik ali na primer na spletno mestoquic.rocks in poglejte vrsto povezave v orodjih za razvijalce:
HTTP prek UDP - dobra uporaba protokola QUIC
Namesto HTTP/3 piše http2+quic/99, vendar je v bistvu ista stvar.

Druge tehnologije

Zaključek

HTTP prek UDP - dobra uporaba protokola QUIC

Zanimanje za QUIC je nestabilno, a narašča, zato poteka delo za njegovo standardizacijo. Nove implementacije protokola se pojavljajo skoraj vsak mesec in vsako leto je vse več razvijalcev prepričanih, da je QUIC prihodnost. Protokol je možno celo vključiti v prihodnje različice sklada TCP, kar pomeni, da bo prej ali slej celoten internet prešel na bolj stabilne in hitrejše povezave.

Že zdaj lahko konfigurirate QUIC interakcijo za svojo infrastrukturo ali jo celo daste brskalnikom - vsi nameravajo dodati podporo za protokol in žalostna statistika s caniuse bo postala bolj vesela.

HTTP prek UDP - dobra uporaba protokola QUIC

Vir: www.habr.com

Dodaj komentar