QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks

QUIC-protokolli jĂ€lgimine on ÀÀrmiselt huvitav, mistĂ”ttu me armastame sellest kirjutada. Kui varasemad publikatsioonid QUIC-ist kandsid rohkem ajaloolist (kui soovite, ka kultuurilist) iseloomu ja teooriat, siis tĂ€na oleme rÔÔmsad, et saame avaldada tĂ”lke, mis kĂ€sitleb protokolli tegelikku rakendust 2019. aastal. Ja see ei puuduta vĂ€ikeseid infrastruktuure, mis pĂ”hinevad tinglikul garaaĆŸil, vaid Uberit, mis tegutseb peaaegu ĂŒle kogu maailma. Kuidas ettevĂ”tte insenerid otsustasid minna QUIC-i kasutamisega tootmisesse, milliseid teste nad lĂ€bi viisid ja mida nad pĂ€rast tootmisse viimist nĂ€gid – loe allpool.

Pildid on klikatavad. Head lugemist!

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks

Uber – see on globaalne kohalolek, nimelt 600 linna, kus igas rakendus toetub tĂ€ielikult enam kui 4500 mobiilioperaatori juhtmevaba internetile. Kasutajad ootavad, et rakendus töötab mitte ainult kiiresti, vaid reaalajas – selle tagamiseks vajab Uberi rakendus madalat latentsust ja vĂ€ga usaldusvÀÀrset ĂŒhendust. Kahjuks, aga tehnoloogia... HTTP/2 halvab energiaga dĂŒnaamilistes ja kaotuste suhtes altid juhtmeteta vĂ”rkudes. Oleme mĂ”istnud, et antud juhul on madal jĂ”udlus otseselt seotud TCP rakendustega operatsioonisĂŒsteemide kernades.

Probleemi lahendamiseks kasutasime QUIC, kaasaegset protokolli kanalite mitmekordistamiseks, mis annab meile rohkem kontrolli transportprotokolli jĂ”udluse ĂŒle. Praegu töötab rĂŒhm IETF standardisiseerib QUIC kui HTTP/3.

PĂ€rast pĂ”hjalikke katseid oleme jĂ”udnud jĂ€reldusele, et QUIC'i rakendamine meie rakenduses vĂ€hendab "sabade" viivitusi vĂ”rreldes TCP-ga. Oleme mĂ€rganud, et HTTPSi liikluses oli langus vahemikus 10-30% juhi- ja reisija rakenduse nĂ€itel. Lisaks andis QUIC meile tĂ€ieliku kontrolli kasutajapakettide ĂŒle.

Selles artiklis jagame kogemusi TCP optimeerimisest Uberi rakendustes QUIC-i toetava kuhja abil.

Tehnika viimane sÔna: TCP

TĂ€na on TCP kĂ”ige laialdasemalt kasutatav transportprotokoll HTTPS-i liikluse edastamiseks internetis. TCP tagab usaldusvÀÀrse byte'ide voolu, millega ta suudab toime tulla vĂ”rgu ĂŒlekoormuse ja kĂŒhveldamise kaotustega. TCP laialdane kasutamine HTTPS-i liikluses selgitab selle omnipresentse kohaloleku (peaaegu igas opsĂŒsteemis on TCP), saadavuse suuremas osas infrastruktuurist (nĂ€iteks koormuse tasakaalustajad, HTTPS-proksid ja CDN) ning „kastist vĂ€lja“ funktsionaalsus, mis on enamikes platvormides ja vĂ”rkudes peaaegu alati olemas.

Enamik kasutajaid kasutab meie rakendust teel olles ja TCP „sabas” esinevad viivitused ei olnud kaugeltki meie reaalajas HTTPS-i liikluse nĂ”uded. Lihtsalt öeldes, on selle probleemiga silmitsi seisnud kasutajad ĂŒle kogu maailma – Joonisel 1 on kajastatud viivitused suurtes linnades:

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 1. „Saba” viivituse suurus varieerub Uberi kohaloleku peamistes linnades.

Kuigi viivitused India ja Brasiilia vĂ”rkudes olid suuremad kui USA ja Ühendkuningriigis, olid sabaviivitused siiski oluliselt suuremad kui keskmised viivitused. Ja see kehtib ka USA ja Ühendkuningriigi kohta.

TCP jÔudlus Ôhus

TCP on loodud kaablivĂ”rkude jaoks, mis tĂ€hendab, et see keskendub hĂ€sti prognoositavatele linkidele. Kuid traadita vĂ”rkudel on oma eripĂ€rad ja raskused. Esiteks, traadita vĂ”rgud on tundlikud kaotustele, mis on pĂ”hjustatud hĂ€iretest ja signaali nĂ”rgenemisest. NĂ€iteks on Wi-Fi vĂ”rgud tundlikud mikrolainele, Bluetoothile ja muudele raadiolainetele. Mobiilsete vĂ”rkude signaal kaob ( teekonna kadumine) objekti ja hoonete tĂ”ttu signaali peegeldumise / neeldumise tĂ”ttu ning samutihĂ€irete tĂ”ttu naabervĂ”rkudest mobiilitornidelt . See toob kaasa mĂ€rkimisvÀÀrselt (4–10 korda) ja mitmekesiseidringikĂŒljed (RTT) ja pakettide kaod vĂ”rreldes kaabliĂŒhendusega. Kuna mobiilivĂ”rkude lairibavĂ”ime ja kadude kĂ”ikumisega vĂ”itlemiseks kasutatakse tavaliselt suuri puhverdusi liikluspiikide jaoks. See vĂ”ib pĂ”hjustada liialdatud jĂ€rjestust, mis tĂ€hendab suuremaid viiteid. Tihti tĂ”lgendab TCP sellist jĂ€rjestust kaotuseks pikema ooteaja tĂ”ttu, seetĂ”ttu on TCP kalduv tegema edasisi ĂŒlekandeid ja tĂ€itma niiviisi puhverdust. See probleem on tuntud kui

liigne vÔrgu puhverdamine, puhverdamise paisumine bufferbloat (), ja see on vÀgatÔsine probleem tÔsine probleem kaasaegse interneti.

LĂ”puks muutub mobiilsidevĂ”rgu jĂ”udlus sĂ”ltuvalt operaatorist, piirkonnast ja ajast. Joonisel 2 on kogutud HTTPS-liikluse mediaanlatentsus 2 km raadiuses asuvate mobiilside baasjaamade kohta. Andmed on kogutud kahe suurema mobiilioperaatori kohta Delhis, Indias. Nagu mĂ€rgata, varieerub jĂ”udlus jaamade vahel. Samuti on ĂŒhe operaatori jĂ”udlus erinev teise operaatori jĂ”udlusest. Sellele mĂ”juvad tegurid, nagu vĂ”rku sisenemise mustrid ajastuse ja asukoha jĂ€rgi, kasutajate liikuvus ning vĂ”rgu infrastruktuur arvestades tugede tihedust ja vĂ”rgu tĂŒĂŒpide (LTE, 3G jne) suhet.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 2. Latentsus 2-kilomeetrise raadiuse nÀitel. Delhi, India.

Samuti muutub mobiilsidevĂ”rkude jĂ”udlus ajas. Joonisel 3 on nĂ€idatud mediaanlatentsus nĂ€dalapĂ€evade kaupa. Me oleme ka mĂ€rganud erinevusi vĂ€iksemal skaalal – ĂŒhe pĂ€eva ja tunni jooksul.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 3. Ahnustav latentsus vÔib nÀdalapÀevade lÔikes mÀrkimisvÀÀrselt varieeruda, kuid sama operaatori puhul.

KÔik eeltoodud asjaolud viivad selleni, et TCP töötlus ei ole tÔhus traadita vÔrkudes. Enne kui otsime TCP alternatiive, soovime selgitada jÀrgmisi punkte:

  • Kas TCP on meie rakendustes peamine viivitusallikas?
  • Kas kaasaegsetes vĂ”rkudes esineb mĂ€rkimisvÀÀrseid ja mitmekesiseid ringviivitusi (RTT)?
  • Milline on RTT ja kaotuste mĂ”ju TCP jĂ”udlusele?

TCP jĂ”udluse analĂŒĂŒs

Kuna me analĂŒĂŒsisime TCP jĂ”udlust, tuletame meelde, kuidas TCP andmeid saatjast saajani edastab. Esmalt loob saatja TCP-ĂŒhenduse, tehes kolmeastmelise kĂ€epigistuse: saatja saadab SYN-paketi, ootab saajalt SYN-ACK-paketti ja seejĂ€rel saadab ACK-paketi. Ühenduse loomisele kulub veel lisaks teine ja kolmas lĂ€bimine. Saaja kinnitab iga paketi vastuvĂ”tmist (ACK), et tagada usaldusvÀÀrne edastus.

Kui pakett vĂ”i ACK kaob, teeb saatja ajavahemiku pĂ€rast edastuse korduse (RTO, edastusajad). RTO arvutatakse dĂŒnaamiliselt, tuginedes erinevatele teguritele, nĂ€iteks eeldatavale RTT viivitusele saatja ja vastuvĂ”tja vahel.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 4. TCP/TLS paketivahetus hÔlmab retranƥmitmehhanisme.

Kohandamaks, kuidas TCP meie rakendustes töötas, jĂ€lgisime TCP-pakette tcpdump nĂ€dala jooksul tootmisliikluses, mis tuli India piiriserveritest. SeejĂ€rel analĂŒĂŒsisime TCP-ĂŒhendusi kasutades tcptrace. Lisaks lĂ”ime Android-rakenduse, mis saadab emuleeritud liiklust testserverile, maksimaalselt jĂ€ljendades tegelikku liiklust. Nutitelefonid, millel oli see rakendus, jagati mitmele töötajale, kes kogusid logisid mitme pĂ€eva jooksul.

MĂ”lema katse tulemused olid omavahel kooskĂ”las. NĂ€gime kĂ”rgeid RTT-viivitusi; sabavÀÀrtused olid peaaegu kuus korda kĂ”rgemad kui mediaanvÀÀrtus; viivituste keskmine vÀÀrtus oli ĂŒle ĂŒhe sekundi. Paljudel ĂŒhendustel esines kaotusi, mis sundis TCP-d taasĂŒlekandma 3,5% kĂ”ikidest pakettidest. Ülekoormatud piirkondades, nagu lennujaamad ja jaamad, tĂ€heldasime 7% kaotusi. Sellised tulemused panevad kahtlema levinud arvamuses, et mobiilivĂ”rkudes kasutatavad tippjĂ”udlusega edastamisvĂ”tted vĂ€hendavad oluliselt kaotusi transporditasandil. Allpool on testi tulemused simulaatori rakendusest:

VÔrgumÔÔdikud
VÀÀrtused

RTT, millisekundid [50%, 75%, 95%, 99%]
[350, 425, 725, 2300]

RTT-variance, sekundid
Keskmiselt ~1,2 s

Pakettide kaotus ebastabiilsetes ĂŒhendustes
Keskmiselt ~3,5% (7% ĂŒlekoormatud piirkondades)

Peaaegu pooltel nendest ĂŒhendustest oli vĂ€hemalt ĂŒks pakett kaotatud, enamik neist olid SYN ja SYN-ACK paketid. Enamik TCP rakendusi kasutab SYN-pakettide jaoks RTO vÀÀrtust 1 sekund, mis suureneb eksponentsiaalselt jĂ€rgnevate kaotuste korral. Rakenduse laadimise aeg vĂ”ib pikeneda, kuna TCP vajab rohkem aega ĂŒhenduste seadmiseks.

Andmepakettide puhul alandavad kĂ”rged RTO vÀÀrtused oluliselt vĂ”rgu tĂ”husust ajutiste kaotuste korral traadita vĂ”rkudes. Me leidsime, et keskmine retransmissioni aeg on umbes 1 sekund koos lĂ”pukuulamisega peaaegu 30 sekundit. Sellised kĂ”rged viivitused TCP tasandil pĂ”hjustasid HTTPS-aega-out’e ja uuesti pĂ€ringuid, mis suurendas veelgi viivitust ja vĂ”rgu ebaefektiivsust.

Kuigi 75. protsentiil mÔÔdetud RTT-st oli umbes 425 ms, oli TCP jaoks 75. protsentiil peaaegu 3 sekundit. See vihjab sellele, et kaotused sundisid TCP-d tegema 7-10 lĂ€bimist, et andmeid edukalt edastada. See vĂ”ib olla tingitud RTO ebaefektiivsest arvutamisest ja TCP vĂ”imetusest kiiresti reageerida kaotusele. viimaste pakettide aknades ja ĂŒlekande koormuse haldamise algoritmi efektiivsus, mis ei erista traadita kaotusi ja vĂ”rgu ĂŒlekoormusest tingitud kaotusi. Allpool on TCP kaotuste testitulemused:

TCP pakettide kaotuse statistika
VÀÀrtus

Protsent ĂŒhendustest, millel on vĂ€hemalt 1 paketi kaotus
45%

Protsent ĂŒhendustest, millel on kaotusi ĂŒhenduse loomise ajal
30%

Protsent ĂŒhendustest, millel on kaotusi andmevahetuse ajal
76%

Viivituse jaotumine edasisaatmisel, sekundid [50%, 75%, 95%, 99%]
[1, 2.8, 15, 28]

Üksiku paketi vĂ”i TCP-segmendi edasisaatmise kordade jaotumine
[1,3,6,7]

QUIC rakendamine

Algusest peale Google'i loodud, QUIC on mitme keermega kaasaegne transpordiprotokoll, mis töötab UDP peal. Praegu on QUIC standardeerimise protsessis (oleme juba kirjutanud, et QUIC-l on sisuliselt kaks versiooni, uudishimulikud vĂ”ivad minna lingile – tĂ”lkija mĂ€rkus). Nagu on nĂ€idatud Joonisel 5, paikneb QUIC HTTP/3 all (tegelikult on HTTP/2 QUIC-i peal HTTP/3, mida praegu aktiivselt standardiseeritakse). See asendab osaliselt HTTPS-i ja TCP tasemed, kasutades pakettide vormistamiseks UDP-d. QUIC toetab ainult turvalist andmeedastust, kuna TLS on tĂ€ielikult integreeritud QUIC-i.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 5: QUIC töötab HTTP/3 all, asendades TLS-i, mis varem töötas HTTP/2 all.

Allpool toome vÀlja pÔhjused, mis veensid meid QUIC-i kasutama TCP tugevdamiseks:

  • 0-RTT ĂŒhenduse loomine. QUIC vĂ”imaldab eelneva ĂŒhenduse autoriseerimiste taaskasutamist, vĂ€hendades turvahandshake'ide arvu. Tulevikus TLS1.3 toetab 0-RTT, kuid kolmik TCP-handshake jÀÀb siiski kohustuslikuks.
  • HoL-blokeeringu ĂŒletamine. HTTP/2 kasutab iga kliendi jaoks ĂŒhte TCP-ĂŒhendust, et parandada jĂ”udlust, kuid see vĂ”ib pĂ”hjustada HoL (head-of-line) blokeeringut. QUIC lihtsustab multipleximist ja edastab pĂ€ringud rakendusse ĂŒksteisest sĂ”ltumatult.
  • ĂŒlekande haldamine. QUIC on rakendustaseme protokoll, mis vĂ”imaldab peamiseks transportprotokolliks, mis haldab andmete saatmist, paremini ajakohastada, tuginedes vĂ”rguparametritele (kaotuste arv vĂ”i RTT). Enamiku TCP-implementatsioonide puhul kasutatakse algoritmi CUBIC, mis ei ole optimaalne viivitustele tundlikule liiklusele. Hiljuti vĂ€lja töötatud algoritmid nagu BBR, modelleerivad vĂ”rku tĂ€psemalt ja optimeerivad viivitusi. QUIC vĂ”imaldab kasutada BBR-i ja ajakohastada seda algoritmi selle parandamise kĂ€igus. kaotuste tĂ€iendamine..
  • QUIC kutsub esile kaks TLP-d ( tail loss probe) enne, kui RTO aktiveerub – isegi kui kaotused on vĂ€ga tajutavad. See erineb TCP-implementatsioonidest. TLP edastab peamiselt viimase paketi (vĂ”i uue, kui selline on olemas), et alustada kiiret tĂ€iendamist. HÀÀbuvate viivituste kĂ€sitlemine on eriti kasulik, kuidas Uber vĂ”rku kasutab, nimelt lĂŒhikeste, perioodiliste ja viivitustele tundlike andmesideedastuste jaoks.optimeeritud ACK.
  • Kuna igal paketti on ainulaadne jĂ€rjestusnumber, ei teki probleemi eristamisega. eristamine pakettide edastamisel. ACK-paketid sisaldavad samuti paketi töötlemise aega ja ACK genereerimise aega kliendi poolel. Need omadused tagavad, et QUIC arvutab RTT-d tĂ€psemalt. ACK QUIC-is toetab kuni 256 vahemikku. NACK, aidates saatjat paremini pakettide ĂŒmberpaigutumise suhtes taluda ja vĂ€hendada protsessis kasutatavaid bite. Valikuline ACK (SACK) TCP-s ei lahenda seda probleemi kĂ”ikides olukordades.
  • ĂŒhenduse migreerimine. QUIC-ĂŒhendused tuvastatakse 64-bitise ID abil, nii et kui klient muudab IP-aadresse, saab vanat ĂŒhenduse ID-d uue IP-aadressiga edasi kasutada ilma katkemisteta. See on mobiilirakendustes vĂ€ga levinud praktika, kui kasutaja vahetab Wi-Fi ja mobiilsete ĂŒhenduste vahel.

QUIC-i alternatiivid

Oleme kaalunud alternatiivseid lÀhenemisviise probleemi lahendamiseks, enne kui valisime QUIC-i.

Esimene asi, mida me proovisime, oli TPC PoP'ide (Presence Points) kĂ€ivitamine, et lĂ”petada TCP-ĂŒhendusi lĂ€hemal kasutajatele. Sisuliselt lĂ”petab PoP TCP-ĂŒhenduse mobiilseadme lĂ€hedal mobiilivĂ”rgu kaudu ja edastab liikluse tagasi algse infrastruktuuri. TCP lĂ€hemal lĂ”petades suudame potentsiaalselt vĂ€hendada RTT-d ja olla kindlad, et TCP reageerib aktiivsemalt dĂŒnaamilisele traadita keskonnale. Siiski nĂ€itasid meie katsed, et enamik RTT-st ja kadusid tulevad mobiilivĂ”rkudest ning PoP-ide kasutamine ei too mĂ€rkimisvÀÀrset tĂ€iustamist jĂ”udluselt.

Me oleme samuti kaalunud TCP parameetrite tĂ€iustamist. TCP-steki seadistamine meie heterogeensetes piiriservers on olnud keeruline, kuna TCP-l on erinevates OS versioonides ĂŒhitamatud rakendused. Erinevate vĂ”rgukonfiguratsioonide rakendamine ja testimine on olnud keeruline. TCP seadmine otse mobiilsetes seadmetes oli vĂ”imatu, kuna puudusid Ă”igused. Veelgi olulisem on, et sellised funktsioonid nagu 0-RTT ĂŒhendused ja tĂ€iustatud RTT ennustamine on protokolli arhitektuuri jaoks kriitilise tĂ€htsusega ning seega ei saa TCP seadistamisega olulisi eeliseid saavutada.

LĂ”puks hindasime mitmeid UDP-pĂ”hiseid protokolle, mis lahendavad probleemid videovoogesituses – soovisime teada, kas need protokollid aitavad meie puhul. Kahjuks puudusid neil paljud turvaseaded ning nad vajasid lisaks TCP ĂŒhendust metaandmete ja juhtimisteabe jaoks.

Meie uurimised nÀitasid, et QUIC on ilmselt ainus protokoll, mis suudab aidata Interneti-liikluse probleemide lahendamisel, arvestades nii turvalisuse kui ka jÔudlusega.

QUIC integreerimine platvormile

QUIC-i edukaks integreerimiseks ja rakenduse jĂ”udluse parandamiseks halva ĂŒhenduvuse tingimustes asendasime vana steki (HTTP/2 TLS-i/TCP-i peal) QUIC protokolliga. Kasutasime vĂ”rgu raamatukogu Cronet kohast Chromium Projects, mis sisaldab originaalset, Google'i versiooni protokollist – gQUIC. See teostus tĂ€iustatakse pidevalt, et jĂ€rgida viimast IETF spetsifikatsiooni.

Esmalt integreerisime Croneti oma Android-rakendustesse, et lisada QUIC-i tugi. Integreerimine viidi lÀbi nii, et minimeerida migratsioonikulud. Selle asemel, et tÀielikult asendada vana vÔrgu redaktori, mis kasutas teeki OkHttp, integreerisime Croneti OkHttp API raamistiku ALL. Sel viisil integreerides vÀltisime muudatusi meie vÔrgu pÀringutes (mida kasutavad Retrofit) API tasemel.

Sarnaselt lÀhenemisele Android-seadmetele, oleme integreerinud Croneti Uberi rakendustesse iOS-is, suunates HTTP-liiklust vÔrgu API, kasutades NSURLProtocol. See iOS Foundation'i pakutud abstraktsioon töötleb protokollispetsiifilisi URL-andmeid ja tagab, et saame Croneti integreerida oma iOS-rakendustesse ilma oluliste migratsioonikuludeta.

QUIC-i lÔpetamine Google Cloud-i koormustasemetel

Google Cloud Load balancing infrastruktuuri abil on QUIC-i lĂ”petamine tagaplaanil kindlustatud, mis kasutab alt-svc vastustes pealkirju QUIC-i toetamiseks. Üldiselt lisab koormustaseme iga HTTP-pĂ€ringule alt-svc pealkirja ja valideerib siis domeeni QUIC-i toetust. Kui klient Cronet saab HTTP-vastuse sellise pealkirjaga, kasutab ta QUIC-i jĂ€rgnevate HTTP-pĂ€ringute jaoks sellele domeenile. Kui koormustase lĂ”petab QUIC-i, saadab meie infrastruktuur selle tegevuse selgelt HTTP2/TCP kaudu meie andmekeskustesse.

Tulemus: tulemused

Toodetud tulemus on meie peamine pÔhjus otsida parimat protokolli. Alustuseks lÔime labori vÔrgu emuleerimisega, et uurida, kuidas QUIC erinevates vÔrguprofiilides kÀitub. QUIC-i toimivuse kontrollimiseks reaalses vÔrgus viisime lÀbi katseid, sÔites lÀbi Delhi, kasutades samas emuleeritud vÔrgu liiklust, mis on vÀga sarnane HTTP-kutsetele reisija rakenduses.

Eksperiment 1

Katse inventar:

  • Androidi testseadmed OkHttp ja Cronet'i hunnikutega, et veenduda, et suuname HTTPS-liiklust vastavalt TCP ja QUIC kaudu;
  • Java-pĂ”hine emulatsiooniserver, mis saadab sarnaseid HTTPS-pealkirju vastustes ja koormab kliendiseadmeid, et saada neilt pĂ€ringuid;
  • pilvepĂ”hised proksid, mis asuvad fĂŒĂŒsiliselt India lĂ€hedal, et lĂ”petada TCP ja QUIC ĂŒhendused. Kuigi TCP lĂ”petamiseks kasutasime tagapoolt proksit, NGINX, oli raske leida avatud lĂ€htekoodiga tagapoolt proksit QUIC-ile. Kogusime ise QUIC-i tagapoolt proksi, kasutades Chromiumi pĂ”hihunnikut ja avalikustasid seda Chromiumis avatud lĂ€htekoodina.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 6. TCP vs QUIC testide komplekt koosnes Android-seadmetest OkHttp ja Cronet'i ning pilvepĂ”histest proksidest ĂŒhenduste lĂ”petamiseks ja emulatsiooniserverist.

Eksperiment 2

Kui Google tegi QUIC-i kergesti kĂ€ttesaadavaks Google Cloud Load Balancing, me kasutasime sama inventari, kuid ĂŒhe muudatusega: NGINX-i asemel kasutasime Google'i koormuse jagajaid TCP- ja QUIC-ĂŒhenduste lĂ”petamiseks seadmetelt ning HTTPS-i liikluse suunamiseks emulatsiooniserverisse. Koormuse jagajad on jaotatud kogu maailmas, kuid kasutavad seadmele lĂ€himat PoP-serverit (tĂ€name geolokatsiooni eest).

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 7. Teises eksperimendis soovisime vÔrrelda TCP ja QUIC lÔpetamise viivitust: Google Cloudi ja meie pilveproksi abil.

LÔpuks ootasime meid ees mitmed avastused:

  • PoP kaudu lĂ”petamine parandas TCP jĂ”udlust. Kuna koormuse jagajad lĂ”petavad TCP-ĂŒhenduse lĂ€hemal kasutajatele ja on suurepĂ€raselt optimeeritud, toob see kaasa vĂ€iksemad RTT-d, mis parandab TCP jĂ”udlust. Ja kuigi see mĂ”jutas QUIC-i vĂ€hem, jĂ€i see siiski TCP-le ette tagasiviivituste vĂ€hendamisel (10–30 protsenti).
  • tagasiviivitusi mĂ”jutavad vĂ”rgu ĂŒleminekud (hops). Kuigi meie QUIC-proksi viibis seadmetest kaugemal (umbes 50 ms kĂ”rgem latentsus) kui Google'i tasakaalustajad, pakkus see sarnast jĂ”udlust – latentsuse langus 15% vĂ”rreldes 20% langusega 99. percenti TCP puhul. See nĂ€itab, et viimase miili vahetus on vĂ”rgu töötluses kitsaskohaks.

QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 8. Kahe katse tulemused nĂ€itavad, et QUIC ĂŒletabTCP-d oluliselt.

Reaalne liiklus

Katsed inspireerisid meid rakendama QUICi meie Androidi ja iOS-i rakendustes. Viisime lĂ€bi A/B testimise, et mÀÀrata QUICi mĂ”ju Uberi kohalolekuga linnades. Üldiselt nĂ€gime mĂ€rkimisvÀÀrset vĂ€henemist saba latentsuses eri piirkondades, operaatorite seas ja vĂ”rgu tĂŒĂŒpide lĂ”ikes.

Allpool oleval graafikul on nĂ€idatud protsentuaalsed parandused sabades (95 ja 99 percenti) makroregioonide ja erinevate vĂ”rgu tĂŒĂŒpide – LTE, 3G, 2G – lĂ”ikes.
QUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll töös: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 9. Reaalsetes testides ĂŒletas QUIC TCP-d latentsuse poolest.

Ainult edasi

VĂ”ib-olla on see alles algus – QUICi juurutamine tootmisse on pakkunud uskumatu vĂ”imalusi rakenduste jĂ”udluse parandamiseks nii stabiilsetes kui ka ebastabiilsetes vĂ”rkudes, sealhulgas:

Katvuse suurenemine

AnalĂŒĂŒsides protokolli jĂ”udlust reaalses liikluses, oleme nĂ€inud, et umbes 80% sessioonidest kasutas QUIC-i edukalt keskkondades ja projekti klastrites. Selline pĂ”himĂ”te on Ă”ige kĂŒsitlusteks, samas kui 15% sessioonidest kasutas kombinatsiooni QUIC-ist ja TCP-st. Eeldame, et see kombinatsioon tekkis seetĂ”ttu, et Cronet'i teek vahetab tagasi TCP-ks timeout'i tĂ”ttu, kuna ta ei suuda eristada tĂ”elisi UDP-rikkeid ja halbu vĂ”rgu tingimusi. Praegu otsime lahendust sellele probleemile, samas kui töötame QUIC-i edasise rakendamise kallal.

QUIC-i optimeerimine

Mobiilirakendustest pÀrinev liiklus on viivituste suhtes tundlik, kuid mitte ribalaiuse suhtes. Lisaks kasutatakse meie rakendusi peamiselt mobiilivÔrkudes. Katsed nÀitavad, et sabaviivitused on endiselt suured, isegi hoolimata TCP ja QUIC lÔpuleviimisest vahetult kasutajate lÀhedal. Otsime aktiivselt viise, et parandada koormuse juhtimist ja suurendada QUIC-i kaotusetaastamise efektiivsust.

Nende ja mÔnede muude tÀiustustega plaanime parandada kasutajakogemust sÔltumata vÔrgust ja piirkonnast, muutes pakettide sujuva ja mugava edastamise globaalselt kergemini kÀttesaadavaks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster