HTTP cez UDP - dobré využitie protokolu QUIC

HTTP cez UDP - dobré využitie protokolu QUIC

QUIC (Quick UDP Internet Connections) je protokol nad UDP, ktorý podporuje všetky funkcie TCP, TLS a HTTP/2 a rieši väčšinu ich problémov. Často sa nazýva nový alebo „experimentálny“ protokol, ale už dávno prežil experimentálnu fázu: vývoj prebieha už viac ako 7 rokov. Počas tejto doby sa protokol nestihol stať štandardom, ale stále sa rozšíril. Napríklad QUIC používajú takí giganti ako Google a Facebook na zrýchlenie prevádzky a zníženie oneskorení v mobilných sieťach a IETF vyhlásila jeho fork protokolu za základ pre štandard HTTP/3 (aj keď HTTP/2 používa len 44.8% stránky).

Pojem

QUIC bol vyvinutý ako náhrada za starý TCP, ktorý bol pôvodne navrhnutý pre nízkostratové káblové siete. TCP doručuje pakety v poradí, takže ak sa stratí jeden paket, celá fronta sa zastaví (blokovanie hlavy), čo negatívne ovplyvňuje kvalitu a stabilitu spojenia. Aby sa predišlo obrovským stratám, mobilné siete sa uchyľujú k používaniu veľkých vyrovnávacích pamätí, čo následne vedie k redundancii a falošne negatívnej reakcii protokolu (bufferbloat). Okrem toho TCP trávi veľa času vytváraním spojenia: požiadavky SYN/ACK a TLS sa spracúvajú oddelene, čo si vyžaduje tri spiatočné cesty namiesto jedného, ​​ako to robí QUIC.

HTTP cez UDP - dobré využitie protokolu QUIC

Keďže QUIC kombinuje náhradu TCP a implementáciu TLS 1.3, všetky pripojenia sú vždy šifrované a dešifrovanie takejto prevádzky nie je o nič jednoduchšie, ako keby išlo cez HTTPS. Okrem toho je QUIC implementovaný na aplikačnej úrovni, pretože úplná výmena zásobníka TCP by si vyžiadala večnosť.

Napriek podpore multiplexovania v HTTP/2 tu zostal problém blokovania head-of-line kvôli potrebe doručovať pakety v poriadku. QUIC je implementovaný nad UDP, takže v zásade nemá žiadne blokovanie, a aby sa predišlo nenávratnej strate paketov, sú očíslované a môžu obsahovať časti „susedov“, čo poskytuje redundanciu. Okrem toho QUIC rozdeľuje monolitický front do viacerých vlákien pre rôzne typy požiadaviek v rámci jedného pripojenia. V prípade straty paketu sa teda môžu vyskytnúť problémy iba pre jeden front (napríklad pri prenose konkrétneho súboru):

HTTP cez UDP - dobré využitie protokolu QUIC

Použitie

Spočiatku bol QUIC vyvinutý v rámci spoločnosti Google a bol z veľkej časti prispôsobený na použitie v rámci spoločnosti. V roku 2013 bol postúpený IETF na štandardizáciu (ktorá stále prebieha) a teraz sa každý môže podieľať na vývoji protokolu tým, že navrhne, čo mu chýba. Pracovná skupina IETF organizuje každoročné stretnutia, na ktorých sa schvaľuje nový štandard a diskutuje sa o inováciách. Táto implementácia QUIC sa považuje za hlavnú a na jej základe je certifikovaný štandard HTTP/3.

Zatiaľ sa nehovorí o zahrnutí HTTP/3 ako hlavného protokolu, pretože ešte nie je dokončený a takmer nie je podporovaný:

HTTP cez UDP - dobré využitie protokolu QUIC

Ale QUIC možno implementovať ako prenos medzi aplikáciou a serverom, čo sa úspešne podarilo v Uberi:

Komentár Uberu k zavedeniu QUIC

Aby sme úspešne vložili QUIC a zlepšili výkon aplikácií v prostrediach so zlou konektivitou, nahradili sme starý zásobník (HTTP/2 cez TLS/TCP) protokolom QUIC. Použili sme sieťovú knižnicu Cronet z Projekty Chromium, ktorý obsahuje pôvodnú, Google verziu protokolu – gQUIC. Táto implementácia sa tiež neustále vylepšuje, aby vyhovovala najnovšej špecifikácii IETF.

Najprv sme integrovali Cronet do našich aplikácií pre Android, aby sme pridali podporu pre QUIC. Integrácia prebiehala tak, aby sa čo najviac znížili náklady na migráciu. Namiesto úplnej výmeny starého sieťového zásobníka, ktorý používal knižnicu OkHttp, integrovali sme Cronet POD rámec API OkHttp. Integráciou týmto spôsobom sme sa vyhli zmenám v našich sieťových hovoroch (ktoré používajú retrofit) na úrovni API.

Podobne ako v prípade zariadení s Androidom sme implementovali Cronet do aplikácií Uber na iOS, čím sme zachytili HTTP prevádzku zo siete APIPoužitie NSURLProtocol. Táto abstrakcia, ktorú poskytuje iOS Foundation, spracováva údaje o adresách URL špecifické pre protokol a zabezpečuje, že môžeme integrovať Cronet do našich aplikácií pre iOS bez výrazných nákladov na migráciu.

prevzaté z tento preklad články Uber

Na backende zachytili pripojenia QUIC cez Google Cloud lb, ktorý podporuje protokol od polovice roku 2018.

Nie je žiadnym prekvapením, že Google Cloud funguje skvele s protokolom vyvinutým spoločnosťou Google, ale aké sú alternatívy?

Nginx

Nie je to tak dávno CloudFlare Snažil som sa prejsť nginx (ktorý štandardne nepodporuje HTTP/3) so svojím nástrojom Quiche. Implementácia je dostupná ako jeden súbor .patch, ktorý sa dodáva s návodom na inštaláciu:

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 môžete v prípade potreby pripojiť svoje moduly

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

Zostáva len povoliť podporu 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';
    }
}

Pripojenie cez HTTP/3 v bežných prehliadačoch zatiaľ nie je možné, ale môžete použiť Chrome Canary a spustite ho s vlajkou --enable-quic, prejdite na svoj server alebo napríklad na stránku quic.rocks a pozrite sa na typ pripojenia v Nástrojoch pre vývojárov:
HTTP cez UDP - dobré využitie protokolu QUIC
Namiesto HTTP/3 sa píše http2+quic/99, ale v podstate ide o to isté.

Iné technológie

  • QUIC tiež podporuje LiteSpeed (ktorý sa s veľkou pompou pripojil k Facebooku cez HTTP/3) a progresívny Krabička. Apache to zatiaľ nedokáže, ale pracuje sa naplno.
  • 21. januára aktualizované návrh štandardu pre WebRTC
  • Práve druhý deň otvoril Microsoft implementačný kód msquic, v ktorom ešte nie sú dostupné všetky funkcie zo štandardu IETF, no už toto je veľký prelom.

Záver

HTTP cez UDP - dobré využitie protokolu QUIC

Záujem o QUIC je nestabilný, ale rastie a na jeho štandardizácii sa pracuje. Nové implementácie protokolu sa objavujú takmer každý mesiac a každý rok je viac a viac vývojárov presvedčených, že QUIC je budúcnosť. Dokonca je možné protokol zahrnúť do budúcich verzií TCP stacku, čo znamená, že skôr či neskôr celý internet prejde na stabilnejšie a rýchlejšie pripojenia.

Už teraz môžete nakonfigurovať interakciu QUIC pre vašu infraštruktúru alebo ju dokonca poskytnúť prehliadačom - všetky plánujú pridať podporu pre protokol a smutné štatistiky s caniuse budú veselšie.

HTTP cez UDP - dobré využitie protokolu QUIC

Zdroj: hab.com

Pridať komentár