QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks

QUIC-protokolli on ÀÀrmiselt huvitav teema, millest me armastame kirjutada. Kui varasemad QUIC-i postitused kĂ€sitlesid rohkem ajaloolisi aspekte ja matemaatikat, siis tĂ€na oleme rÔÔmsad, et saame avaldada teistsuguse tĂ”lke – rÀÀgime protokolli reaalsest kasutamisest 2019. aastal. Ja juttu ei ole vĂ€ikesest infrastruktuurist, mis asub kuskil garaaĆŸis, vaid Uberist, mis tegutseb peaaegu kogu maailmas. Kuidas ettevĂ”tte insenerid otsustasid QUIC-i kasutada tootmises, kuidas nad teste viisid lĂ€bi ja mida nad pĂ€rast kasutusele vĂ”tmist tĂ€heldasid – loe edasi.

Pildid on klikkitavad. Head lugemist!

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks

Uber on maailma mastaabis, olles kohal 600 linnas, kus rakendus sĂ”ltub tĂ€ielikult ĂŒle 4500 mobiilioperaatori traadita internetist. Kasutajad ootavad, et rakendus töötab mitte lihtsalt kiiresti, vaid reaalajas – selle tagamiseks vajab Uberi rakendus madalaid latentsusaegu ja vĂ€ga usaldusvÀÀrset ĂŒhendust. Kahjuks aga TCP-stack HTTP/2 ei suuda toimida dĂŒnaamilistes ja paketikaotusele kalduvates traadita vĂ”rkudes. Me mĂ”istsime, et madal tulemuslikkus on otseselt seotud TCP rakendustega operatsioonisĂŒsteemi kernides.

Probleemi lahendamiseks rakendasime QUIC, kaasaegse protokolli, millel on kanalite mulitplekseerimine, mis annab meile rohkem kontrolle transportprotokolli jĂ”udluse ĂŒle. Praegu on töögrupp Uue juhi peamisteks eesmĂ€rkideks on luua tingimusi, et inimesed naudiksid oma aega Debianis osalemiseks. Selle eesmĂ€rgi saavutamiseks kavatsetakse muuta protsessid ja suhtlemine lihtsaks, tĂ”husaks ja arusaadavaks, suurendada projekti atraktiivsust uutele osalejatele ning tagada sĂ”braliku atmosfÀÀri ja vastastikuse arusaamise hoidmine kogukonnas, olenemata lĂ”plikest otsustest ja teatud ideede kinnitamisest vĂ”i tagasilĂŒkkamisest. standardiseerimas QUIC-i kui standardiseerib.

PĂ€rast pĂ”hjalikke teste jĂ”udsime jĂ€reldusele, et QUIC-i kasutuselevĂ”tt meie rakenduses vĂ€hendab "sabade" latentsusaegu, vĂ”rreldes TCP-ga. Vaatasime HTTPS-i liikluses ja nĂ€gime 10-30% vĂ€henemist juhi- ja reisija-rakendustes. QUIC andis meile ka tĂ€ieliku kontrolli kasutaja paketid ĂŒle.

Selles artiklis jagame kogemusi TCP optimeerimisest Uberi rakenduste jaoks QUIC-i toega stack'i abil.

Tehnika viimane sÔna: TCP

TĂ€na on TCP kĂ”ige kasutatavam transportprotokoll HTTPS-i liikluse edastamiseks internetis. TCP tagab usaldusvÀÀrse baitide voolu, mistĂ”ttu suudab see toime tulla vĂ”rgu ĂŒlekoormuse ja kaotanud kanalitaseme. TCP laialdane rakendamine HTTPS-i liikluses on seletatav selle laialdase olemasoluga (peaaegu iga opsĂŒsteem sisaldab TCP-d), kergesti kĂ€ttesaadavusega enamus infrastruktuurist (nĂ€iteks koormuse tasakaalustajad, HTTPS-proxyd ja CDN-id) ning „kastist vĂ€lja“ funktsionaalsusega, mis on kergesti ligipÀÀsetav enamikes platvormides ja vĂ”rkudes.

Enamik kasutajatest kasutab meie rakendust liikvel olles ning TCP „sabavirgestused“ jÀÀvad olulistele nĂ”udmistele meie reaalaja HTTPS-i liikluses vastupidiseks. Lihtsalt öeldes on sellega silmitsi seisnud kasutajad ĂŒle kogu maailma – Joonisel 1 on kujutatud viivitusi suurtes linnades:

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 1. „Sabavirgestuste“ suurus varieerub Uberi kohaloleku peamistes linnades.

Kuigi Indias ja Brasiilias olid viivitused suuremad kui USA-s ja Suurbritannias, on sabavirgestused mÀrkimisvÀÀrselt kÔrgemad kui keskmised viivitused. Ja see kehtib ka USA ja Suurbritannia kohta.

TCP jĂ”udlus ĂŒle Ă”hu

TCP loodi juhttasandi vĂ”rkude jaoks, keskendudes hĂ€sti ennustatavatele linkidele. Kuid traadita vĂ”rkudel on oma eripĂ€rad ja vĂ€ljakutsed. Esiteks on traadita vĂ”rgud tundlikud signaali kadumise suhtes, mis tuleneb hĂ€iretest ja signaali nĂ”rgenemisest. NĂ€iteks Wi-Fi vĂ”rgud on tundlikud mikrolainete, bluetooth'i ja muude raadiolainete suhtes. MobiilivĂ”rgud kannatavad signaali kaotuse all (tee kadu) signaali peegelduse / neelamise tĂ”ttu esemetest ja hoonetest, samuti hĂ€irete tĂ”ttu naabervĂ”rkudest mobiilitornidest.See toob kaasa mĂ€rkimisvÀÀrseid (4-10 korda) ja varieeruvaid ĂŒmaraid viivitusi (RTT) ja pakettide kaotusi vĂ”rreldes juhttasandi ĂŒhendusega.

Kuna mobiilivĂ”rgud pĂŒĂŒavad vĂ”idelda ribalaiuse kĂ”ikumiste ja kaotustega, kasutatakse tavaliselt suuri puhverdamise mĂ€lusid liikluse tippude jaoks. See vĂ”ib viia liigse jĂ€rjekorra loomisele, mis tĂ€hendab pikemaid viivitusi. Very sageli tĂ”lgendab TCP sellist jĂ€rjekorra ettevalmistamist kui kaotust pikendatud aja tĂ”ttu, seetĂ”ttu kalduvad TCP tegema uuesti edastamist ja tĂ€itma puhvrit. Seda probleemi tuntakse kui bufferbloat (liigset vĂ”rgu puhverdamist, puhverdamise paisumist), ja see on vĂ€ga tĂ”sine probleem kaasaegse interneti.

LĂ”puks sĂ”ltub mobiilivĂ”rgu jĂ”udlus operaatorist, piirkonnast ja ajast. Joonisel 2 oleme kogunud HTTPS-liiklusest mÔÔdetud keskmised latentsused 2-kilomeetrises raadiuses. Andmed on kogutud kahe suurima mobiilsideoperaatori kohta Delhis, Indias. Nagu nĂ€ha, varieerub jĂ”udlus vĂ”rgu ja operaatori lĂ”ikes. Lisaks erineb ĂŒhe operaatori jĂ”udlus teise oma jĂ”udlusest. Sellele mĂ”jutavad tegurid, nagu vĂ”rku sisenemise mustrid ajas ja asukohas, kasutajate liikuvus ning vĂ”rgu infrastruktuur, sealhulgas masti tihedus ja vĂ”rgu tĂŒĂŒpide (LTE, 3G jne) suhe.

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 2. Latentsused 2-kilomeetrise raadiuse nÀitel. Delhi, India.

Samuti varieerub mobiilivĂ”rkude jĂ”udlus ajas. Joonisel 3 on nĂ€idatud keskmine latentsus nĂ€dalapĂ€evade lĂ”ikes. Me oleme samuti mĂ€rganud erinevusi veelgi vĂ€iksemas mastaabis – sama pĂ€eva ja tunni jooksul.

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 3. HÀiresignaalid vÔivad oluliselt varieeruda erinevate pÀevade lÔikes, kuid samal operaatoril.

KÔik eelnevalt mainitu toob kaasa selle, et TCP jÔudlus on traadita vÔrkudes ebaefektiivne. Siiski, enne kui otsime TCP alternatiive, soovime saavutada tÀpset arusaama jÀrgmistes punktides:

  • kas TCP on peamine sĂŒĂŒdlane meie rakenduste hilinenud vastuses?
  • Kas kaasaegsetes vĂ”rkudes on mĂ€rkimisvÀÀrsed ja mitmekesised ringlatentsused (RTT)?
  • Milline on RTT ja kadude mĂ”ju TCP jĂ”udlusele?

TCP jĂ”udluse analĂŒĂŒs

Et mĂ”ista, kuidas me analĂŒĂŒsisime TCP jĂ”udlust, vaatame lĂŒhidalt ĂŒle, kuidas TCP edastab andmeid saatjast saajani. Alguses loob saatja TCP-ĂŒhenduse, tehes kolmnurga kĂ€tlemise: saatja saadab SYN-paketi, ootab saajalt SYN-ACK-paketti, seejĂ€rel saadab ta ACK-paketi. Teised kaks protsessi, teine ja kolmas, kuluvad TCP-ĂŒhenduse loomiseks. Saaja kinnitab, et on saanud iga paketi (ACK), et tagada usaldusvÀÀrne edastamine.

Kui pakett vĂ”i ACK kaob, kordab saatja edastamist pĂ€rast ajavaru (RTO, edastamise ajavaru). RTO arvutatakse dĂŒnaamiliselt, tuginedes erinevatele teguritele, nĂ€iteks oodatavale latentsusele RTT saatja ja saaja vahel.

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 4. TCP/TLS-i pakettide vahetus sisaldab retranmismehhanisme.

Kuna me tahtsime mĂ”ista, kuidas TCP meie rakendustes toimis, jĂ€lgisime TCP-pakette tcpdump ĂŒhe nĂ€dala jooksul tootmisliikluses, mis tuli Indiast piiriserveritelt. SeejĂ€rel analĂŒĂŒsisime TCP-ĂŒhendusi kasutades tcptrace. Lisaks lĂ”ime Android-rakenduse, mis saadab emuleeritud liiklust testserverile, pĂŒĂŒdes maksimaalselt jĂ€ljendada reaalset liiklust. Need rakendusega nutitelefonid 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; sabakeskmed olid peaaegu 6 korda kĂ”rgemad mediansest; viivituste aritmeetiline keskmine oli ĂŒle 1 sekundi. Paljudel ĂŒhendustel olid paketikaotused, mis sundisid TCP-d retransmoteerima 3,5% kĂ”igist pakettidest. Ülerahvastatud piirkondades, nĂ€iteks lennujaamades ja jaamades, tĂ€heldasime 7% kaotusi. Sellised tulemused panevad kahtluse alla ĂŒldlevinud arvamuse, et mobiilsides kasutatavad tĂ€iustatud retranmisjad vĂ€hemalt oluliselt vĂ€hendavad kaotusi transporditasandil. Allpool on tulemused simulaatorrakenduse testidest:

VÔrgumetris
VÀÀrtused

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

RTT-lÔhe, sekundites
Keskmiselt ~1,2 s

Pakettide kaotus ebastabiilsetes ĂŒhendustes
Keskmiselt ~3.5% (7% ĂŒlerahvastatud piirkondades)

Peaaegu poolel neist ĂŒhendustest oli vĂ€hemalt ĂŒks pakett kaotsis, enamik neist olid SYN ja SYN-ACK paketid. Enamik TCP teostusi kasutab RTO vÀÀrtuse 1 sekundi SYN-pakettide jaoks, mis eksponetsiaalselt suureneb edasiste kaotuste korral. Rakenduse laadimisaeg vĂ”ib suureneda, kuna TCP vajab rohkem aega ĂŒhenduste loomiseks.

Andmepakettide puhul vÀhendavad kÔrged RTO vÀÀrtused oluliselt vÔrgu kasulikku kasutust ajutiste kaotuste korral traadita vÔrkudes. Me selgitasime vÀlja, et retranmisaja keskmine on umbes 1 sekund, kusjuures sabaviivitus on peaaegu 30 sekundit. Sellised kÔrged viivitused TCP tasemel pÔhjustasid HTTPS-i aegumise ja kordusnÔudmisi, mis suurendasid veelgi viivitust ja vÔrgu ebatÔhusust.

Kuigi 75. protsenti mÔÔdetud RTT-st oli umbes 425 ms, oli TCP 75. protsent peaaegu 3 sekundit. See viitab sellele, et kaotused sundisid TCP-d tegema andmete edastamiseks 7-10 korda katsetusi. Selle pĂ”hjuseks vĂ”ib olla ebaefektiivne RTO arvutamine vĂ”i TCP vĂ”imetus kaotustele kiiresti reageerida. viimaste paketid aknas ja ĂŒlekoormuse juhtimisalgoritmi ebaefektiivsus, mis ei erista traadita kaotusi ja vĂ”rguĂŒlevaid kaotusi. Allpool on TCP kaotuste testitulemused:

TCP pakettide kaotusstatistika
TĂ€hendus

Protsent ĂŒhendustest, kus on vĂ€hemalt 1 paketti kadunud
45%

Protsent ĂŒhendustest, kus kaotused esinesid ĂŒhenduse loomise ajal
30%

Protsent ĂŒhendustest, kus kaotused esinesid andmevahetuse ajal
76%

Viivituste jaotumine uuesti edastamises, sekundid [50%, 75%, 95%, 99%]
[1, 2.8, 15, 28]

Ühe paketi vĂ”i TCP-segmendi jaoks uuesti edastamiste arvu jaotumine
[1,3,6,7]

QUIC rakendamine

Algse disaini tegi Google, QUIC on mitme lĂ”imega kaasaegne transportprotokoll, mis töötab UDP peal. Praegu on QUIC standardeerimise protsessis (oleme juba kirjutanud, et QUIC-l on justkui kaks versiooni, uudishimulikud vĂ”ivad minna lingile – tĂ”lkija mĂ€rkus). Nagu nĂ€idatud joonisel 5, asub QUIC HTTP/3 all (tegelikult on HTTP/2 QUIC-i peal HTTP/3, mida praegu aktiivselt standardiseeritakse). See osaliselt asendab HTTPS-i ja TCP tasemeid, kasutades pakettide koostamiseks UDP-d. QUIC toetab ainult turvalist andmeedastust, kuna TLS on tĂ€ielikult integreeritud QUIC-i.

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

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

  • 0-RTT ĂŒhenduse loomine. QUIC vĂ”imaldab varasemate ĂŒhenduste autoriseerimiste taaskasutamist, vĂ€hendades turvatehingute arvu. Tulevikus TLS1.3 toetab 0-RTT, kuid kolmesuunaline TCP-tehing jÀÀb endiselt kohustuslikuks.
  • HoL-blokeeringu ĂŒletamine. HTTP/2 kasutab iga kliendi jaoks ĂŒhte TCP-ĂŒhendust, et parandada jĂ”udlust, kuid see vĂ”ib viia HoL (head-of-line) blokeeringuni. QUIC lihtsustab multipleximist ja edastab pĂ€ringud rakendusele ĂŒksteisest sĂ”ltumatult.
  • ĂŒletamine ĂŒlekoormuse juhtimisest. QUIC toimib rakenduskihtidel, vĂ”imaldades peamist transportalgoritmi kergemini uuendada, mis haldab saatmist, tuginedes vĂ”rgutingimustele (kaotuste arv vĂ”i RTT). Enamik TCP-implementatsioone kasutab algoritmi CUBIC, mis ei ole optimaalne viivitusest sĂ”ltuva liikluse jaoks. Hiljuti vĂ€lja töötatud algoritmid nagu BBRmodelleerivad vĂ”rku tĂ€psemalt ja optimeerivad viivitusi. QUIC vĂ”imaldab kasutada BBR-i ja uuendada seda algoritmi selle parandamise.
  • kaotuste taastamiseks. QUIC kutsub esile kaks TLP (tail loss probe) enne RTO aktiveerimist – isegi kui kaotused on vĂ€ga ulatuslikud. See erineb TCP-implementatsioonidest. TLP edastab peamiselt viimase paketi (vĂ”i uue, kui see on olemas), et alustada kiiret taastamist. Haldamine, mis kĂ€sitleb saba viivitusi, on eriti kasulik Uberi tööviisi tĂ”ttu vĂ”rgu osas, nimelt lĂŒhikeste, episoodiliste ja viivitustundlike andmeedastuste puhul.
  • optimeeritud ACK. Kuna igal pakendil on ainulaadne jĂ€rjestuse number, ei teki probleemi eristamisega pakettide edastamisel. ACK-paketid sisaldavad samuti aega paketi töötlemiseks ja ACK-i genereerimiseks kliendi poolel. Need omadused tagavad, et QUIC arvutab RTT-d tĂ€psemalt. QUIC-i ACK toetab kuni 256 vahemikku NACK, aidates saatjal olla pakettide muutumisele vastupidavam ja kasutada protsessi kĂ€igus vĂ€hem baite. Valikuline ACK (SACK) TCP-s ei lahenda see probleem kĂ”igis juhtudes.
  • ĂŒhenduse migreerimine. QUIC-i ĂŒhendused identifitseeritakse 64-bitise ID abil, nii et kui klient vahetab IP-aadresse, saab vana ĂŒhenduse ID-d uuel IP-aadressil edasi kasutada, ilma katkestusteta. See on vĂ€ga levinud praktika mobiilirakendustes, kui kasutaja vahetab Wi-Fi ja mobiilsete ĂŒhenduste vahel.

QUIC-i alternatiivid

Oleme kaalunud alternatiivseid lÀhenemisviise probleemi lahendamiseks enne QUIC-i valimist.

Esiteks proovisime tĂ”sta TPC PoP-sid (Presence Points), et lĂ”petada TCP-ĂŒhendused lĂ€hemal kasutajatele. Tegelikult lĂ”petab PoP TCP-ĂŒhenduse mobiilseadmega lĂ€hemal mobiilivĂ”rgule ja suunab liikluse algsele infrastruktuurile. TCP lĂ”petades lĂ€hemal, saame potentsiaalselt vĂ€hendada RTT-d ja olla kindlad, et TCP reageerib dĂŒnaamilises traadita keskkonnas aktiivsemalt. Siiski, meie katsetused nĂ€itasid, et enamasti tulenevad RTT ja kaod mobiilivĂ”rkudest ning PoP-ide kasutamine ei too olulist jĂ”udluse parandust.

Vaatasime ka TCP parameetrite seadmist. TCP-steigi seadmine meie heterogeensetes piiriserverites oli keeruline, kuna TCP-l on erinevates OSimedes vĂ”rreldamatud teostused. Erinevate vĂ”rgukonfiguratsioonide rakendamine ja testimine oli keeruline. TCP-seadistus mobiilseadmetes oli volituste puudumise tĂ”ttu vĂ”imatu. Veelgi olulisem on see, et sellised funktsioonid nagu 0-RTT ĂŒhendused ja paranenud RTT ennustus on protokolli arhitektuuri jaoks kriitilise tĂ€htsusega ning seetĂ”ttu ei saa TCP-seadistusega oluliselt kasu saavutada.

LĂ”puks hindasime mitmeid UDP-pĂ”hiseid protokolle, mis lahendavad videostreamingu tĂ”rkeid - soovisime teada, kas need protokollid saavad meie olukorras abiks olla. Kahjuks puudusid neis paljuski vajalikud turvaseaded, samuti oli vajalik tĂ€iendav TCP-ĂŒhendus metaandmete ja haldusinformatsiooni jaoks.

Meie uuringud nÀitasid, et QUIC on peaaegu ainus protokoll, mis suudab Interneti-liikluse probleemiga tegeleda, arvestades nii turvalisust kui ka jÔudlust.

QUICi integreerimine platvormi

QUIC-i edukaks integreerimiseks ja rakenduse jĂ”udluse parandamiseks nĂ”rkades ĂŒhendustes asendasime vana steki (HTTP/2 ĂŒle TLS/TCP) QUIC-protokolliga. Kasutasime vĂ”rgu teeki Cronet API-s Chromium Projects, mis sisaldab originaali, Google'i versioon protokollist – gQUIC. Seda teostust tĂ€iustatakse pidevalt, et jĂ€rgida viimast IETF-i spetsifikatsiooni.

Esmalt integreerisime Croneti oma Android-rakendustesse, et lisada QUIC-i tugi. Integreerimine toimus nii, et migratsioonikulusid oleks vÔimalikult vÀhe. Selle asemel, et tÀielikult asendada vana vÔrgu steki, mis kasutas teeki OkHttp, integreerisime Croneti OkHttp API raames. Sellise integreerimisega vÀltisime muudatusi meie vÔrgu kutsumistes (mida kasutavad Retrofit) API tasemel.

Sarnaselt lÀhenemisele Android-seadmetele rakendasime Croneti Uberi rakendustes iOS-is, peatades HTTP liikluse vÔrgu API, kasutades NSURLProtocol. See abstraktsioon, mis on saadud iOS Foundationist, haldab protokollispetsiifilisi URL-andmeid ja tagab, et saame Croneti integreerida oma iOS-rakendustes oluliste migratsioonikuludeta.

QUICi lÔpetamine Google Cloudi tasakaalustajates

TagakĂŒljel tagab QUICi lĂ”petamise Google Cloudi Load balancing infrastruktuur, mis kasutab alt-svc pealkirjad vastustes QUICi toe toetamiseks. Üldiselt lisab koormuse jagaja iga HTTP-pĂ€ringule alt-svc pealkirja, mis valideerib QUICi toe domeeni jaoks. Kui Cronet klient saab sellise pealkirjaga HTTP-vastuse, kasutab ta jĂ€rgmiste HTTP-pĂ€ringute jaoks QUICi sellele domeenile. Kui koormuse jagaja lĂ”petab QUICi, edastab meie infrastruktuur selle tegevuse tĂ”eliselt HTTP2/TCP kaudu meie andmekeskustesse.

Toime: tulemused

VÀlja antud toime on peamine pÔhjus, miks me otsime parimat protokolli. Alustuseks lÔime keskkonna, vÔrgu simuleerimise, et selgitada vÀlja, kuidas QUIC erinevates vÔrguprofiilides kÀitub. QUICi töö kontrollimiseks reaalsetes vÔrkudes tegime eksperimente, sÔitmine New Delhis, kasutades samal ajal simuleeritud vÔrgu liiklust, mis sarnanes vÀga rakenduse reisija HTTP-pÀringutele.

Eksperiment 1

Eksperimendi inventar:

  • testseadmed Androidil OkHttp ja Cronet stackidega, et veenduda, et meie HTTPS-liiklus liigub juba vastavalt TCP ja QUIC kaudu;
  • Java-pĂ”hine simuleerimise server, mis saadab sama tĂŒĂŒpi HTTPS-pealkirjad vastustes ja koormab kliendiseadmeid, et saada neilt pĂ€ringud;
  • pilveproksid, mis on fĂŒĂŒsiliselt India lĂ€hedal, et lĂ”petada TCP ja QUIC ĂŒhendused. KĂ”rge TCP lĂ”petamiseks kasutasime tagasipöörde proksi NGINX, kuid oli keeruline leida avatud lĂ€htekoodiga tagasipöörde proksi QUICile. Me kogusime ise QUICi tagasipöörde proksi, kasutades aluse QUICi steki Chromiumist ja avalikustasid selle Chromiumis kui avatud lĂ€htekoodine.

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 6. TCP vs QUIC testimiseks mĂ”eldud tee komplekt koosnes Android-seadmest OkHttp ja Cronet, pilveproksidest ĂŒhenduste lĂ”petamiseks ja simuleerimise serverist.

Eksperiment 2

Kui Google tegi QUICi kergesti kĂ€tte saadavaks, Google Cloud Load Balancing, kasutasime sama inventari, kuid ĂŒhe modifikatsiooniga: NGINXi asemel vĂ”tsime Google'i koormuse jagajad TCP ja QUIC ĂŒhenduste lĂ”petamiseks seadmetelt ning HTTPS-liikluse suunamiseks simuleerimise serverisse. Koormuse jagajad on jaotatud ĂŒle kogu maailma, kuid kasutavad seadmele lĂ€himat PoP serverit (tĂ€nu geolokatsioonile).

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

KokkuvÔttes ootas meid mitu avastust:

  • PoP-i kaudu lĂ”petamine parandas TCP suutlikkust. Kuna tasakaalustajad lĂ”petavad TCP-ĂŒhenduse lĂ€hemal kasutajatele ja on suurepĂ€raselt optimeeritud, toob see kaasa vĂ€iksemaid RTT-sid, mis parandab TCP jĂ”udlust. Ja kuigi see mĂ”jutas QUIC-i vĂ€hem, ĂŒletas see ikkagi TCP-d pehmete viivituste vĂ€hendamise osas (10–30 protsenti).
  • pehmetele viivitustele mĂ”jutavad vĂ”rgupunktid (hops). Kuigi meie QUIC-proksi oli seadmetest kaugemal (ligikaudu 50 ms suurem latentsus) kui Google'i tasakaalustajad, nĂ€itas see sarnast jĂ”udlust – 15% langus latentsuses vĂ”rreldes TCP 99. protsentiili 20% langusega. See nĂ€itab, et viimase miili vahetus on vĂ”rgu töötluse kitsaskohaks (bottleneck).

QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 8. Kahe eksperimendi tulemused nĂ€itavad, et QUIC ĂŒletab TCP-d mĂ€rkimisvÀÀrselt.

SÔjaline liiklus

Katsed inspireerisid meid rakendama QUIC-i toetust meie Androidi ja iOS-i rakendustes. Viisime lĂ€bi A/B testimise, et mÀÀrata QUIC-i mĂ”ju Uberi kohalikes linnades. Üldiselt nĂ€gime mĂ€rkimisvÀÀrset vĂ€henemist pehmetes viivitustes nii piirkondade kui ka telecom operaatorite ning vĂ”rgu tĂŒĂŒpide lĂ”ikes.

Allpool toodud graafikutel on nĂ€idatud protsentuaalsed parandused pehmetes viivitustes (95. ja 99. protsentiil) makrorikides ja erinevates vĂ”rgutĂŒĂŒpides – LTE, 3G, 2G.
QUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseksQUIC-protokoll tegutsemas: kuidas Uber seda rakendas jÔudluse optimeerimiseks
Joonis 9. SĂ”jalistes testides ĂŒletas QUIC TCP-d latentsuse osas.

Ainult edasi

TĂ”enĂ€oliselt on see ainult algus – QUIC-i vĂ€ljatootmine tootmises on andnud hĂ€mmastavaid vĂ”imalusi rakenduste jĂ”udluse parandamiseks nii stabiilsetes kui ka ebastabiilsetes vĂ”rkudes, nimelt:

Katvuse suurenemine

AnalĂŒĂŒsides protokolli jĂ”udlust reaalsetes liiklustingimustes, nĂ€gime, et ligikaudu 80% sessioonidest kasutasid QUIC-i edukalt kĂ”igi pĂ€ringute jaoks, samal ajal kui 15% sessioonidest kasutasid nii QUIC-i kui TCP-d. Eeldame, et kombinatsioon tekkis seetĂ”ttu, et Croneti teek lĂŒlitub ajaĂŒlevaate tĂ”ttu tagasi TCP-le, kuna ta ei suuda eristada tegelikke UDP-rikkeid ja halbu vĂ”rguolusid. Hetkel otsime sellele probleemile lahendust, kuna töötame QUIC-i edasise rakendamise kallal.

QUIC-i optimeerimine

Mobiilirakendustest pÀrinev liiklus on viivitusolukordadele tundlik, kuid mitte ribalaiusele. Samuti kasutatakse meie rakendusi peamiselt mobiilivÔrkudes. Eksperimentide pÔhjal on sabaviivitused endiselt suured, isegi kui kasutatakse proksit TCP ja QUIC lÔpetamiseks lÀhedal kasutajatele. Otsime aktiivselt viise koormuse juhtimise parandamiseks ja QUIC-i kadu tagasiarvutamise algoritmide efektiivsuse tÔstmiseks.

Nende ja teiste tÀiendustega kavatseme parandada kasutajakogemust sÔltumata vÔrgust ja piirkonnast, muutes pakettide sujuva ja mugava transportimise kergemini kÀttesaadavaks maailmas.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster