HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

QUIC (Sambungan Internét UDP Gancang) mangrupikeun protokol di luhur UDP anu ngadukung sadaya fitur TCP, TLS sareng HTTP / 2 sareng ngarengsekeun kalolobaan masalahna. Ieu sering disebut protokol anyar atawa "eksperimental", tapi geus lila outlived tahap eksperimen: ngembangkeun geus lumangsung leuwih ti 7 taun. Salila ieu, protokol henteu tiasa janten standar, tapi tetep nyebar. Salaku conto, QUIC dianggo ku raksasa sapertos Google sareng Facebook pikeun nyepetkeun lalu lintas sareng ngirangan telat dina jaringan sélulér, sareng IETF nyatakeun garpu protokolna janten dasar pikeun standar HTTP / 3 (sanaos nganggo HTTP / 2. ngan 44.8% situs).

Konsep

QUIC dikembangkeun salaku gaganti TCP warisan, nu asalna dirancang pikeun jaringan kabel low-rugi. TCP ngirimkeun pakét dina urutan, jadi lamun hiji pakét leungit, sakabéh antrian dieureunkeun (head-of-line blocking), anu négatip mangaruhan kualitas sareng stabilitas sambungan. Pikeun ngahindarkeun karugian anu ageung, jaringan sélulér nganggo panyangga anu ageung, anu nyababkeun redundansi sareng réspon négatip palsu tina protokol (bufferbloat). Sajaba ti éta, TCP méakkeun loba waktu nyieun sambungan: SYN / ACK na TLS requests buka misah, merlukeun tilu roundtrips tinimbang hiji, sakumaha QUIC manten.

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

Kusabab QUIC ngagabungkeun ngagantian TCP sareng palaksanaan TLS 1.3, sadaya sambungan sok énkripsi, sareng ngadekrip lalu lintas sapertos kitu henteu langkung gampang tibatan upami éta ngalangkungan HTTPS. Sajaba ti éta, QUIC dilaksanakeun dina tingkat aplikasi, salaku ngagantian lengkep tumpukan TCP bakal nyandak kalanggengan.

Sanajan rojongan pikeun multiplexing di HTTP / 2, masalah head-of-line blocking tetep aya alatan perlu pikeun nganteurkeun pakét dina urutan. QUIC dilaksanakeun dina luhureun UDP, ku kituna teu boga blocking prinsipna, sarta pikeun nyegah pakét leungit salawasna, aranjeunna wilanganana sarta bisa ngandung bagian tina "tatanggana," nyadiakeun redundancy. Sajaba ti éta, QUIC ngabagi antrian monolithic kana sababaraha threads pikeun tipena béda requests dina sambungan tunggal. Ku kituna, lamun pakét leungit, masalah bisa timbul ngan pikeun hiji antrian (contona, pikeun mindahkeun file husus):

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

pamakean

Mimitina, QUIC dikembangkeun dina Google sareng umumna disaluyukeun pikeun dianggo dina perusahaan. Dina 2013, éta dialihkeun ka IETF pikeun standarisasi (anu masih lumangsung), sareng ayeuna sadayana tiasa ilubiung dina pamekaran protokol ku ngajukeun naon anu leungit. Grup kerja IETF ngayakeun rapat taunan nalika standar anyar disatujuan sareng inovasi dibahas. Palaksanaan QUIC ieu dianggap utama sareng dumasar kana standar HTTP / 3 disertipikasi.

Sajauh ieu, teu aya omongan ngeunaan kaasup HTTP / 3 salaku protokol utama, sabab teu acan réngsé sarta ampir teu didukung:

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

Tapi QUIC tiasa dilaksanakeun salaku angkutan antara aplikasi sareng server, anu suksés dilakukeun di Uber:

komentar Uber ngeunaan bubuka QUIC

Pikeun suksés napelkeun QUIC jeung ningkatkeun kinerja aplikasi dina lingkungan konektipitas goréng, urang ngaganti tumpukan heubeul (HTTP/2 leuwih TLS/TCP) jeung protokol QUIC. Kami nganggo perpustakaan jaringan Kronét ti Proyék Chromium, nu ngandung aslina, versi Google tina protokol - gQUIC. Palaksanaan ieu ogé terus ditingkatkeun pikeun nuturkeun spésifikasi IETF panganyarna.

Urang mimiti ngahijikeun Cronet kana aplikasi Android urang pikeun nambihan dukungan pikeun QUIC. Integrasi dilaksanakeun ku cara pikeun ngirangan biaya migrasi sabisa-bisa. Gantina sagemblengna ngaganti tumpukan jejaring heubeul nu dipaké perpustakaan OkHttp, kami geus terpadu Cronet UNDER kerangka API OkHttp. Ku ngalakukeun integrasi ku cara ieu, urang ngahindarkeun parobihan kana telepon jaringan urang (anu dianggo ku Rétrofit) dina tingkat API.

Sarupa jeung pendekatan pikeun alat Android, urang nerapkeun Cronet kana aplikasi Uber dina ios, intercepting lalulintas HTTP tina jaringan. APIngagunakeun NSURLProtocol. Abstraksi ieu, disayogikeun ku Yayasan ios, nanganan data URL khusus protokol sareng mastikeun yén urang tiasa ngahijikeun Cronet kana aplikasi ios urang tanpa biaya migrasi anu signifikan.

dicokot tina tarjamahan ieu artikel Uber

Dina backend aranjeunna bray sambungan QUIC via Google Cloud lb, nu ngarojong protokol saprak pertengahan 2018.

Henteu heran yén Google Cloud tiasa dianggo sareng protokol anu dikembangkeun Google, tapi naon alternatifna?

Nginx

Teu lila pisan CloudFlare Kuring nyoba meuntas nginx (anu henteu ngadukung HTTP / 3 sacara standar) nganggo alat Quiche na. palaksanaan sadia salaku file .patch tunggal, nu hadir kalawan tutorial instalasi:

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

Di dieu anjeun tiasa nyambungkeun modul anjeun upami diperyogikeun

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

Sadaya anu tetep nyaéta ngaktipkeun dukungan 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';
    }
}

Ieu henteu acan mungkin pikeun nyambung via HTTP / 3 dina panyungsi biasa, tapi anjeun bisa make Chrome Kanaria tur ngajalankeun eta kalawan bandéra --enable-quic, buka server anjeun atanapi, contona, situs quic.rocks sareng tingali jinis sambungan dina Alat Pangembang:
HTTP leuwih UDP - ngamangpaatkeun protokol QUIC
Gantina HTTP / 3 eta ditulis http2+quic/99, tapi dasarna sami.

Téknologi séjén

  • QUIC ogé ngadukung LiteSpeed (anu disambungkeun ka Facebook via HTTP / 3 kalawan fanfare hébat) sarta kutang Caddy. Apache henteu acan tiasa ngalakukeun, tapi padamelan nuju dijalankeun ayun pinuh.
  • 21 Januari diropéa draf standar pikeun WebRTC
  • Ngan dinten anu sanés Microsoft dibuka kode palaksanaan msquic, anu henteu sadayana fungsi tina standar IETF sayogi, tapi ieu parantos janten terobosan anu ageung.

kacindekan

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

Minat dina QUIC teu stabil, tapi ngembang, sareng usaha nuju ngabakukeunana. Palaksanaan anyar protokol muncul ampir unggal bulan, sareng unggal taun beuki seueur pamekar anu yakin yén QUIC nyaéta masa depan. Ieu malah mungkin mun kaasup protokol dina versi hareup tumpukan TCP, nu hartina sooner atanapi engké sakabéh Internet bakal pindah ka sambungan leuwih stabil sarta gancang.

Ayeuna anjeun tiasa ngonpigurasikeun interaksi QUIC pikeun infrastruktur anjeun atanapi bahkan masihan ka panyungsi - aranjeunna sadayana ngarencanakeun pikeun nambihan dukungan pikeun protokol, sareng statistik sedih sareng caniuse bakal langkung riang.

HTTP leuwih UDP - ngamangpaatkeun protokol QUIC

sumber: www.habr.com

Tambahkeun komentar