HTTP per UDP – geras QUIC protokolo naudojimas

HTTP per UDP – geras QUIC protokolo naudojimas

QUIC (Quick UDP Internet Connections) yra UDP protokolas, kuris palaiko visas TCP, TLS ir HTTP/2 funkcijas ir išsprendžia daugumą jų problemų. Jis dažnai vadinamas nauju arba „eksperimentiniu“ protokolu, tačiau jis jau seniai išgyveno eksperimentinį etapą: kūrimas tęsiasi daugiau nei 7 metus. Per tą laiką protokolas nespėjo tapti standartu, bet vis tiek paplito. Pavyzdžiui, QUIC naudoja tokie milžinai kaip „Google“ ir „Facebook“, kad pagreitintų srautą ir sumažintų delsas mobiliuosiuose tinkluose, o IETF paskelbė savo protokolo šakutę HTTP/3 standarto pagrindu (nors HTTP/2 naudoja tik 44.8 proc. svetainės).

Sąvoka

QUIC buvo sukurtas kaip senojo TCP, kuris iš pradžių buvo sukurtas mažo nuostolio laidiniams tinklams, pakaitalas. TCP pristato paketus eilės tvarka, taigi, jei vienas paketas prarandamas, visa eilė sustabdoma (linijos blokavimas), o tai neigiamai veikia ryšio kokybę ir stabilumą. Siekdami išvengti didžiulių nuostolių, korinio ryšio tinklai naudoja didelius buferius, o tai savo ruožtu veda prie atleidimo ir klaidingai neigiamo protokolo atsako (buferio išsipūtimas). Be to, TCP sugaišta daug laiko, kad užmegztų ryšį: SYN/ACK ir TLS užklausos apdorojamos atskirai, todėl reikia trijų, o ne vieno, kaip tai daro QUIC.

HTTP per UDP – geras QUIC protokolo naudojimas

Kadangi QUIC sujungia TCP pakeitimą ir TLS 1.3 diegimą, visi ryšiai visada yra užšifruoti, o iššifruoti tokį srautą nėra lengviau nei tuo atveju, jei jis vyktų per HTTPS. Be to, QUIC įdiegtas taikomųjų programų lygiu, nes reikėtų visiškai pakeisti TCP krūvą amžinybė.

Nepaisant to, kad palaikomas multipleksavimas HTTP/2, pagrindinės linijos blokavimo problema išliko dėl poreikio pateikti paketus tvarkingai. QUIC yra įdiegtas ant UDP, todėl iš principo jis neblokuoja, o kad paketai nebūtų prarasti amžinai, jie yra sunumeruoti ir gali turėti „kaimynų“ dalių, užtikrinančių atleidimą. Be to, QUIC padalija monolitinę eilę į kelias gijas, skirtas skirtingų tipų užklausoms viename ryšyje. Taigi, praradus paketą, problemų gali kilti tik vienoje eilėje (pavyzdžiui, perkeliant konkretų failą):

HTTP per UDP – geras QUIC protokolo naudojimas

Naudoti

Iš pradžių QUIC buvo sukurtas „Google“ ir daugiausia buvo pritaikytas naudoti įmonėje. 2013 metais jis buvo perduotas IETF standartizacijai (tai tebevyksta), o dabar kiekvienas gali dalyvauti protokolo kūrime, siūlydamas, ko jam trūksta. IETF darbo grupė kasmet organizuoja posėdžius, kurių metu tvirtinamas naujas standartas, aptariamos naujovės. Šis QUIC diegimas laikomas pagrindiniu ir jo pagrindu yra sertifikuotas HTTP/3 standartas.

Kol kas nekalbama apie HTTP/3 įtraukimą į pagrindinį protokolą, nes jis dar nebaigtas ir beveik nepalaikomas:

HTTP per UDP – geras QUIC protokolo naudojimas

Tačiau QUIC gali būti įdiegtas kaip transportavimas tarp programos ir serverio, o tai buvo sėkmingai atlikta Uber:

Uber komentaras apie QUIC įvedimą

Siekdami sėkmingai įterpti QUIC ir pagerinti programos našumą prasto ryšio aplinkoje, seną paketą (HTTP/2 per TLS/TCP) pakeitėme QUIC protokolu. Naudojome tinklo biblioteką Kronetas„Chromium“ projektai, kuriame yra originali, „Google“ protokolo versija – gQUIC. Šis diegimas taip pat nuolat tobulinamas, kad atitiktų naujausią IETF specifikaciją.

Pirmiausia „Cronet“ integravome į „Android“ programas, kad pridėtume QUIC palaikymą. Integracija buvo vykdoma taip, kad būtų kuo mažesnės migracijos išlaidos. Užuot visiškai pakeitus seną tinklo krūvą, kuri naudojo biblioteką OkHttp, mes integravome Cronet PAGAL OkHttp API sistemą. Taip integruodami išvengėme savo tinklo skambučių pakeitimų (kuriuos naudoja Retrofit) API lygiu.

Panašiai kaip ir „Android“ įrenginiams, „Cronet“ įdiegėme „iOS“ skirtose „Uber“ programose, perimdami HTTP srautą iš tinklo APINaudojant NSURL protokolas. Ši „iOS Foundation“ pateikta abstrakcija tvarko su protokolu susijusius URL duomenis ir užtikrina, kad „Cronet“ galėtume integruoti į „iOS“ programas be didelių perkėlimo išlaidų.

paimta iš šis vertimas Uber straipsniai

Užpakalinėje sistemoje jie užfiksavo QUIC ryšius per „Google Cloud lb“, kuris palaiko protokolą nuo 2018 metų vidurio.

Nenuostabu, kad „Google Cloud“ puikiai veikia su „Google“ sukurtu protokolu, bet kokios yra alternatyvos?

nginx

Ne taip seniai CloudFlare Bandžiau kirsti nginx (kuris pagal numatytuosius nustatymus nepalaiko HTTP/3) su savo Quiche įrankiu. Diegimas pasiekiamas kaip vienas .patch failas, kuris pateikiamas kartu su diegimo pamoka:

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

Čia galite prijungti savo modulius, jei reikia

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

Belieka tik įjungti HTTP/3 palaikymą

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

Įprastose naršyklėse dar negalima prisijungti per HTTP/3, bet galite naudoti "Chrome Canary ir paleisti jį su vėliava --enable-quic, eikite į savo serverį arba, pavyzdžiui, quic.rocks svetainę ir peržiūrėkite ryšio tipą kūrėjo įrankiuose:
HTTP per UDP – geras QUIC protokolo naudojimas
Vietoj HTTP/3 parašyta http2+quic/99, bet iš esmės tai tas pats.

Kitos technologijos

išvada

HTTP per UDP – geras QUIC protokolo naudojimas

Susidomėjimas QUIC yra nestabilus, bet auga, todėl vyksta jo standartizavimo darbai. Nauji protokolo diegimai pasirodo beveik kas mėnesį, o kasmet vis daugiau kūrėjų įsitikina, kad QUIC yra ateitis. Netgi galima protokolą įtraukti į būsimas TCP stekelio versijas, o tai reiškia, kad anksčiau ar vėliau visas internetas pereis prie stabilesnių ir greitesnių jungčių.

Jau dabar galite sukonfigūruoti QUIC sąveiką savo infrastruktūrai ar net duoti ją naršyklėms – jos visos planuoja pridėti protokolo palaikymą, o liūdna statistika su caniuse taps linksmesnė.

HTTP per UDP – geras QUIC protokolo naudojimas

Šaltinis: www.habr.com

Добавить комментарий