SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Falanqaynta waxqabadka iyo hagaajintu waa qalab awood leh oo lagu xaqiijiyo u hoggaansanaanta waxqabadka macaamiisha.

Falanqaynta waxqabadka waxaa loo isticmaali karaa in lagu hubiyo caqabadaha barnaamijka iyadoo la adeegsanayo hab cilmiyeysan oo lagu tijaabinayo tijaabooyinka hagaajinta. Maqaalkani waxa uu qeexayaa habka guud ee falanqaynta waxqabadka iyo hagaajinta, iyada oo la isticmaalayo Go webserver tusaale ahaan.

Tag ayaa si gaar ah ugu fiican halkan sababtoo ah waxay leedahay qalabyo sifayaal ah pprof maktabadda caadiga ah.

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Istaraatiijiyada

Aynu samayno liis kooban oo ku saabsan falanqaynta qaabdhismeedkayaga. Waxaan isku dayi doonaa inaan isticmaalno xogta qaar si aan go'aanno u gaarno halkii aan isbeddel ku sameyn lahayn ku saleysan dareen ama malo. Si aan tan u samayno waxaan sameyn doonaa sidan:

  • Waxaan go'aamineynaa xuduudaha hagaajinta (shuruudaha);
  • Waxaan xisaabineynaa culeyska wax kala iibsiga ee nidaamka;
  • Waxaan samaynaa imtixaanka (abuuro xogta);
  • Waxaan u kuurgalaynaa;
  • Waxaan falanqeyneynaa - dhammaan shuruudaha ma buuxiyeen?
  • Si cilmiyeysan ayaan u dhignay, malo-awaal;
  • Waxaan sameynaa tijaabo si aan u tijaabino mala-awaalkan.

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Qaab dhismeedka server HTTP fudud

Maqaalkan waxaan u isticmaali doonaa server HTTP yar Golang. Dhammaan koodka maqaalkan waa la heli karaa halkan.

Codsiga la falanqeeyay waa server HTTP ah oo codeeya Postgresql codsi kasta. Intaa waxaa dheer, waxaa jira Prometheus, node_exporter iyo Grafana ururinta iyo soo bandhigida codsiyada iyo cabbirada nidaamka.

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Si loo fududeeyo, waxaan tixgelineynaa in cabirka toosan (iyo fududaynta xisaabinta) adeeg kasta iyo xog ururin la wada geeyo:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Qeexida yoolalka

Tallaabadan, waxaan go'aansanay yoolka. Maxaan isku dayeynaa inaan falanqeyno? Sideen ku ogaan karnaa marka ay tahay waqtigii la dhammaan lahaa? Maqaalkan, waxaan ku qiyaasi doonaa inaan haysano macaamiil iyo in adeegayagu uu farsamayn doono 10 codsi ilbiriqsikii.

Π’ Buugga SRE Google Hababka xulashada iyo qaabaynta ayaa si faahfaahsan looga dooday. Aynu sidaas oo kale samayno oo aynu dhisno moodallo:

  • Latency: 99% codsiyada waa in lagu dhammeeyaa in ka yar 60ms;
  • Qiimaha: Adeeggu waa inuu cunaa lacagta ugu yar ee aan u maleyneyno inay macquul tahay. Si tan loo sameeyo, waxaan kor u qaadeynaa wax soo saarka;
  • Qorshaynta Kartida: Waxay u baahan tahay fahamka iyo diiwaan gelinta inta jeer ee arjiga loo baahan doono in la socodsiiyo, oo ay ku jiraan guud ahaan shaqeynta cabbiridda, iyo inta jeer ee loo baahan doono si loo buuxiyo culeyska bilowga ah iyo shuruudaha bixinta shaqo ka joojinta n+1.

Latency waxay u baahan kartaa wanaajin marka lagu daro falanqaynta, laakiin wax-soo-saarka ayaa si cad u baahan in la falanqeeyo. Markaad isticmaalayso habka SRE SLO, codsiga daahitaanka wuxuu ka yimaadaa macaamilka ama ganacsiga, oo uu matalo milkiilaha alaabta. Adeegeena ayaa fulin doona waajibaadkan bilowgiiba iyada oo aan wax habayn ah!

Dejinta jawi tijaabo ah

Iyada oo la kaashanayo jawi tijaabo ah, waxaan awood u yeelan doonaa inaan saarno culeys la qiyaasay nidaamkayaga. Falanqaynta, xogta ku saabsan waxqabadka adeegga shabakadda ayaa la soo saari doonaa.

Culayska wax kala iibsiga

Deegaankan ayaa isticmaala Vegeta si loo abuuro heerka codsiga HTTP caadada u ah ilaa laga joojiyo:

$ make load-test LOAD_TEST_RATE=50
echo "POST http://localhost:8080" | vegeta attack -body tests/fixtures/age_no_match.json -rate=50 -duration=0 | tee results.bin | vegeta report

U fiirsashada

Culayska kala wareejinta ayaa la adeegsan doonaa wakhtiga ay shaqaynayso. Marka lagu daro codsiga (tirada codsiyada, daahitaanka jawaab celinta) iyo nidaamka hawlgalka (xusuusta, CPU, IOPS), cabirka arjiga, sifada codsiga ayaa la maamuli doonaa si loo fahmo halka ay dhibaato ka haysato iyo sida wakhtiga CPU loo isticmaalo.

Faafinta

Profiling waa nooc ka mid ah cabbiraadda kuu ogolaanaysa inaad aragto halka uu wakhtiga CPU socdo marka codsigu socdo. Waxay kuu oggolaaneysaa inaad si sax ah u go'aamiso meesha iyo inta jeer ee processor-ku ku baxo:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Xogtan waxaa loo isticmaali karaa inta lagu jiro falanqaynta si loo helo aragti ku saabsan wakhtiga CPU ee lumay iyo shaqada aan loo baahnayn ee la qabanayo. Go (pprof) waxa uu soo saari karaa profiles oo uu u sawiri karaa garaafyo olol ah iyada oo la isticmaalayo qalab caadi ah. Waxaan ka hadli doonaa isticmaalkooda iyo hagaha habaynta dambe ee maqaalka.

Fulinta, fiirsashada, falanqaynta.

Aynu samayno tijaabo Waanu fulin doonaa, kormeeri doonaa, oo falanqayn doonaa ilaa aanu ku qanacno waxqabadka. Aynu doorano qiimaha culeyska hooseeya si aan u dabaqno si aan u helno natiijooyinka indha-indheynta koowaad. Tallaabo kasta oo xigta waxaynu ku kordhin doonaa culayska iyada oo la adeegsanayo arrin miisaan leh, oo lagu dooranayo waxoogaa kala duwanaansho ah. Socod kasta oo tijaabinta culeyska waxaa la sameeyaa iyadoo tirada codsiyada la hagaajiyay: make load-test LOAD_TEST_RATE=X.

50 codsi ilbiriqsikii

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

U fiirso labada garaaf ee ugu sarreeya. Dhinaca bidix ee sare waxay muujinaysaa in codsigayagu ka shaqeeyo 50 codsi ilbiriqsi kasta (waxay u malaynaysaa) midigta sare waxay muujinaysaa muddada codsi kasta. Labada qayboodba waxay naga caawiyaan inaan eegno oo aan falanqayno haddii aan ku jirno xuduudaheena waxqabadka iyo in kale. Khadka cas ee garaafka Codsiga HTTP Latency wuxuu muujinayaa SLO 60ms. Khadku wuxuu muujinayaa inaan aad uga hooseyno waqtiga jawaabta ugu badan.

Aynu eegno dhinaca kharashka:

10000 codsi ilbiriqsikii / 50 codsi server = 200 server + 1

Weli waan hagaajin karnaa tiradan.

500 codsi ilbiriqsikii

Waxyaabo aad u xiiso badan ayaa bilaaba inay dhacaan marka culaysku gaadho 500 codsi ilbiriqsikii:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Mar labaad, garaafka bidix ee sare waxaad ku arki kartaa in codsigu duubayo culeyska caadiga ah. Haddii taasi aysan dhicin, waxaa dhibaato ka jirta server-ka uu codsigu ku socdo. Garaafka daahitaanka jawaabtu waxa uu ku yaalaa dhinaca midigta sare, taas oo muujinaysa in 500 codsi ilbiriqsi kasta ay keentay dib u dhac jawaabeed 25-40ms. Boqolkiiba 99aad ayaa wali si fiican ugu habboon 60ms SLO ee kor lagu doortay.

Dhanka kharashka:

10000 codsi ilbiriqsikii / 500 codsi server = 20 server + 1

Wax walba weli waa la hagaajin karaa.

1000 codsi ilbiriqsikii

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Daahfurka weyn! Codsigu waxa uu muujinayaa in ay habaysay 1000 codsi ilbiriqsikii, laakiin xadka daahitaanka waxa jebiyay SLO. Tan waxa lagu arki karaa xariiqda p99 ee garaafka midig ee sare. In kasta oo xaqiiqda ah in khadka p100 uu aad uga sarreeyo, dib-u-dhacyada dhabta ah ayaa ka sarreeya ugu badnaan 60ms. Aynu dhexda u galno xog-ururinta si aan u ogaano waxa dhabta ah ee codsigu sameeyo.

Faafinta

Xog-ururinta, waxaanu dejinnay culayska 1000 codsi ilbiriqsikii, ka dibna isticmaal pprof si aad u qabsato xogta si aad u ogaato halka uu codsiga ku bixinayo wakhtiga CPU. Tan waxa lagu samayn karaa iyada oo la dhaqaajiyo barta dhamaadka HTTP pprof, ka dibna, adigoo culeys ku jira, keydso natiijooyinka adigoo isticmaalaya curl:

$ curl http://localhost:8080/debug/pprof/profile?seconds=29 > cpu.1000_reqs_sec_no_optimizations.prof

Natiijooyinka waxaa loo soo bandhigi karaa sidan:

$ go tool pprof -http=:12345 cpu.1000_reqs_sec_no_optimizations.prof

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Garaafku wuxuu muujinayaa meesha iyo inta uu arjigu ku bixiyo wakhtiga CPU. Laga soo bilaabo sharaxaad ka Brendan Gregg:

dhidibka X waa tirada tirada dadka, oo loo kala soocay alifbeetada (tani maaha wakhti), dhidibka Y waxa uu muujinayaa gunta gunta, iyada oo laga tirinayo eber xagga [sare]. leydi kastaa waa qaab isku xiran. Qaabka ballaaran ee jirku, inta badan wuxuu ku jiraa xirmooyinka. Waxa sare ayaa ku shaqeeya CPU, waxa hoosena waa canaasirta ilmaha. Midabada inta badan macneheedu maaha, laakiin si fudud ayaa loo doortaa si aan kala sooc lahayn si loo kala saaro.

Falanqaynta - mala awaal

Hagaajinta, waxaan diirada saari doonaa isku dayida inaan helno waqtiga CPU ee lumay. Waxaan raadin doonaa ilaha ugu badan ee kharashaadka aan faa'iido lahayn oo aan ka saarno. Hagaag, marka la eego in sifayntu ay si sax ah u muujinayso meesha saxda ah ee codsigu ku bixinayo waqtigiisa processor-ka, waxaa laga yaabaa inaad sameyso dhowr jeer, waxaad sidoo kale u baahan doontaa inaad bedesho koodhka isha codsiga, dib u bilaw imtixaanada oo aad aragto in waxqabadka uu ku wajahan yahay bartilmaameedka.

Iyadoo la raacayo talooyinka Brendan Gregg, waxaanu akhrin doonaa shaxda kor ilaa hoos. Xariiq kastaa waxa uu soo bandhigaa qaab xidhmo (wicitaan hawleed). Sadarka koowaad waa barta laga soo galo barnaamijka, waalidka wicitaanada kale (si kale haddii loo dhigo, dhammaan wicitaannada kale waxay ku dhejin doonaan guntooda). Xariiqda xigta waa ka duwan tahay:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Haddii aad ku dul rogto cursorka magaca shaqada garaafka, wadarta wakhtiga ay ku jirtay kaydka inta lagu gudajiray khaladku waa la soo bandhigi doonaa. Shaqada HTTPServe waxay ahayd 65% wakhtiga, hawlaha kale ee runtime runtime.mcall, mstart ΠΈ gc, waxay qaadatay wakhtiga intiisa kale. Xaqiiqo xiiso leh: 5% wadarta wakhtiga waxaa lagu bixiyaa weydiimaha DNS:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Ciwaanada uu barnaamijku raadiyo waxa iska leh Postgresql. Guji FindByAge:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Waxa xiiso leh, barnaamijku wuxuu muujinayaa, mabda 'ahaan, inay jiraan saddex ilood oo waaweyn oo ku dara dib u dhac: furitaanka iyo xidhitaanka isku xirka, codsashada xogta, iyo ku xidhidhiyaha kaydka xogta. Jaantusku wuxuu muujinayaa in codsiyada DNS, furitaanka iyo xidhitaanka isku xidhka ay qaataan ilaa 13% wadarta wakhtiga fulinta.

Mala-awaal: Dib u isticmaalida isku xirka iyadoo la isticmaalayo isku-dubarid waa inay hoos u dhigtaa wakhtiga hal cod HTTP ah, taasoo u ogolaanaysa soo saarid sare iyo daahitaan hoose.

Dejinta codsiga - tijaabi

Waxaan cusbooneysiineynaa koodhka isha, isku day inaad ka saarto xiriirka Postgresql codsi kasta. Doorashada ugu horeysa waa in la isticmaalo barkadda isku xirka heerka codsiga. Tijaabadaan waxaan aan dhigno isku xirka isku xirka iyadoo la adeegsanayo darawalka sql si aad u tagto:

db, err := sql.Open("postgres", dbConnectionString)
db.SetMaxOpenConns(8)

if err != nil {
   return nil, err
}

Fulinta, fiirsashada, falanqaynta

Ka dib marka dib loo bilaabo imtixaanka 1000 codsi ilbiriqsi kasta, way caddahay in heerarka daahitaanka p99 ay ku soo noqdeen caadi iyagoo SLO ah 60ms!

Waa maxay kharashku?

10000 codsi ilbiriqsikii / 1000 codsi server = 10 server + 1

Aynu samayno xitaa si ka sii wanaagsan!

2000 codsi ilbiriqsikii

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Laba-laabashada rarka waxay muujinaysaa wax la mid ah, garaafka bidix ee sare wuxuu muujinayaa in codsigu uu maareeyo codsiyada 2000 ilbiriqsi kasta, p100 wuxuu ka hooseeyaa 60ms, p99 waxay ku qanacsan tahay SLO.

Dhanka kharashka:

10000 codsi ilbiriqsikii / 2000 codsi server = 5 server + 1

3000 codsi ilbiriqsikii

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Halkan codsigu wuxuu ka baaraandegi karaa 3000 oo codsi iyadoo latency p99 ka yar 60ms. SLO laguma xad-gudbin, kharashkuna waa sida soo socota:

10000 codsi ilbiriqsikii / 3000 codsi halkii server = 4 server + 1 (qoraagu wuxuu soo ururiyay, qiyaastii turjumaan)

Aynu isku dayno wareeg kale oo falanqayn ah.

Falanqaynta - mala awaal

Waxaan aruurineynaa oo muujineynaa natiijooyinka qaladka arjiga 3000 codsi ilbiriqsikii:

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Wali 6% wakhtiga waxa lagu bixiyaa samaynta isku xidhka. Dejinta barkadda ayaa horumarisay waxqabadka, laakiin waxaad weli arki kartaa in codsigu uu sii wado inuu ka shaqeeyo abuurista xiriiryo cusub oo database ah.

Mala-awaal: Xiriirinta, inkastoo ay jirto barkad, weli waa la tuuray oo la nadiifiyaa, markaa codsigu wuxuu u baahan yahay inuu dib u dejiyo. Dejinta tirada xidhiidhada la sugayo cabbirka barkadda waa in ay ka caawisaa daahitaanka iyada oo la yareynayo wakhtiga arjigu ku bixiyo abuurista xidhiidh.

Dejinta codsiga - tijaabi

Isku day inaad ku rakibto MaxIdleConns oo le'eg cabbirka barkadda (sidoo kale lagu sharraxay halkan):

db, err := sql.Open("postgres", dbConnectionString)
db.SetMaxOpenConns(8)
db.SetMaxIdleConns(8)
if err != nil {
   return nil, err
}

Fulinta, fiirsashada, falanqaynta

3000 codsi ilbiriqsikii

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

p99 waxay ka yar tahay 60ms oo ay aad uga yar tahay p100!

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

Hubinta garaafka ololka waxay muujinaysaa in xidhiidhku aanu sii muuqanayn! Aynu si faahfaahsan u hubino pg(*conn).query - sidoo kale ma ogaan karno xiriirka halkan lagu sameeyay.

SRE: Falanqaynta Waxqabadka. Habka isku xidhka iyadoo la isticmaalayo adeegaha shabakada fudud ee Go

gunaanad

Falanqaynta waxqabadku waxay muhiim u tahay fahamka in rajada macaamiisha iyo shuruudaha aan shaqaynayn la buuxinayo. Falanqaynta isbarbardhigga indha-indhaynta iyo rajada macaamiisha waxay kaa caawin kartaa go'aaminta waxa la aqbali karo iyo waxa aan ahayn. Go wuxuu bixiyaa qalab awood leh oo lagu dhisay maktabadda caadiga ah taasoo ka dhigaysa falanqaynta mid fudud oo la heli karo.

Source: www.habr.com

Add a comment