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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster