Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Kòm nan pifò pòs yo, gen yon pwoblèm ak yon sèvis distribye, ann rele sèvis sa a Alvin. Fwa sa a, mwen pa t 'dekouvwi pwoblèm nan tèt mwen, mesye yo ki soti nan bò kliyan enfòme m'.

Yon jou mwen te leve ak yon imèl mekontant akòz reta long ak Alvin, ke nou te planifye lanse nan fiti prè. Espesyalman, kliyan an te fè eksperyans 99yèm percentile latansi nan rejyon an nan 50 ms, byen pi wo pase bidjè latansi nou an. Sa a te etone kòm mwen teste sèvis la anpil, espesyalman sou latansi, ki se yon plent komen.

Anvan mwen te mete Alvin nan tès, mwen te fè yon anpil nan eksperyans ak 40k demann pou chak segonn (QPS), tout ki montre latansi nan mwens pase 10ms. Mwen te pare pou deklare ke mwen pa dakò ak rezilta yo. Men, lè m te pran yon lòt gade nan lèt la, mwen te remake yon bagay nouvo: mwen pa t egzakteman teste kondisyon yo te mansyone yo, QPS yo te pi ba anpil pase mwen. Mwen teste nan 40k QPS, men yo sèlman nan 1k. Mwen te fè yon lòt eksperyans, fwa sa a ak yon QPS pi ba, jis pou apeze yo.

Depi mwen blog sou sa a, ou te pwobableman deja kalkile ke nimewo yo te dwat. Mwen teste kliyan vityèl mwen an plizyè fwa, ak menm rezilta a: yon ti kantite demann non sèlman ogmante latansi a, men ogmante kantite demann ak yon latansi ki gen plis pase 10 ms. Nan lòt mo, si nan 40k QPS apeprè 50 demann pou chak segonn depase 50 ms, Lè sa a, nan 1k QPS te gen 100 demann pi wo a 50 ms chak segonn. Paradoks!

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Limite rechèch la

Lè yo fè fas ak yon pwoblèm latansi nan yon sistèm distribye ak anpil konpozan, premye etap la se kreye yon lis kout sispèk. Ann fouye yon ti kras pi fon nan achitekti Alvin a:

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Yon bon pwen depa se yon lis tranzisyon I/O ki konplete (apèl rezo/chèch disk, elatriye). Ann eseye konnen ki kote reta a ye. Anplis I/O evidan ak kliyan an, Alvin pran yon etap siplemantè: li jwenn aksè nan magazen an done. Sepandan, depo sa a opere nan menm gwoup ak Alvin, kidonk latansi a ta dwe mwens pase ak kliyan an. Se konsa, lis la nan sispèk:

  1. Rezo apèl de kliyan pou Alvin.
  2. Rezo apèl soti nan Alvin nan magazen done a.
  3. Chèche sou disk nan magazen done a.
  4. Rezo apèl soti nan depo done a Alvin.
  5. Rezo apèl de Alvin pou yon kliyan.

Ann eseye raye kèk pwen.

Depo done pa gen anyen fè ak li

Premye bagay mwen te fè se te konvèti Alvin nan yon sèvè ping-ping ki pa trete demann. Lè li resevwa yon demann, li retounen yon repons vid. Si latansi a diminye, Lè sa a, yon ensèk nan Alvin oswa aplikasyon depo done pa gen anyen ki pa janm tande. Nan premye eksperyans la nou jwenn graf sa a:

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Kòm ou ka wè, pa gen okenn amelyorasyon lè w ap itilize sèvè ping-ping la. Sa vle di ke depo done a pa ogmante latansi, epi lis sispèk yo koupe an mwatye:

  1. Rezo apèl de kliyan pou Alvin.
  2. Rezo apèl de Alvin pou yon kliyan.

Gwo! Lis la ap diminye byen vit. Mwen te panse mwen te prèske kalkile rezon an.

gRPC

Kounye a se moman pou prezante w yon nouvo jwè: gRPC. Sa a se yon bibliyotèk sous louvri soti nan Google pou kominikasyon nan pwosesis kp. Malgre ke gRPC byen optimize ak lajman itilize, sa a se te premye fwa mwen itilize li sou yon sistèm nan gwosè sa a epi mwen te espere aplikasyon mwen an pa pi bon - pou di omwen.

disponiblite gRPC nan chemine a te bay monte yon nouvo kesyon: petèt li nan aplikasyon mwen an oswa tèt mwen gRPC ki lakòz pwoblèm latansi? Ajoute yon nouvo sispèk nan lis la:

  1. Kliyan an rele bibliyotèk la gRPC
  2. bibliyotèk gRPC fè yon apèl rezo nan bibliyotèk la sou kliyan an gRPC sou sèvè
  3. bibliyotèk gRPC kontakte Alvin (pa gen okenn operasyon nan ka ta gen sèvè ping-pong)

Pou ba ou yon lide sou kisa kòd la sanble, aplikasyon kliyan mwen an / Alvin pa anpil diferan de sa yo kliyan-sèvè. egzanp async.

Remak: Lis ki pi wo a se yon ti jan senplifye paske gRPC fè li posib pou sèvi ak pwòp ou a (modèl?) Threading modèl, nan ki pil ekzekisyon an mare gRPC ak aplikasyon itilizatè. Pou dedomajman pou senplisite, nou pral rete sou modèl sa a.

Profilage pral ranje tout bagay

Lè m te kwaze magazen done yo, mwen te panse mwen te prèske fini: "Kounye a, li fasil! Ann aplike pwofil la epi chèche konnen ki kote reta a rive." mwen gwo fanatik profilage presizyon, paske CPU yo trè vit epi pi souvan yo pa anbouteyaj la. Pifò reta rive lè processeur a dwe sispann pwosesis pou fè yon lòt bagay. Egzat CPU Profiling fè sa sèlman: li avèk presizyon anrejistre tout bagay chanjman kontèks epi fè li klè ki kote reta rive.

Mwen te pran kat pwofil: ak QPS segondè (latansi ki ba) ak yon sèvè ping-pong ak QPS ki ba (latansi segondè), tou de sou bò kliyan ak sou bò sèvè. Ak jis nan ka, mwen menm tou mwen te pran yon pwofil echantiyon processeur. Lè w konpare pwofil, mwen anjeneral gade pou yon pil apèl anomali. Pou egzanp, sou bò a move ak gwo latansi gen anpil plis switch kontèks (10 fwa oswa plis). Men, nan ka mwen an, kantite switch kontèks te prèske menm bagay la. Pou mwen laterè, pa te gen anyen enpòtan la.

Debogaj adisyonèl

Mwen te dezespere. Mwen pa t 'konnen ki lòt zouti mwen te kapab itilize, ak pwochen plan mwen an te esansyèlman repete eksperyans yo ak varyasyon diferan olye ke klèman dyagnostike pwoblèm nan.

E si

Depi nan kòmansman an, mwen te konsène sou latansi espesifik 50ms la. Sa a se yon tan trè gwo. Mwen deside ke mwen ta koupe moso soti nan kòd la jiskaske mwen te kapab konnen egzakteman ki pati ki te lakòz erè sa a. Lè sa a, te vini yon eksperyans ki te travay.

Kòm dabitid, nan retrospective li sanble ke tout bagay te evidan. Mwen mete kliyan an sou menm machin ak Alvin - epi voye yon demann bay localhost. Ak ogmantasyon nan latansi a ale!

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Yon bagay te mal ak rezo a.

Aprann ladrès enjenyè rezo

Mwen dwe admèt: konesans mwen nan teknoloji rezo se terib, sitou konsidere lefèt ke mwen travay avèk yo chak jou. Men, rezo a te premye sispèk la, e mwen te bezwen aprann kijan pou debogaj li.

Erezman, entènèt la renmen moun ki vle aprann. Konbinezon an nan ping ak tracert te sanble tankou yon bon ase kòmanse debogaj pwoblèm transpò rezo.

Premyerman, mwen te lanse PsPing nan pò TCP Alvin a. Mwen te itilize paramèt yo default - pa gen anyen espesyal. Nan plis pase mil ping, pa gen okenn depase 10 ms, eksepsyon premye a pou chofe. Sa a se kontrè ak ogmantasyon obsève nan latansi 50 ms nan 99yèm percentile la: la, pou chak 100 demann, nou ta dwe wè apeprè yon demann ak yon latansi 50 ms.

Lè sa a, mwen te eseye trasert: Ka gen yon pwoblèm nan youn nan nœuds yo sou wout ki genyen ant Alvin ak kliyan an. Men, traser la tou retounen ak men vid.

Se konsa, se pa kòd mwen an, aplikasyon gRPC la, oswa rezo a ki te lakòz reta a. Mwen te kòmanse enkyete ke mwen pa ta janm konprann sa a.

Koulye a, sou ki OS nou ye

gRPC lajman itilize sou Linux, men ekzotik sou Windows. Mwen deside eseye yon eksperyans, ki te travay: mwen te kreye yon machin vityèl Linux, konpile Alvin pou Linux, epi deplwaye li.

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Men sa ki te pase: Linux ping-pong sèvè a pa t 'gen menm reta ak yon lame Windows menm jan an, byenke sous done a pa t' diferan. Li sanble ke pwoblèm nan se nan aplikasyon an gRPC pou Windows.

Algorithm Nagle a

Pandan tout tan sa a mwen te panse mwen te manke yon drapo gRPC. Koulye a, mwen konprann sa li vrèman ye gRPC Fenèt drapo a manke. Mwen te jwenn yon bibliyotèk entèn RPC ke mwen te gen konfyans ta travay byen pou tout drapo mete Winsock. Lè sa a, mwen te ajoute tout drapo sa yo nan gRPC epi deplwaye Alvin sou Windows, nan yon sèvè ping-pong Windows patched!

Pafwa plis se mwens. Lè diminye chaj rezilta nan ogmante latansi

Prèske Fè: Mwen te kòmanse retire drapo ki te ajoute yo youn pa youn jiskaske regresyon an te retounen pou mwen te kapab idantifye kòz la. Li te trist TCP_NODELAY, switch algorithm Nagle a.

Algorithm Nagle a eseye diminye kantite pake ki voye sou yon rezo pa retade transmisyon mesaj yo jiskaske gwosè pake a depase yon sèten kantite byte. Pandan ke sa a ka bèl pou itilizatè an mwayèn, li se destriktif pou sèvè an tan reyèl kòm eksplwatasyon an pral retade kèk mesaj, sa ki lakòz lag sou QPS ki ba. U gRPC drapo sa a te mete nan aplikasyon Linux pou TCP sockets, men se pa nan Windows. Mwen se sa a korije.

Konklizyon

Latansi ki pi wo nan QPS ki ba te koze pa optimize OS. An retrospective, profilage pa t 'detekte latansi paske li te fè nan mòd nwayo olye ke nan mòd itilizatè. Mwen pa konnen si algorithm Nagle a ka obsève atravè ETW kaptire, men li ta enteresan.

Kòm pou eksperyans nan localhost, li pwobableman pa t 'manyen kòd rezo aktyèl la ak algorithm Nagle a pa t' kouri, se konsa pwoblèm yo latansi yo te ale lè kliyan an te rive jwenn Alvin atravè localhost.

Pwochen fwa ou wè yon ogmantasyon nan latansi kòm kantite demann pou chak segonn diminye, algorithm Nagle a ta dwe sou lis sispèk ou yo!

Sous: www.habr.com

Add nouvo kòmantè