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-ээр дамжихаас хялбар биш юм. Нэмж дурдахад TCP стекийг бүрэн солиход QUIC нь хэрэглээний түвшинд хэрэгждэг. үүрд мөнх.

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-ийг Андройд програмууддаа нэгтгэсэн. Шилжилт хөдөлгөөний зардлыг аль болох бууруулах үүднээс интеграци хийсэн. Номын санг ашиглаж байсан хуучин сүлжээний стекийг бүрэн солихын оронд OkHttp, бид Cronet-ийг OkHttp API хүрээний дор нэгтгэсэн. Интеграцийг ийм байдлаар хийснээр бид сүлжээний дуудлагадаа (хэрэглэдэг Ашгийн ашиг) API түвшинд.

Андройд төхөөрөмжүүдийн арга барилтай адил бид Cronet-ийг iOS дээрх Uber програмуудад нэвтрүүлж, сүлжээнээс HTTP урсгалыг таслан зогсоосон. APIашиглах NSURLProtocol. iOS сангаас гаргасан энэхүү хийсвэрлэл нь протоколд хамаарах URL-н өгөгдлийг зохицуулдаг бөгөөд бид Cronet-ийг iOS програмууддаа шилжүүлэхэд ихээхэн зардалгүйгээр нэгтгэх боломжийг олгодог.

-аас авсан энэ орчуулга Uber нийтлэлүүд

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

Google Cloud нь Google-ийн боловсруулсан протоколтой маш сайн ажилладаг нь гайхах зүйл биш боловч өөр хувилбарууд юу вэ?

Nginx

Удалгүй CloudFlare Би хөндлөн гарах гэж оролдсон nginx (энэ нь анхдагчаар HTTP/3-г дэмждэггүй) Quiche хэрэгслээр суулгана. Уг хэрэгжилтийг нэг .патч файл хэлбэрээр авах боломжтой бөгөөд энэ нь суулгах заавартай хамт ирдэг:

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-аар дамжуулан их сүр дуулиантай холбогдсон) болон дэвшилтэт цай. Apache үүнийг хараахан хийж чадахгүй байгаа ч ажил хийгдэж байна бүрэн савлуур.
  • 21-р сарын XNUMX шинэчлэгдсэн WebRTC стандартын төсөл
  • Дөнгөж сая Майкрософт нээгдэв msquic хэрэгжүүлэх код, IETF стандартын бүх функцууд хараахан гараагүй байгаа ч энэ нь аль хэдийн том нээлт болсон.

дүгнэлт

UDP гаруй HTTP - QUIC протоколыг сайн ашиглах

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

Одоо та өөрийн дэд бүтцэд зориулж QUIC харилцан үйлчлэлийг тохируулах эсвэл бүр хөтчүүдэд өгөх боломжтой - тэд бүгд протоколд дэмжлэг үзүүлэхээр төлөвлөж байгаа бөгөөд caniuse-тай холбоотой гунигтай статистикууд илүү хөгжилтэй байх болно.

UDP гаруй HTTP - QUIC протоколыг сайн ашиглах

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх