UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

QUIC (Quick UDP İnternet Bağlantıları) TCP, TLS və HTTP/2-nin bütün xüsusiyyətlərini dəstəkləyən və onların problemlərinin əksəriyyətini həll edən UDP-nin üstündə olan bir protokoldur. O, tez-tez yeni və ya “eksperimental” protokol adlanır, lakin o, eksperimental mərhələdən çoxdan keçmişdir: inkişaf 7 ildən artıqdır ki, davam edir. Bu müddət ərzində protokol standarta çevrilə bilmədi, lakin yenə də geniş yayıldı. Məsələn, QUIC trafiki sürətləndirmək və mobil şəbəkələrdə gecikmələri azaltmaq üçün Google və Facebook kimi nəhənglər tərəfindən istifadə olunur və IETF protokolun çəngəlini HTTP/3 standartı üçün əsas elan etdi (HTTP/2 istifadə etsə də. yalnız 44.8% saytlar).

Anlayış

QUIC əvvəlcə az itkili simli şəbəkələr üçün nəzərdə tutulmuş köhnə TCP-nin əvəzi kimi hazırlanmışdır. TCP paketləri ardıcıllıqla çatdırır, ona görə də bir paket itirilərsə, bütün növbə dayandırılır (baş-of-line bloklanması), əlaqənin keyfiyyətinə və sabitliyinə mənfi təsir göstərir. Kütləvi itkilərin qarşısını almaq üçün mobil şəbəkələr böyük buferlərdən istifadə edir ki, bu da öz növbəsində protokolun artıqlığına və yanlış mənfi reaksiyasına səbəb olur (buferbloat). Bundan əlavə, TCP əlaqə yaratmaq üçün çox vaxt sərf edir: SYN/ACK və TLS sorğuları ayrıca işlənir, QUIC kimi bir əvəzinə üç gediş tələb olunur.

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

QUIC TCP-nin dəyişdirilməsini və TLS 1.3 tətbiqini birləşdirdiyi üçün bütün əlaqələr həmişə şifrələnir və belə trafikin şifrəsini açmaq HTTPS-dən keçməkdən asan deyil. Bundan əlavə, QUIC tətbiq səviyyəsində həyata keçirilir, çünki TCP yığınının tam dəyişdirilməsi vaxt aparacaq. əbədiyyət.

HTTP/2-də multipleksləşdirmənin dəstəklənməsinə baxmayaraq, paketləri qaydada çatdırmaq zərurəti ilə əlaqədar olaraq, xəttin bloklanması problemi orada qaldı. QUIC UDP-nin üstündə həyata keçirilir, buna görə də onun prinsipcə bloklanması yoxdur və paketlərin əbədi olaraq itirilməsinin qarşısını almaq üçün onlar nömrələnir və artıqlığı təmin edən “qonşuların” hissələrini ehtiva edə bilər. Bundan əlavə, QUIC monolit növbəni bir əlaqə daxilində müxtəlif növ sorğular üçün çoxlu mövzulara bölür. Beləliklə, paket itirildikdə, yalnız bir növbə üçün problemlər yarana bilər (məsələn, müəyyən bir faylın ötürülməsi üçün):

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

Istifadə

Əvvəlcə QUIC Google daxilində hazırlanmış və əsasən şirkət daxilində istifadə üçün hazırlanmışdır. 2013-cü ildə standartlaşdırma üçün IETF-ə təqdim edildi (bu hələ də davam edir) və indi hər kəs çatışmayanları təklif edərək protokolun hazırlanmasında iştirak edə bilər. IETF İşçi Qrupu yeni standartın təsdiq edildiyi və yeniliklərin müzakirə edildiyi illik iclaslar təşkil edir. QUIC-in bu tətbiqi əsas hesab olunur və bunun əsasında HTTP / 3 standartı sertifikatlaşdırılır.

Hələ ki, HTTP/3-ün əsas protokol kimi daxil edilməsi barədə heç bir söhbət yoxdur, çünki o, hələ tamamlanmayıb və demək olar ki, dəstəklənmir:

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

Lakin QUIC Uber-də uğurla həyata keçirilən proqram və server arasında nəqliyyat kimi həyata keçirilə bilər:

Uber-in QUIC-in tətbiqi ilə bağlı şərhi

QUIC-i uğurla yerləşdirmək və zəif keçid mühitlərində tətbiq performansını yaxşılaşdırmaq üçün biz köhnə yığını (TLS/TCP üzərində HTTP/2) QUIC protokolu ilə əvəz etdik. Şəbəkə kitabxanasından istifadə etdik Cronet haqqında Chromium Layihələri, protokolun orijinal Google versiyasını ehtiva edir - gQUIC. Bu tətbiq də ən son IETF spesifikasiyasına riayət etmək üçün daim təkmilləşdirilir.

QUIC üçün dəstək əlavə etmək üçün ilk olaraq Cronet-i Android proqramlarımıza inteqrasiya etdik. İnteqrasiya elə həyata keçirilirdi ki, miqrasiya xərcləri mümkün qədər azalsın. Kitabxanadan istifadə edən köhnə şəbəkə yığınını tamamilə əvəz etmək əvəzinə OkHttp, biz Cronet-i OkHttp API çərçivəsi ALTINDA inteqrasiya etdik. İnteqrasiyanı bu şəkildə etməklə biz şəbəkə zənglərimizdə dəyişikliklərin qarşısını aldıq (onlardan Geri gəlir) API səviyyəsində.

Android cihazları üçün yanaşmaya bənzər şəkildə, biz Cronet-i iOS-da Uber proqramlarına tətbiq etdik, şəbəkədən HTTP trafikini kəsdik. APIistifadə NSURLProtokol. iOS Fondu tərəfindən təmin edilən bu abstraksiya protokola aid URL məlumatlarını idarə edir və Cronet-i əhəmiyyətli miqrasiya xərcləri olmadan iOS proqramlarımıza inteqrasiya edə bilməmizi təmin edir.

-dan götürülüb bu tərcümə Uber məqalələri

Arxa tərəfdə onlar Google Cloud lb vasitəsilə QUIC bağlantılarını tutdular protokolu dəstəkləyir 2018-ci ilin ortalarından.

Google Cloud-un Google tərəfindən hazırlanmış protokolla əla işləməsi təəccüblü deyil, lakin alternativlər hansılardır?

Nginx

Çox keçmədən CloudFlare keçməyə çalışdı nginx (standart olaraq HTTP/3-ü dəstəkləmir) öz Quiche aləti ilə. Tətbiq quraşdırma təlimatı ilə birlikdə gələn tək .patch faylı kimi mövcuddur:

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

Lazım gələrsə, burada modullarınızı birləşdirə bilərsiniz

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

Yalnız HTTP/3 dəstəyini aktivləşdirmək qalır

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

Adi brauzerlərdə HTTP/3 vasitəsilə qoşulmaq hələ mümkün deyil, lakin siz istifadə edə bilərsiniz Chrome Canary və bayraqla idarə edin --enable-quic, serverinizə və ya, məsələn, quic.rocks saytına gedin və Developer Tools-da əlaqə növünə baxın:
UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə
HTTP/3 əvəzinə yazılır http2+quic/99, lakin mahiyyətcə eyni şeydir.

Digər texnologiyalar

  • QUIC də dəstəkləyir LiteSpeed (böyük fanfar ilə HTTP/3 vasitəsilə Facebook-a qoşulan) və mütərəqqi Caddy. Apache hələ bunu edə bilmir, lakin iş gedir tam yelləncək.
  • 21 yanvar yeniləndi WebRTC üçün layihə standartı
  • Elə bu günlərdə Microsoft açıldı msquic icra kodu, IETF standartının bütün funksiyaları hələ mövcud deyil, lakin bu, artıq böyük bir irəliləyişdir.

Nəticə

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

QUIC-ə maraq qeyri-sabitdir, lakin getdikcə artır və onun standartlaşdırılması istiqamətində işlər aparılır. Protokolun yeni tətbiqləri demək olar ki, hər ay ortaya çıxır və hər il daha çox tərtibatçı QUIC-in gələcək olduğuna əmin olur. Hətta protokolu TCP stekinin gələcək versiyalarına daxil etmək mümkündür ki, bu da gec-tez bütün İnternetin daha sabit və daha sürətli bağlantılara keçəcəyini bildirir.

Artıq siz infrastrukturunuz üçün QUIC qarşılıqlı əlaqəsini konfiqurasiya edə və ya hətta brauzerlərə verə bilərsiniz - onların hamısı protokola dəstək əlavə etməyi planlaşdırır və caniuse ilə kədərli statistika daha şən olacaq.

UDP üzərində HTTP - QUIC protokolundan yaxşı istifadə etməklə

Mənbə: www.habr.com

Добавить комментарий