HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

QUIC (Kiirus UDP Interneti Ühendused) on protokoll UDP peal, mis toetab kõiki TCP, TLS ja HTTP/2 funktsioone ning lahendab enamiku nende probleeme. Seda nimetatakse sageli uueks või "eksperimentaalseks" protokolliks, kuid see on juba ammu ületanud eksperimendi etapi: arendust on tehtud üle 7 aasta. Selle aja jooksul pole protokoll veel standardiks saanud, kuid see on siiski laialdaselt levinud. Näiteks kasutavad QUIC-i liikluse kiirendamiseks ja viivituste vähendamiseks mobiilsete võrkude hiiglased nagu Google ja Facebook, ning IETF kuulutas oma protokolli haru HTTP/3 standardi aluseks. ainult 44,8% veebilehtedest).

Kontseptsioon

QUIC loodi vananenud TCP asendamiseks, mis oli algselt kohandatud juhtmega võrkude jaoks madala kadude protsendiga. TCP edastab pakette järjestikku, seega, kui üks pakk kadus, seiskub terve järjekord (head-of-line blocking), mis mõjutab negatiivselt ühenduse kvaliteeti ja stabiilsust. Massiliste kadude vältimiseks kasutavad mobiilsed võrgud suuri puhverid, mis omakorda viib liigsetele andmetele ja vale negatiivsele reaktsioonile protokollis (bufferbloat). Lisaks kulutab TCP ühenduse loomisele palju aega: SYN/ACK ja TLS päringud saadetakse eraldi, mis nõuab kolme roundtrip'i asemel ühte, nagu teeb QUIC.

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

Kuna QUIC ühendab TCP asendamise ja TLS 1.3 rakendamise, on kõik ühendused alati krüpteeritud ning sellise liikluse dekodeerimine ei ole lihtsam kui HTTPS-i puhul. Lisaks on QUIC rakendatud rakendustasandil, kuna täielik TCP staki asendamine võtaks igavesti..

Hoolimata HTTP/2 mitmepleksimise toetusest, jäi problemaatiline head-of-line blocking seal alles, kuna pakette tuleb edastada järjestikku. QUIC on rakendatud UDP peal, seega puuduvad seal põhimõtteliselt blokeeringud, ning et pakette ei kaotataks lõplikult, nummerdatakse need ja need võivad sisaldada „naabreid“, tagades liigseeandmed. Lisaks jagab QUIC monoliitse järjekorra mitmeks vooks erinevat tüüpi päringute jaoks ühe ühenduse sees. Seega, kui pakk kaob, võivad probleemid tekkida ainult ühe järjekorra puhul (näiteks konkreetse faili edastamisel):

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

Kasutamine

Alguses töötati QUIC välja Google'is ja see oli peamiselt kohandatud sisemiseks kasutamiseks. 2013. aastal anti see IETF-ile standardiseerimiseks (mis käib siiani) ning nüüd saab igaüks osaleda protokolli edasiarendamises, pakkudes sellele, mis just tema jaoks puudub. IETF-i töögrupp korraldab iga-aastaselt kohtumisi, kus kinnitatakse uus standard ja arutatakse uuendusi. Seda QUIC-i teostust peetakse põhiliseks ja selle alusel sertifitseeritakse HTTP/3 standard.

Praegu ei ole jutt HTTP/3-st kui põh protokollist, kuna see ei ole veel valminud ja praktiliselt ei ole toetatud:

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

Kuid QUIC-i saab rakendada transpordina rakenduse ja serveri vahel, nagu on edukalt teinud Uber:

Uberi kommentaar QUIC-i rakendamisest

QUIC-i edukaks integreerimiseks ja rakenduse jõudluse parandamiseks nõrkades ühendustes asendasime vana steki (HTTP/2 üle TLS/TCP) QUIC-protokolliga. Kasutasime võrgu teeki Cronet API-s Chromium Projects, mis sisaldab originaali, Google'i versioon protokollist – gQUIC. Seda teostust täiustatakse pidevalt, et järgida viimast IETF-i spetsifikatsiooni.

Esmalt integreerisime Croneti oma Android-rakendustesse, et lisada QUIC-i tugi. Integreerimine toimus nii, et migratsioonikulusid oleks võimalikult vähe. Selle asemel, et täielikult asendada vana võrgu steki, mis kasutas teeki OkHttp, integreerisime Croneti OkHttp API raames. Sellise integreerimisega vältisime muudatusi meie võrgu kutsumistes (mida kasutavad Retrofit) API tasemel.

Sarnaselt lähenemisele Android-seadmetele rakendasime Croneti Uberi rakendustes iOS-is, peatades HTTP liikluse võrgu API, kasutades NSURLProtocol. See abstraktsioon, mis on saadud iOS Foundationist, haldab protokollispetsiifilisi URL-andmeid ja tagab, et saame Croneti integreerida oma iOS-rakendustes oluliste migratsioonikuludeta.

võetud sellest tõlkest Uberi artiklist

Tagaplaanil said nad QUIC-ühendusi Google Cloud lb kaudu, mis toetab protokolli alates 2018. aasta keskpaigast.

Ei ole üllatav, et Google Cloud töötab suurepäraselt protokolliga, mille Google välja töötas, kuid millised on alternatiivid?

Nginx

Hiljuti proovis CloudFlare ristata nginx (mille, mis vaikimisi ei toeta HTTP/3) koos oma Quiche tööriistaga. Teostus on saadaval ühe .patch faili kujul, millele on lisatud installimise õpetus:

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 on võimalik vajadusel lisada oma mooduleid

./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 toe

events {
    worker_connections  1024;
}

http {
    server {
        # Lubage QUIC ja HTTP/3.
        listen 443 quic reuseport;

        # Lubage HTTP/2 (valikuline).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Lubage kõik TLS versioonid (TLSv1.3 on nõutav QUICi jaoks).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Taotluste puhversüsteem ei toeta praegu HTTP/3.
        proxy_request_buffering off;

        # Lisage Alt-Svc header HTTP/3 läbirääkimiseks.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Tavalistes brauserites ei saa veel HTTP/3 kaudu ühendust luua, kuid saate võtta Uus manifest on välja töötatud ja käivitada seda lipuga --enable-quic, pöörduda oma serveri või näiteks saidi quic.rocks poole ja vaadata ühenduse tüüpi Developer Toolsis:
HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult
HTTP/3 asemel kuvatakse http2+quic/99, kuid sisuliselt on see sama asi.

Teised tehnoloogiad

Kokkuvõte

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

Huvi QUICi vastu on ebastabiilne, kuid kasvab, standardiseerimise nimel käib töö. Uusi protokolli teostusi ilmub peaaegu iga kuu, ja iga mööduva aastaga veenduvad üha rohkem arendajaid, et tulevik kuulub QUICile. Lubatakse isegi protokolli lisamist tulevaste TCP virnade versioonidesse, mis tähendab, et varem või hiljem kolib kogu internet stabiilsemasse ja kiiremasse ühendusse.

Juba praegu saate oma infrastruktuuri jaoks seadistada QUICühendust või isegi seda brauseritele anda — kõik plaanivad protokolli toetust lisada ning kurb statistika caniuse.ee lehelt muutub rõõmsamaks.

HTTP UDP kaudu - kasutame QUIC-protokolli kasulikult

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster