Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën

Protokolli QUIC Ă«shtĂ« jashtĂ«zakonisht interesant pĂ«r t'u ndjekur, prandaj na pĂ«lqen tĂ« shkruajmĂ« pĂ«r tĂ«. Por nĂ«se publikimet e mĂ«parshme pĂ«r QUIC kishin njĂ« karakter mĂ« shumĂ« historik (regional, nĂ«se doni) dhe pĂ«rmbajtje teknike, sot jemi tĂ« lumtur tĂ« publikojmĂ« njĂ« pĂ«rkthim tjetĂ«r – do tĂ« flasim pĂ«r aplikimin e vĂ«rtetĂ« tĂ« protokollit nĂ« vitin 2019. Dhe nuk flasim pĂ«r njĂ« infrastrukturĂ« tĂ« vogĂ«l, tĂ« bazuar nĂ« njĂ« garazh tĂ« zakonshĂ«m, por pĂ«r Uber, i cili operon nĂ« pothuajse tĂ« gjithĂ« botĂ«n. Si arritĂ«n inxhinierĂ«t e kompanisĂ« tĂ« vendosin tĂ« pĂ«rdorin QUIC nĂ« prodhim, si e realizuan testimin dhe çfarĂ« panĂ« pas fillimit nĂ« prodhim – mĂ« poshtĂ«.

Imazhet janë të klikueshme. Lexim të këndshëm!

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën

Uber Ă«shtĂ« nĂ« njĂ« shkallĂ« globale, pĂ«rkatĂ«sisht nĂ« 600 qytete, nĂ« secilin prej tĂ« cilave aplikacioni mbĂ«shtetet plotĂ«sisht nĂ« internetin pa tel nga mĂ« shumĂ« se 4500 operatorĂ« celularĂ«. PĂ«rdoruesit presin qĂ« aplikacioni tĂ« funksionojĂ« jo vetĂ«m shpejt, por nĂ« realitet – pĂ«r ta siguruar kĂ«tĂ«, aplikacioni Uber ka nevojĂ« pĂ«r vonesa tĂ« ulta dhe njĂ« lidhje shumĂ« tĂ« besueshme. FatkeqĂ«sisht, por staku HTTP/2 ndihen se ndihen keq nĂ« rrjetet wireless dinamike dhe me tendencĂ« nĂ« humbje. Ne kuptuam se nĂ« kĂ«tĂ« rast performanca e ulĂ«t Ă«shtĂ« drejtpĂ«rdrejt e lidhur me implementimet e TCP nĂ« bĂ«rthamat e sistemeve operative.

Për të zgjidhur problemin, ne zbatuam QUIC, një protokoll modern me shumëkanalizim, i cili na jep më shumë kontroll mbi performancën e protokollit të transportit. Momentalisht, grupi i punës IETF po standardizon QUIC si HTTP/3.

Pas testeve të hollësishme, arritëm në përfundimin se implementimi i QUIC në aplikacionin tonë do të zvogëlojë vonesat "e bishtit" në krahasim me TCP. Vërejtëm një ulje në përmasën 10-30% për trafikun HTTPS në shembujt e aplikacioneve të shoferit dhe pasagjerit. Gjithashtu, QUIC na dha kontroll të plotë mbi paketat e përdoruesve.

Në këtë artikull ne ndajmë përvojën tonë në optimizimin e TCP për aplikacionet Uber me ndihmën e një staku që mbështet QUIC.

Fjala e fundit e teknikës: TCP

Sot, TCP Ă«shtĂ« protokolli mĂ« i pĂ«rdorur pĂ«r transportin e trafikut HTTPS nĂ« internet. TCP siguron njĂ« flux tĂ« besueshĂ«m byte, duke u pĂ«rballur kĂ«shtu me ngarkesat nĂ« rrjet dhe humbjet nĂ« nivelin e kanalit. PĂ«rdorimi i gjerĂ« i TCP pĂ«r trafikun HTTPS shpjegohet nga pĂ«rhapja e tij (gati çdo OS pĂ«rmban TCP), pĂ«rshkueshmĂ«ria nĂ« shumicĂ«n e infrastrukturĂ«s (pĂ«r shembull, nĂ« balancuesit e ngarkesĂ«s, HTTPS-proxyt dhe CDN) dhe funksionaliteti “out of the box”, i cili Ă«shtĂ« i disponueshĂ«m nĂ« shumicĂ«n e platformave dhe rrjeteve.

PĂ«r shumicĂ«n e pĂ«rdoruesve, aplikacioni ynĂ« pĂ«rdoret nĂ« lĂ«vizje, dhe vonesat ‘tail’ tĂ« TCP ishin shumĂ« larg kĂ«rkesave tĂ« trafikut tonĂ« HTTPS nĂ« kohĂ« reale. ThĂ«nĂ« thjesht, kĂ«tĂ« e pĂ«rjetonin pĂ«rdoruesit nĂ« tĂ« gjithĂ« botĂ«n - nĂ« Figurin 1 pasqyrohen vonesat nĂ« qytete tĂ« mĂ«dha:

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 1. Shkalla e vonesave ‘tail’ ndryshon nĂ« qytetet kryesore tĂ« pranishme nga Uber.

MegjithĂ«se vonesat nĂ« rrjetet indiane dhe braziliane ishin mĂ« tĂ« larta se ato nĂ« SHBA dhe Britani, vonesat ‘tail’ ishin ndjeshĂ«m mĂ« tĂ« larta se mesatarja. Dhe kjo Ă«shtĂ« e vĂ«rtetĂ« edhe pĂ«r SHBA-nĂ« dhe BritaninĂ«.

Performanca e TCP në ajër

TCP është krijuar për rrjetet kabllore, domethënë me theks në lidhjet e parashikueshme. Megjithatë, rrjetet pa tela kanë veçoritë dhe sfidat e tyre. Së pari, rrjetet pa tela janë të ndjeshme ndaj humbjeve për shkak të ndërhyrjeve dhe zbehtësisë së sinjalit. Për shembull, rrjetet Wi-Fi janë të ndjeshme ndaj mikrovaleve, bluetooth-it dhe valëve të tjera radio. Rrjetet celulare vuajnë nga humbja e sinjalit ( humbje rrugës ) për shkak të reflektimit/absorbimit të sinjalit nga objektet dhe ndërtimet, si dhe ngandërhyrjetnga kullat celulare . Kjo çon në vonesa më të mëdha (4-10 herë) dhe më të ndryshme vonesave rrethore (RTT)dhe humbjeve të paketave në krahasim me lidhjen kabllore. Për të luftuar fluktuacionet në bandwidth dhe humbjet, rrjetet celulare zakonisht përdorin buferë të mëdhenj për shpërthimet e trafik. Kjo mund të çojë në qoshe të tepërta, që do të thotë vonesa më të mëdha. Shpeshherë, TCP e interpreton një qoshe të tillë si humbje për shkak të njëkohësisë së rritur, prandaj TCP është i prirur të bëjë retransmision dhe kështu mbush buferin. Kjo problem njihet si teprica e buffering në rrjet, fryrja e buferit

), dhe kjo është një bufferbloat (problem shumë serioz), dhe kjo është shumë një problem serioz internetit modern.

Më në fund, performanca e rrjetit celular ndryshon në varësi të operatorit të lidhjes, rajonit dhe kohës. Në Figurën 2 kemi mbledhur vonesat mesatare të trafikut HTTPS për qelizat në një distancë prej 2 kilometrash. Të dhënat janë mbledhur për dy operatorët më të mëdhenj celularë në Delhi, Indi. Siç mund të vëreni, performanca ndryshon nga qeliza në qelizë. Gjithashtu, performanca e një operatori ndryshon nga performanca e operatorit tjetër. Kjo ndikohet nga faktorë të tillë si modelet e hyrjes në rrjet duke marrë parasysh kohën dhe lokacionin, lëvizshmërinë e përdoruesve, si dhe infrastrukturën rrjetore duke marrë parasysh dendësinë e kullave dhe raportin e llojeve të rrjetit (LTE, 3G, etj.).

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 2. Vonësi mbi një rreth prej 2 kilometrash. Delhi, Indi.

Po ashtu, performanca e rrjeteve celulare ndryshon me kalimin e kohĂ«s. NĂ« FigurĂ«n 3 tregohet vonesa mesatare sipas ditĂ«ve tĂ« javĂ«s. Ne gjithashtu vĂ«zhguam ndryshime nĂ« njĂ« shkallĂ« mĂ« tĂ« vogĂ«l – brenda njĂ« dite dhe njĂ« ore.

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 3. Vonësit përfundimtare mund të ndryshojnë ndjeshëm në ditë të ndryshme, por për të njëjtin operator.

Të gjitha të përmendurat më sipër çojnë në atë që performanca e TCP-së është e parregullt në rrjetet pa tel. Megjithatë, përpara se të kërkojmë alternativa për TCP, ne do të donim të zhvillonim një kuptim të saktë në lidhje me piketat e mëposhtme:

  • a Ă«shtĂ« TCP pĂ«rgjegjĂ«s kryesor pĂ«r vonesat nĂ« tail nĂ« aplikacionet tona?
  • a kanĂ« rrjetet moderne vonesa tĂ« dukshme dhe tĂ« diversifikuara (RTT)?
  • çfarĂ« ndikimi kanĂ« RTT dhe humbjet nĂ« performancĂ«n e TCP-sĂ«?

Analiza e performancës së TCP-së

Për të kuptuar se si ne analizuam performancën e TCP-së, le të kujtojmë shkurtimisht se si TCP transmeton të dhëna nga dërguesi te marresi. Fillimisht, dërguesi krijon një lidhje TCP, duke realizuar një tre-anëtarësh: handshake: dërguesi dërgon një paketë SYN, pret një paketë SYN-ACK nga marresi, pastaj dërgon një paketë ACK. Dy kalime të tjera janë të nevojshme për të krijuar lidhjen TCP. Marrësi konfirmon marrjen e çdo pakete (ACK) për të siguruar një dorëzim të sigurt.

Nëse një paketë ose ACK humbet, dërguesi bën një retransmit pas kohëmatësit (RTO, retransmission timeout). RTO llogaritet dinamikisht, mbi bazën e faktorëve të ndryshëm, për shembull, mbi vonesën e parashikuar RTT midis dërguesit dhe marrësit.

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 4. Këmbimi i paketave përmes TCP/TLS përfshin mekanizmat e retransmitimit.

Për të përcaktuar se si funksiononte TCP në aplikacionet tona, ne ndoqëm paketat TCP nëpërmjet tcpdump për një javë mbi trafikun në prodhim që vjen nga serverët kufitarë indianë. Më pas analizuam lidhjet TCP përmes tcptrace. Për më tepër, ne krijuam një aplikacion Android, i cili dërgon trafik të emuluar në serverin testues, duke imituar sa më afër që të jetë e mundur trafikun real. Smartphone-t me këtë aplikacion u shpërndanë disa punonjësve që mbledhën log-et për disa ditë.

Rezultatet e tĂ« dy eksperimenteve ishin tĂ« lidhura me njĂ«ra-tjetrĂ«n. VĂ«rejtĂ«m vonesa tĂ« larta RTT; vlerat ekstreme ishin pothuajse 6 herĂ« mĂ« tĂ« larta se mesatarja; vlera mesatare e vonesave – mĂ« shumĂ« se 1 sekondĂ«. ShumĂ« lidhje kishin humbje, duke detyruar TCP tĂ« rivendoste 3.5% tĂ« tĂ« gjitha paketave. NĂ« zona me ngarkesĂ«, si aeroportet dhe stacionet, vĂ«rejtĂ«m humbje prej 7%. KĂ«to rezultate vĂ«nĂ« nĂ« dyshim mendimin e zakonshĂ«m se pĂ«rdorimi nĂ« rrjetet celulare skemat e avancuara tĂ« rivendosjes redukojnĂ« ndjeshĂ«m humbjet nĂ« nivelin e transportit. MĂ« poshtĂ« – rezultatet nga testet e aplikacionit-simulues:

Metrikat e rrjetit
Vlerat

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

Shkëputja RTT, sekonda
NĂ« mesatare ~1.2 s

Humbja e paketave në lidhjet e paqëndrueshme
Në mesatare ~3.5% (7% në zona me ngarkesë)

Gati në gjysmën e këtyre lidhjeve kishte të paktën një humbje paketi, kryesisht këto ishin paketa SYN dhe SYN-ACK. Shumica e realizimeve të TCP përdorin një vlerë RTO prej 1 sekonde për paketat SYN, e cila rritet eksponencial për humbjet e mëvonshme. Koha e ngarkesës së aplikacioneve mund të rritet sepse TCP do të kërkojë më shumë kohë për të vendosur lidhjet.

Në rastin e paketa të dhënash, vlerat e larta të RTO zvogëlojnë ndjeshëm shfrytëzimin e dobishëm të rrjetit në prani të humbjeve përkohësore në rrjetet wireless. Ne zbuluam se koha mesatare e ritransmetimit është rreth 1 sekondë me një vonesë të fundit prej gati 30 sekondash. Këto vonesa të larta në nivelin TCP shkaktuan kohëzgjatje HTTPS dhe përsëritje kërkesash, duke rritur edhe më tej vonesën dhe papërfitueshmërinë e rrjetit.

Ndërsa 75-ta përqindje e RTT e matur ishte rreth 425 ms, 75-ta përqindje për TCP ishte gati 3 sekonda. Kjo sugjeron se humbjet detyruan TCP të bënte 7-10 kalime për të transmetuar me sukses të dhënat. Kjo mund të jetë një pasojë e llogaritjes joefektive të RTO-së, dhe incapaciteteve të TCP për të reaguar shpejt ndaj humbjes. paketave të fundit në dritare dhe efektivitetin e algoritmit të menaxhimit të ngarkesës, i cili nuk dallon humbjet pa tel dhe humbjet nga ngarkesa e rrjetit. Më poshtë janë rezultatet e testeve të humbjeve TCP:

Statistika e humbjeve të paketave TCP
Vlera

Përqindja e lidhjeve me të paktën 1 humbje pakete
45%

Përqindja e lidhjeve me humbje gjatë vendosjes së lidhjes
30%

Përqindja e lidhjeve me humbje gjatë shkëmbimit të të dhënave
76%

Shpërndarja e vonesave në ri-transmetim, sekonda [50%, 75%, 95%, 99%]
[1, 2.8, 15, 28]

Shpërndarja e numrit të ri-transmetimeve për një paketë ose segment TCP
[1,3,6,7]

Zbatimi i QUIC

Fillimisht i projektuar nga kompania Google, QUIC Ă«shtĂ« njĂ« protokoll modern transporti me shumĂ« rrjedha, i cili punon mbi UDP. Aktualisht, QUIC Ă«shtĂ« nĂ« procesin e standardizimit (ne kemi raportuar se ekzistojnĂ« si dy versione tĂ« QUIC, ata qĂ« janĂ« kuriozĂ« mund tĂ« kalojnĂ« nĂ« lidhje – shĂ«n. pĂ«rkthyesi). Asht siç tregohet nĂ« FigurĂ«n 5, QUIC ka zĂ«nĂ« vend nĂ«n HTTP/3 (nĂ« tĂ« vĂ«rtetĂ«, HTTP/2 mbi QUIC Ă«shtĂ« HTTP/3, i cili tani po standardizohet me intensitet). Ai pjesĂ«risht zĂ«vendĂ«son nivelet HTTPS dhe TCP, duke pĂ«rdorur UDP pĂ«r tĂ« formuar paketa. QUIC mbĂ«shtet vetĂ«m transferimin e sigurt tĂ« tĂ« dhĂ«nave, pasi TLS Ă«shtĂ« plotĂ«sisht i integruar nĂ« QUIC.

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 5: QUIC funksionon nën HTTP/3, duke zëvendësuar TLS, i cili më parë funksiononte nën HTTP/2.

Më poshtë përmendim arsyet që na bindën të përdorim QUIC për të forcuar TCP:

  • 0-RTT krijimi i lidhjes. QUIC lejon ri-shfrytĂ«zimin e autorizimeve nga lidhjet e mĂ«parshme, duke ulur numrin e dorĂ«zimeve tĂ« sigurisĂ«. NĂ« tĂ« ardhmen TLS1.3 do tĂ« mbĂ«shtesĂ« 0-RTT, megjithatĂ« dorĂ«zimi i TCP me tre palĂ« ende do tĂ« jetĂ« i domosdoshĂ«m.
  • kapĂ«rcimi i bllokimit HoL. HTTP/2 pĂ«rdor njĂ« lidhje TCP pĂ«r çdo klient pĂ«r tĂ« pĂ«rmirĂ«suar performancĂ«n, por kjo mund tĂ« çojĂ« nĂ« bllokimin HoL (head-of-line). QUIC e thjeshton shumĂ«pjesĂ«shen dhe dĂ«rgon kĂ«rkesat nĂ« aplikacion nĂ« mĂ«nyrĂ« tĂ« pavarur nga njĂ«ra-tjetra.
  • menaxhimi i ngarkesĂ«s. QUIC Ă«shtĂ« nĂ« nivelin e aplikacioneve, duke lejuar qĂ« tĂ« pĂ«rditĂ«sohet mĂ« lehtĂ« algoritmi i transportit kryesor qĂ« menaxhon dĂ«rgesat, duke u bazuar nĂ« parametrat e rrjetit (numri i humbjeve ose RTT). Shumica e realizimeve TCP pĂ«rdorin algoritmin CUBIC, i cili nuk Ă«shtĂ« optimal pĂ«r trafikun e ndjeshĂ«m ndaj vonesave. Algoritmet e zhvilluara kohĂ«t e fundit si BBR, modelojnĂ« mĂ« saktĂ« rrjetin dhe optimizojnĂ« vonesat. QUIC lejon pĂ«rdorimin e BBR dhe pĂ«rditĂ«simin e kĂ«tij algoritmi ndĂ«rsa ai pĂ«rmirsohet.
  • pĂ«rmbushja e humbjeve. QUIC shkakton dy TLP (tail loss probe) pĂ«rpara se tĂ« aktivizohet RTO – edhe kur humbjet janĂ« shumĂ« tĂ« ndjeshme. Kjo diferencĂ« nga realizimet TCP. TLP ripĂ«rsĂ«rit kryesisht paketĂ«n e fundit (apo njĂ« tĂ« re, nĂ«se ka) pĂ«r tĂ« nisur njĂ« pĂ«rmbushje tĂ« shpejtĂ«. Trajtimi i vonesave tĂ« fundit Ă«shtĂ« veçanĂ«risht i dobishĂ«m pĂ«r mĂ«nyrĂ«n se si Uber punon me rrjetin, sidomos pĂ«r dĂ«rgesat e shkurtra, episodike dhe tĂ« ndjeshme ndaj vonesave.
  • ACK i optimizuar. Duke qenĂ« se çdo paketĂ« ka njĂ« numĂ«r unik radhĂ«s, nuk ka problem diferencimi paketĂ«ve gjatĂ« retransmetimit tĂ« tyre. Paketat ACK gjithashtu pĂ«rmbajnĂ« kohĂ«n pĂ«r pĂ«rpunimin e paketĂ«s dhe gjenerimin e ACK nga ana e klientit. KĂ«to karakteristika sigurojnĂ« qĂ« QUIC llogarit mĂ« saktĂ« RTT. ACK nĂ« QUIC mbĂ«shtet deri nĂ« 256 gama NACK, duke ndihmuar dĂ«rguesin tĂ« jetĂ« mĂ« i qĂ«ndrueshĂ«m ndaj rregullimit tĂ« paketave dhe tĂ« pĂ«rdorĂ« mĂ« pak byte gjatĂ« procesit. ACK selektive (SACK) nĂ« TCP nuk e zgjidh kĂ«tĂ« problem nĂ« tĂ« gjitha rastet.
  • migrimi i lidhjes. Lidhjet QUIC identificohen me anĂ« tĂ« njĂ« ID-je 64-bit, nĂ« mĂ«nyrĂ« qĂ« nĂ«se klienti ndĂ«rron adresat IP, mund tĂ« vazhdohet me pĂ«rdorimin e ID-sĂ« sĂ« vjetĂ«r tĂ« lidhjes nĂ« adresĂ«n IP tĂ« re, pa ndĂ«rprerje. Kjo Ă«shtĂ« njĂ« praktikĂ« shumĂ« e zakonshme pĂ«r aplikacionet mobile, kur pĂ«rdoruesi kalon midis lidhjeve Wi-Fi dhe celularĂ«ve.

Alternativat e QUIC

Ne shqyrtuam qasje alternative për zgjidhjen e problemit para se të zgjidhnim QUIC.

Së pari, përpoqëm të vendosim TPC PoPs (Pikat e Pranishmës), për të përfunduar lidhjet TCP më afër përdoruesve. Në thelb, PoPs përfundojnë lidhjen TCP me pajisjen celulare më afër rrjetit celular dhe proksyjnë trafikun deri në infrastrukturën origjinale. Duke përfunduar TCP më afër, potencialisht mund të reduktojmë RTT-në dhe të jemi të sigurt se TCP do të përgjigjet më aktivisht ndaj ambientit dinamik wireless. Megjithatë, eksperimentet tona treguan se kryesisht RTT dhe humbjet vijnë nga rrjetet celulare dhe përdorimi i PoPs nuk siguron një përmirësim të konsiderueshëm në performancë.

Ne kemi shqyrtuar gjithashtu optimizimin e parametrave TCP. Konfigurimi i TCP-stack nĂ« serverĂ«t tanĂ« tĂ« kufirit heterogjenĂ« ishte i vĂ«shtirĂ«, pasi TCP ka implementime tĂ« paparashikueshme nĂ« versione tĂ« ndryshme tĂ« OS. Ishte e vĂ«shtirĂ« ta realizonim dhe tĂ« verifikonim konfigurimet e ndryshme tĂ« rrjetit. Konfigurimi i TCP direkt nĂ« pajisjet mobile ishte i pamundur pĂ«r shkak tĂ« mungesĂ«s sĂ« autoritetit. Çka Ă«shtĂ« mĂ« e rĂ«ndĂ«sishme, karakteristika si lidhjet me 0-RTT dhe parashikimi i pĂ«rmirĂ«suar i RTT janĂ« kritikisht tĂ« rĂ«ndĂ«sishme pĂ«r arkitekturĂ«n e protokollit dhe, prandaj, nuk Ă«shtĂ« e mundur tĂ« arrihet njĂ« pĂ«rfitim domethĂ«nĂ«s duke konfiguruar vetĂ«m TCP.

Më në fund, ne vlerësuam disa protokolle të bazuara në UDP, të cilat adresojnë problemet në transmetimin e videove - dëshironim të dinim nëse këto protokolle do të ndihmonin në rastin tonë. Fatkeqësisht, kishte një mungesë të madhe të shumë cilësimeve të sigurisë, dhe gjithashtu kërkonin një lidhje të mëtejshme TCP për metadatate dhe informacionin e menaxhimit.

Hulumtimet tona treguan se QUIC është gati protokolli i vetëm që mund të ndihmojë me problemin e trafikut në Internet, duke marrë parasysh si sigurinë, ashtu edhe performancën.

Integrimi i QUIC në platformë

PĂ«r tĂ« integruar me sukses QUIC dhe pĂ«r tĂ« pĂ«rmirĂ«suar performancĂ«n e aplikacionit nĂ« kushte tĂ« kĂ«qija lidhjeje, ne zĂ«vendĂ«suam stekĂ«n e vjetĂ«r (HTTP/2 mbi TLS/TCP) me protokollin QUIC. Ne angazhuam bibliotekĂ«n rrjetore Cronet nga Projeketet Chromium, e cila pĂ«rmban versionin origjinal, tĂ« Google-it tĂ« protokollit – gQUIC. Kjo implementim gjithashtu pĂ«rmirĂ«sohet vazhdimisht, pĂ«r tĂ« ndjekur specifikimin mĂ« tĂ« fundit tĂ« IETF.

Fillimisht, ne integrojmĂ« Cronet nĂ« aplikacionet tona Android, pĂ«r tĂ« shtuar mbĂ«shtetje pĂ«r QUIC. Integrimi u realizua nĂ« mĂ«nyrĂ« qĂ« tĂ« ulin sa mĂ« shumĂ« kostot e migrimit. NĂ« vend qĂ« tĂ« zĂ«vendĂ«sonim plotĂ«sisht stekĂ«n e vjetĂ«r rrjetore, e cila pĂ«rdorte bibliotekĂ«n OkHttp, ne integrojmĂ« Cronet NË kornizĂ«n e API-sĂ« OkHttp. Duke kryer integrimin nĂ« kĂ«tĂ« mĂ«nyrĂ«, shmangĂ«m ndryshimet nĂ« thirrjet tona rrjetore (tĂ« cilat pĂ«rdorin Retrofit) nĂ« nivelin API.

Në përputhje me qasjen për pajisjet Android, ne implantuam Cronet në aplikacionet Uber për iOS, duke kapur trafikun HTTP nga rrjeti API, duke përdorur NSURLProtocol. Kjo abstraksion, e ofruar nga iOS Foundation, përpunon të dhënat URL specifike për protokollin dhe garanton që ne mund të integrojmë Cronet në aplikacionet tona iOS pa kosto të konsiderueshme migrimi.

Përfundimi QUIC në balancuesit e Google Cloud

Në anën e backend-it, përfundimi QUIC sigurohet nga infrastruktura e Google Cloud Load balancing, e cila përdor alt-svc kryesorë në përgjigjet, për të mbështetur QUIC. Në përgjithësi, çdo kërkesë HTTP merr një kryesor alt-svc nga balancuesi dhe ai e validon mbështetje për QUIC për domainin. Kur klienti Cronet merr përgjigjen HTTP me një kryesor të tillë, ai përdor QUIC për kërkesat e ardhshme HTTP në këtë domain. Sapoky balancuesi përfundon QUIC, infrastruktura jonë e dërgon qartë këtë veprim përmes HTTP2/TCP në qendrat tona të të dhënave.

Performanca: rezultatet

Performanca e ofruar është arsyeja kryesore e kërkimit tonë për protokollin më të mirë. Në fillim, ne krijuam një skenë me emulimin e rrjetit, për të kuptuar se si do të sillet QUIC nën profile të ndryshme rrjetesh. Për të provuar funksionimin e QUIC në rrjete reale, ne kemi kryer eksperimente duke vozitur në New Delhi, duke përdorur trafik rrjeti të emuluar, të ngjashëm me thirrjet HTTP në aplikacionin e udhëtarit.

Eksperimenti 1

Inventari për eksperimentin:

  • aparate testuese Android me steka OkHttp dhe Cronet, pĂ«r tĂ« siguruar se po lĂ«shojmĂ« trafik HTTPS pĂ«rkatĂ«sisht pĂ«r TCP dhe QUIC;
  • server emulimi tĂ« bazuar nĂ« Java, i cili dĂ«rgon tituj HTTPS tĂ« njĂ«jtĂ« nĂ« pĂ«rgjigje dhe ngarkon pajisjet klientike pĂ«r tĂ« marrĂ« kĂ«rkesat nga ato;
  • proksi nĂ« cloud, tĂ« cilat janĂ« fizikisht tĂ« vendosura afĂ«r IndisĂ«, pĂ«r tĂ« pĂ«rfunduar lidhjet TCP dhe QUIC. NdĂ«rsa pĂ«r pĂ«rfundimin e TCP ne pĂ«rdorĂ«m njĂ« proksi tĂ« kthyer nĂ« NGINX, ishte e vĂ«shtirĂ« tĂ« gjenim njĂ« proksi tĂ« kthyer open-source pĂ«r QUIC. Ne e ndĂ«rtuam vetĂ« proksinĂ« e kthyer pĂ«r QUIC, duke pĂ«rdorur stekĂ«n themelore tĂ« QUIC nga Chromium dhe publikuan e kemi bĂ«rĂ« atĂ« open-source nĂ« Chromium.

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancënProtokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 6. Grupi i testit për TCP vs QUIC përbëhej nga pajisje Android me OkHttp dhe Cronet, proksi në cloud për përfundimin e lidhjeve dhe serverin e emulimit.

Eksperimenti 2

Kur Google e bëri QUIC të disponueshëm me Google Cloud Load Balancing, ne kemi përdorur të njëjtin inventar, por me një modifikim: në vend të NGINX-it, morëm balancuesit e Google për të përfunduar lidhjet TCP dhe QUIC nga pajisjet, si dhe për të drejtuar trafikun HTTPS në serverin e simulimit. Balancuesit janë të shpërndarë në të gjithë botën, por përdorin serverin më të afërt PoP me pajisjen (falë gjeolokacionit).

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figurë 7. Në eksperimentin e dytë, dëshiruam të krahasojmë vonesën e përfundimit TCP dhe QUIC: me Google Cloud dhe me proxy-in tonë në përputhje.

Si rezultat, na prisnin disa zbulime:

  • pĂ«rfundimi pĂ«rmes PoP pĂ«rmirĂ«soi performancĂ«n TCP. Pasi balancuesit pĂ«rfundojnĂ« lidhjen TCP mĂ« afĂ«r pĂ«rdoruesve dhe janĂ« optimizuar mirĂ«, kjo ofron RTT mĂ« tĂ« vogla, çka pĂ«rmirĂ«son performancĂ«n TCP. Edhe pse ndikon mĂ« pak nĂ« QUIC, ai gjithsesi e kaloi TCP nĂ« aspektin e uljes sĂ« vonesave tĂ« bishtave (nga 10-30 pĂ«r qind).
  • vonesa e bishtave ndikohet nga kalimet nĂ« rrjet (hops). MegjithĂ«se proxy QUIC tonĂ« ishte mĂ« i largĂ«t nga pajisjet (me njĂ« vonesĂ« prej rreth 50 ms mĂ« tĂ« lartĂ«) se balancuesit e Google, ai ofroi performancĂ« tĂ« ngjashme – njĂ« reduktim prej 15% nĂ« vonesa krahasuar me njĂ« reduktim prej 20% nĂ« percentilin 99 tĂ« TCP. Kjo tregon se kalimi nĂ« milinĂ« e fundit Ă«shtĂ« njĂ« ngushticĂ« (bottleneck) nĂ« funksionimin e rrjetit.

Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancënProtokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 8. Rezultatet e dy eksperimentëve tregojnë se QUIC tejkalon ndjeshëm TCP.

Traffiku operacional

Të frymëzuar nga eksperimentet, implementuam mbështetje për QUIC në aplikacionet tona për Android dhe iOS. Kryem testimin A/B për të përcaktuar ndikimin e QUIC në qytetet ku operon Uber. Në përgjithësi, vëmë re një reduktim të ndjeshëm të vonesave tail në rajone dhe operatorë të ndryshëm komunikimi dhe lloje rrjetesh.

NĂ« grafiket mĂ« poshtĂ« janĂ« treguar pĂ«rqindjet e pĂ«rmirĂ«simeve tĂ« tail (95 dhe 99 percentilet) sipas makroregioneve dhe llojeve tĂ« ndryshme tĂ« rrjetit – LTE, 3G, 2G.
Protokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancënProtokolli QUIC në veprim: si e implementoi Uber për të optimizuar performancën
Figura 9. Në testet operative, QUIC tejkaloi TCP në vonesa.

Vetëm përpara

Mund tĂ« themi se kjo Ă«shtĂ« vetĂ«m fillimi – nxjerrja e QUIC nĂ« prodhim ka ofruar mundĂ«si tĂ« jashtĂ«zakonshme pĂ«r tĂ« pĂ«rmirĂ«suar performancĂ«n e aplikacioneve si nĂ« rrjete stabilĂ« ashtu edhe nĂ« ato tĂ« paqĂ«ndrueshme, nĂ« veçanti:

Rritja e mbulimit

Pasi analizuam performancën e protokollit në trafik të vërtetë, ne vëmë re se rreth 80% e seancave përdorën me sukses QUIC për të gjitha kërkesat, ndërsa 15% e seancave përdorën një kombinim të QUIC dhe TCP. Ne supozojmë se ky kombinim ka ndodhur për shkak se biblioteka Cronet kthehet përsëri në TCP për shkak të skadimit, pasi nuk mund të dallojë ndërprerjet reale të UDP nga kushtet e këqija të rrjetit. Tani jemi në kërkim të një zgjidhjeje për këtë problem, ndërsa punojmë për implementimin e mëtejshëm të QUIC.

Optimizimi i QUIC

Trafiku nga aplikacionet mobile është i ndjeshëm ndaj vonesave, por jo ndaj gjerësisë së brezit. Gjithashtu, aplikacionet tona përdoren kryesisht në rrjetet celulare. Bazuar në eksperimente, vonesat e fundit janë ende të mëdha, edhe pse po përdoren proxy për të përfunduar TCP dhe QUIC afër përdoruesve. Ne po kërkojmë aktivisht mënyra për të përmirësuar menaxhimin e ngarkesës dhe për të rritur efikasitetin e algoritmeve të QUIC për rikuperimin e humbjeve.

Me këto dhe disa përmirësime të tjera, ne planifikojmë të përmirësojmë përvojën e përdoruesit pavarësisht nga rrjeti dhe rajoni, duke bërë transportin e pakove më të lehtë dhe të shumtë për të gjithë botën.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster