Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Bħal fi il-biċċa l-kbira tal-karigi, hemm problema b'servizz distribwit, ejja nsejħu dan is-servizz Alvin. Din id-darba ma skoprejtx il-problema jien stess, infurmawni l-guys min-naħa tal-klijent.

Ġurnata waħda qomt b’email disgruntled minħabba dewmien twil ma’ Alvin, li ppjanajna li nniedu fil-futur qarib. Speċifikament, il-klijent esperjenza latenza tad-99 perċentil fir-reġjun ta '50 ms, ferm ogħla mill-baġit ta' latenza tagħna. Dan kien sorprendenti peress li ttestjajt is-servizz b'mod estensiv, speċjalment fuq il-latency, li huwa ilment komuni.

Qabel ma poġġejt lil Alvin fl-ittestjar, għamilt ħafna esperimenti b'40k mistoqsijiet kull sekonda (QPS), kollha li juru latenza ta 'inqas minn 10ms. Kont lest niddikjara li ma kontx naqbel mar-riżultati tagħhom. Imma ħares ieħor lejn l-ittra, ndunajt xi ħaġa ġdida: ma kontx ittestja eżatt il-kundizzjonijiet li semmew, il-QPS tagħhom kien ferm aktar baxx minn tiegħi. Ittestjajt f'40k QPS, iżda huma biss f'1k. Jiena għamilt esperiment ieħor, din id-darba b'QPS aktar baxx, biss biex iserraħhom.

Peress li qed nibbloggja dwar dan, inti probabilment diġà dehret li n-numri tagħhom kienu tajbin. Ittestjajt il-klijent virtwali tiegħi għal darb'oħra, bl-istess riżultat: numru baxx ta 'talbiet mhux biss iżid il-latency, iżda jżid in-numru ta' talbiet b'latency ta 'aktar minn 10 ms. Fi kliem ieħor, jekk f'40k QPS madwar 50 talba kull sekonda qabżu l-50 ms, allura f'1k QPS kien hemm 100 talba 'l fuq minn 50 ms kull sekonda. Paradoss!

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Tidjiq it-tfittxija

Meta jiffaċċjaw problema ta 'latenza f'sistema distribwita b'ħafna komponenti, l-ewwel pass huwa li tinħoloq lista qasira ta' suspettati. Ejja nħaffru ftit aktar fil-fond fl-arkitettura ta 'Alvin:

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Punt ta' tluq tajjeb huwa lista ta' tranżizzjonijiet I/O kompluti (sejħiet tan-netwerk/lokki tad-disk, eċċ.). Ejja nippruvaw insemmu fejn hu d-dewmien. Minbarra l-I/O ovvju mal-klijent, Alvin jieħu pass żejjed: jaċċessa l-maħżen tad-dejta. Madankollu, din il-ħażna topera fl-istess cluster bħal Alvin, għalhekk il-latency għandu jkun inqas milli mal-klijent. Allura, il-lista tas-suspettati:

  1. Sejħa tan-netwerk mill-klijent lil Alvin.
  2. Sejħa tan-netwerk minn Alvin għall-maħżen tad-dejta.
  3. Fittex fuq disk fil-maħżen tad-data.
  4. Sejħa tan-netwerk mill-maħżen tad-dejta lil Alvin.
  5. Sejħa tan-netwerk minn Alvin lil klijent.

Ejja nippruvaw naqsbu xi punti.

Il-ħażna tad-dejta m'għandha x'taqsam xejn magħha

L-ewwel ħaġa li għamilt kienet tikkonverti Alvin għal server ping-ping li ma jipproċessax it-talbiet. Meta tirċievi talba, tirritorna tweġiba vojta. Jekk il-latency tonqos, allura bug fl-implimentazzjoni ta 'Alvin jew maħżen tad-dejta m'hu xejn li ma jinstema'. Fl-ewwel esperiment irridu nġibu l-graff li ġej:

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Kif tistgħu taraw, m'hemm l-ebda titjib meta tuża s-server ping-ping. Dan ifisser li l-maħżen tad-dejta ma jżidx il-latenza, u l-lista tas-suspettati tinqata’ bin-nofs:

  1. Sejħa tan-netwerk mill-klijent lil Alvin.
  2. Sejħa tan-netwerk minn Alvin lil klijent.

Kbir! Il-lista qed tiċkien malajr. Ħsibt li kont kważi dehret ir-raġuni.

gRPC

Issa huwa ż-żmien li nintroduċik plejer ġdid: gRPC. Din hija librerija open source minn Google għall-komunikazzjoni waqt il-proċess CPR. Għalkemm gRPC ottimizzat tajjeb u użat ħafna, din kienet l-ewwel darba li użajtha fuq sistema ta' dan id-daqs u stennejt li l-implimentazzjoni tiegħi tkun subottimali - biex ngħidu l-inqas.

disponibbiltà gRPC fil-munzell ta lok għal mistoqsija ġdida: forsi hija l-implimentazzjoni tiegħi jew jien stess gRPC tikkawża problema ta 'latency? Żieda ta' suspettat ġdid mal-lista:

  1. Il-klijent isejjaħ il-librerija gRPC
  2. Librerija gRPC jagħmel sejħa tan-netwerk lill-librerija fuq il-klijent gRPC fuq is-server
  3. Librerija gRPC jikkuntattja lil Alvin (l-ebda operazzjoni f'każ ta' server tal-ping-pong)

Biex nagħtik idea ta’ kif jidher il-kodiċi, l-implimentazzjoni tal-klijent/Alvin tiegħi mhijiex differenti ħafna minn dawk tal-klijent-server eżempji asinkroniċi.

Nota: Il-lista ta 'hawn fuq hija daqsxejn simplifikata għaliex gRPC jagħmilha possibbli li tuża l-mudell tal-kamin (mudell?) tiegħek stess, li fih il-munzell tal-eżekuzzjoni huwa marbut ma' xulxin gRPC u l-implimentazzjoni tal-utent. Għall-fini tas-sempliċità, aħna se nżommu ma 'dan il-mudell.

Il-profiling se jiffissa kollox

Wara li qtajt il-ħwienet tad-dejta, ħsibt li kont lest: “Issa faċli! Ejja napplikaw il-profil u nsiru nafu fejn iseħħ id-dewmien.” I fan kbir ta 'profili ta' preċiżjoni, Minħabba li s-CPUs huma mgħaġġla ħafna u ħafna drabi mhumiex il-konġestjoni. Ħafna dewmien iseħħ meta l-proċessur irid iwaqqaf l-ipproċessar biex jagħmel xi ħaġa oħra. Preċiża CPU Profiling tagħmel dan: tirrekordja b'mod preċiż kollox swiċċijiet tal-kuntest u tagħmilha ċara fejn iseħħ id-dewmien.

Ħadt erba' profili: b'QPS għoli (latenza baxxa) u b'server tal-ping-pong b'QPS baxx (latenza għolja), kemm fuq in-naħa tal-klijent kif ukoll fuq in-naħa tas-server. U fil-każ, ħadt ukoll profil tal-proċessur tal-kampjun. Meta nqabbel il-profili, normalment infittex munzell ta 'sejħiet anomali. Pereżempju, fuq in-naħa ħażina b'latenza għolja hemm ħafna aktar swiċċijiet tal-kuntest (10 darbiet jew aktar). Iżda fil-każ tiegħi, in-numru ta 'swiċċijiet tal-kuntest kien kważi l-istess. Għall-orrur tiegħi, ma kien hemm xejn sinifikanti hemmhekk.

Debugging Addizzjonali

Kont iddisprat. Ma kontx naf liema għodod oħra stajt nuża, u l-pjan li jmiss tiegħi kien essenzjalment li nirrepeti l-esperimenti b'varjazzjonijiet differenti aktar milli niddijanjostika b'mod ċar il-problema.

Kieku

Mill-bidu nett, kont imħasseb dwar il-latenza speċifika ta '50ms. Dan huwa żmien kbir ħafna. Iddeċidejt li nqatta' biċċiet mill-kodiċi sakemm stajt nifhem eżattament liema parti kienet qed tikkawża dan l-iżball. Imbagħad daħal esperiment li ħadem.

Bħas-soltu, b’ħarsa lura jidher li kollox kien ovvju. Poġġejt il-klijent fuq l-istess magna bħal Alvin - u bgħatt talba lil localhost. U ż-żieda fil-latency marret!

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Xi ħaġa kienet ħażina fin-netwerk.

Tagħlim tal-ħiliet ta' inġinier tan-netwerk

Irrid nammetti: l-għarfien tiegħi tat-teknoloġiji tan-netwerk huwa terribbli, speċjalment meta wieħed iqis il-fatt li naħdem magħhom kuljum. Iżda n-netwerk kien is-suspettat ewlieni, u kelli bżonn nitgħallem kif niddibaggjah.

Fortunatament, l-Internet iħobb lil dawk li jridu jitgħallmu. Il-kombinazzjoni ta 'ping u tracert dehret bidu tajjeb biżżejjed għad-debugging tal-problemi tat-trasport tan-netwerk.

L-ewwelnett, nediet PsPing lejn il-port TCP ta' Alvin. Jien użajt is-settings default - xejn speċjali. Minn aktar minn elf ping, ħadd ma qabeż l-10 ms, bl-eċċezzjoni tal-ewwel wieħed għat-tisħin. Dan huwa kuntrarju għaż-żieda osservata fil-latency ta '50 ms fid-99 perċentil: hemm, għal kull 100 talba, għandna rajna madwar talba waħda b'latency ta' 50 ms.

Imbagħad ippruvajt traċċatur: Jista 'jkun hemm problema f'wieħed min-nodi tul ir-rotta bejn Alvin u l-klijent. Iżda t-tracer ukoll irritorna b’idejhom vojta.

Allura ma kienx il-kodiċi tiegħi, l-implimentazzjoni tal-gRPC, jew in-netwerk li kien qed jikkawża d-dewmien. Kont qed nibda ninkwieta li qatt ma se nifhem dan.

Issa fuq liema OS qegħdin

gRPC użat ħafna fuq Linux, iżda eżotiku fuq Windows. Iddeċidejt li nipprova esperiment, li ħadem: ħloqt magna virtwali Linux, ikkumpilajt Alvin għal Linux, u skjerajtha.

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

U hawn x'ġara: is-server tal-ping-pong Linux ma kellux l-istess dewmien bħal host Windows simili, għalkemm is-sors tad-dejta ma kienx differenti. Jirriżulta li l-problema tinsab fl-implimentazzjoni tal-gRPC għall-Windows.

Algoritmu ta 'Nagle

Dan il-ħin kollu ħsibt li kont nieqes bandiera gRPC. Issa nifhem x’inhu tassew gRPC Il-bandiera tal-Windows hija nieqsa. Sibt librerija interna RPC li kont kunfidenti li taħdem tajjeb għall-bnadar kollha stabbiliti Winsock. Imbagħad żidt dawn il-bnadar kollha mal-gRPC u skjerajt Alvin fuq il-Windows, f'server tal-ping-pong Windows patched!

Kultant aktar huwa inqas. Meta t-tnaqqis tat-tagħbija jirriżulta f'żieda fil-latenza

Kważi Magħmul: Bdejt inneħħi l-bnadar miżjuda waħda waħda sakemm ir-rigressjoni reġgħet lura sabiex inkun nista' nidentifika l-kawża. Kien infami TCP_NODELAY, Is-swiċċ tal-algoritmu ta' Nagle.

Algoritmu ta 'Nagle jipprova jnaqqas in-numru ta' pakketti mibgħuta fuq netwerk billi jdewwem it-trażmissjoni ta' messaġġi sakemm id-daqs tal-pakkett jaqbeż ċertu numru ta' bytes. Filwaqt li dan jista 'jkun sabiħ għall-utent medju, huwa distruttiv għal servers f'ħin reali peress li l-OS se jdewwem xi messaġġi, u jikkawża dewmien fuq QPS baxx. U gRPC din il-bandiera ġiet stabbilita fl-implimentazzjoni tal-Linux għal sockets TCP, iżda mhux fil-Windows. Jien dan ikkoreġut.

Konklużjoni

Il-latency ogħla f'QPS baxx kienet ikkawżata mill-ottimizzazzjoni tal-OS. Retrospettivament, il-profiling ma skoprax latency minħabba li sar fil-modalità kernel aktar milli fi mod tal-utent. Ma nafx jekk l-algoritmu ta 'Nagle jistax jiġi osservat permezz ta' qbid ETW, iżda jkun interessanti.

Fir-rigward tal-esperiment localhost, probabbilment ma messx il-kodiċi tan-netwerking attwali u l-algoritmu ta 'Nagle ma damx, għalhekk il-kwistjonijiet ta' latency marru meta l-klijent laħaq Alvin permezz ta 'localhost.

Ladarba li jmiss tara żieda fil-latenza hekk kif in-numru ta' talbiet kull sekonda jonqos, l-algoritmu ta' Nagle għandu jkun fuq il-lista tiegħek ta' suspettati!

Sors: www.habr.com

Żid kumment