HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

QUIC (Quick UDP Internet Connections) — është një protokoll mbi UDP që mbështet të gjitha funksionalitetet e TCP, TLS dhe HTTP/2 dhe zgjidh shumicën e problemeve të tyre. Ai shpesh quhet protokoll i ri ose "eksperimental", por ka qenë për një kohë të gjatë përtej fazës eksperimentale: zhvillimi i tij ka vazhduar për më shumë se 7 vjet. Gjatë kësaj kohe, protokolli ende nuk ka arritur të bëhet standard, por është përhapur gjerësisht. Për shembull, QUIC përdoret për të përshpejtuar trafikun dhe për të reduktuar vonesat në rrjetet mobile nga gjigantët si Google dhe Facebook, ndërsa IETF shpalli forkun e tij si bazë për standardin HTTP/3 (duke marrë parasysh që HTTP/2 përdor vetëm 44.8% e faqeve).

Koncepsi

QUIC u zhvillua si një zëvendësim për TCP-in e vjetëruar, i cili fillimisht ishte projektuar për rrjete kabllore me një përqindje të ulët humbjesh. TCP dërgon paketat në rend, kështu që nëse një paketë humbet, e gjithë rreshti ndalon (head-of-line blocking), çka ndikon negativisht në cilësinë dhe stabilitetin e lidhjes. Për të shmangur humbje masive, rrjetet celulare përdorin bufere të mëdha, gjë që çon në tepricë dhe reagim të gabuar të protokollit (bufferbloat). Për më tepër, TCP shpenzon shumë kohë për të vendosur një lidhje: kërkesat SYN/ACK dhe TLS shkojnë ndaras, duke kërkuar tre roundtrip për të vendosur lidhjen, ndryshe nga një, siç e bën QUIC.

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

Duke qenë se QUIC kombinon zëvendësimin e TCP-së dhe implementimin e TLS 1.3, të gjitha lidhjet janë gjithmonë të enkriptuara, dhe dekodimi i këtij trafiku nuk është më i lehtë sesa nëse do të kalonte përmes HTTPS. Për më tepër, QUIC është implementuar në nivelin aplikativ; zëvendësimi i plotë i stack-ut të TCP do të kishte marrë pa fund.

Megjithëse mbështetje për shumërenditje në HTTP/2, problemi i bllokimit të radhës së parë mbetet për shkak të nevojës për të dërguar paketat në rend. QUIC është implementuar mbi UDP, prandaj nuk ka bllokade në parim, dhe për të siguruar që paketat të mos humbasin përfundimisht, ato numërohen dhe mund të përmbajnë pjesë të "fqinjve", duke siguruar mbivendosje. Për më tepër, QUIC ndan radhën monolitike në disa mëngjyrë për lloje të ndryshme kërkesash brenda një lidhjeje. Kështu, në rast humbjeje të një pakete, problemet mund të ndodhin vetëm në një radhë (p.sh., për transferimin e një skedari të caktuar):

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

Përdorimi

Fillimisht, QUIC u zhvillua brenda Google dhe ishte kryesisht i optimizuar për përdorim brenda kompanisë. Në vitin 2013, ai u transferua në IETF për standardizim (i cili vazhdon ende) dhe tani secili mund të kontribuojë në përmirësimin e protokollit, duke ofruar ato që i mungojnë atij. Grupi i punës IETF organizon çdo vit takime, ku miratohet standardi i ri dhe diskutohet për novacionet. Kjo realizim i QUIC konsiderohet si themelor, dhe baza për standardin HTTP/3 është pikërisht kjo.

Derisa të përfundojë, nuk flitet për përfshirjen e HTTP/3 si protokollin kryesor, sepse është akoma në zhvillim dhe pothuajse nuk mbështetet:

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

Por QUIC mund të implementohet si një transport midis aplikacionit dhe serverit, që Uber e ka realizuar me sukses:

Koment nga Uber mbi implementimin e QUIC

Për të integruar me sukses QUIC dhe për të përmirësuar performancën e aplikacionit në kushte të këqija lidhjeje, ne zëvendësuam stekën e vjetër (HTTP/2 mbi TLS/TCP) me protokollin QUIC. Ne angazhuam bibliotekën rrjetore Cronet nga Projeketet Chromium, e cila përmban versionin origjinal, të Google-it të protokollit – gQUIC. Kjo implementim gjithashtu përmirësohet vazhdimisht, për të ndjekur specifikimin më të fundit të IETF.

Fillimisht, ne integrojmë Cronet në aplikacionet tona Android, për të shtuar mbështetje për QUIC. Integrimi u realizua në mënyrë që të ulin sa më shumë kostot e migrimit. Në vend që të zëvendësonim plotësisht stekën e vjetër rrjetore, e cila përdorte bibliotekën OkHttp, ne integrojmë Cronet NË kornizën e API-së OkHttp. Duke kryer integrimin në këtë mënyrë, shmangëm ndryshimet në thirrjet tona rrjetore (të cilat përdorin Retrofit) në nivelin API.

Në përputhje me qasjen për pajisjet Android, ne implantuam Cronet në aplikacionet Uber për iOS, duke kapur trafikun HTTP nga rrjeti API, duke përdorur NSURLProtocol. Kjo abstraksion, e ofruar nga iOS Foundation, përpunon të dhënat URL specifike për protokollin dhe garanton që ne mund të integrojmë Cronet në aplikacionet tona iOS pa kosto të konsiderueshme migrimi.

marrë nga këtu përkthimi i artikullit të Uber

Në backend, ata kapin lidhjet QUIC përmes Google Cloud lb, i cili mbështet protokollin që nga mesi i vitit 2018.

Nuk është një befasia që Google Cloud funksionon mirë me protokollin e zhvilluar nga Google, por cilat janë alternativat?

Nginx

Jo shumë kohë më parë, CloudFlare provojnë të bashkojnë nginx (i cili për default nuk mbështet HTTP/3) me mjetin e tij Quiche. Realizimi është në formën e një skedari të vetëm .patch, i shoqëruar me një tutorial për instalimin:

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

Këtu mund të lidhen modulat tuaja nëse është e nevojshme

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

Përfshin vetëm aktivizimin e mbështetjes për HTTP/3

events {
    worker_connections  1024;
}

http {
    server {
        # Aktivizoni QUIC dhe HTTP/3.
        listen 443 quic reuseport;

        # Aktivizoni HTTP/2 (opcional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Aktivizoni të gjitha versionet e TLS (TLSv1.3 është e kërkuar për QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Bufferimi i kërkesave të proxy nuk mbështetet aktualisht për HTTP/3.
        proxy_request_buffering off;

        # Shtoni Alt-Svc header për të negociuar HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

Në browserat normalë, lidhja përmes HTTP/3 nuk është e mundur për momentin, por mund të merrni Chrome Canary dhe ta nisni atë me flagun --enable-quic, të adresoheni në serverin tuaj ose, për shembull, në faqen quic.rocks dhe të shihni llojin e lidhjes në Vegzat e Zhvilluesve:
HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC
Në vend të HTTP/3 shkruhet http2+quic/99, por ndryshe është pothuajse e njëjtë.

Teknologji të tjera

Përfundimi

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

Interesi për QUIC është i paqëndrueshëm, por po rritet, po kryhet puna për standardizimin e tij. Zbatime të reja të protokollit po dalin çdo muaj, dhe çdo vit më shumë zhvillues convjobrohen se e ardhmja është QUIC. Madje lejohet përfshirja e protokollit në versionet e ardhshme të stekës TCP, që do të thotë se herët a vonë, të gjithë interneti do të kalojë në lidhje më të qëndrueshme e më të shpejtë.

Tani për tani mund të konfiguroni ndërveprimin QUIC për infrastrukturen tuaj ose madje t'ua ofroni shfletuesve — ata planifikojnë të shtojnë mbështetje për protokollin, dhe statistikat e trishtueshme nga caniuse do të bëhen më të lumtura.

HTTP mbi UDP — përdorni në mënyrë efektive protokollin QUIC

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster