Sida ku jirta
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!
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:
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:
- Wicista shabakadda ee macmiilka ilaa Alvin.
- Wicitaan shabakad ka Alvin ilaa kaydka xogta.
- Ka raadi saxanka ku jira kaydka xogta
- Wicitaan shabakadeed oo ka yimid bakhaarka xogta ilaa Alvin.
- 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:
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:
- Wicista shabakadda ee macmiilka ilaa Alvin.
- 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
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:
- Macmiilku wuxuu wacaa maktabadda
gRPC
- Maktabadda
gRPC
wuxuu sameeyaa wicitaan shabakadeed maktabadda macmiilkagRPC
on server - 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.
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 yihiingRPC
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
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!
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
Markaas ayaan isku dayay
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.
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
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
gRPC
Calankan waxaa loo dejiyay hirgelinta Linux ee saldhigyada TCP, laakiin maaha gudaha Windows. waxaan ahay kan
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
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