Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Sida ku jirta inta badan posts, waxaa jira dhibaato xagga adeegga la qaybiyey, aan wac adeeggan Alvin. Markan anigu ma aan ogaan dhibka naftayda, nimankii ka socday dhinaca macmiilka ayaa ii sheegay.

Maalin maalmaha ka mid ah waxaan ku baraarugay iimayl niyad jabsan sababtoo ah dib u dhac dheer oo Alvin ah, kaas oo aan qorsheynay inaan bilowno mustaqbalka dhow. Gaar ahaan, macmiilku waxa uu la kulmay daahitaanka boqolkiiba 99 ee gobolka 50 ms, oo aad uga sarreeya miisaaniyaddayada daahitaanka. Tani waxay ahayd wax la yaab leh markii aan tijaabiyey adeegga si weyn, gaar ahaan latency, taas oo ah cabasho caadi ah.

Kahor intaanan tijaabin Alvin, waxaan ku orday tijaabooyin badan oo leh 40k weydiimo ilbiriqsikiiba (QPS), dhamaantood waxay muujinayaan daahitaanka wax ka yar 10ms. Waxaan diyaar u ahaa inaan caddeeyo inaanan ku raacsanayn natiijooyinkooda. Laakin markaan si kale u eego warqadda, waxaan ogaaday wax cusub: Anigu si sax ah uma tijaabin shuruudaha ay sheegeen, QPS-goodu aad ayuu uga hooseeyaa kayga. Waxaan ku tijaabiyay 40k QPS, laakiin kaliya 1k. Waxaan tijaabiyay tijaabo kale, markan QPS hoose, si aan u qanciyo.

Tan iyo markii aan blog-ga ku saabsan arrintan, waxay u badan tahay inaad hore u ogaatay inay lambarradoodu sax ahaayeen. Waxaan marar badan tijaabiyay macmiilka farsamada gacanta, natiijooyin isku mid ah: tiro yar oo codsiyo ah kaliya ma kordhinayso daahitaanka, laakiin waxay kordhisaa tirada codsiyada iyada oo latency ka badan 10 ms. Si kale haddii loo dhigo, haddii 40k QPS qiyaastii 50 codsi ilbiriqsikii ay dhaafeen 50 ms, markaas 1k QPS waxaa jiray 100 codsi oo ka sarreeya 50 ms ilbiriqsi kasta. Paradox!

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Soo koobaya raadinta

Markaad la kulanto dhibaatada daahitaanka ee nidaamka qaybsan oo leh qaybo badan, tallaabada ugu horreysa waa in la abuuro liis gaaban oo tuhmanayaal ah. Aan wax yar ka sii qodno dhismaha Alvin:

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Meesha ugu fiican ee laga bilaabo waa liistada I/O ee la dhammeeyay kala-guurka (wacitaannada shabakadaha/fiirinta diskka, iwm.). Aan isku dayno inaan ogaano halka dib u dhacu ku jiro. Marka laga soo tago caddaymaha I/O ee macmiilka, Alvin waxa uu qaaday tallaabo dheeraad ah: waxa uu gelayaa kaydka xogta. Si kastaba ha ahaatee, kaydintani waxay ku shaqaysaa isla kooxda Alvin, markaa daahitaanku waa inuu ka yaraado marka loo eego macmiilka. Haddaba, liiska tuhmanayaasha:

  1. Wicista shabakadda ee macmiilka ilaa Alvin.
  2. Wicitaan shabakad ka Alvin ilaa kaydka xogta.
  3. Ka raadi saxanka ku jira kaydka xogta
  4. Wicitaan shabakadeed oo ka yimid bakhaarka xogta ilaa Alvin.
  5. Wicitaan shabakad ka Alvin oo ku socota macmiilka.

Aan isku dayno inaan qodobada qaar ka gudubno.

Kaydinta xogta waxba kuma laha

Waxa ugu horeeyay ee aan sameeyay waxa aan u badalay Alvin server ping-ping oo aan ka shaqayn codsiyada Marka ay hesho codsi, waxay soo celisaa jawaab madhan. Haddii daahitaanku hoos u dhaco, markaa cilad ku jirta Alvin ama hirgelinta bakhaarka xogta waa wax aan la maqlin. Tijaabada kowaad waxaan helnaa garaafka soo socda:

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Sida aad arki karto, ma jiraan wax horumar ah marka la isticmaalayo server ping-ping. Tani waxay ka dhigan tahay in bakhaarka xogtu aanu kordhin daahida, iyo liiska tuhmanayaasha waa la gooyay kala badh:

  1. Wicista shabakadda ee macmiilka ilaa Alvin.
  2. Wicitaan shabakad ka Alvin oo ku socota macmiilka.

Wayn! Liisku si degdeg ah ayuu u yaraanayaa. Waxaan u maleeyay in aan ku dhawaad ​​ogaaday sababta.

gRPC

Hadda waa waqtigii aan ku bari lahaa ciyaaryahan cusub: gRPC. Kani waa maktabad il furan oo ka timid Google oo loogu talagalay isgaadhsiinta hab-socodka RPC... Inkastoo gRPC si fiican loo hagaajiyay oo si weyn loo isticmaalo, tani waxay ahayd markii iigu horeysay ee aan ku isticmaalo nidaamka cabbirkan oo kale waxaanan filayey in hirgelintaydu ay noqoto mid aad u hooseeya - haddii aan sheego ugu yaraan.

helitaanka gRPC Isku-xidhka ayaa ka dhashay su'aal cusub: malaha waa fulintayda ama naftayda gRPC keenaya dhibaato daahitaan? Ku darida tuhmane cusub liiska:

  1. Macmiilku wuxuu wacaa maktabadda gRPC
  2. Maktabadda gRPC wuxuu sameeyaa wicitaan shabakadeed maktabadda macmiilka gRPC on server
  3. Maktabadda gRPC xiriiri Alvin (ma hawlgalin haddii ay dhacdo server-ka ping-pong)

Si aan fikrad kuu siiyo waxa kood u eg yahay, hirgelinta macmiilka/Alvin wax badan kama duwana kuwa macmiilka-serverka ah. tusaaleyaal async.

Fiiro gaar ah: Liistada sare xoogaa waa la fududeeyay sababtoo ah gRPC waxa uu suurtogal ka dhigayaa in aad isticmaasho moodeelkaaga (template?) nooca dunta, kaas oo xidhmada fulinta ay isku xidhan yihiin gRPC iyo hirgelinta isticmaalayaasha. Si loo fududeeyo, waxaan ku dhejin doonaa qaabkan.

Profiling ayaa hagaajin doona wax walba

Markii aan ka gudbay dukaamada xogta, waxaan u maleeyay inaan ku dhawaaday: "Hadda way fududahay! Aan dabaqno profile-ka oo aan ogaano halka uu dib u dhacu ku yimaado." I taageere weyn oo sifada saxda ah, sababtoo ah CPU-yada aad ayey u dheereeyaan oo inta badan maaha kuwa dhalooyinka ah. Inta badan dib u dhacyadu waxay dhacaan marka processor-ku uu joojiyo farsamaynta si uu wax kale u qabto. Xog-ururinta saxda ah ee CPU ayaa sidaas ah: waxay si sax ah u diiwaangelisaa wax walba furayaasha macnaha guud oo uu caddeeyo halka uu dib u dhac ku yimaado.

Waxaan qaatay afar astaamood: oo leh QPS sare (daahitaan hoose) iyo server-ka ping-pong oo leh QPS hooseeya (daahitaan sare), labadaba dhinaca macmiilka iyo dhinaca server-ka. Oo haddii ay dhacdo, waxaan sidoo kale qaatay muunadda processor-ka. Marka la is barbar dhigo profiles, waxaan inta badan raadiyaa xirmo wicitaan oo aan caadi ahayn. Tusaale ahaan, dhinaca xun ee daahitaanka sare leh waxaa jira beddelo badan oo macnaha guud ah (10 jeer ama ka badan). Laakiin xaaladdeyda, tirada furayaasha macnaha guud ayaa ku dhawaad ​​isku mid ahaa. Naxdinteyda, ma jirin wax muhiim ah halkaas.

Dejinta Dheeraadka ah

Waxaan ahaa quus. Ma garanayo waxa qalabka kale ee aan isticmaali karo, qorshahayga xigana waxa uu ahaa in aan ku celiyo tijaabooyinka kala duwanaanshiyaha halkii aan si cad u ogaan lahaa dhibaatada.

Ka warran haddii

Laga soo bilaabo bilowgii hore, waxaan ka walaacsanahay daahitaanka 50ms ee gaarka ah. Tani waa waqti aad u weyn. Waxaan go'aansaday in aan cutubyada ka gooyo koodhka ilaa aan si sax ah u ogaan karo qaybta khaladkan keentay. Dabadeed waxa timi tijaabo shaqaynaysa.

Sida caadiga ah, dib u eegista waxay u muuqataa in wax walba ay ahaayeen kuwo cad. Waxaan saaray macmiilka isla mishiinka Alvin - oo codsi u diray localhost. Oo kororka daahitaanku wuu dhammaaday!

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Shabakadda wax baa ka khaldamay.

Barashada xirfadaha injineernimada shabakadda

Waa inaan qiraa: aqoontayda tignoolajiyada shabakadu waa mid aad u xun, gaar ahaan tixgelinta xaqiiqda ah inaan la shaqeeyo iyaga maalin kasta. Laakiin shabakadu waxay ahayd tuhmanaha ugu weyn, waxaanan u baahday inaan barto sida loo saxo.

Nasiib wanaag, internetka ayaa jecel kuwa raba inay wax bartaan. Isku darka ping iyo tracert waxay u muuqdeen bilow wanaagsan oo ku filan si loo saxo dhibaatooyinka gaadiidka shabakada.

Marka hore, waxaan bilaabay PsPing dekedda Alvin ee TCP. Waxaan isticmaalay goobaha caadiga ah - ma jiraan wax gaar ah. In ka badan kun pings, midna ma dhaafin 10 ms, marka laga reebo kan ugu horreeya ee kululaynta. Tani waxay lid ku tahay kororka la arkay ee daahitaanka 50 ms ee boqolleyda 99aad: halkaas, 100kii codsi, waa inaan aragnaa hal codsi oo daahida 50 ms.

Markaas ayaan isku dayay raad raac: Waxaa laga yaabaa inay dhibaato ka dhacdo mid ka mid ah noodhka ku yaal jidka u dhexeeya Alvin iyo macmiilka. Laakiin raad-raacuhu wuxuu sidoo kale soo noqday isagoo faro madhan.

Markaa ma ahayn koodkayga, hirgelinta gRPC, ama shabakada waxa sababay daahitaanka. Waxaan bilaabay inaan ka walwalo inaanan waligey fahmi doonin tan.

Hadda waa maxay OS aan ku jirno

gRPC Si weyn loogu isticmaalo Linux, laakiin qalaad Windows. Waxaan go'aansaday in aan tijaabiyo tijaabo, taas oo shaqeysay: Waxaan sameeyay mashiinka farsamada Linux, waxaan u ururiyay Alvin Linux, oo aan geeyay.

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Oo waa tan wixii dhacay: server-ka Linux ping-pong ma lahayn dib u dhac la mid ah kan martigeliyaha Windows la mid ah, in kasta oo isha xogtu aanay ka duwanayn. Waxaa soo baxday in dhibaatadu ay ku jirto hirgelinta gRPC ee Windows.

Algorithm ee Nagle

Intaa oo dhan waxaan u maleeyay in calan iga maqan yahay gRPC. Hadda waan fahmay waxa ay dhab ahaantii tahay gRPC Calanka daaqadaha ayaa maqan Waxaan helay maktabad gudaha RPC ah oo aan ku kalsoonahay inay si fiican u shaqeyn doonto dhammaan calamada la dejiyay Winsock. Ka dib waxaan ku daray dhammaan calamadan gRPC oo waxaan geeyey Alvin Windows, gudaha server-ka Windows ping-pong-ga la dhejiyay!

Mararka qaarkood wax badan ayaa ka yar. Marka la dhimo natiijada culeyska waxay kordhisaa daahitaanka

Ku dhawaad La Sameeyey: Waxaan bilaabay in aan hal mar ka saaro calamadii lagu daray ilaa uu dib u soo noqday si aan u caddeeyo sababta. Waxay ahayd magac xumo TCP_NODELAY, Nagle's algorithm bedelka.

Algorithm ee Nagle isku dayo lagu dhimo tirada xirmooyinka loo soo diro shabakada iyadoo dib loo dhigayo gudbinta fariimaha ilaa cabbirka baakidhku uu dhaafo tiro cayiman oo bytes ah. In kasta oo tani ay u fiicnaan karto celceliska isticmaaleha, waxay wax u dhimaysaa adeegayaasha-waqtiga-dhabta ah maadaama OS-gu dib u dhigi doono fariimaha qaar, taasoo keenaysa hoos u dhaca QPS. U gRPC Calankan waxaa loo dejiyay hirgelinta Linux ee saldhigyada TCP, laakiin maaha gudaha Windows. waxaan ahay kan la saxay.

gunaanad

Daahitaanka sare ee QPS hoose waxaa sababay hagaajinta OS. Dib-u-eegis, xog-ururintu ma aysan ogaan daahitaanka sababtoo ah waxaa lagu sameeyay qaabka kernel halkii laga gali lahaa qaabka isticmaalaha. Ma garanayo haddii algorithm Nagle lagu arki karo iyada oo la adeegsanayo ETW, laakiin waxay noqon lahayd mid xiiso leh.

Dhanka tijaabada localhost, waxay u badan tahay inaysan taaban koodhka isku xidhka dhabta ah iyo Nagle's algorithmamka ma soconin, markaa arimaha daahitaanka ayaa tagay markii macmiilku gaadhay Alvin iyada oo loo marayo localhost.

Marka xigta ee aad aragto korodhka daahitaanka iyadoo tirada codsiyada ilbiriqsikii ay hoos u dhacayso, algorithm Nagle waa inuu ku jiraa liiskaaga tuhmanayaasha!

Source: www.habr.com

Add a comment