Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Mar atá i post is mó, tá fadhb ann le seirbhís dáilte, cuirimis glaoch ar an tseirbhís seo Alvin. An uair seo níor tháinig mé ar an bhfadhb mé féin, chuir na guys ó thaobh na gcliant in iúl dom.

Lá amháin dhúisigh mé chuig ríomhphost míshuaimhneasach mar gheall ar mhoill fhada le Alvin, rud a bhí beartaithe againn a sheoladh go luath amach anseo. Go sonrach, bhí foighne 99ú peircintíl thart ar 50 ms ag an gcliant, rud a bhí i bhfad níos airde ná ár mbuiséad foighne. Ba ábhar iontais é seo mar rinne mé tástáil fhairsing ar an tseirbhís, go háirithe maidir le latency, atá ina ghearán coitianta.

Sular chuir mé Alvin isteach sa tástáil, rith mé go leor turgnaimh le 40k fiosrúchán in aghaidh an tsoicind (QPS), agus léirigh siad go léir latency níos lú ná 10ms. Bhí mé réidh a dhearbhú nár aontaigh mé lena gcuid torthaí. Ach ag breathnú eile ar an litir, thug mé faoi deara rud éigin nua: ní raibh mé tar éis tástáil cruinn a dhéanamh ar na coinníollacha a luaigh siad, bhí a QPS i bhfad níos ísle ná mo cheann féin. Thástáil mé ag 40k QPS, ach ní raibh siad ach ag 1k. Rith mé turgnamh eile, an uair seo le QPS níos ísle, díreach chun appease iad.

Ós rud é go bhfuil mé ag blagáil faoi seo, is dócha gur thuig tú cheana féin go raibh a n-uimhreacha ceart. Thástáil mé mo chliant fíorúil arís agus arís eile, leis an toradh céanna: ní hamháin go méadaíonn líon íseal iarratas an latency, ach méadaíonn sé líon na n-iarratas le latency níos mó ná 10 ms. I bhfocail eile, más rud é ag 40k QPS chuaigh thart ar 50 iarratas in aghaidh an tsoicind thar 50 ms, ansin ag 1k QPS bhí 100 iarratas os cionn 50 ms gach soicind. Paradacsa!

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Caolú síos an cuardach

Nuair a bhíonn fadhb latency i gcóras dáilte ina bhfuil go leor comhpháirteanna, is é an chéad chéim ná liosta gearr d'amhrastach a chruthú. Déanaimis tochailt beagán níos doimhne isteach in ailtireacht Alvin:

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Is pointe tosaigh maith é liosta de na haistrithe I/O críochnaithe (glaonna líonra/cuardaigh diosca, etc.). Déanaimis iarracht a dhéanamh amach cá bhfuil an mhoill. Seachas an I/O soiléir leis an gcliant, glacann Alvin céim bhreise: faigheann sé rochtain ar an stór sonraí. Mar sin féin, oibríonn an stóráil seo sa bhraisle céanna le Alvin, mar sin ba chóir go mbeadh an latency ann níos lú ná leis an gcliant. Mar sin, liosta na ndaoine a bhfuil amhras fúthu:

  1. Glao líonra ón gcliant chuig Alvin.
  2. Glao líonra ó Alvin chuig an stór sonraí.
  3. Cuardaigh ar diosca sa stór sonraí.
  4. Glao líonra ón stóras sonraí chuig Alvin.
  5. Glao líonra ó Alvin chuig cliant.

Déanaimis iarracht roinnt pointí a thrasnú.

Níl aon bhaint ag stóráil sonraí leis

Ba é an chéad rud a rinne mé ná Alvin a thiontú go freastalaí ping-ping nach ndéanann próiseáil ar iarratais. Nuair a fhaigheann sé iarratas, cuireann sé freagra folamh ar ais. Má thagann laghdú ar an bhfoighne, ní haon rud é fabht i bhfeidhmiú Alvin nó stóras sonraí. Sa chéad turgnamh faigheann muid an graf seo a leanas:

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Mar a fheiceann tú, níl aon fheabhsú ar an bhfreastalaí ping-ping. Ciallaíonn sé seo nach méadaíonn an stóras sonraí latency, agus go bhfuil an liosta de na daoine a bhfuil amhras fúthu a ghearradh ina dhá leath:

  1. Glao líonra ón gcliant chuig Alvin.
  2. Glao líonra ó Alvin chuig cliant.

Go hiontach! Tá an liosta ag crapadh go tapa. Shíl mé go raibh mé beagnach figured amach an chúis.

gRPC

Anois an t-am chun tú a chur in aithne do imreoir nua: gRPC. Leabharlann foinse oscailte í seo ó Google le haghaidh cumarsáide inphróiseála RPC... Cé gRPC optamaithe go maith agus a úsáidtear go forleathan, ba é seo mo chéad uair é a úsáid ar chóras den mhéid seo agus bhí mé ag súil go mbeadh mo chur i bhfeidhm suboptimal - a rá a laghad.

infhaighteacht gRPC tháinig ceist nua sa chruach: b’fhéidir gurb é mo chur i bhfeidhm é nó mé féin gRPC is cúis le fadhb latency? Ag cur amhrastach nua leis an liosta:

  1. Glaonn an cliant ar an leabharlann gRPC
  2. leabharlann gRPC cuireann sé glaoch líonra chuig an leabharlann ar an gcliant gRPC ar fhreastalaí
  3. leabharlann gRPC teagmhálacha Alvin (gan oibríocht i gcás freastalaí ping-pong)

Chun smaoineamh a thabhairt duit ar chuma an chóid, níl mórán difríochta idir cur i bhfeidhm mo chliant/Alvin agus na cinn cliant-freastalaí samplaí async.

Nóta: Tá an liosta thuas beagán simplithe mar gheall ar gRPC is féidir do mhúnla snáithithe (teimpléad?) féin a úsáid, ina bhfuil an chruach forghníomhaithe fite fuaite ina chéile gRPC agus cur i bhfeidhm úsáideoirí. Ar mhaithe le simplíocht, déanfaimid cloí leis an múnla seo.

Socróidh próifíliú gach rud

Tar éis na stórtha sonraí a thrasnú amach, shíl mé go raibh mé beagnach críochnaithe: “Tá sé éasca anois! Cuirimis an phróifíl i bhfeidhm agus faigh amach cá bhfuil an mhoill.” mé lucht leanúna mór de phróifíliú beachtas, toisc go bhfuil CPUs an-tapa agus is minic nach bhfuil an tranglam. Tarlaíonn an chuid is mó de na moilleanna nuair a chaithfidh an próiseálaí stop a chur leis an bpróiseáil chun rud éigin eile a dhéanamh. Déanann Próifíliú Cruinn LAP an méid sin a leanas: taifeadann sé gach rud go cruinn lasca comhthéacs agus déanann sé soiléir cá háit a dtarlaíonn moill.

Ghlac mé ceithre phróifíl: le QPS ard (latency íseal) agus le freastalaí ping-pong le QPS íseal (latency ard), ar thaobh an chliaint agus ar an taobh freastalaí. Agus ar eagla na heagla, ghlac mé próifíl próiseálaí samplach freisin. Agus próifílí á gcur i gcomparáid agam, is iondúil go bhféachaim le cruach glaonna aimhrialta. Mar shampla, ar an taobh dona le latency ard tá i bhfad níos mó lasca comhthéacs (10 n-uaire nó níos mó). Ach i mo chás, bhí líon na lasca comhthéacs beagnach mar an gcéanna. Chun mo uafás, ní raibh aon rud suntasach ann.

Dífhabhtaithe Breise

Bhí mé éadóchasach. Ní raibh a fhios agam cad iad na huirlisí eile a d'fhéadfainn a úsáid, agus ba é an chéad phlean eile a bhí agam ná na turgnaimh a dhéanamh arís le héagsúlachtaí éagsúla seachas an fhadhb a dhiagnóiseadh go soiléir.

Cad má

Ón tús, bhí imní orm faoin latency sonrach 50ms. Is am an-mhór é seo. Chinn mé go ngearrfainn smután as an gcód go dtí go bhféadfainn a dhéanamh amach go díreach cén chuid ba chúis leis an earráid seo. Ansin tháinig turgnamh a d'oibrigh.

Mar is gnách, ag breathnú siar is cosúil go raibh gach rud soiléir. Chuir mé an cliant ar an meaisín céanna le Alvin - agus chuir mé iarratas chuig localhost. Agus tá an méadú ar latency imithe!

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Bhí rud éigin cearr leis an líonra.

Foghlaim scileanna innealtóir líonra

Caithfidh mé a admháil: tá mo chuid eolais ar theicneolaíochtaí líonra uafásach, go háirithe ag smaoineamh ar an bhfíric go n-oibrím leo gach lá. Ach ba é an líonra an príomh-amhrastach, agus bhí orm a fháil amach conas é a dhífhabhtú.

Ar ámharaí an tsaoil, is breá leis an Idirlíon iad siúd atá ag iarraidh foghlaim. Ba chosúil gur tús maith go leor é an meascán de ping agus tracert chun fadhbanna iompair líonra a dhífhabhtú.

Ar dtús, sheol mé PSP chuig calafort TCP Alvin. Bhain mé úsáid as na socruithe réamhshocraithe - rud ar bith speisialta. As níos mó ná míle ping, níor sháraigh aon cheann acu 10 ms, cé is moite den chéad cheann le haghaidh téamh suas. Tá sé seo contrártha leis an méadú a breathnaíodh ar fhola de 50 ms ag an 99ú peircintíl: ann, i gcás gach 100 iarratas, ba cheart go mbeadh tuairim is iarratas amháin feicthe againn agus 50 ms an fhoighne.

Ansin rinne mé iarracht tracert: D'fhéadfadh go mbeadh fadhb ag ceann de na nóid feadh an bhealaigh idir Alvin agus an cliant. Ach d'fhill an lorgaire freisin folamh-láimh.

Mar sin níorbh é mo chód, cur i bhfeidhm an GRPC, ná an líonra ba chúis leis an moill. Bhí imní orm nach dtuigfinn seo choíche.

Anois cad OS a bhfuil muid ar

gRPC a úsáidtear go forleathan ar Linux, ach coimhthíocha ar Windows. Chinn mé triail a bhaint as turgnamh, a d'oibrigh: chruthaigh mé meaisín fíorúil Linux, thiomsaigh mé Alvin le haghaidh Linux, agus imscaradh mé é.

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Agus seo an méid a tharla: ní raibh an mhoill chéanna ar fhreastalaí ping-pong Linux mar óstach Windows den chineál céanna, cé nach raibh an fhoinse sonraí difriúil. Tharlaíonn sé go raibh an fhadhb i gcur i bhfeidhm gRPC do Windows.

Algartam Nagle

An uair seo ar fad shíl mé go raibh bratach in easnamh orm gRPC. Anois tuigim cad é i ndáiríre gRPC Tá bratach Windows in easnamh. Fuair ​​​​mé leabharlann inmheánach RPC a raibh muinín agam go n-oibreodh sé go maith do gach bratach a leagtar Winsock. Ansin chuir mé na bratacha seo go léir le gRPC agus imscaradh Alvin ar Windows, i bhfreastalaí ping-pong paiste Windows!

Uaireanta tá níos mó níos lú. Nuair a bhíonn ualach á laghdú mar thoradh ar latency a mhéadú

Beagnach Arna dhéanamh: Thosaigh mé ag baint na mbratach breise ceann i ndiaidh a chéile go dtí gur tháinig an aischéimniú ar ais ionas go bhféadfainn an chúis a aimsiú. Bhí sé infamous TCP_NODELAY, lasc algartam Nagle.

Algartam Nagle iarrachtaí chun líon na bpacáistí a sheoltar thar líonra a laghdú trí mhoill a chur ar tharchur teachtaireachtaí go dtí go sáraíonn méid an phaicéid líon áirithe beart. Cé go bhféadfadh sé seo a bheith deas don úsáideoir meánach, tá sé millteach do fhreastalaithe fíor-ama mar go gcuirfidh an OS moill ar roinnt teachtaireachtaí, rud a fhágann go mbeidh moill ar QPS íseal. U gRPC socraíodh an bhratach seo i bhfeidhmiú Linux le haghaidh soicéid TCP, ach ní i Windows. Tá mé seo ceartaithe.

Conclúid

Leas iomlán a bhaint OS ba chúis leis an latency níos airde ag QPS íseal. Ag breathnú siar air, níor bhraith an phróifíliú latency toisc go ndearnadh é i mód eithne seachas i mód úsáideora. Níl a fhios agam an féidir algartam Nagle a fheiceáil trí ghabhálacha ETW, ach bheadh ​​sé suimiúil.

Maidir leis an turgnamh localhost, is dócha nár bhain sé leis an gcód líonraithe iarbhír agus níor rith algartam Nagle, agus mar sin d'imigh na saincheisteanna latency nuair a shroich an cliant Alvin trí localhost.

An chéad uair eile a fheiceann tú méadú ar latency de réir mar a thagann laghdú ar líon na n-iarratas in aghaidh an tsoicind, ba cheart go mbeadh algartam Nagle ar do liosta daoine a bhfuil amhras fúthu!

Foinse: will.com

Add a comment