HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

QUIC (Quick UDP Internet Connections) er samskiptaregla ofan á UDP sem styður alla eiginleika TCP, TLS og HTTP/2 og leysir flest vandamál þeirra. Það er oft kallað ný eða „tilrauna“ siðareglur, en hún hefur lengi lifað tilraunastigið: þróun hefur staðið yfir í meira en 7 ár. Á þessum tíma náði bókunin ekki að verða staðalbúnaður en varð samt útbreiddur. Til dæmis er QUIC notað af risum eins og Google og Facebook til að flýta fyrir umferð og draga úr töfum á farsímakerfum og IETF lýsti því yfir að samskiptareglurnar væru grundvöllur HTTP/3 staðalsins (jafnvel þó HTTP/2 noti aðeins 44.8% síður).

Hugtak

QUIC var þróað í staðinn fyrir eldri TCP, sem upphaflega var hannað fyrir lágtapsbundið netkerfi. TCP afhendir pakka í röð, þannig að ef einn pakki tapast er öll röðin stöðvuð (lokun á höfuðlínu), sem hefur neikvæð áhrif á gæði og stöðugleika tengingarinnar. Til að forðast gríðarlegt tap, grípa farsímakerfi til að nota stóra biðminni, sem aftur leiðir til offramboðs og fölsk neikvæð svörunar á samskiptareglunum (biðminni). Að auki eyðir TCP miklum tíma í að koma á tengingu: SYN/ACK og TLS beiðnir eru unnar sérstaklega og þurfa þrjár ferðir fram og til baka í stað einnar, eins og QUIC gerir.

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

Þar sem QUIC sameinar TCP skipti og útfærslu á TLS 1.3 eru allar tengingar alltaf dulkóðaðar og afkóðun slíkrar umferðar er ekki auðveldara en ef hún væri að fara yfir HTTPS. Að auki er QUIC útfært á umsóknarstigi, eins og algjör endurnýjun á TCP stafla myndi taka eilífðina.

Þrátt fyrir stuðning við margföldun í HTTP/2 hélst vandamálið við lokun á höfuðlínum til staðar vegna þess að þurfa að afhenda pakka í röð. QUIC er útfært ofan á UDP, svo það hefur enga blokkun í grundvallaratriðum, og til að koma í veg fyrir að pakkar glatist að eilífu, eru þeir númeraðir og geta innihaldið hluta af „nágranna“, sem gefur offramboð. Að auki skiptir QUIC einhæfu biðröðinni í marga þræði fyrir mismunandi gerðir beiðna innan einni tengingar. Þannig að ef pakki týnist geta vandamál komið upp aðeins fyrir eina biðröð (til dæmis fyrir flutning á tiltekinni skrá):

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

Nota

Upphaflega var QUIC þróað innan Google og var að mestu sniðið til notkunar innan fyrirtækisins. Árið 2013 var það flutt til IETF til stöðlunar (sem er enn í gangi) og nú geta allir tekið þátt í þróun bókunarinnar með því að leggja til hvað þá vantar. Vinnuhópur IETF skipuleggur árlega fundi þar sem nýr staðall er samþykktur og nýjungar ræddar. Þessi útfærsla á QUIC er talin sú helsta og það er á grundvelli hennar sem HTTP/3 staðallinn er vottaður.

Enn sem komið er er ekkert talað um að hafa HTTP/3 sem aðalsamskiptareglur, vegna þess að henni er ekki lokið enn og er nánast ekki stutt:

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

En QUIC er hægt að útfæra sem flutning á milli forritsins og netþjónsins, sem tókst með góðum árangri hjá Uber:

Athugasemd Uber um kynningu á QUIC

Til að fella inn QUIC með góðum árangri og bæta árangur forrita í lélegu tengiumhverfi, skiptum við út gamla staflanum (HTTP/2 yfir TLS/TCP) fyrir QUIC siðareglur. Við notuðum netsafnið Cronet á Chromium verkefni, sem inniheldur upprunalegu Google útgáfu samskiptareglunnar - gQUIC. Þessi útfærsla er einnig stöðugt endurbætt til að fylgja nýjustu IETF forskriftinni.

Við samþættum Cronet fyrst í Android öppin okkar til að bæta við stuðningi við QUIC. Samþætting var framkvæmd með þeim hætti að flutningskostnaður yrði lækkaður eins og kostur var. Í stað þess að skipta algjörlega út gamla netstaflanum sem notaði bókasafnið OkHttp, við höfum samþætt Cronet UNDIR OkHttp API ramma. Með því að gera samþættinguna á þennan hátt forðumst við breytingar á netsímtölum okkar (sem eru notuð af Retrofit) á API stigi.

Svipað og aðferðin fyrir Android tæki, innleiddum við Cronet í Uber öpp á iOS, stöðvuðum HTTP umferð frá netinu APIað nota NSURL Protocol. Þessi útdráttur, útvegaður af iOS Foundation, meðhöndlar samskiptasértæk vefslóð gögn og tryggir að við getum samþætt Cronet inn í iOS forritin okkar án verulegs flutningskostnaðar.

tekið frá þessari þýðingu Uber greinar

Á bakendanum náðu þeir QUIC tengingum í gegnum Google Cloud lb, sem styður samskiptareglur frá miðju ári 2018.

Það kemur ekki á óvart að Google Cloud virkar frábærlega með samskiptareglum sem Google hefur þróað, en hverjir eru kostir?

Nginx

Fyrir ekki löngu síðan CloudFlare Ég reyndi að fara yfir nginx (sem styður ekki HTTP/3 sjálfgefið) með Quiche tólinu. Útfærslan er fáanleg sem ein .patch skrá, sem kemur með uppsetningarkennslu:

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

Hér getur þú tengt einingarnar þínar ef þörf krefur

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

Allt sem er eftir er að virkja HTTP/3 stuðning

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

Það er ekki enn hægt að tengjast í gegnum HTTP/3 í venjulegum vöfrum, en þú getur notað Chrome Canary og keyra það með fánanum --enable-quic, farðu á netþjóninn þinn eða td quic.rocks síðuna og skoðaðu tengingargerðina í Developer Tools:
HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel
Í stað HTTP/3 er það skrifað http2+quic/99, en það er í meginatriðum það sama.

Önnur tækni

  • QUIC styður einnig LiteSpeed (sem tengdist Facebook í gegnum HTTP/3 með miklum látum) og framsækið Caddy. Apache getur ekki gert það ennþá, en vinna er í gangi fullur gangur.
  • 21. janúar uppfært drög að staðli fyrir WebRTC
  • Um daginn opnaði Microsoft msquic útfærslukóða, þar sem ekki eru allar aðgerðir frá IETF staðlinum enn tiltækar, en þetta er nú þegar mikil bylting.

Ályktun

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

Áhugi á QUIC er óstöðugur en fer vaxandi og unnið er að því að staðla hann. Nýjar útfærslur á samskiptareglunum birtast næstum í hverjum mánuði og á hverju ári eru fleiri og fleiri forritarar sannfærðir um að QUIC sé framtíðin. Það er meira að segja hægt að setja samskiptaregluna inn í framtíðarútgáfur af TCP stafla, sem þýðir að fyrr eða síðar mun allt internetið færast yfir í stöðugri og hraðari tengingar.

Nú þegar geturðu stillt QUIC samskipti fyrir innviði þína eða jafnvel gefið það til vafra - þeir ætla allir að bæta við stuðningi við siðareglur og sorgleg tölfræði með caniuse verður glaðværari.

HTTP yfir UDP - nýtir QUIC samskiptareglurnar vel

Heimild: www.habr.com

Bæta við athugasemd