UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

QUIC (Quick UDP Internet Connections) — TCP, TLS және HTTP/2 барлық мүмкіндіктерін қолдайтын және олардың мәселелерінің көпшілігін шешетін UDP протоколының жоғарғы жағындағы протокол. Ол жиі жаңа немесе «эксперименттік» хаттама деп аталады, бірақ ол эксперименттік кезеңнен әлдеқашан асып түсті: әзірлеу 7 жылдан астам уақыт бойы жалғасуда. Осы уақыт ішінде хаттама стандартқа айнала алмады, бірақ әлі де кең тарады. Мысалы, QUIC трафикті жылдамдату және мобильді желілердегі кідірістерді азайту үшін Google және Facebook сияқты алыптар пайдаланады, ал IETF протоколының шанышқысын HTTP/3 стандартының негізі деп жариялады (HTTP/2 пайдаланса да). тек 44.8% сайттар).

Тұжырымдама

QUIC бастапқыда аз шығынды сымды желілерге арналған ескі TCP-ді ауыстыру ретінде әзірленді. TCP пакеттерді ретімен жеткізеді, сондықтан бір пакет жоғалса, бүкіл кезек тоқтатылады (жолдың басын блоктау), бұл қосылымның сапасы мен тұрақтылығына теріс әсер етеді. Жаппай жоғалтуларды болдырмау үшін ұялы желілер үлкен буферлерді пайдаланады, бұл өз кезегінде хаттаманың артық болуына және жалған теріс реакциясына әкеледі (буферблоат). Сонымен қатар, TCP қосылымды орнатуға көп уақыт жұмсайды: SYN/ACK және TLS сұраулары бөлек өңделеді, QUIC сияқты бір емес, үш айналымды қажет етеді.

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

QUIC TCP ауыстыруды және TLS 1.3 іске асыруды біріктіретіндіктен, барлық қосылымдар әрқашан шифрланады және мұндай трафиктің шифрын шешу HTTPS арқылы өтуге қарағанда оңай емес. Сонымен қатар, QUIC қолданбалар деңгейінде жүзеге асырылады, өйткені TCP стекін толық ауыстыру қажет болады. мәңгілік.

HTTP/2-де мультиплекстеуді қолдауға қарамастан, пакеттерді ретімен жеткізу қажеттілігіне байланысты желіні блоктау мәселесі сол жерде қалды. QUIC UDP үстінде жүзеге асырылады, сондықтан оның блоктауы жоқ және пакеттердің мәңгі жоғалып кетуіне жол бермеу үшін олар нөмірленеді және артықшылықты қамтамасыз ететін «көршілер» бөліктерін қамтуы мүмкін. Бұған қоса, QUIC бір қосылымдағы сұраулардың әртүрлі түрлері үшін монолитті кезекті бірнеше ағындарға бөледі. Осылайша, егер пакет жоғалса, проблемалар тек бір кезекте туындауы мүмкін (мысалы, белгілі бір файлды тасымалдау үшін):

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

Пайдаланыңыз

Бастапқыда QUIC Google ішінде әзірленді және негізінен компания ішінде пайдалануға бейімделген. 2013 жылы ол стандарттау үшін IETF-ке берілді (ол әлі жалғасуда), енді әркім жетіспейтін нәрсені ұсыну арқылы хаттаманы әзірлеуге қатыса алады. IETF жұмыс тобы жыл сайынғы отырыстар ұйымдастырады, оның барысында жаңа стандарт бекітіліп, инновациялар талқыланады. Бұл QUIC енгізуі негізгі болып саналады және соның негізінде HTTP/3 стандарты сертификатталған.

Әзірге негізгі протокол ретінде HTTP/3 қосу туралы әңгіме жоқ, себебі ол әлі аяқталмаған және дерлік қолдау көрсетілмейді:

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

Бірақ QUIC қолданбасы мен сервер арасындағы тасымалдау ретінде жүзеге асырылуы мүмкін, ол Uber-те сәтті орындалды:

Uber компаниясының QUIC енгізу туралы түсініктемесі

QUIC-ті сәтті енгізу және нашар байланыс орталарында қолданба өнімділігін жақсарту үшін біз ескі стекті (TLS/TCP арқылы HTTP/2) QUIC протоколымен ауыстырдық. Біз желілік кітапхананы қолдандық Кронет -дан Chromium жобалары, онда протоколдың түпнұсқасы, Google нұсқасы бар - gQUIC. Бұл енгізу сонымен қатар соңғы IETF спецификациясына сәйкес үнемі жетілдіріліп отырады.

QUIC қолдауын қосу үшін алдымен Cronet қолданбасын Android қолданбаларына біріктірдік. Интеграция көші-қон шығындарын барынша азайтатындай етіп жүзеге асырылды. Кітапхананы пайдаланған ескі желілік стекті толығымен ауыстырудың орнына OkHttp, біз Cronet-ті OkHttp API құрылымының астына біріктірдік. Интеграцияны осылай жасау арқылы біз желілік қоңырауларымызға өзгерістер енгізуден аулақ болдық (оларды Ретрофит) API деңгейінде.

Android құрылғыларына арналған тәсілге ұқсас, біз желіден HTTP трафигін ұстай отырып, iOS жүйесіндегі Uber қолданбаларына Cronet енгіздік. APIқолдану арқылы NSURLProtocol. iOS Foundation ұсынған бұл абстракция протоколға тән URL деректерін өңдейді және Cronet қолданбасын біздің iOS қолданбаларымызға айтарлықтай тасымалдау шығындарынсыз біріктіруімізге кепілдік береді.

-дан алынған бұл аударма Uber мақалалары

Артқы жағында олар Google Cloud lb арқылы QUIC қосылымдарын ұстады протоколды қолдайды 2018 жылдың ортасынан бастап.

Google Cloud-тың Google әзірлеген протоколымен тамаша жұмыс істейтіні таңқаларлық емес, бірақ балама нұсқалары қандай?

Nginx

Жақында CloudFlare Мен кесіп өтуге тырыстым nginx (әдепкі бойынша HTTP/3 қолдамайды) оның Quiche құралымен. Іске асыру орнату оқулығымен бірге келетін жалғыз .patch файлы ретінде қол жетімді:

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

Қажет болса, мұнда модульдерді қосуға болады

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

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

Кәдімгі браузерлерде HTTP/3 арқылы қосылу әлі мүмкін емес, бірақ сіз пайдалана аласыз Chrome Canary және оны жалаушамен іске қосыңыз --enable-quic, серверіңізге немесе, мысалы, quic.rocks сайтына өтіп, Әзірлеуші ​​​​құралдарындағы қосылым түрін қараңыз:
UDP арқылы HTTP - QUIC протоколын жақсы пайдалану
HTTP/3 орнына ол жазылған http2+quic/99, бірақ бұл негізінен бірдей нәрсе.

Басқа технологиялар

  • QUIC де қолдайды LiteSpeed (ол Facebook-ке HTTP/3 арқылы үлкен фанфармен қосылған) және прогрессивті Caddy. Apache мұны әлі жасай алмайды, бірақ жұмыс жүріп жатыр толық серпіліс.
  • 21 қаңтар жаңартылды WebRTC стандартының жобасы
  • Бір күні ғана Microsoft ашылды msquic іске асыру коды, онда IETF стандартындағы барлық функциялар әлі қол жетімді емес, бірақ бұл қазірдің өзінде үлкен жетістік.

қорытынды

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

QUIC-ке қызығушылық тұрақсыз, бірақ өсуде және оны стандарттау бойынша жұмыс жүргізілуде. Хаттаманың жаңа енгізулері ай сайын дерлік пайда болады және жыл сайын көбірек әзірлеушілер QUIC болашақ екеніне сенімді. Тіпті хаттаманы TCP стекінің болашақ нұсқаларына қосуға болады, бұл ерте ме, кеш пе бүкіл Интернет неғұрлым тұрақты және жылдам қосылымдарға көшеді.

Қазірдің өзінде сіз өзіңіздің инфрақұрылымыңыз үшін QUIC өзара әрекеттесуін конфигурациялай аласыз немесе тіпті оны браузерлерге бере аласыз - олардың барлығы протоколға қолдау көрсетуді жоспарлап отыр, ал caniuse-мен қайғылы статистика көңілді болады.

UDP арқылы HTTP - QUIC протоколын жақсы пайдалану

Ақпарат көзі: www.habr.com

пікір қалдыру