HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

HTTP үстүнөн UDP - 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 пакеттерди ирети менен жеткирет, ошондуктан бир пакет жоголсо, бүткүл кезек токтойт (линияны бөгөттөө), бул байланыштын сапатына жана туруктуулугуна терс таасирин тийгизет. Массалык жоготууларга жол бербөө үчүн уюлдук тармактар ​​чоң буферлерди колдонууга кайрылышат, бул өз кезегинде протоколдун ашыкча болушуна жана жалган терс жоопко алып келет (bufferbloat). Кошумчалай кетсек, TCP байланышты орнотууга көп убакыт коротот: SYN/ACK жана TLS сурамдары өзүнчө болуп, QUIC сыяктуу бир эмес, үч айланып чыгууну талап кылат.

HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

QUIC TCP алмаштырууну жана TLS 1.3 ишке ашырууну айкалыштыргандыктан, бардык туташуулар ар дайым шифрленген жана мындай трафикти чечмелөө HTTPS аркылуу өткөндөн оңой эмес. Мындан тышкары, QUIC колдонмо деңгээлинде ишке ашырылат, анткени TCP стектин толук алмаштырууга түбөлүк.

HTTP/2де мультиплексирлөө колдоого алынганына карабастан, пакеттерди ирети менен жеткирүү зарылчылыгынан улам, линияны бөгөттөө көйгөйү ошол жерде кала берди. QUIC UDP үстүнө ишке ашырылат, ошондуктан анын эч кандай блокировкасы жок жана пакеттердин биротоло жоголуп кетишине жол бербөө үчүн, алар номерленген жана ашыкчаны камсыз кылып, "коңшулардын" бөлүктөрүн камтышы мүмкүн. Мындан тышкары, QUIC монолиттүү кезекти бир туташуунун ичинде ар кандай суроо-талаптар үчүн бир нече жиптерге бөлөт. Ошентип, пакет жоголсо, көйгөйлөр бир гана кезекте пайда болушу мүмкүн (мисалы, белгилүү бир файлды өткөрүү үчүн):

HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

пайдалануунун

Башында, QUIC Google ичинде иштелип чыккан жана негизинен компаниянын ичинде колдонууга ылайыкташтырылган. 2013-жылы стандартташтыруу үчүн IETFге өткөрүлүп берилген (бул дагы деле уланууда), эми ар бир адам жетишпеген нерсени сунуштоо менен протоколду иштеп чыгууга катыша алат. IETF жумушчу тобу жыл сайын жолугушууларды уюштурат, анын жүрүшүндө жаңы стандарт бекитилет жана инновациялар талкууланат. Бул QUIC ишке ашыруу негизги болуп эсептелет жана анын негизинде HTTP/3 стандарты тастыкталган.

Азырынча негизги протокол катары HTTP/3 кошуу жөнүндө сөз жок, анткени ал бүтө элек жана дээрлик колдоого алынбайт:

HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

Бирок QUIC тиркеме менен сервердин ортосундагы транспорт катары ишке ашырылышы мүмкүн, ал Uberде ийгиликтүү аткарылды:

QUIC киргизүү боюнча Uber комментарийи

QUICти ийгиликтүү киргизүү жана начар байланыш чөйрөлөрүндө колдонмонун иштешин жакшыртуу үчүн биз эски стекти (TLS/TCP үстүнөн HTTP/2) QUIC протоколуна алмаштырдык. Биз тармактык китепкананы колдондук Cronet чейин Chromium долбоорлору, анда протоколдун түпнуска, Google версиясы камтылган - gQUIC. Бул ишке ашыруу да дайыма акыркы IETF спецификациясына ылайык өркүндөтүлүп турат.

QUIC колдоосун кошуу үчүн биз алгач Cronetти Android колдонмолорубузга киргиздик. Интеграция миграциялык чыгымдарды мүмкүн болушунча азайта тургандай ишке ашырылган. Китепкананы колдонгон эски тармактык стекти толугу менен алмаштыруунун ордуна OkHttp, биз Cronetти OkHttp API алкагында бириктирдик. Интеграцияны ушундай жол менен жасоо менен, биз тармактык чалууларыбызды өзгөртүүдөн качтык (алар кетип) API деңгээлинде.

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

тартып алынган бул котормо Uber макалалары

Арткы жагында алар Google Cloud lb аркылуу QUIC байланыштарын кармашты протоколду колдойт 2018-жылдын ортосунан бери.

Google Булуттун Google иштеп чыккан протоколу менен сонун иштеши таң калыштуу эмес, бирок альтернативалар кандай?

жөргөмүш

Жакында 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 сайтына өтүп, Иштеп чыгуучунун куралдарында байланыш түрүн караңыз:
HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу
HTTP/3 ордуна ал жазылган http2+quic/99, бирок бул негизинен бир эле нерсе.

Башка технологиялар

жыйынтыктоо

HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

QUICке болгон кызыгуу туруксуз, бирок өсүп жатат жана аны стандартташтыруу боюнча иштер жүрүп жатат. Протоколдун жаңы ишке ашырылышы дээрлик ай сайын пайда болот жана жыл сайын көбүрөөк иштеп чыгуучулар QUIC келечек экенине ынанышат. Ал тургай, протоколду TCP стекинин келечектеги версияларына кошууга болот, демек, эртеби-кечпи бүткүл Интернет туруктуураак жана тезирээк байланыштарга өтөт.

Азыртадан эле сиз инфраструктураңыз үчүн QUIC өз ара аракеттенүүсүн конфигурациялай аласыз же аны браузерлерге бере аласыз - алардын бардыгы протоколго колдоо кошууну пландап жатышат, жана caniuse менен кайгылуу статистика дагы көңүлдүү болуп калат.

HTTP үстүнөн UDP - QUIC протоколун жакшы колдонуу

Source: www.habr.com

Комментарий кошуу