HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

QUIC (Quick UDP Internet Connections) UDPren gaineko protokoloa da, TCP, TLS eta HTTP/2 funtzio guztiak onartzen dituena eta arazo gehienak konpontzen dituena. Askotan protokolo berria edo “esperimentala” deitzen zaio, baina esperimentu-etapa luzetik igaro da: garapena 7 urte baino gehiago darama. Denbora horretan, protokoloa ez zen lortu estandar bihurtzea, baina oraindik hedatu egin zen. Adibidez, Google eta Facebook bezalako erraldoiek QUIC erabiltzen dute trafikoa bizkortzeko eta sare mugikorretan atzerapenak murrizteko, eta IETF-k bere protokolo-sardexkak HTTP/3 estandarraren oinarritzat hartu zituen (nahiz eta HTTP/2 erabiltzen duen). %44.8 bakarrik guneak).

kontzeptua

QUIC ondarezko TCPren ordezko gisa garatu zen, jatorriz galera baxuko kable-sareetarako diseinatu zena. TCP-k paketeak ordenan entregatzen ditu, beraz pakete bat galtzen bada, ilara osoa gelditzen da (lerroburuko blokeoa), konexioaren kalitateari eta egonkortasunari negatiboki eragiten diona. Galera handiak ekiditeko, sare zelularrek buffer handiak erabiltzen dituzte, eta horrek protokoloaren erredundantzia eta erantzun negatibo faltsuak eragiten ditu (bufferbloat). Horrez gain, TCP-k denbora asko ematen du konexio bat ezartzen: SYN/ACK eta TLS eskaerak bereiz prozesatzen dira, hiru joan-etorri behar dira bat izan beharrean, QUIC-ek egiten duen bezala.

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

QUIC-ek TCP ordezkapena eta TLS 1.3 inplementazioa konbinatzen dituenez, konexio guztiak beti enkriptatzen dira, eta trafiko hori deszifratzea ez da errazago HTTPS bidez joango balitz baino. Horrez gain, QUIC aplikazio mailan inplementatzen da, TCP pilaren ordezkapen osoa beharko lukeen bezala betikotasuna.

HTTP/2-n multiplexatzeko laguntza izan arren, lerro buruaren blokeoaren arazoak hor jarraitzen zuen paketeak ordenan entregatu behar zirelako. QUIC UDPren gainean ezartzen da, beraz, printzipioz ez du blokeorik, eta paketeak betiko gal ez daitezen, zenbakituta daude eta "auzokideen" zatiak izan ditzakete, erredundantzia emanez. Horrez gain, QUIC-ek ilara monolitikoa hainbat haritan banatzen du konexio bakarrean eskaera mota desberdinetarako. Horrela, pakete bat galtzen bada, arazoak sor daitezke ilara batean bakarrik (adibidez, fitxategi zehatz bat transferitzeko):

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

Erabili

Hasieran, QUIC Google-n garatu zen eta neurri handi batean enpresa barruan erabiltzeko egokitu zen. 2013an, estandarizaziorako IETFra pasatu zen (oraindik martxan dago), eta orain denek parte har dezakete protokoloaren garapenean, falta zaiona proposatuz. IETF lan-taldeak urteko bilerak antolatzen ditu eta horietan estandar berri bat onartzen da eta berrikuntzak eztabaidatzen dira. QUIC-en inplementazio hau nagusitzat hartzen da eta bere oinarrian HTTP/3 estandarra ziurtatzen da.

Orain arte, ez da hitz egiten HTTP/3 protokolo nagusi gisa sartzeari buruz, oraindik ez dagoelako amaitu eta ia onartzen ez delako:

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

Baina QUIC aplikazioaren eta zerbitzariaren arteko garraio gisa inplementa daiteke, Uber-en arrakastaz egin zena:

Uber-ek QUIC-ren sarrerari buruz egindako iruzkina

QUIC ongi txertatzeko eta aplikazioen errendimendua hobetzeko konektagarritasun-ingurune eskasetan, pila zaharra (HTTP/2 TLS/TCP bidez) QUIC protokoloarekin ordezkatu dugu. Sareko liburutegia erabili dugu Cronet - Chromium Proiektuak, protokoloaren jatorrizko Google bertsioa duena - gQUIC. Inplementazio hau ere etengabe hobetzen ari da IETFren azken zehaztapena jarraitzeko.

Lehenik Cronet gure Android aplikazioetan integratu genuen QUIC-en laguntza gehitzeko. Integrazioa migrazio kostuak ahalik eta gehien murrizteko moduan egin zen. Liburutegia erabiltzen zuen sareko pila zaharra guztiz ordezkatu beharrean AdosHttp, Cronet integratu dugu OkHttp API markoaren PEAN. Integrazioa horrela eginez, gure sareko deien aldaketak saihestu ditugu (horrek erabiltzen dituzte retrofit) API mailan.

Android gailuetarako planteamenduaren antzera, Cronet inplementatu genuen iOS-eko Uber aplikazioetan, sareko HTTP trafikoa atzematen. APIerabiliz NSURLProtokoloa. IOS Fundazioak emandako abstrakzio honek protokoloaren URL datuak kudeatzen ditu eta Cronet gure iOS aplikazioetan txerta dezakegula ziurtatzen du migrazio kostu handirik gabe.

batetik hartua itzulpen hau Uber artikuluak

Atzeko aldean QUIC konexioak harrapatu zituzten Google Cloud lb bidez, hau da protokoloa onartzen du 2018 erdialdetik aurrera.

Ez da harritzekoa Google Cloud-ek oso ondo funtzionatzea Google-k garatutako protokoloarekin, baina zeintzuk dira alternatibak?

nginx

Duela ez asko CloudFlare gurutzatzen saiatu nintzen nginx (lehenespenez HTTP/3 onartzen ez duena) bere Quiche tresnarekin. Inplementazioa .patch fitxategi bakar gisa dago eskuragarri, eta instalazio-tutorial batekin dator:

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

Hemen zure moduluak konekta ditzakezu behar izanez gero

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

HTTP/3 euskarria gaitzea besterik ez da geratzen

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

Oraindik ezin da HTTP/3 bidez konektatu arakatzaile arruntetan, baina erabil dezakezu Chrome Kanaria eta exekutatu banderarekin --enable-quic, joan zure zerbitzarira edo, adibidez, quic.rocks gunera eta begiratu Developer Tools-en konexio mota:
HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea
HTTP/3-ren ordez idazten da http2+quic/99, baina funtsean gauza bera da.

Beste teknologia batzuk

  • QUIC ere laguntza LiteSpeed (HTTP/3 bidez Facebookera konektatzen zena zalaparta handiz) eta progresiboa Caddy. Apache-k ezin du oraindik egin, baina lanak abian dira bete-betean.
  • Urtarrilak 21 eguneratua WebRTC estandarraren zirriborroa
  • Beste egunean Microsoft ireki zen msquic ezarpen-kodea, IETF estandarraren funtzio guztiak oraindik ez dauden eskuragarri, baina hau aurrerapen handia da dagoeneko.

Ondorioa

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

QUICekiko interesa ezegonkorra da, baina gero eta handiagoa da, eta estandarizazio lanak egiten ari dira. Protokoloaren inplementazio berriak ia hilero agertzen dira, eta urtez urte gero eta garatzaile gehiago sinetsita daude QUIC etorkizuna dela. Protokoloa TCP pilaren etorkizuneko bertsioetan sartzea ere posible da, hau da, lehenago edo beranduago Internet osoa konexio egonkor eta azkarragoetara joango da.

Dagoeneko, zure azpiegiturarako QUIC interakzioa konfigura dezakezu edo nabigatzaileei ere eman diezaiokezu - denak protokoloari euskarria gehitzeko asmoa dute, eta caniuse-ren estatistika tristeak alaiagoak izango dira.

HTTP UDPren bidez - QUIC protokoloa ondo erabiltzea

Iturria: www.habr.com

Gehitu iruzkin berria