QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju

QUIC protokolu ir ārkārtÄ«gi interesanti skatÄ«ties, tāpēc mums patÄ«k par to rakstÄ«t. Bet, ja iepriekŔējās publikācijas par QUIC bija vairāk vēsturiska (ja vēlaties, novadpētniecÄ«bas) daba un aparatÅ«ra, tad Å”odien ar prieku publicējam cita veida tulkojumu - runāsim par protokola reālo pielietojumu 2019. gadā. Turklāt runa nav par mazu infrastruktÅ«ru, kas bāzēta tā dēvētajā garāžā, bet gan par Uber, kas darbojas gandrÄ«z visā pasaulē. Kā uzņēmuma inženieri pieņēma lēmumu izmantot QUIC ražoÅ”anā, kā viņi veica testus un ko viņi redzēja pēc tā ievieÅ”anas ražoÅ”anā - zem griezuma.

Attēli ir klikŔķināmi. Izbaudi lasÄ«Å”anu!

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju

Uber ir globāls mērogs, proti, 600 klātbÅ«tnes pilsētas, un katrā no tām lietojumprogramma pilnÄ«bā balstās uz bezvadu internetu no vairāk nekā 4500 mobilo sakaru operatoriem. Lietotāji sagaida, ka lietotne bÅ«s ne tikai ātra, bet arÄ« reāllaikā ā€“ lai to panāktu, Uber lietotnei ir nepiecieÅ”ams zems latentums un ļoti uzticams savienojums. Ak, bet kaudze HTTP / 2 nedarbojas dinamiskos un ar zaudējumiem pakļautos bezvadu tÄ«klos. Mēs sapratām, ka Å”ajā gadÄ«jumā zemā veiktspēja ir tieÅ”i saistÄ«ta ar TCP ievieÅ”anu operētājsistēmu kodolos.

Lai atrisinātu problēmu, mēs pieteicāmies QUIC, moderns kanālu multipleksÄ“Å”anas protokols, kas sniedz mums lielāku kontroli pār transporta protokola veiktspēju. Å obrÄ«d darba grupa IETF standartizē QUIC kā HTTP / 3.

Pēc plaŔās testÄ“Å”anas mēs secinājām, ka QUIC ievieÅ”ana mÅ«su lietojumprogrammā samazinātu astes latentumus salÄ«dzinājumā ar TCP. Mēs novērojām HTTPS trafika samazinājumu par 10ā€“30% vadÄ«tāja un pasažieru lietojumprogrammās. QUIC arÄ« sniedza mums pilnÄ«gu kontroli pār lietotāju pakotnēm.

Å ajā rakstā mēs dalāmies pieredzē par TCP optimizÄ“Å”anu Uber lietojumprogrammām, izmantojot steku, kas atbalsta QUIC.

Jaunākā tehnoloģija: TCP

MÅ«sdienās TCP ir visbiežāk izmantotais transporta protokols HTTPS trafika nodroÅ”ināŔanai internetā. TCP nodroÅ”ina uzticamu baitu plÅ«smu, tādējādi novērÅ”ot tÄ«kla pārslodzes un saites slāņa zudumus. TCP plaŔā izmantoÅ”ana HTTPS trafikam ir saistÄ«ta ar pirmās pieejamo funkcionalitāti (gandrÄ«z katrā operētājsistēmā ir TCP), pieejamÄ«bu lielākajā daļā infrastruktÅ«ru (piemēram, slodzes balansētājiem, HTTPS starpniekserveriem un CDN) un pieejamo funkcionalitāti. gandrÄ«z lielākajā daļā platformu un tÄ«klu.

Lielākā daļa lietotāju izmanto mÅ«su lietotni, atrodoties ceļā, un TCP gala latentums ne tuvu neatbilda mÅ«su reāllaika HTTPS trafika prasÄ«bām. VienkārÅ”i sakot, lietotāji visā pasaulē to ir piedzÄ«vojuÅ”i ā€” 1. attēlā parādÄ«ti kavējumi lielākajās pilsētās:

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
1. attēls. Astes latentums dažādās Uber galvenajās pilsētās ir atŔķirÄ«gs.

Lai gan Indijas un Brazīlijas tīklos latentums bija lielāks nekā ASV un Apvienotajā Karalistē, astes latentums ir ievērojami lielāks par vidējo latentumu. Un tas attiecas pat uz ASV un Lielbritāniju.

TCP veiktspēja pa gaisu

TCP tika izveidots priekÅ” vadu tÄ«kliem, tas ir, ar uzsvaru uz ļoti paredzamām saitēm. tomēr bezvadu tÄ«kliem ir savas Ä«patnÄ«bas un grÅ«tÄ«bas. Pirmkārt, bezvadu tÄ«kli ir jutÄ«gi pret zudumiem traucējumu un signāla vājināŔanās dēļ. Piemēram, Wi-Fi tÄ«kli ir jutÄ«gi pret mikroviļņiem, Bluetooth un citiem radioviļņiem. Mobilie tÄ«kli cieÅ” no signāla zuduma (pazaudēts ceļŔ) signāla atstaroÅ”anas/absorbcijas dēļ objektos un ēkās, kā arÄ« no iejaukÅ”anās no kaimiņiem Ŕūnu torņi. Tas noved pie nozÄ«mÄ«gāka (4-10 reizes) un daudzveidÄ«gāka Turp un atpakaļ laiks (RTT) un pakeÅ”u zudums salÄ«dzinājumā ar vadu savienojumu.

Lai cÄ«nÄ«tos pret joslas platuma svārstÄ«bām un zudumiem, mobilie tÄ«kli parasti izmanto lielus buferus trafika pārrāvumiem. Tas var novest pie pārmērÄ«gas rindas, kas nozÄ«mē ilgāku kavÄ“Å”anos. Ä»oti bieži TCP uzskata Å”o rindu par izŔķērdÄ«bu pagarinātā taimauta dēļ, tāpēc TCP mēdz pārsÅ«tÄ«t un tādējādi aizpildÄ«t buferi. Å Ä« problēma ir pazÄ«stama kā buferuzpÅ«Å”anās (pārmērÄ«ga tÄ«kla buferizācija, bufera uzpÅ«Å”anās), un tas ir ļoti nopietna problēma moderns internets.

Visbeidzot, mobilā tÄ«kla veiktspēja atŔķiras atkarÄ«bā no operatora, reÄ£iona un laika. 2. attēlā mēs apkopojām HTTPS trafika vidējo aizkavi Ŕūnās 2 kilometru diapazonā. Dati savākti par diviem galvenajiem mobilo sakaru operatoriem Deli, Indijā. Kā redzat, veiktspēja dažādās Ŕūnās atŔķiras. Tāpat viena operatora produktivitāte atŔķiras no otrā. To ietekmē tādi faktori kā tÄ«kla ievades modeļi, ņemot vērā laiku un atraÅ”anās vietu, lietotāju mobilitāte, kā arÄ« tÄ«kla infrastruktÅ«ra, ņemot vērā torņu blÄ«vumu un tÄ«kla veidu attiecÄ«bu (LTE, 3G utt.).

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
2. attēls. KavÄ“Å”anās, kā piemēru izmantojot 2 km rādiusu. Deli, Indija.

ArÄ« mobilo tÄ«klu veiktspēja laika gaitā mainās. 3. attēlā parādÄ«ts vidējais latentums pēc nedēļas dienām. Mēs novērojām atŔķirÄ«bas arÄ« mazākā mērogā vienas dienas un stundas laikā.

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
3. attēls. Astes aizkave var ievērojami atŔķirties dažādās dienās, bet vienam un tam paÅ”am operatoram.

Visu iepriekÅ” minēto iemeslu dēļ TCP veiktspēja ir neefektÄ«va bezvadu tÄ«klos. Tomēr, pirms meklējām alternatÄ«vas TCP, mēs vēlējāmies izstrādāt precÄ«zu izpratni par Ŕādiem jautājumiem:

  • vai TCP ir galvenais vaininieks aiz astes latentuma mÅ«su lietojumprogrammās?
  • Vai mÅ«sdienu tÄ«klos ir ievērojamas un dažādas turp un atpakaļ aizkaves (RTT)?
  • Kāda ir RTT un zaudējumu ietekme uz TCP veiktspēju?

TCP veiktspējas analīze

Lai saprastu, kā mēs analizējām TCP veiktspēju, Ä«si apskatÄ«sim, kā TCP pārsÅ«ta datus no sÅ«tÄ«tāja uz saņēmēju. Pirmkārt, sÅ«tÄ«tājs izveido TCP savienojumu, veicot trÄ«svirzienu savienojumu rokasspiediens: SÅ«tÄ«tājs nosÅ«ta SYN paketi, gaida SYN-ACK paketi no saņēmēja un pēc tam nosÅ«ta ACK paketi. TCP savienojuma izveidei tiek pavadÄ«ta papildu otrā un treŔā caurlaide. Saņēmējs apstiprina katras paketes saņemÅ”anu (ACK), lai nodroÅ”inātu uzticamu piegādi.

Ja tiek pazaudēta pakete vai ACK, sūtītājs pēc taimauta pārsūta to atkārtoti (RTO, retranslācijas taimauts). RTO tiek aprēķināts dinamiski, pamatojoties uz dažādiem faktoriem, piemēram, paredzamo RTT aizkavi starp sūtītāju un saņēmēju.

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
4. attēls. PakeÅ”u apmaiņa, izmantojot TCP/TLS, ietver atkārtotas pārraides mehānismu.

Lai noteiktu, kā TCP darbojas mÅ«su lietojumprogrammās, mēs uzraudzÄ«jām TCP paketes, izmantojot tcpdump nedēļu par kaujas trafiku, kas nāk no Indijas malas serveriem. Pēc tam mēs analizējām TCP savienojumus, izmantojot tcptrace. Turklāt mēs izveidojām Android lietojumprogrammu, kas nosÅ«ta emulētu trafiku uz testa serveri, pēc iespējas imitējot reālo trafiku. Viedtālruņi ar Å”o aplikāciju tika izdalÄ«ti vairākiem darbiniekiem, kuri vāca žurnālus vairāku dienu laikā.

Abu eksperimentu rezultāti saskanēja viens ar otru. Mēs redzējām lielus RTT latentumus; astes vērtÄ«bas bija gandrÄ«z 6 reizes lielākas par vidējo vērtÄ«bu; kavējumu vidējais aritmētiskais ir lielāks par 1 sekundi. Daudzi savienojumi bija ar zaudējumiem, kā rezultātā TCP atkārtoti pārsÅ«tÄ«ja 3,5% no visām paketēm. Pārslogotās vietās, piemēram, lidostās un dzelzceļa stacijās, mēs piedzÄ«vojām 7% zaudējumus. Å ie rezultāti liek apÅ”aubÄ«t parasto gudrÄ«bu, ko izmanto mobilajos tÄ«klos uzlabotas retranslācijas shēmas ievērojami samazināt zaudējumus transporta lÄ«menÄ«. Tālāk ir parādÄ«ti lietojumprogrammas ā€œsimulatorsā€ testa rezultāti:

Tīkla rādītāji
Vērtības

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

RTT novirze, sekundes
Vidēji ~1,2 s

PakeŔu zudums nestabilos savienojumos
Vidēji ~3.5% (7% pārslogotās vietās)

GandrÄ«z pusei no Å”iem savienojumiem bija vismaz viens pakeÅ”u zudums, lielākā daļa no tiem bija SYN un SYN-ACK paketes. Lielākā daļa TCP ievieÅ”anu izmanto RTO vērtÄ«bu 1 sekunde SYN paketēm, kas eksponenciāli palielinās turpmāko zaudējumu gadÄ«jumā. Lietojumprogrammu ielādes laiks var palielināties, jo TCP savienojuma izveide prasa ilgāku laiku.

Datu pakeÅ”u gadÄ«jumā augstas RTO vērtÄ«bas ievērojami samazina tÄ«kla lietderÄ«go izmantoÅ”anu, ja bezvadu tÄ«klos ir Ä«slaicÄ«gi zudumi. Mēs noskaidrojām, ka vidējais atkārtotas pārraides laiks ir aptuveni 1 sekunde ar gandrÄ«z 30 sekunžu aizkavi. Å ie augstie latentumi TCP lÄ«menÄ« izraisÄ«ja HTTPS taimautu un atkārtotus pieprasÄ«jumus, vēl vairāk palielinot tÄ«kla latentumu un neefektivitāti.

Kamēr izmērÄ«tās RTT 75. procentile bija aptuveni 425 ms, TCP 75. procentile bija gandrÄ«z 3 sekundes. Tas norāda, ka zaudējuma dēļ TCP bija jāveic 7ā€“10 pārejas, lai veiksmÄ«gi pārsÅ«tÄ«tu datus. Tas var bÅ«t neefektÄ«va RTO aprēķina sekas, TCP nespēja ātri reaģēt uz zaudējumiem jaunākās paketes logā un pārslodzes kontroles algoritma neefektivitāte, kas nenoŔķir bezvadu sakaru zudumus no tÄ«kla pārslodzes izraisÄ«tiem zaudējumiem. Tālāk ir sniegti TCP zudumu testu rezultāti:

TCP pakeŔu zudumu statistika
Vērtība

Savienojumu procentuālā daļa ar vismaz 1 pakeÅ”u zudumu
45%

Savienojumu procentuālā daļa ar zudumiem savienojuma iestatīŔanas laikā
30%

Savienojumu procentuālā daļa ar zudumiem datu apmaiņas laikā
76%

Retranslācijas aizkaves sadalījums, sekundes [50%, 75%, 95%, 99%] [1, 2.8, 15, 28]

Retranslāciju skaita sadalījums vienai paketei vai TCP segmentam
[1,3,6,7]

QUIC pielietojums

Sākotnēji Google izstrādātais QUIC ir daudzpavedienu moderns transporta protokols, kas darbojas papildus UDP. PaÅ”laik ir pieejams QUIC standartizācijas process (mēs jau rakstÄ«jām, ka ir it kā divas QUIC versijas, ziņkārÄ«gs var sekot saitei ā€“ apm. tulks). Kā parādÄ«ts 5. attēlā, QUIC atrodas zem HTTP/3 (faktiski HTTP/2 virs QUIC ir HTTP/3, kas tagad tiek intensÄ«vi standartizēts). Tas daļēji aizstāj HTTPS un TCP slāņus, pakeÅ”u veidoÅ”anai izmantojot UDP. QUIC atbalsta tikai droÅ”u datu pārsÅ«tÄ«Å”anu, jo TLS ir pilnÄ«bā iebÅ«vēts QUIC.

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
5. attēls. QUIC darbojas, izmantojot HTTP/3, aizstājot TLS, kas iepriekÅ” darbojās ar HTTP/2.

Tālāk ir norādīti iemesli, kas mūs pārliecināja izmantot QUIC TCP pastiprināŔanai:

  • 0-RTT savienojuma izveide. QUIC ļauj atkārtoti izmantot autorizācijas no iepriekŔējiem savienojumiem, samazinot droŔības rokasspiedienu skaitu. Nākotnē TLS1.3 atbalstÄ«s 0-RTT, taču joprojām bÅ«s nepiecieÅ”ams trÄ«svirzienu TCP rokasspiediens.
  • HoL bloÄ·Ä“Å”anas pārvarÄ“Å”ana. HTTP/2 izmanto vienu TCP savienojumu katram klientam, lai uzlabotu veiktspēju, taču tas var izraisÄ«t HoL (head-of-line) bloÄ·Ä“Å”anu. QUIC vienkārÅ”o multipleksÄ“Å”anu un piegādā pieprasÄ«jumus lietojumprogrammai neatkarÄ«gi.
  • sastrēgumu kontrole. QUIC atrodas lietojumprogrammas slānÄ«, atvieglojot galvenā transporta algoritma atjaunināŔanu, kas kontrolē sÅ«tÄ«Å”anu, pamatojoties uz tÄ«kla parametriem (zaudējumu skaitu vai RTT). Lielākā daļa TCP implementāciju izmanto algoritmu KUBIKA, kas nav optimāla latentuma jutÄ«gai datplÅ«smai. Nesen izstrādāti algoritmi, piemēram BBR, precÄ«zāk modelēt tÄ«klu un optimizēt latentumu. QUIC ļauj izmantot BBR un atjaunināt Å”o algoritmu, kā tas tiek izmantots. uzlabojas.
  • zaudējumu papildināŔana. QUIC izsauc divus TLP (astes zuduma zonde) pirms RTO iedarbināŔanas ā€“ pat tad, ja zaudējumi ir ļoti pamanāmi. Tas atŔķiras no TCP ievieÅ”anas. TLP pārsÅ«ta galvenokārt pēdējo paketi (vai jauno, ja tāda ir), lai aktivizētu ātru papildināŔanu. Astes aizkaves apstrāde ir Ä«paÅ”i noderÄ«ga tam, kā Uber darbojas savā tÄ«klā, proti, Ä«sai, sporādiskai un latentuma jutÄ«gai datu pārsÅ«tÄ«Å”anai.
  • optimizēta ACK. Tā kā katrai paketei ir unikāls kārtas numurs, problēmu nav atŔķirÄ«bas paketes, kad tās tiek atkārtoti pārsÅ«tÄ«tas. ACK paketēs ir arÄ« laiks, lai apstrādātu paketi un Ä£enerētu ACK klienta pusē. Å Ä«s funkcijas nodroÅ”ina, ka QUIC precÄ«zāk aprēķina RTT. ACK in QUIC atbalsta lÄ«dz 256 joslām NACK, palÄ«dzot sÅ«tÄ«tājam bÅ«t noturÄ«gākam pret pakeÅ”u jaukÅ”anu un Å”ajā procesā izmantot mazāk baitu. SelektÄ«vā ACK (MAISS) TCP neatrisina Å”o problēmu visos gadÄ«jumos.
  • savienojuma migrācija. QUIC savienojumus identificē ar 64 bitu ID, tādēļ, ja klients maina IP adreses, veco savienojuma ID var turpināt bez pārtraukuma izmantot jaunajā IP adresē. Tā ir ļoti izplatÄ«ta prakse mobilajām lietojumprogrammām, kurās lietotājs pārslēdzas starp Wi-Fi un mobilo sakaru savienojumiem.

Alternatīvas QUIC

Pirms QUIC izvēles mēs apsvērām alternatÄ«vas problēmas risināŔanas pieejas.

Pirmā lieta, ko mēģinājām, bija izvietot TPC PoP (klātbÅ«tnes punktus), lai pārtrauktu TCP savienojumus tuvāk lietotājiem. BÅ«tÄ«bā PoP pārtrauc TCP savienojumu ar mobilo ierÄ«ci, kas atrodas tuvāk mobilajam tÄ«klam, un pārsÅ«ta trafiku atpakaļ uz sākotnējo infrastruktÅ«ru. Tuvāk pārtraucot TCP, mēs potenciāli varam samazināt RTT un nodroÅ”ināt, ka TCP vairāk reaģē uz dinamisku bezvadu vidi. Tomēr mÅ«su eksperimenti ir parādÄ«juÅ”i, ka lielākā daļa RTT un zudumu rodas no mobilajiem tÄ«kliem, un PoP izmantoÅ”ana nenodroÅ”ina bÅ«tisku veiktspējas uzlaboÅ”anos.

Mēs arÄ« apskatÄ«jām TCP parametru regulÄ“Å”anu. TCP steka iestatÄ«Å”ana mÅ«su neviendabÄ«gajos malas serveros bija sarežģīta, jo TCP dažādās OS versijās ir ieviestas atŔķirÄ«gi. Bija grÅ«ti to ieviest un pārbaudÄ«t dažādas tÄ«kla konfigurācijas. TCP konfigurÄ“Å”ana tieÅ”i mobilajās ierÄ«cēs nebija iespējama atļauju trÅ«kuma dēļ. Vēl svarÄ«gāk ir tas, ka tādas funkcijas kā 0-RTT savienojumi un uzlabota RTT prognozÄ“Å”ana ir bÅ«tiskas protokola arhitektÅ«rai, un tāpēc nav iespējams sasniegt ievērojamas priekÅ”rocÄ«bas, noregulējot tikai TCP.

Visbeidzot, mēs novērtējām vairākus UDP protokolus, kas novērÅ” video straumÄ“Å”anas problēmas ā€” mēs vēlējāmies noskaidrot, vai Å”ie protokoli varētu palÄ«dzēt mÅ«su gadÄ«jumā. Diemžēl tiem ļoti trÅ«ka daudzu droŔības iestatÄ«jumu, kā arÄ« bija nepiecieÅ”ams papildu TCP savienojums metadatiem un vadÄ«bas informācijai.

MÅ«su pētÄ«jumi ir parādÄ«juÅ”i, ka QUIC, iespējams, ir vienÄ«gais protokols, kas var palÄ«dzēt atrisināt interneta trafika problēmu, vienlaikus ņemot vērā gan droŔību, gan veiktspēju.

QUIC integrācija platformā

Lai veiksmÄ«gi iegultu QUIC un uzlabotu lietojumprogrammu veiktspēju vājās savienojamÄ«bas vidēs, mēs nomainÄ«jām veco steku (HTTP/2, izmantojot TLS/TCP) ar QUIC protokolu. Mēs izmantojām tÄ«kla bibliotēku Kronets no Chromium projekti, kurā ir oriÄ£inālā, Google protokola versija - gQUIC. Å Ä« ievieÅ”ana arÄ« tiek pastāvÄ«gi uzlabota, lai atbilstu jaunākajai IETF specifikācijai.

Vispirms mēs integrējām Cronet savās Android lietotnēs, lai pievienotu QUIC atbalstu. Integrācija tika veikta tā, lai pēc iespējas samazinātu migrācijas izmaksas. Tā vietā, lai pilnÄ«bā aizstātu veco tÄ«kla steku, kas izmantoja bibliotēku OkHttp, esam integrējuÅ”i Cronet UZ OkHttp API ietvaru. Veicot integrāciju Ŕādā veidā, mēs izvairÄ«jāmies no izmaiņām mÅ«su tÄ«kla zvanos (kurus izmanto PārbÅ«vēt) API lÄ«menÄ«.

LÄ«dzÄ«gi kā Android ierÄ«cēm, mēs ieviesām Cronet Uber lietotnēs operētājsistēmā iOS, pārtverot HTTP trafiku no tÄ«kla. APIizmantojot NSURL protokols. Å Ä« abstrakcija, ko nodroÅ”ina iOS fonds, apstrādā protokolam specifiskus URL datus un nodroÅ”ina, ka mēs varam integrēt Cronet mÅ«su iOS lietojumprogrammās bez ievērojamām migrācijas izmaksām.

QUIC pabeigŔana pakalpojumā Google Cloud Balancers

Aizmugurējā pusē QUIC pabeigÅ”anu nodroÅ”ina Google mākoņa slodzes lÄ«dzsvaroÅ”anas infrastruktÅ«ra, kas izmanto alt-svc galvenes atbildēs, lai atbalstÄ«tu QUIC. Parasti balansētājs pievieno alt-svc galveni katram HTTP pieprasÄ«jumam, un tas jau apstiprina QUIC atbalstu domēnam. Kad Cronet klients saņem HTTP atbildi ar Å”o galveni, tas izmanto QUIC turpmākajiem HTTP pieprasÄ«jumiem Å”im domēnam. Kad balansētājs pabeidz QUIC, mÅ«su infrastruktÅ«ra skaidri nosÅ«ta Å”o darbÄ«bu mÅ«su datu centriem, izmantojot HTTP2/TCP.

Veiktspēja: Rezultāti

Izvades veiktspēja ir galvenais iemesls, kāpēc mēs meklējam labāku protokolu. Sākumā mēs izveidojām stendu ar tīkla emulācijalai uzzinātu, kā QUIC darbosies dažādos tīkla profilos. Lai pārbaudītu QUIC veiktspēju reālos tīklos, mēs veicām eksperimentus, braucot pa Ņūdeli, izmantojot emulētu tīkla trafiku, kas ir ļoti līdzīgs HTTP zvaniem pasažieru lietotnē.

1. eksperiments

Eksperimenta aprīkojums:

  • pārbaudÄ«t Android ierÄ«ces ar OkHttp un Cronet skursteņiem, lai nodroÅ”inātu, ka mēs atļaujam HTTPS trafiku, izmantojot attiecÄ«gi TCP un QUIC;
  • uz Java balstÄ«tu emulācijas serveri, kas atbildēs nosÅ«ta tāda paÅ”a veida HTTPS galvenes un ielādē klienta ierÄ«ces, lai saņemtu no tām pieprasÄ«jumus;
  • mākoņa starpniekserveri, kas fiziski atrodas tuvu Indijai, lai pārtrauktu TCP un QUIC savienojumus. Lai gan TCP pārtraukÅ”anai mēs izmantojām reverso starpniekserveri nginx, bija grÅ«ti atrast QUIC atvērtā koda reverso starpniekserveri. Mēs paÅ”i izveidojām QUIC apgriezto starpniekserveri, izmantojot pamata QUIC steku no Chromium un publicēta to hromā kā atvērtā koda.

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspējuQUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
6. attēls. TCP vs QUIC ceļa testu komplekts sastāvēja no Android ierÄ«cēm ar OkHttp un Cronet, mākoņa starpniekserveriem savienojumu pārtraukÅ”anai un emulācijas servera.

2. eksperiments

Kad Google padarÄ«ja QUIC pieejamu ar Google mākoņa slodzes lÄ«dzsvaroÅ”ana, mēs izmantojām tos paÅ”us krājumus, taču ar vienu modifikāciju: NGINX vietā izmantojām Google slodzes balansētājus, lai pārtrauktu TCP un QUIC savienojumus no ierÄ«cēm, kā arÄ« lai marÅ”rutētu HTTPS trafiku uz emulācijas serveri. Balansieri ir izplatÄ«ti visā pasaulē, bet izmanto ierÄ«cei vistuvāk esoÅ”o PoP serveri (pateicoties Ä£eogrāfiskajai atraÅ”anās vietai).

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
7. attēls. Otrajā eksperimentā mēs vēlējāmies salÄ«dzināt TCP un QUIC pabeigÅ”anas latentumu: izmantojot Google Cloud un mÅ«su mākoņa starpniekserveri.

Rezultātā mūs gaidīja vairākas atklāsmes:

  • pārtraukÅ”ana, izmantojot PoP, uzlaboja TCP veiktspēju. Tā kā balansētāji pārtrauc TCP savienojumus tuvāk lietotājiem un ir ļoti optimizēti, tas rada zemākus RTT, kas uzlabo TCP veiktspēju. Un, lai gan QUIC tika ietekmēts mazāk, tas joprojām pārspēja TCP, samazinot astes latentumu (par 10ā€“30 procentiem).
  • tiek ietekmētas astes tÄ«kla apiņi. Lai gan mÅ«su QUIC starpniekserveris atradās tālāk no ierÄ«cēm (par aptuveni 50 ms lielāks latentums) nekā Google slodzes balansētāji, tas nodroÅ”ināja lÄ«dzÄ«gu veiktspēju ā€” latentuma samazinājums par 15%, salÄ«dzinot ar 20% samazinājumu TCP 99. procentilei. Tas liek domāt, ka pēdējā jÅ«dzes pāreja ir tÄ«kla saÅ”aurinājums.

QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspējuQUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
8. attēls. Divu eksperimentu rezultāti liecina, ka QUIC ievērojami pārspēj TCP.

Apkarot satiksmi

Iedvesmojoties no eksperimentiem, esam ieviesuÅ”i QUIC atbalstu savās Android un iOS lietojumprogrammās. Mēs veicām A/B testÄ“Å”anu, lai noteiktu QUIC ietekmi pilsētās, kurās darbojas Uber. Kopumā mēs novērojām ievērojamu kavÄ“Å”anās gadÄ«jumu samazināŔanos abos reÄ£ionos, telekomunikāciju operatoros un tÄ«kla veidos.

Tālāk redzamajās diagrammās ir parādÄ«ti procentuālie uzlabojumi astēs (95 un 99 procentiles) pa makroreÄ£ioniem un dažādiem tÄ«kla veidiem ā€” LTE, 3G, 2G.
QUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspējuQUIC protokols darbībā: kā Uber to ieviesa, lai optimizētu veiktspēju
9. attēls. Kaujas testos QUIC pārspēja TCP latentuma ziņā.

Tikai uz priekŔu

VarbÅ«t tas ir tikai sākums - QUIC izlaiÅ”ana ražoÅ”anā ir nodroÅ”inājusi pārsteidzoÅ”as iespējas uzlabot lietojumprogrammu veiktspēju gan stabilos, gan nestabilos tÄ«klos, proti:

Palielināts pārklājums

Analizējot protokola veiktspēju reālajā datplÅ«smā, mēs redzējām, ka aptuveni 80% sesiju veiksmÄ«gi izmantoja QUIC viss pieprasÄ«jumus, savukārt 15% sesiju izmantoja QUIC un TCP kombināciju. Mēs pieņemam, ka kombinācija ir saistÄ«ta ar Cronet bibliotēkas taimautu atpakaļ uz TCP, jo tā nevar atŔķirt reālas UDP kļūmes no sliktiem tÄ«kla apstākļiem. PaÅ”laik mēs meklējam Ŕīs problēmas risinājumu, strādājot pie turpmākas QUIC ievieÅ”anas.

QUIC optimizācija

DatplÅ«sma no mobilajām lietotnēm ir jutÄ«ga pret latentumu, bet nav jutÄ«ga pret joslas platumu. Turklāt mÅ«su lietojumprogrammas galvenokārt tiek izmantotas mobilajos tÄ«klos. Pamatojoties uz eksperimentiem, gala latentums joprojām ir augsts, lai gan tiek izmantots starpniekserveris, lai pārtrauktu TCP un QUIC lietotāju tuvumā. Mēs aktÄ«vi meklējam veidus, kā uzlabot sastrēgumu pārvaldÄ«bu un uzlabot QUIC zaudējumu atgÅ«Å”anas algoritmu efektivitāti.

Ar Å”iem un vairākiem citiem uzlabojumiem mēs plānojam uzlabot lietotāju pieredzi neatkarÄ«gi no tÄ«kla un reÄ£iona, padarot ērtu un netraucētu pakeÅ”u transportÄ“Å”anu pieejamāku visā pasaulē.

Avots: www.habr.com

Pievieno komentāru