HTTP, izmantojot UDP ā lietderÄ«ga QUIC protokola izmantoÅ”ana
QUIC (Quick UDP Internet Connections) ir protokols papildus UDP, kas atbalsta visas TCP, TLS un HTTP/2 funkcijas un atrisina lielÄko daļu to problÄmu. To bieži sauc par jaunu vai āeksperimentÄluā protokolu, taÄu tas jau sen ir pÄrdzÄ«vojis eksperimentÄlo posmu: izstrÄde notiek vairÄk nekÄ 7 gadus. Å ajÄ laikÄ protokols nepaguva kļūt par standartu, bet tomÄr kļuva plaÅ”i izplatÄ«ts. PiemÄram, QUIC izmanto tÄdi giganti kÄ Google un Facebook, lai paÄtrinÄtu trafiku un samazinÄtu aizkavÄÅ”anos mobilajos tÄ«klos, un IETF paziÅoja, ka protokola dakÅ”a ir HTTP/3 standarta pamatÄ (kaut arÄ« HTTP/2 izmanto tikai 44.8% vietnes).
JÄdziens
QUIC tika izstrÄdÄts kÄ mantotÄ TCP aizstÄjÄjs, kas sÄkotnÄji bija paredzÄts zemu zudumu vadu tÄ«kliem. TCP piegÄdÄ paketes kÄrtÄ«bÄ, tÄpÄc, ja viena pakete tiek pazaudÄta, visa rinda tiek apturÄta (lÄ«nijas galvas bloÄ·ÄÅ”ana), kas negatÄ«vi ietekmÄ savienojuma kvalitÄti un stabilitÄti. Lai izvairÄ«tos no lieliem zaudÄjumiem, mobilie tÄ«kli izmanto lielus buferus, kas savukÄrt izraisa protokola dublÄÅ”anu un viltus negatÄ«vu atbildi (buferuzpÅ«Å”anÄs). TurklÄt TCP pavada daudz laika, lai izveidotu savienojumu: SYN/ACK un TLS pieprasÄ«jumi tiek apstrÄdÄti atseviŔķi, un ir nepiecieÅ”ami trÄ«s braucieni turp un atpakaļ, nevis viens, kÄ to dara QUIC.
TÄ kÄ QUIC apvieno TCP nomaiÅu un TLS 1.3 ievieÅ”anu, visi savienojumi vienmÄr tiek Å”ifrÄti, un Å”Ädas trafika atÅ”ifrÄÅ”ana nav vienkÄrÅ”Äka nekÄ tad, ja tÄ notiktu, izmantojot HTTPS. TurklÄt QUIC tiek ieviests lietojumprogrammu lÄ«menÄ«, jo bÅ«tu nepiecieÅ”ama pilnÄ«ga TCP steka nomaiÅa mūžība.
Neskatoties uz atbalstu multipleksÄÅ”anai HTTP/2, galvenÄs lÄ«nijas bloÄ·ÄÅ”anas problÄma saglabÄjÄs, jo bija nepiecieÅ”ams piegÄdÄt paketes kÄrtÄ«bÄ. QUIC ir ieviests virs UDP, tÄpÄc tam principÄ nav bloÄ·ÄÅ”anas, un, lai paketes netiktu zaudÄtas uz visiem laikiem, tÄs ir numurÄtas un var saturÄt ākaimiÅuā daļas, nodroÅ”inot dublÄÅ”anu. TurklÄt QUIC sadala monolÄ«to rindu vairÄkos pavedienos dažÄda veida pieprasÄ«jumiem vienÄ savienojumÄ. TÄdÄjÄdi, ja pakete tiek pazaudÄta, problÄmas var rasties tikai vienai rindai (piemÄram, pÄrsÅ«tot konkrÄtu failu):
Izmantot
SÄkotnÄji QUIC tika izstrÄdÄts Google ietvaros un lielÄ mÄrÄ tika pielÄgots lietoÅ”anai uzÅÄmumÄ. 2013. gadÄ tas tika nodots IETF standartizÄcijai (kas joprojÄm turpinÄs), un tagad ikviens var piedalÄ«ties protokola izstrÄdÄ, piedÄvÄjot to, kas viÅam trÅ«kst. IETF darba grupa organizÄ ikgadÄjas sanÄksmes, kuru laikÄ tiek apstiprinÄts jauns standarts un apspriesti jauninÄjumi. Å Ä« QUIC ievieÅ”ana tiek uzskatÄ«ta par galveno, un uz tÄs pamata tiek sertificÄts HTTP/3 standarts.
PagaidÄm nav runas par HTTP/3 iekļauÅ”anu kÄ galveno protokolu, jo tas vÄl nav pabeigts un gandrÄ«z netiek atbalstÄ«ts:
Bet QUIC var ieviest kÄ transportu starp lietojumprogrammu un serveri, kas veiksmÄ«gi tika paveikts Uber:
Uber komentÄrs par QUIC ievieÅ”anu
Lai veiksmÄ«gi iegultu QUIC un uzlabotu lietojumprogrammu veiktspÄju vÄjÄs savienojamÄ«bas vidÄs, mÄs nomainÄ«jÄm veco steku (HTTP/2, izmantojot TLS/TCP) ar QUIC protokolu. MÄs izmantojÄm tÄ«kla bibliotÄku Kronets no Chromium projekti, kurÄ ir oriÄ£inÄlÄ, Google protokola versija - gQUIC. Å Ä« ievieÅ”ana arÄ« tiek pastÄvÄ«gi uzlabota, lai atbilstu jaunÄkajai IETF specifikÄcijai.
Vispirms mÄs integrÄjÄm Cronet savÄs Android lietotnÄs, lai pievienotu QUIC atbalstu. IntegrÄcija tika veikta tÄ, lai pÄc iespÄjas samazinÄtu migrÄcijas izmaksas. TÄ vietÄ, lai pilnÄ«bÄ aizstÄtu veco tÄ«kla steku, kas izmantoja bibliotÄku OkHttp, esam integrÄjuÅ”i Cronet UZ OkHttp API ietvaru. Veicot integrÄciju Å”ÄdÄ veidÄ, mÄs izvairÄ«jÄmies no izmaiÅÄm mÅ«su tÄ«kla zvanos (kurus izmanto PÄrbÅ«vÄt) API lÄ«menÄ«.
LÄ«dzÄ«gi kÄ Android ierÄ«cÄm, mÄs ieviesÄm Cronet Uber lietotnÄs operÄtÄjsistÄmÄ iOS, pÄrtverot HTTP trafiku no tÄ«kla. APIizmantojot NSURL protokols. Å Ä« abstrakcija, ko nodroÅ”ina iOS fonds, apstrÄdÄ protokolam specifiskus URL datus un nodroÅ”ina, ka mÄs varam integrÄt Cronet mÅ«su iOS lietojumprogrammÄs bez ievÄrojamÄm migrÄcijas izmaksÄm.
AizmugurÄ viÅi nozvejoja QUIC savienojumus, izmantojot Google Cloud lb, kas atbalsta protokolu kopÅ” 2018. gada vidus.
Nav pÄrsteigums, ka Google Cloud lieliski darbojas ar Google izstrÄdÄto protokolu, taÄu kÄdas ir alternatÄ«vas?
Nginx
Pirms neilga laika CloudFlare Es mÄÄ£inÄju ŔķÄrsot nginx (kas pÄc noklusÄjuma neatbalsta HTTP/3) ar savu Quiche rÄ«ku. IevieÅ”ana ir pieejama kÄ viens .patch fails, kam ir pievienota instalÄÅ”anas apmÄcÄ«ba:
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
Šeit jūs varat savienot savus moduļus, ja nepiecieŔams
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
Atliek tikai iespÄjot HTTP/3 atbalstu
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';
}
}
ParastÄs pÄrlÅ«kprogrammÄs vÄl nav iespÄjams izveidot savienojumu, izmantojot HTTP/3, bet var izmantot Chrome Canary un palaist to ar karogu --enable-quic, dodieties uz savu serveri vai, piemÄram, vietni quic.rocks un skatiet savienojuma veidu izstrÄdÄtÄja rÄ«kos:
HTTP/3 vietÄ ir rakstÄ«ts http2+quic/99, bet bÅ«tÄ«bÄ tas ir viens un tas pats.
Citas tehnoloģijas
Atbalsts arÄ« QUIC LiteSpeed (kas savienojÄs ar Facebook, izmantojot HTTP/3 ar lielu skaÅu) un progresÄ«va TÄjas kÄrbiÅa. Apache to vÄl nevar izdarÄ«t, taÄu darbs notiek pilnÄs burÄs.
Tikai otro dienu Microsoft atvÄrÄs msquic ievieÅ”anas kods, kurÄ vÄl nav pieejamas visas IETF standarta funkcijas, taÄu tas jau ir liels sasniegums.
SecinÄjums
Interese par QUIC ir nestabila, taÄu pieaug, un tiek strÄdÄts pie tÄs standartizÄcijas. Jaunas protokola ievieÅ”anas parÄdÄs gandrÄ«z katru mÄnesi, un katru gadu arvien vairÄk izstrÄdÄtÄju pÄrliecinÄs, ka QUIC ir nÄkotne. Protokolu pat iespÄjams iekļaut nÄkamajÄs TCP steka versijÄs, kas nozÄ«mÄ, ka agri vai vÄlu viss internets pÄries uz stabilÄkiem un ÄtrÄkiem savienojumiem.
Jau tagad jÅ«s varat konfigurÄt QUIC mijiedarbÄ«bu savai infrastruktÅ«rai vai pat dot to pÄrlÅ«kprogrammÄm - viÅi visi plÄno pievienot protokola atbalstu, un bÄdÄ«gÄ statistika ar caniuse kļūs jautrÄka.