HTTP üle UDP – QUIC-protokolli hea ärakasutamine

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

QUIC (Quick UDP Internet Connections) on UDP peal olev protokoll, mis toetab kõiki TCP, TLS ja HTTP/2 funktsioone ning lahendab enamiku nende probleemidest. Seda nimetatakse sageli uueks või "eksperimentaalseks" protokolliks, kuid see on eksperimentaalse etapi kaua elanud: arendus on kestnud rohkem kui 7 aastat. Selle aja jooksul ei saanud protokoll standardiks, kuid sai siiski laialt levinud. Näiteks kasutavad QUIC-i sellised hiiglased nagu Google ja Facebook liikluse kiirendamiseks ja viivituste vähendamiseks mobiilsidevõrkudes ning IETF kuulutas oma protokolli hargi HTTP/3 standardi aluseks (kuigi HTTP/2 kasutab ainult 44.8% saidid).

Mõiste

QUIC töötati välja pärand-TCP asendamiseks, mis oli algselt mõeldud väikese kadudega traadiga võrkudele. TCP tarnib paketid järjekorras, nii et kui üks pakett kaob, peatatakse kogu järjekord (reapea blokeerimine), mis mõjutab negatiivselt ühenduse kvaliteeti ja stabiilsust. Massiivsete kadude vältimiseks kasutavad mobiilsidevõrgud suuri puhvreid, mis omakorda toob kaasa protokolli liiasuse ja vale negatiivse vastuse (bufferbloat). Lisaks kulutab TCP ühenduse loomisele palju aega: SYN/ACK-i ja TLS-i päringuid töödeldakse eraldi, nõudes ühe edasi-tagasi reisi asemel kolme, nagu QUIC teeb.

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

Kuna QUIC ühendab TCP asendamise ja TLS 1.3 juurutamise, on kõik ühendused alati krüptitud ja sellise liikluse dekrüpteerimine pole lihtsam kui HTTPS-i kaudu. Lisaks rakendatakse QUIC-i rakenduse tasemel, kuna TCP-pinu täielik asendamine nõuab igavesti.

Vaatamata HTTP/2 multipleksimise toele, püsis reapea blokeerimise probleem, kuna paketid oli vaja edastada järjekorras. QUIC on rakendatud UDP peal, seega pole sellel põhimõtteliselt blokeerimist ning pakettide igaveseks kadumise vältimiseks on need nummerdatud ja võivad sisaldada "naabrite" osi, pakkudes koondamist. Lisaks jagab QUIC monoliitse järjekorra mitmeks lõimeks erinevat tüüpi päringute jaoks ühes ühenduses. Seega, kui pakett läheb kaduma, võivad probleemid tekkida ainult ühe järjekorra puhul (näiteks konkreetse faili edastamisel):

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

Kasutama

Algselt töötati QUIC välja Google'is ja see oli suures osas kohandatud ettevõttesiseseks kasutamiseks. 2013. aastal anti see standardiseerimiseks üle IETF-ile (mis on veel pooleli) ja nüüd saavad kõik protokolli väljatöötamises osaleda, pakkudes välja, mis tal puudu on. IETF töörühm korraldab iga-aastaseid koosolekuid, mille käigus kinnitatakse uus standard ja arutatakse uuendusi. Seda QUIC-i rakendamist peetakse peamiseks ja selle alusel on HTTP/3 standard sertifitseeritud.

Siiani pole juttu HTTP/3 lisamisest põhiprotokollina, sest see pole veel valmis ja seda peaaegu ei toetata:

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

Kuid QUIC-i saab rakendada transpordina rakenduse ja serveri vahel, mis Uberis õnnestus:

Uberi kommentaar QUICi kasutuselevõtu kohta

QUICi edukaks manustamiseks ja rakenduse jõudluse parandamiseks kehvas ühenduvusega keskkondades asendasime vana pinu (HTTP/2 üle TLS/TCP) QUIC-protokolliga. Kasutasime võrguteeki Kronet kohta Chromiumi projektid, mis sisaldab protokolli algset Google'i versiooni - gQUIC. Seda teostust täiustatakse pidevalt, et järgida uusimat IETF-i spetsifikatsiooni.

Esmalt integreerisime Croneti oma Androidi rakendustesse, et lisada QUIC-i tugi. Lõimumine viidi läbi nii, et migratsioonikulud oleksid võimalikult palju väiksemad. Selle asemel, et täielikult välja vahetada vana võrgupakk, mis kasutas raamatukogu OkHttp, oleme integreerinud Croneti OkHttp API raamistikku. Sel viisil integreerimisega vältisime muudatusi oma võrgukõnedes (mida kasutavad Moderniseerimine) API tasemel.

Sarnaselt Android-seadmetele mõeldud lähenemisviisiga rakendasime Croneti iOS-i Uberi rakendustesse, peatades võrgu HTTP-liikluse. APIkasutades NSURLprotokoll. See iOS-i sihtasutuse pakutav abstraktsioon käsitleb protokollispetsiifilisi URL-i andmeid ja tagab, et saame Croneti oma iOS-i rakendustesse integreerida ilma oluliste migratsioonikuludeta.

võetud see tõlge Uberi artiklid

Tagaprogrammis püüdsid nad kinni QUIC-ühendused Google Cloud lb kaudu, mis toetab protokolli alates 2018. aasta keskpaigast.

Pole üllatav, et Google Cloud töötab Google'i väljatöötatud protokolliga suurepäraselt, kuid millised on alternatiivid?

nginx

Mitte kaua aega tagasi CloudFlare Üritasin ületada nginx (mis vaikimisi ei toeta HTTP/3) oma Quiche tööriistaga. Rakendus on saadaval ühe .patch-failina, mis on varustatud installiõpetusega:

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

Siin saate vajadusel oma moodulid ühendada

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

Jääb vaid lubada HTTP/3 tugi

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

Tavalistes brauserites ei saa veel HTTP/3 kaudu ühendust luua, aga kasutada saab Chrome Canary ja ajage seda lipuga --enable-quic, minge oma serverisse või näiteks saidile quic.rocks ja vaadake ühenduse tüüpi arendaja tööriistades:
HTTP üle UDP – QUIC-protokolli hea ärakasutamine
HTTP/3 asemel on see kirjutatud http2+quic/99, kuid see on sisuliselt sama asi.

Muud tehnoloogiad

  • QUIC toetab ka LiteSpeed (mis ühendas Facebookiga HTTP/3 kaudu suure käraga) ja progressiivne Golfipoiss. Apache seda veel teha ei saa, aga töö käib täies hoos.
  • 21. jaanuaril uuendatud WebRTC standardi kavand
  • Just teisel päeval avati Microsoft msquic rakenduskood, milles kõik IETF-i standardi funktsioonid pole veel saadaval, kuid see on juba suur läbimurre.

Järeldus

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

Huvi QUIC-i vastu on ebastabiilne, kuid kasvab ja selle standardimise nimel tehakse tööd. Protokolli uusi rakendusi ilmub peaaegu iga kuu ja igal aastal on üha rohkem arendajaid veendunud, et QUIC on tulevik. Protokolli on võimalik lisada isegi tulevastesse TCP-pinu versioonidesse, mis tähendab, et varem või hiljem liigub kogu Internet stabiilsematele ja kiirematele ühendustele.

Juba praegu saate seadistada oma infrastruktuuri jaoks QUIC-i interaktsiooni või anda selle isegi brauseritele - nad kõik plaanivad protokolli toe lisada ja kurb statistika caniuse'iga muutub rõõmsamaks.

HTTP üle UDP – QUIC-protokolli hea ärakasutamine

Allikas: www.habr.com

Lisa kommentaar