Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Njengangaphakathi okuthunyelwe okuningi, kunenkinga ngenkonzo esabalalisiwe, asibize le nkonzo i-Alvin. Kulokhu angizange ngithole inkinga mina, abafana abavela ohlangothini lwamakhasimende bangazisa.

Ngelinye ilanga ngavuka ngathola i-imeyili enganelisekile ngenxa yokubambezeleka isikhathi eside no-Alvin, esasihlele ukuyethula maduze nje. Ngokukhethekile, iklayenti lihlangabezane ne-99th percentile latency endaweni engu-50 ms, ngaphezu kwesabelomali sethu sokubambezeleka. Lokhu bekumangaza njengoba ngivivinya kakhulu insizakalo, ikakhulukazi ku-latency, okuyisikhalazo esijwayelekile.

Ngaphambi kokuthi ngifake u-Alvin ekuhlolweni, ngenze izivivinyo eziningi ngemibuzo engu-40k ngomzuzwana (QPS), konke okubonisa ukubambezeleka okungaphansi kuka-10ms. Bengizimisele ukusho ukuthi angihambisani nemiphumela yabo. Kodwa uma ngibheka enye incwadi, ngabona okuthile okusha: Ngangingazange ngihlole izimo ababezishilo, i-QPS yabo yayiphansi kakhulu kuneyami. Ngihlole ku-40k QPS, kodwa kuphela ku-1k. Ngenze esinye isilingo, kulokhu nge-QPS ephansi, ukuze nje ngibashweleze.

Njengoba ngibhuloga ngalokhu, mhlawumbe usuvele ubonile ukuthi izinombolo zabo zazilungile. Ngihlole iklayenti lami elibonakalayo ngokuphindaphindiwe, ngomphumela ofanayo: inombolo ephansi yezicelo ayikhulisi nje kuphela ukubambezeleka, kodwa yandisa inani lezicelo ngokubambezeleka okungaphezu kuka-10 ms. Ngamanye amazwi, uma ku-40k QPS mayelana nezicelo ezingu-50 ngomzuzwana zedlula 50 ms, bese ku-1k QPS kube nezicelo eziyi-100 ezingaphezu kuka-50 ms njalo ngomzuzwana. Indida!

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Ukunciphisa ukusesha

Lapho ubhekene nenkinga yokubambezeleka ohlelweni olusabalalisiwe olunezingxenye eziningi, isinyathelo sokuqala ukwakha uhlu olufushane lwabasolwa. Ake sijule kancane ekwakhiweni kwe-Alvin:

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Isiqalo esihle siwuhlu lwezinguquko ze-I/O eziqediwe (izingcingo zenethiwekhi/ukubheka idiski, njll.). Ake sizame ukuthola ukuthi ukubambezeleka kukuphi. Ngaphandle kwe-I/O esobala neklayenti, u-Alvin uthatha isinyathelo esengeziwe: ufinyelela esitolo sedatha. Nokho, lesi sitoreji sisebenza kuqoqo elifanayo njenge-Alvin, ngakho ukubambezeleka lapho kufanele kube kuncane kuneklayenti. Ngakho, uhlu lwabasolwa:

  1. Ucingo lwenethiwekhi olusuka kuklayenti luya ku-Alvin.
  2. Ucingo lwenethiwekhi olusuka ku-Alvin luya esitolo sedatha.
  3. Sesha kudiski esitolo sedatha.
  4. Ucingo lwenethiwekhi olusuka endaweni yokugcina idatha luya ku-Alvin.
  5. Ucingo lwenethiwekhi olusuka ku-Alvin luya kuklayenti.

Ake sizame ukucacisa amaphuzu athile.

Ukugcinwa kwedatha akuhlangene nakho

Into yokuqala engiyenzile ukuguqula u-Alvin abe yiseva ye-ping-ping engacubunguli izicelo. Uma ithola isicelo, ibuyisela impendulo engenalutho. Uma ukubambezeleka kuncipha, khona-ke iphutha ekusetshenzisweni kwe-Alvin noma i-warehouse akuyona into engazwakali. Esivivinyweni sokuqala sithola igrafu elandelayo:

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Njengoba ubona, akukho ngcono lapho usebenzisa iseva ye-ping-ping. Lokhu kusho ukuthi indawo yokugcina idatha ayikhuphuli ukubambezeleka, futhi uhlu lwabasolwa lunqanyulwa phakathi:

  1. Ucingo lwenethiwekhi olusuka kuklayenti luya ku-Alvin.
  2. Ucingo lwenethiwekhi olusuka ku-Alvin luya kuklayenti.

Kuhle! Uhlu luncipha ngokushesha. Ngacabanga ukuthi ngase ngicishe ngasithola isizathu.

gRPC

Manje yisikhathi sokukwazisa kumdlali omusha: gRPC. Le yilabhulali yomthombo ovulekile evela kwa-Google yokuxhumana okuphakathi nenqubo I-RPC. Noma gRPC ilungiselelwe kahle futhi isetshenziswa kabanzi, lesi bekuyisikhathi sami sokuqala ngiyisebenzisa ohlelweni lwalo sayizi futhi bengilindele ukuthi ukuqaliswa kwami ​​​​kungabi nokulungile - ukusho okungenani.

Ukutholakala gRPC esitakini kubangele umbuzo omusha: mhlawumbe ukuqaliswa kwami ​​​​noma yimina gRPC kubangela inkinga yokubambezeleka? Ukwengeza umsolwa omusha ohlwini:

  1. Iklayenti lishayela umtapo wolwazi gRPC
  2. umtapo gRPC yenza ucingo lwenethiwekhi oluya kulabhulali yeklayenti gRPC kuseva
  3. umtapo gRPC othintana nabo u-Alvin (akukho msebenzi uma kwenzeka kuba neseva ye-ping-pong)

Ukukunikeza umbono wokuthi ikhodi ibukeka kanjani, ukuqaliswa kweklayenti lami/u-Alvin akuhlukile kakhulu kumaseva weklayenti. izibonelo ze-async.

Qaphela: Uhlu olungenhla lwenziwe lula kancane ngoba gRPC yenza kube nokwenzeka ukusebenzisa eyakho (isifanekiso?) imodeli yokulutha, lapho isitaki sokwenza sihlanganiswe gRPC kanye nokuqaliswa komsebenzisi. Ukuze kube lula, sizonamathela kule modeli.

Ukwenza iphrofayela kuzolungisa yonke into

Ngemva kokuqeda izitolo zedatha, ngacabanga ukuthi ngase ngiqedile: β€œManje sekulula! Masisebenzise iphrofayili futhi sithole ukuthi ukubambezeleka kwenzeka kuphi. " I umlandeli omkhulu wokunemba kwephrofayela, ngoba ama-CPU ayashesha kakhulu futhi ngokuvamile awawona umgoqo. Ukubambezeleka okuningi kwenzeka lapho iphrosesa kufanele imise ukucubungula ukuze yenze enye into. Iphrofayili ye-CPU Enembile yenza lokho kanye: iqopha yonke into ngokunembile ukushintsha kokuqukethwe futhi ikwenza kucace lapho ukubambezeleka kwenzeka khona.

Ngithathe amaphrofayili amane: nge-QPS ephezulu (i-latency ephansi) kanye neseva ye-ping-pong ene-QPS ephansi (i-latency ephezulu), kokubili ohlangothini lweklayenti kanye nohlangothi lweseva. Futhi uma kwenzeka, ngiphinde ngathatha iphrofayili yesampula yeprosesa. Uma ngiqhathanisa amaphrofayili, ngivamise ukubheka isitaki sekholi esixakile. Isibonelo, ohlangothini olubi olunokubambezeleka okuphezulu kunezinguquko eziningi zomongo (izikhathi eziyi-10 noma ngaphezulu). Kodwa esimweni sami, inani lokushintshwa komongo lalicishe lifane. Ngethuka, kwakungekho lutho olubalulekile lapho.

Ukulungisa iphutha okwengeziwe

Ngangiphelelwe ithemba. Bengingazi ukuthi yimaphi amanye amathuluzi engingawasebenzisa, futhi uhlelo lwami olulandelayo kwakuwukuphinda ukuhlola ngokuhlukahluka okuhlukile kunokuhlonza inkinga ngokucacile.

Kuthiwani uma

Kusukela ekuqaleni, bengikhathazekile nge-latency ethize ye-50ms. Lesi yisikhathi esikhulu kakhulu. Nginqume ukuthi ngizosika izingcezu kukhodi kuze kube yilapho ngikwazi ukuthola ukuthi iyiphi ingxenye edala leli phutha. Kwabe sekufika ukuhlolwa okwasebenza.

Njengenjwayelo, uma ubheka emuva kubonakala sengathi yonke into yayisobala. Ngibeke iklayenti emshinini ofanayo no-Alvin - futhi ngathumela isicelo ku- localhost. Futhi ukwanda kwe-latency kuphelile!

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Kukhona okungahambanga kahle ngenethiwekhi.

Ukufunda amakhono kanjiniyela wenethiwekhi

Kumelwe ngivume: ulwazi lwami lobuchwepheshe benethiwekhi lubi, ikakhulukazi uma ngicabangela iqiniso lokuthi ngisebenza nabo nsuku zonke. Kepha inethiwekhi ibingumsolwa ophambili, futhi bengidinga ukufunda ukuyisusa iphutha.

Ngenhlanhla, i-inthanethi ithanda labo abafuna ukufunda. Inhlanganisela ye-ping ne-tracert ibonakala njengesiqalo esihle ngokwanele sokulungisa izinkinga zokuthutha zenethiwekhi.

Okokuqala, ngethula I-PsPing ethekwini lika-Alvin TCP. Ngisebenzise izilungiselelo ezizenzakalelayo - akukho okukhethekile. Kuma-pings angaphezu kwenkulungwane, akukho neyodwa eyeqile ku-10 ms, ngaphandle kweyokuqala yokufudumala. Lokhu kuphambene nokwenyuka okuphawuliwe kokubambezeleka okungu-50 ms kumaphesenti angama-99: lapho, kuzo zonke izicelo eziyi-100, bekufanele sibone mayelana nesicelo esisodwa esine-latency engu-50 ms.

Ngabe sengizama ithrekhi: Kungase kube nenkinga kwenye yezindawo eziseduze nomzila phakathi kwe-Alvin neklayenti. Kodwa nomkhondo wabuya elambatha.

Ngakho kwakungeyona ikhodi yami, ukuqaliswa kwe-gRPC, noma inethiwekhi ebibangela ukubambezeleka. Ngangiqala ukukhathazeka ngokuthi ngeke ngikuqonde lokhu.

Manje yini OS esikuyo

gRPC isetshenziswa kabanzi ku-Linux, kepha ayifani kuWindows. Nganquma ukuzama ukuhlola, okwasebenza: Ngakha umshini we-Linux, ngahlanganisa i-Alvin ye-Linux, futhi ngayisebenzisa.

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Futhi nakhu okwenzekile: iseva ye-Linux ping-pong ayizange ibe nokubambezeleka okufanayo njengomsingathi we-Windows ofanayo, nakuba umthombo wedatha wawungehlukile. Kuvele ukuthi inkinga isekusetshenzisweni kwe-gRPC yeWindows.

I-algorithm ye-Nagle

Sonke lesi sikhathi ngangicabanga ukuthi ngigeja ifulege gRPC. Manje sengiyaqonda ukuthi kuyini ngempela gRPC Ifulegi le-Windows alikho. Ngithole umtapo wezincwadi wangaphakathi we-RPC engangizethemba ukuthi uzosebenza kahle kuwo wonke amafulegi asethiwe I-Winsock. Ngabe sengingeza wonke lawa mafulegi ku-gRPC futhi ngafaka u-Alvin ku-Windows, kuseva ye-ping-pong ye-Windows efakwe nezimagqabhagqabha!

Ngezinye izikhathi okuningi kuncane. Lapho unciphisa umphumela womthwalo ekwandeni kokubambezeleka

Cishe Kwenziwe: Ngiqale ukususa amafulegi angeziwe elilodwa ngesikhathi kwaze kwaba yilapho ukuhlehla kubuya khona ukuze ngikhombe imbangela. Kwakungadumile TCP_NODELAY, ukushintsha kwe-algorithm ye-Nagle.

I-algorithm ye-Nagle imizamo yokunciphisa inani lamaphakethe athunyelwa ngenethiwekhi ngokubambezela ukudluliswa kwemiyalezo kuze kube yilapho usayizi wephakethe wedlula inani elithile lamabhayithi. Nakuba lokhu kungase kube kuhle kumsebenzisi ojwayelekile, kuyalimaza kumaseva esikhathi sangempela njengoba i-OS izobambezela eminye imilayezo, ibangele ukugoba ku-QPS ephansi. U gRPC leli fulegi lamiswa ekusetshenzisweni kwe-Linux kumasokhethi e-TCP, kodwa hhayi ku-Windows. Yimi lo kulungisiwe.

isiphetho

Ukubambezeleka okuphezulu ku-QPS ephansi kudalwe ukulungiselelwa kwe-OS. Uma sibheka emuva, ukwenza iphrofayela akubonanga ukubambezeleka ngoba kwenziwe ngemodi ye-kernel esikhundleni sokungena imodi yomsebenzisi. Angazi noma i-algorithm kaNagle ingabonwa ngokuthwebula kwe-ETW, kodwa kungathakazelisa.

Ngokuqondene nokuhlolwa kokusingatha kwendawo, kungenzeka ukuthi akuzange kuthinte ikhodi yokuxhumana yangempela futhi i-algorithm ye-Nagle ayizange isebenze, ngakho-ke izinkinga zokubambezeleka zaphela lapho iklayenti lifika ku-Alvin nge-localhost.

Ngokuzayo lapho ubona ukwanda kokubambezeleka njengoba inani lezicelo ngomzuzwana lincipha, i-algorithm ye-Nagle kufanele ibe sohlwini lwakho lwabasolwa!

Source: www.habr.com

Engeza amazwana