HTTP mbi UDP - duke përdorur mirë protokollin QUIC

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

QUIC (Quick UDP Internet Connections) është një protokoll në krye të UDP që mbështet të gjitha tiparet e TCP, TLS dhe HTTP/2 dhe zgjidh shumicën e problemeve të tyre. Shpesh quhet një protokoll i ri ose "eksperimental", por ka kohë që e ka tejkaluar fazën eksperimentale: zhvillimi ka vazhduar për më shumë se 7 vjet. Gjatë kësaj kohe, protokolli nuk arriti të bëhej standard, por megjithatë u përhap gjerësisht. Për shembull, QUIC përdoret nga gjigantë të tillë si Google dhe Facebook për të shpejtuar trafikun dhe për të reduktuar vonesat në rrjetet celulare, dhe IETF deklaroi seksionin e tij të protokollit bazë për standardin HTTP/3 (edhe pse HTTP/2 përdor vetem 44.8% faqet).

koncept

QUIC u zhvillua si një zëvendësim për TCP-në e trashëguar, e cila fillimisht ishte projektuar për rrjete me tela me humbje të ulët. TCP dorëzon paketat në rregull, kështu që nëse një paketë humbet, e gjithë radha ndalet (bllokimi i kokës), gjë që ndikon negativisht në cilësinë dhe qëndrueshmërinë e lidhjes. Për të shmangur humbjet masive, rrjetet celulare përdorin buferë të mëdhenj, të cilët nga ana tjetër çojnë në tepricë dhe përgjigje të rreme negative të protokollit (bufferbloat). Përveç kësaj, TCP shpenzon shumë kohë për të krijuar një lidhje: kërkesat SYN/ACK dhe TLS shkojnë veçmas, duke kërkuar tre udhëtime vajtje-ardhje në vend të një, siç bën QUIC.

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

Meqenëse QUIC kombinon një zëvendësim TCP dhe një implementim të TLS 1.3, të gjitha lidhjet janë gjithmonë të koduara dhe deshifrimi i një trafiku të tillë nuk është më i lehtë sesa nëse do të kalonte përmes HTTPS. Përveç kësaj, QUIC zbatohet në nivelin e aplikacionit, pasi do të kërkonte një zëvendësim i plotë i stackit TCP përjetësia.

Pavarësisht mbështetjes për multipleksimin në HTTP/2, problemi i bllokimit të kokës së linjës mbeti atje për shkak të nevojës për të shpërndarë paketat në rregull. QUIC zbatohet në krye të UDP, kështu që në parim nuk ka bllokim dhe për të parandaluar humbjen e paketave përgjithmonë, ato numërohen dhe mund të përmbajnë pjesë të "fqinjëve", duke siguruar tepricë. Përveç kësaj, QUIC ndan radhën monolit në fije të shumta për lloje të ndryshme kërkesash brenda një lidhjeje të vetme. Kështu, nëse një paketë humbet, mund të lindin probleme vetëm për një radhë (për shembull, për transferimin e një skedari specifik):

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

Përdorim

Fillimisht, QUIC u zhvillua brenda Google dhe ishte përshtatur kryesisht për përdorim brenda kompanisë. Në vitin 2013, ai u transferua në IETF për standardizim (i cili është ende në vazhdim), dhe tani të gjithë mund të marrin pjesë në zhvillimin e protokollit duke propozuar atë që i mungon. Grupi i punës i IETF organizon takime vjetore gjatë të cilave miratohet një standard i ri dhe diskutohen risitë. Ky implementim i QUIC konsiderohet si kryesori dhe mbi bazën e tij është certifikuar standardi HTTP/3.

Deri më tani, nuk flitet për përfshirjen e HTTP/3 si protokollin kryesor, sepse nuk ka përfunduar ende dhe pothuajse nuk mbështetet:

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

Por QUIC mund të zbatohet si një transport midis aplikacionit dhe serverit, i cili u krye me sukses në Uber:

Komenti i Uber për prezantimin e QUIC

Për të integruar me sukses QUIC dhe për të përmirësuar performancën e aplikacionit në mjedise me lidhje të dobët, ne zëvendësuam grupin e vjetër (HTTP/2 mbi TLS/TCP) me protokollin QUIC. Ne përdorëm bibliotekën e rrjetit Cronet nga Projektet e Chromium, i cili përmban versionin origjinal, Google të protokollit - gQUIC. Ky implementim po përmirësohet gjithashtu vazhdimisht për të ndjekur specifikimet më të fundit të IETF.

Ne fillimisht integruam Cronet në aplikacionet tona Android për të shtuar mbështetje për QUIC. Integrimi u krye në atë mënyrë që të reduktonte sa më shumë kostot e migracionit. Në vend që të zëvendësohet plotësisht grupi i vjetër i rrjetit që përdorte bibliotekën OkHttp, ne kemi integruar Cronet NËN kuadrin OkHttp API. Duke bërë integrimin në këtë mënyrë, ne shmangëm ndryshimet në thirrjet tona të rrjetit (të cilat përdoren nga retrofit) në nivel API.

Ngjashëm me qasjen për pajisjet Android, ne kemi implementuar Cronet në aplikacionet Uber në iOS, duke përgjuar trafikun HTTP nga rrjeti APIduke përdorur Protokolli NSURL. Ky abstraksion, i ofruar nga Fondacioni iOS, trajton të dhënat URL specifike të protokollit dhe siguron që ne mund të integrojmë Cronet në aplikacionet tona iOS pa kosto të konsiderueshme migrimi.

marre nga këtë përkthim Artikuj Uber

Në backend ata kapën lidhje QUIC përmes Google Cloud lb, e cila mbështet protokollin që nga mesi i vitit 2018.

Nuk është çudi që Google Cloud funksionon shkëlqyeshëm me protokollin e zhvilluar nga Google, por cilat janë alternativat?

nginx

Jo shumë kohë më parë CloudFlare U përpoqa të kaloja nginx (i cili nuk mbështet HTTP/3 si parazgjedhje) me mjetin e tij Quiche. Implementimi është i disponueshëm si një skedar i vetëm .patch, i cili vjen me një tutorial instalimi:

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ë lidhni modulet 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

Gjithçka që mbetet është të aktivizoni mbështetjen e 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';
    }
}

Nuk është ende e mundur të lidheni me HTTP/3 në shfletues të rregullt, por mund ta përdorni Kanari i Kromit dhe drejtoje me flamur --enable-quic, shkoni te serveri juaj ose, për shembull, në faqen e quic.rocks dhe shikoni llojin e lidhjes në Developer Tools:
HTTP mbi UDP - duke përdorur mirë protokollin QUIC
Në vend të HTTP/3 është shkruar http2+quic/99, por në thelb është e njëjta gjë.

Teknologji të tjera

  • QUIC gjithashtu mbështet LiteSpeed (i cili u lidh me Facebook nëpërmjet HTTP/3 me bujë të madhe) dhe progresive Kuti çaji. Apache nuk mund ta bëjë ende, por puna është duke u zhvilluar ritëm të plotë.
  • Përditësuar më 21 janar draft standardi për WebRTC
  • Vetëm një ditë tjetër Microsoft u hap kodi i zbatimit msquic, në të cilin jo të gjitha funksionet nga standardi IETF janë ende të disponueshme, por ky është tashmë një zbulim i madh.

Përfundim

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

Interesi për QUIC është i paqëndrueshëm, por në rritje, dhe po punohet për standardizimin e tij. Implementimet e reja të protokollit shfaqen pothuajse çdo muaj, dhe çdo vit gjithnjë e më shumë zhvillues janë të bindur se QUIC është e ardhmja. Është madje e mundur përfshirja e protokollit në versionet e ardhshme të stackit TCP, që do të thotë se herët a vonë i gjithë Interneti do të kalojë në lidhje më të qëndrueshme dhe më të shpejta.

Tashmë tani mund të konfiguroni ndërveprimin QUIC për infrastrukturën tuaj ose madje t'ua jepni shfletuesve - ata të gjithë po planifikojnë të shtojnë mbështetje për protokollin dhe statistikat e trishtuara me caniuse do të bëhen më të gëzuara.

HTTP mbi UDP - duke përdorur mirë protokollin QUIC

Burimi: www.habr.com

Shto një koment