QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda

Det Ă€r mycket intressant att följa protokollet QUIC, vilket gör att vi gĂ€rna skriver om det. Men medan tidigare publikationer om QUIC har haft en mer historisk (lokalhistorisk, om du sĂ„ vill) karaktĂ€r och handlat om Ă€mnet, Ă€r vi idag glada att publicera en översĂ€ttning av ett annat slag – vi kommer att tala om den verkliga tillĂ€mpningen av protokoll i 2019. Detta handlar inte om en liten infrastruktur baserad i ett hypotetiskt garage, utan om Uber, som opererar nĂ€stan över hela vĂ€rlden. Hur företagsingenjörerna kom fram till beslutet att anvĂ€nda QUIC i produktion, hur tester utfördes och vad de sĂ„g efter utrullningen i produktion – lĂ€s vidare.

Bilderna Àr klickbara. Trevlig lÀsning!

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda

Uber representerar en global skala, med nĂ€rvaro i 600 stĂ€der, dĂ€r varje applikation helt litar pĂ„ trĂ„dlöst internet frĂ„n mer Ă€n 4500 mobiloperatörer. AnvĂ€ndarna förvĂ€ntar sig att applikationen fungerar inte bara snabbt, utan i realtid – för att möjliggöra detta behöver Uber-applikationen lĂ„ga fördröjningar och en mycket pĂ„litlig anslutning. TyvĂ€rr fungerar inte HTTP/2 bra i dynamiska och förlustbenĂ€gna trĂ„dlösa nĂ€tverk. Vi har insett att i detta fall Ă€r den lĂ„ga prestandan direkt relaterad till TCP-implementationerna i operativsystemens kĂ€rnor.

För att lösa problemet anvÀnde vi QUIC, ett modernt protokoll med kanalmultiplexering, vilket ger oss mer kontroll över prestandan hos transportprotokollet. För nÀrvarande standardiserar arbetsgruppen IETF QUIC som HTTP/3.

Efter detaljerade tester kom vi fram till slutsatsen att implementeringen av QUIC i vĂ„r applikation minskar "tail"-fördröjningar jĂ€mfört med TCP. Vi observerade en minskning pĂ„ 10–30% för HTTPS-trafik i exempelvis förar- och passagerarapplikationer. Dessutom gav QUIC oss fullstĂ€ndig kontroll över anvĂ€ndarpaketen.

I denna artikel delar vi erfarenheter av att optimera TCP för Uber-applikationer med hjÀlp av ett stack som stöder QUIC.

Den senaste tekniken: TCP

Idag Àr TCP den mest anvÀnda transportprotokollet för att leverera HTTPS-trafik pÄ internet. TCP sÀkerstÀller en pÄlitlig ström av bytes och hanterar dÀrmed nÀtverksöverbelastning och förluster pÄ kanallagret. Den omfattande anvÀndningen av TCP för HTTPS-trafik kan förklaras av dess allestÀdes nÀrvaro (nÀstan varje operativsystem innehÄller TCP), tillgÀngligheten pÄ större delen av infrastrukturen (t.ex. pÄ belastningsfördelare, HTTPS-proxi och CDN) samt dess funktionalitet "ur lÄdan", som Àr tillgÀnglig nÀstan pÄ alla plattformar och nÀtverk.

De flesta anvĂ€ndare anvĂ€nder vĂ„r app i farten, och de "svansförseningar" som TCP har har varit lĂ„ngt ifrĂ„n kraven för vĂ„r realtids HTTPS-trafik. Enkelt uttryckt, detta har drabbat anvĂ€ndare över hela vĂ€rlden – Daigram 1 visar fördröjningar i stora stĂ€der:

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Diagram 1. Storleken pÄ "svansförseningar" varierar i de viktigaste stÀder dÀr Uber Àr nÀrvarande.

Trots att fördröjningarna i indiska och brasilianska nÀtverk var högre Àn i USA och Storbritannien, var svansfördröjningarna avsevÀrt större Àn de genomsnittliga fördröjningarna. Och sÄ Àr det Àven för USA och Storbritannien.

TCP-prestanda över luft.

TCP skapades för trÄdbundna nÀtverk, dvs. med fokus pÄ vÀl förutsÀgbara lÀnkar. Men trÄdlösa nÀtverk har sina egna sÀrdrag och svÄrigheter. För det första Àr trÄdlösa nÀtverk kÀnsliga för förluster pÄ grund av störningar och signaldÀmpning. Till exempel Àr Wi-Fi-nÀtverk kÀnsliga för mikrovÄgor, bluetooth och andra radiovÄgor. MobilnÀt lider av signalförlust (vÀgförlust) pÄ grund av reflexion/absorption av signaler frÄn föremÄl och byggnader samt av störningar frÄn nÀrliggande mobilmaster.Detta leder till betydligt större (4-10 gÄnger) och mer varierade RTT-fördröjningar och paketförluster jÀmfört med trÄdbundna anslutningar.

För att hantera fluktuationer i bandbredd och förluster anvÀnder mobilnÀt vanligtvis stora buffrar för trafiktoppar. Detta kan leda till överdriven köbildning, vilket innebÀr större fördröjningar. Mycket ofta tolkar TCP sÄdan köbildning som förlust pÄ grund av en ökad timeout, vilket gör att TCP tenderar att omförsÀnda och dÀrmed fylla buffern. Detta problem Àr kÀnt som bufferbloat (överskott av nÀtverksbuffring, buffertsvullnad), och detta Àr ett mycket allvarligt problem. den moderna internet.

Äntligen varierar prestandan för mobilnĂ€t beroende pĂ„ operatör, region och tidpunkt. I Figur 2 har vi samlat medianfördröjningar för HTTPS-trafik över celler inom ett avstĂ„nd av 2 kilometer. Data har samlats in för tvĂ„ av de största mobiloperatörerna i Delhi, Indien. Som kan noteras varierar prestandan mellan cell till cell. Dessutom skiljer sig en operatörs prestanda frĂ„n den andra. Detta pĂ„verkas av faktorer som nĂ€tverksinloggningsmönster med hĂ€nsyn till tid och plats, anvĂ€ndarnas rörlighet samt nĂ€tverksinfrastruktur med avseende pĂ„ masttĂ€thet och förhĂ„llandet mellan nĂ€tverkstyper (LTE, 3G etc.).

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 2. Fördröjningar med exempel frÄn ett 2-kilometers radiushÄll. Delhi, Indien.

Prestandan för mobilnÀt varierar ocksÄ över tid. I Figur 3 visas medianfördröjningen per veckodag. Vi noterade ocksÄ skillnader i mindre skala - inom samma dag och timme.

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 3. Svansfördröjningar kan variera avsevÀrt mellan olika dagar, Àven för samma operatör.

Allt ovanstÄende leder till att TCP-prestanda Àr ineffektiv i trÄdlösa nÀtverk. Innan vi söker alternativ till TCP ville vi dock utveckla en exakt förstÄelse för följande punkter:

  • Ă€r TCP den huvudsakliga orsaken till svansfördröjningar i vĂ„ra applikationer?
  • Har moderna nĂ€t verk betydande och varierande rundresor (RTT)?
  • Vad Ă€r pĂ„verkan av RTT och förluster pĂ„ TCP-prestanda?

Analys av TCP-prestanda

För att förstÄ hur vi analyserade TCP-prestanda, lÄt oss kort pÄminna oss om hur TCP överför data frÄn avsÀndaren till mottagaren. Först upprÀttar avsÀndaren en TCP-anslutning genom att utföra en trevÀgs handshake: avsÀndaren skickar en SYN-paket, vÀntar pÄ SYN-ACK-paket frÄn mottagaren och skickar sedan ett ACK-paket. Ytterligare andra och tredje genomgÄngar krÀvs för att skapa en TCP-anslutning. Mottagaren bekrÀftar mottagandet av varje paket (ACK) för att sÀkerstÀlla pÄlitlig leverans.

Om ett paket eller en ACK gÄr förlorad gör avsÀndaren en retransmission efter en tidsutgÄng (RTO, retransmission timeout). RTO berÀknas dynamiskt baserat pÄ olika faktorer, exempelvis pÄ den förvÀntade RTT-fördröjningen mellan avsÀndaren och mottagaren.

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 4. Paketutbyte över TCP/TLS inkluderar retransmissionsmekanismer.

För att avgöra hur TCP fungerade i vÄra applikationer spÄrade vi TCP-paket med hjÀlp av Fungerar libdns korrekt? => Kör under en vecka pÄ verklig trafik som kom frÄn indiska grÀnsservrar. DÀrefter analyserade vi TCP-anslutningarna med hjÀlp av tcptrace. Dessutom skapade vi en Android-app som skickade emulerad trafik till en testserver, maximalt efterliknande verklig trafik. Smartphones med denna app delades ut till flera anstÀllda, som samlade loggar under flera dagar.

Resultaten frÄn bÄda experimenten stÀmde överens med varandra. Vi sÄg höga RTT-fördröjningar; tail-vÀrdena var nÀstan 6 gÄnger högre Àn medianvÀrdet; det aritmetiska medelvÀrdet för fördröjningar var över 1 sekund. MÄnga anslutningar hade paketförluster, vilket fick TCP att retransmittera 3,5% av alla paket. I omrÄden med överbelastning, som flygplatser och jÀrnvÀgsstationer, övervakade vi 7%-iga förluster. Dessa resultat ifrÄgasÀtter den utbredda uppfattningen att de avancerade retransmissionsscheman som anvÀnds i mobilnÀt signifikant minskar förluster pÄ transportnivÄ. Nedan följer testresultat frÄn simulering-appen:

NĂ€tverksmetrik
VĂ€rden

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

RTT-varians, sekunder
I genomsnitt ~1,2 s

Paketförlust vid instabila anslutningar
I genomsnitt ~3,5% (7% i omrÄden med överbelastning)

NÀstan hÀlften av dessa anslutningar hade minst en paketförlust, frÀmst SYN- och SYN-ACK-paket. De flesta TCP-implementationer anvÀnder ett RTO-vÀrde pÄ 1 sekund för SYN-paket, vilket ökar exponentiellt för efterföljande förluster. Laddningstiden för applikationen kan öka pÄ grund av att TCP behöver mer tid för att etablera anslutningar.

I fallet med datapaket, minskar höga RTO-vÀrden starkt den nyttiga utnyttjandegraden av nÀtverket vid temporÀra förluster i trÄdlösa nÀtverk. Vi fann att det genomsnittliga retransmissionstiden Àr cirka 1 sekund med en tail-fördröjning pÄ nÀstan 30 sekunder. Dessa höga fördröjningar pÄ TCP-nivÄ orsakade HTTPS-timeouts och Äterkommande förfrÄgningar, vilket ytterligare ökade fördröjningen och ineffektiviteten i nÀtverket.

Medan 75:e percentilen av de uppmÀtta RTT var omkring 425 ms, var 75:e percentilen för TCP nÀstan 3 sekunder. Detta antyder att förluster tvingade TCP att göra 7-10 försök för att framgÄngsrikt överföra data. Detta kan bero pÄ en ineffektiv RTO-berÀkning och TCP:s oförmÄga att snabbt reagera pÄ förluster. sista paketen i fönstret och ineffektiviteten i algoritmen för överbelastningskontroll, som inte sÀrskiljer mellan trÄdlösa förluster och förluster pÄ grund av nÀtverksöverbelastning. Nedan presenteras resultaten av TCP-förlusttester:

Statistik över TCP-förluster
VĂ€rde

Andel anslutningar med minst 1 paketförlust
45%

Andel anslutningar med förluster under anslutningsetableringen
30%

Andel anslutningar med förluster under datacommunication
76%

Fördelning av fördröjningar vid retransmission, sekunder [50%, 75%, 95%, 99%]
[1, 2.8, 15, 28]

Fördelning av antalet retransmissioner för ett paket eller TCP-segment
[1,3,6,7]

AnvÀndning av QUIC

Ursprungligen designad av Google, Ă€r QUIC ett flödande modernt transportprotokoll som fungerar över UDP. För tillfĂ€llet Ă€r QUIC i standardiseringsprocessen (vi har redan skrivit att det finns i princip tvĂ„ versioner av QUIC, nyfikna kan följa lĂ€nken – anm. översĂ€ttaren). Som visas i Figur 5, Ă€r QUIC placerad under HTTP/3 (i sjĂ€lva verket Ă€r HTTP/2 över QUIC vad som utgör HTTP/3, som nu genomgĂ„r intensiv standardisering). Den delvis ersĂ€tter HTTPS- och TCP-nivĂ„erna genom att anvĂ€nda UDP för paketstruktur. QUIC stödjer endast sĂ€ker dataöverföring, eftersom TLS Ă€r helt integrerat i QUIC.

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 5: QUIC fungerar under HTTP/3, vilket ersÀtter TLS som tidigare fungerade under HTTP/2.

Nedan listar vi anledningarna som övertygade oss om att anvÀnda QUIC för att stÀrka TCP:

  • 0-RTT för att upprĂ€tta anslutning. QUIC möjliggör Ă„teranvĂ€ndning av auktoriseringar frĂ„n tidigare anslutningar, vilket minskar antalet sĂ€kerhets-handskaks. I framtiden kommer TLS1.3 att stödja 0-RTT, men den trevĂ€gs TCP-handshaken kommer fortfarande att vara obligatorisk.
  • överbrygga HoL-blockering. HTTP/2 anvĂ€nder en enda TCP-anslutning för varje klient för att förbĂ€ttra prestandan, men detta kan leda till HoL (head-of-line) blockering. QUIC förenklar multiplexering och levererar begĂ€rningar till applikationen oberoende av varandra.
  • överbelastningskontroll. QUIC fungerar pĂ„ applikationsnivĂ„, vilket möjliggör enklare uppdateringar av den huvudsakliga transportalgoritmen som hanterar sĂ€ndningen baserat pĂ„ nĂ€tverksparametrar (antal paketförluster eller RTT). De flesta TCP-implementationer anvĂ€nder algoritmen CUBIC, som inte Ă€r optimal för trafik som Ă€r kĂ€nslig för fördröjningar. Nyutvecklade algoritmer som BBR, modellerar nĂ€tet mer exakt och optimerar fördröjningar. QUIC möjliggör anvĂ€ndning av BBR och uppdatering av denna algoritm i takt med att den förbĂ€ttras.
  • förluster. QUIC Ă„beropar tvĂ„ TLP (tail loss probe) innan RTO aktiveras – Ă€ven nĂ€r förluster Ă€r mycket mĂ€rkbara. Detta skiljer sig frĂ„n TCP-implementationer. TLP retransmitterar huvudsakligen det senaste paketet (eller ett nytt, om det finns) för att initiera snabb Ă„tervinning. Hantering av svansfördröjningar Ă€r sĂ€rskilt nyttig för hur Uber arbetar med nĂ€tverket, sĂ€rskilt för korta, episodiska och fördröjningskĂ€nsliga datatransmissioner.
  • optimerad ACK. Eftersom varje paket har ett unikt sekvensnummer uppstĂ„r inget problem med differentiering av paket vid deras retransmission. ACK-paket innehĂ„ller ocksĂ„ tidsstĂ€mplar för processering av paketet och generering av ACK pĂ„ klientsidan. Dessa funktioner sĂ€kerstĂ€ller att QUIC noggrant berĂ€knar RTT. ACK i QUIC stöder upp till 256 omrĂ„den NACK, vilket hjĂ€lper avsĂ€ndaren att vara mer motstĂ„ndskraftig mot paketomkastning och anvĂ€nda fĂ€rre byte i processen. Selective ACK (SACK) i TCP löser inte detta problem i alla fall.
  • anslutningsmigrering. QUIC-anslutningar identifieras med hjĂ€lp av ett 64-bits ID, vilket gör att om klienten byter IP-adresser kan ID för den gamla anslutningen anvĂ€ndas vidare pĂ„ den nya IP-adressen utan avbrott. Detta Ă€r en mycket vanlig praxis för mobilapplikationer nĂ€r anvĂ€ndaren vĂ€xlar mellan Wi-Fi och mobila anslutningar.

Alternativ till QUIC

Vi övervÀgde alternativa tillvÀgagÄngssÀtt för att lösa problemet innan vi valde QUIC.

Först försökte vi implementera TPC PoPs (Points of Presence) för att avsluta TCP-anslutningar nÀrmare anvÀndarna. I grunden avslutar PoPs TCP-anslutningen med den mobila enheten nÀrmare mobilnÀtet och mellanlagrar trafiken till den ursprungliga infrastrukturen. Genom att avsluta TCP nÀrmare kan vi potentiellt minska RTT och vara sÀkra pÄ att TCP kommer att reagera mer aktivt pÄ den dynamiska trÄdlösa miljön. VÄra experiment visade dock att mestadels RTT och förluster kommer frÄn mobilnÀten, och anvÀndningen av PoPs ger inte en betydande prestandaförbÀttring.

Vi har ocksĂ„ tittat pĂ„ att justera TCP-parametrarna. Att konfigurera TCP-stacken pĂ„ vĂ„ra heterogena grĂ€nsservrar var svĂ„rt, eftersom TCP har oöverensstĂ€mmande implementationer i olika versioner av operativsystemet. Det var svĂ„rt att implementera och testa olika nĂ€tverkskonfigurationer. Att justera TCP direkt pĂ„ mobila enheter var omöjligt pĂ„ grund av bristande behörighet. Ännu viktigare Ă€r att funktioner som 0-RTT-anslutningar och förbĂ€ttrad RTT-prediktion Ă€r kritiska för protokollarkitekturen och dĂ€rför Ă€r det omöjligt att uppnĂ„ betydande fördelar enbart genom att justera TCP.

Till slut utvĂ€rderade vi nĂ„gra UDP-baserade protokoll som Ă„tgĂ€rdar problem i videoströmning – vi ville ta reda pĂ„ om dessa protokoll skulle hjĂ€lpa i vĂ„rt fall. TyvĂ€rr saknades dessa avsevĂ€rt mĂ„nga sĂ€kerhetsinstĂ€llningar, och det krĂ€vdes ocksĂ„ en extra TCP-anslutning för metadata och styrinformation.

VÄra undersökningar visade att QUIC Àr det enda protokollet som kan hjÀlpa med problemet med internettrafik, samtidigt som det tar hÀnsyn till bÄde sÀkerhet och prestanda.

Integrering av QUIC i plattformen

För att framgĂ„ngsrikt integrera QUIC och förbĂ€ttra applikationens prestanda under dĂ„liga anslutningar, bytte vi ut den gamla stacken (HTTP/2 över TLS/TCP) mot protokollet QUIC. Vi anvĂ€nde det nĂ€tverksbiblioteket Cronet frĂ„n Chromium Projects, som innehĂ„ller den ursprungliga Google-versionen av protokollet – gQUIC. Denna implementation förbĂ€ttras ocksĂ„ stĂ€ndigt för att följa den senaste IETF-specifikationen.

Först integrerade vi Cronet i vÄra Android-appar för att lÀgga till stöd för QUIC. Integrationen genomfördes pÄ ett sÀtt som minimerade migrationskostnaderna. IstÀllet för att helt ersÀtta den gamla nÀtverksstacken, som anvÀnde biblioteket OkHttp, integrerade vi Cronet UNDER OkHttp API-ramverket. Genom att utföra integrationen pÄ detta sÀtt undvek vi förÀndringar i vÄra nÀtverksanrop (som anvÀnder Retrofit) pÄ API-nivÄ.

PÄ liknande sÀtt som för Android-enheter implementerade vi Cronet i Uber-apparna pÄ iOS, genom att avlyssna HTTP-trafiken frÄn nÀtverks API, med hjÀlp av NSURLProtocol. Denna abstraktion, som tillhandahÄlls av iOS Foundation, hanterar protokollspecifika URL-data och sÀkerstÀller att vi kan integrera Cronet i vÄra iOS-appar utan betydande migrationskostnader.

QUIC-avslutning pÄ Google Cloud Load balancers

PÄ backsidan möjliggör Google Cloud Load balancing-infrastrukturen QUIC-avslutning, som anvÀnder alt-svc rubriker i svaren för att stödja QUIC. I allmÀnhet lÀgger lastbalanseraren till en alt-svc-rubrik i varje HTTP-förfrÄgan och validerar dÀrmed stöd för QUIC för domÀnen. NÀr klienten Cronet fÄr ett HTTP-svar med en sÄdan rubrik, anvÀnder den QUIC för efterföljande HTTP-förfrÄgningar till denna domÀn. SÄ snart lastbalanseraren avslutar QUIC, skickar vÄr infrastruktur detta ÄtgÀrd tydligt via HTTP2/TCP till vÄra datacenter.

Prestanda: resultat

Den uppnÄdda prestandan Àr den frÀmsta anledningen till vÄr strÀvan efter den bÀsta protokollen. För att börja skapade vi en uppstÀllning med nÀtverksemuleringar, för att ta reda pÄ hur QUIC skulle fungera under olika nÀtverksprofiler. För att testa QUIC:s prestanda i verkliga nÀtverk genomförde vi experiment genom att Äka runt i New Delhi, dÀr vi anvÀnde emulerad nÀtverkstrafik som liknade HTTP-anrop i passagerarapplikationen.

Experiment 1

Inventarielista för experimentet:

  • testenheter pĂ„ Android med OkHttp- och Cronet-stacken, för att sĂ€kerstĂ€lla att vi skickar HTTPS-trafik över TCP och QUIC respektive;
  • Java-baserad emuleringsserver som skickar identiska HTTPS-rubriker i svaren och belastar klientenheter för att ta emot deras förfrĂ„gningar;
  • molnbaserade proxyer som fysiskt ligger nĂ€ra Indien för att avsluta TCP- och QUIC-anslutningar. Medan vi anvĂ€nde en omvĂ€nd proxy för att avsluta TCP NGINX, det var svĂ„rt att hitta en öppen kĂ€llkod omvĂ€nd proxy för QUIC. Vi byggde en omvĂ€nd proxy för QUIC sjĂ€lva, med hjĂ€lp av den grundlĂ€ggande QUIC-stacken frĂ„n Chromium och har publicerat den i Chromium som öppen kĂ€llkod.

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestandaQUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 6. TestuppsÀttningen för TCP vs QUIC bestod av Android-enheter med OkHttp och Cronet, molnproxyer för att avsluta anslutningar och en emulatorserver.

Experiment 2

NÀr Google gjorde QUIC tillgÀngligt via Google Cloud Load Balancing, anvÀnde vi samma inventarie, men med en modifiering: istÀllet för NGINX, tog vi Googles lastbalanserare för att avsluta TCP- och QUIC-anslutningar frÄn enheterna samt för att dirigera HTTPS-trafik till emulatorservern. Lastbalanserarna Àr spridda över hela vÀrlden, men anvÀnder den nÀrmaste PoP-servern (tack vare geolokalisering).

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 7. I det andra experimentet ville vi jÀmföra latensen i avslutningen av TCP och QUIC: med hjÀlp av Google Cloud och med vÄrt molnproxy.

I slutet hade vi flera avslöjanden:

  • avslutningen genom PoP förbĂ€ttrade prestandan för TCP. Eftersom lastbalanserarna avslutar TCP-anslutningen nĂ€rmare anvĂ€ndarna och Ă€r utmĂ€rkt optimerade ger detta lĂ€gre RTT, vilket förbĂ€ttrar TCP: s prestanda. Och Ă€ven om QUIC pĂ„verkades mindre, övertrĂ€ffade det fortfarande TCP nĂ€r det gĂ€llde att minska svanslatensen (med 10-30 procent).
  • svansarna pĂ„verkas av nĂ€tverksövergĂ„ngar (hops). Även om vĂ„r QUIC-proxy var lĂ€ngre bort frĂ„n enheterna (latens ungefĂ€r 50 ms högre) Ă€n Googles lastbalanserare, uppvisade den liknande prestanda – 15% minskning av latens jĂ€mfört med 20% minskning i 99:e percentilen för TCP. Detta tyder pĂ„ att övergĂ„ngen pĂ„ sista milen Ă€r flaskhalsen i nĂ€tverkets funktion.

QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestandaQUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 8. Resultaten frÄn de tvÄ experimenten visar att QUIC överlÀgset övertrÀffar TCP.

Stridstrafik

Inspirerade av experimenten införde vi stöd för QUIC i vÄra Android- och iOS-appar. Vi genomförde A/B-testning för att bestÀmma effekten av QUIC i stÀder dÀr Uber Àr verksam. Generellt sett sÄg vi en betydande minskning av svanslatensen över bÄde regioner och operatörer samt nÀtverkstyper.

I graferna nedan visas procentuella förbĂ€ttringar av svansarna (95 och 99 percentiler) över makroregioner och olika nĂ€tverkstyper – LTE, 3G, 2G.
QUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestandaQUIC-protokollet i praktiken: hur Uber implementerade det för att optimera prestanda
Figur 9. I stridstestade QUIC övertrÀffade TCP avseende latens.

Endast framÄt

Det hĂ€r Ă€r förmodligen bara början – införandet av QUIC i produktion har gett fantastiska möjligheter att förbĂ€ttra applikationsprestanda bĂ„de i stabila och instabila nĂ€tverk, nĂ€mligen:

Ökad tĂ€ckning

Genom att analysera protokollets prestanda pÄ verklig trafik sÄg vi att ungefÀr 80% av sessionerna framgÄngsrikt anvÀnde QUIC för alla förfrÄgningar, medan 15% av sessionerna anvÀnde en kombination av QUIC och TCP. Vi misstÀnker att denna kombination uppstod eftersom Cronet-biblioteket vÀxlar tillbaka till TCP vid time-out, eftersom det inte kan sÀrskilja verkliga UDP-fel frÄn dÄliga nÀtverksförhÄllanden. Vi söker nu en lösning pÄ detta problem, eftersom vi arbetar med nÀsta implementering av QUIC.

Optimering av QUIC

Trafiken frÄn mobilapplikationer Àr kÀnslig för fördröjningar men inte för bandbredd. VÄra applikationer anvÀnds frÀmst i mobilnÀt. Baserat pÄ experiment visar det sig att svansfördröjningar fortfarande Àr stora, Àven med hjÀlp av proxies som avslutar TCP och QUIC nÀra anvÀndarna. Vi letar aktivt efter sÀtt att förbÀttra överbelastningshanteringen och öka effektiviteten hos QUIC-algoritmer för förlustkompensering.

Med dessa och nÄgra andra förbÀttringar planerar vi att förbÀttra anvÀndarupplevelsen oavsett nÀtverk och region, genom att göra en smidig och anvÀndarvÀnlig pakettransport mer tillgÀnglig över hela vÀrlden.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster