UDP orqali HTTP - QUIC protokolidan unumli foydalanish

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

QUIC (Quick UDP Internet Connections) bu TCP, TLS va HTTP/2 ning barcha xususiyatlarini qo'llab-quvvatlaydigan va ularning ko'p muammolarini hal qiladigan UDP ustidagi protokol. Ko'pincha yangi yoki "eksperimental" protokol deb ataladi, ammo u eksperimental bosqichdan uzoq vaqt o'tib ketdi: rivojlanish 7 yildan ortiq davom etmoqda. Bu vaqt ichida protokol standartga aylana olmadi, lekin baribir keng tarqaldi. Misol uchun, QUIC Google va Facebook kabi gigantlar tomonidan trafikni tezlashtirish va mobil tarmoqlardagi kechikishlarni kamaytirish uchun ishlatiladi va IETF o'zining protokol vilkasini HTTP/3 standarti uchun asos deb e'lon qildi (hatto HTTP/2 ishlatsa ham. faqat 44.8% saytlar).

tushuncha

QUIC dastlab kam yo'qotishli simli tarmoqlar uchun mo'ljallangan eski TCP o'rniga ishlab chiqilgan. TCP paketlarni tartibda etkazib beradi, shuning uchun agar bitta paket yo'qolsa, butun navbat to'xtatiladi (chiziq boshini blokirovka qilish), bu ulanishning sifati va barqarorligiga salbiy ta'sir qiladi. Katta yo'qotishlarga yo'l qo'ymaslik uchun uyali aloqa tarmoqlari katta buferlardan foydalanishga murojaat qiladi, bu esa o'z navbatida protokolning ortiqcha va noto'g'ri salbiy javobiga olib keladi (bufferbloat). Bundan tashqari, TCP ulanishni o'rnatish uchun ko'p vaqt sarflaydi: SYN/ACK va TLS so'rovlari alohida bo'lib, QUIC kabi bitta o'rniga uchta aylanishni talab qiladi.

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

QUIC TCP almashtirish va TLS 1.3 ilovasini birlashtirganligi sababli, barcha ulanishlar har doim shifrlangan bo'ladi va bunday trafik shifrini ochish HTTPS orqali o'tgandan ko'ra oson emas. Bundan tashqari, QUIC dastur darajasida amalga oshiriladi, chunki TCP stekini to'liq almashtirish uchun vaqt kerak bo'ladi. abadiyat.

HTTP/2-da multiplekslashni qo'llab-quvvatlashga qaramay, paketlarni tartibda etkazib berish zarurati tufayli chiziq boshini blokirovka qilish muammosi saqlanib qoldi. QUIC UDP ning tepasida amalga oshiriladi, shuning uchun u printsipial jihatdan blokirovkaga ega emas va paketlar abadiy yo'qolishining oldini olish uchun ular raqamlangan va ortiqchalikni ta'minlovchi "qo'shnilar" qismlarini o'z ichiga olishi mumkin. Bunga qo'shimcha ravishda, QUIC monolitik navbatni bitta ulanishda har xil turdagi so'rovlar uchun bir nechta iplarga ajratadi. Shunday qilib, agar paket yo'qolsa, faqat bitta navbat uchun muammolar paydo bo'lishi mumkin (masalan, ma'lum bir faylni uzatish uchun):

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

foydalanish

Dastlab, QUIC Google doirasida ishlab chiqilgan va asosan kompaniya ichida foydalanish uchun moslashtirilgan. 2013 yilda u standartlashtirish uchun IETFga topshirildi (bu hali ham davom etmoqda) va endi har kim o'zi etishmayotgan narsalarni taklif qilish orqali protokolni ishlab chiqishda ishtirok etishi mumkin. IETF ishchi guruhi har yili yig'ilishlar o'tkazadi, unda yangi standart tasdiqlanadi va innovatsiyalar muhokama qilinadi. QUIC ning ushbu ilovasi asosiy hisoblanadi va uning asosida HTTP/3 standarti sertifikatlangan.

Hozircha HTTP/3 ni asosiy protokol sifatida kiritish haqida gap yo‘q, chunki u hali tugallanmagan va deyarli qo‘llab-quvvatlanmaydi:

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

Ammo QUIC dastur va server o'rtasida transport sifatida amalga oshirilishi mumkin, bu Uberda muvaffaqiyatli amalga oshirildi:

Uberning QUIC joriy etilishi haqidagi sharhi

QUIC-ni muvaffaqiyatli o'rnatish va yomon ulanish muhitlarida dastur ish faoliyatini yaxshilash uchun biz eski stekni (TLS/TCP orqali HTTP/2) QUIC protokoli bilan almashtirdik. Biz tarmoq kutubxonasidan foydalandik Cronet dan Chromium loyihalari, unda protokolning asl Google versiyasi mavjud - gQUIC. Ushbu dastur, shuningdek, so'nggi IETF spetsifikatsiyasiga rioya qilish uchun doimiy ravishda takomillashtirilmoqda.

Biz QUIC-ni qo'llab-quvvatlash uchun birinchi navbatda Cronet-ni Android ilovalarimizga qo'shdik. Integratsiya migratsiya xarajatlarini imkon qadar kamaytiradigan tarzda amalga oshirildi. Kutubxonadan foydalangan eski tarmoq to'plamini to'liq almashtirish o'rniga OkHttp, biz Cronet-ni OkHttp API ramkasi ostida birlashtirdik. Integratsiyani shu tarzda amalga oshirib, biz tarmoq qo'ng'iroqlaridagi o'zgarishlardan qochdik (ular tomonidan foydalaniladi Daromad) API darajasida.

Android qurilmalari uchun yondashuvga o'xshab, biz Cronet-ni iOS-da Uber ilovalariga kiritdik va tarmoqdan HTTP-trafikni ushlab turdik. APIfoydalanish NSURLProtocol. iOS Foundation tomonidan taqdim etilgan ushbu abstraktsiya protokolga xos URL ma'lumotlarini boshqaradi va biz Cronet-ni iOS ilovalarimizga katta migratsiya xarajatlarisiz integratsiya qilishimizni ta'minlaydi.

dan olingan bu tarjima Uber maqolalari

Orqa tomonda ular Google Cloud lb orqali QUIC ulanishlarini ushladilar protokolni qo'llab-quvvatlaydi 2018 yil o'rtalaridan boshlab.

Google Cloud-ning Google tomonidan ishlab chiqilgan protokoli bilan ajoyib ishlashi ajablanarli emas, ammo qanday alternativalar bor?

nginx

Yaqinda CloudFlare Men o'tishga harakat qildim nginx (sukut bo'yicha HTTP/3 ni qo'llab-quvvatlamaydi) o'zining Quiche vositasi bilan. Amalga oshirish bitta .patch fayli sifatida mavjud bo'lib, u o'rnatish bo'yicha qo'llanma bilan birga keladi:

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

Agar kerak bo'lsa, bu erda modullarni ulashingiz mumkin

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

Faqat HTTP/3 qo'llab-quvvatlashini yoqish qoladi

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';
    }
}

Oddiy brauzerlarda HTTP/3 orqali ulanish hali mumkin emas, lekin siz foydalanishingiz mumkin Chrome Canary va uni bayroq bilan boshqaring --enable-quic, serveringizga yoki, masalan, quic.rocks saytiga o'ting va Tuzuvchi asboblaridagi ulanish turiga qarang:
UDP orqali HTTP - QUIC protokolidan unumli foydalanish
HTTP/3 o'rniga u yozilgan http2+quic/99, lekin bu aslida bir xil narsa.

Boshqa texnologiyalar

xulosa

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

QUIC-ga qiziqish beqaror, ammo o'sib bormoqda va uni standartlashtirish bo'yicha ishlar olib borilmoqda. Protokolning yangi ilovalari deyarli har oy paydo bo'ladi va har yili ko'proq ishlab chiquvchilar QUIC kelajak ekanligiga ishonch hosil qilishmoqda. Protokolni TCP stekining kelajakdagi versiyalariga ham kiritish mumkin, ya'ni ertami-kechmi butun Internet yanada barqaror va tezroq ulanishlarga o'tadi.

Siz allaqachon infratuzilmangiz uchun QUIC o'zaro ta'sirini sozlashingiz yoki hatto brauzerlarga berishingiz mumkin - ularning barchasi protokolni qo'llab-quvvatlashni rejalashtirmoqda va caniuse bilan ayanchli statistika yanada quvnoq bo'ladi.

UDP orqali HTTP - QUIC protokolidan unumli foydalanish

Manba: www.habr.com

a Izoh qo'shish