SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Uirlis chumhachtach is ea anailís agus tiúnadh feidhmíochta chun comhlíonadh feidhmíochta a fhíorú do chliaint.

Is féidir anailís feidhmíochta a úsáid chun scrogaill i gclár a sheiceáil trí chur chuige eolaíoch a chur i bhfeidhm chun turgnaimh thiúnta a thástáil. Sainmhíníonn an t-alt seo cur chuige ginearálta maidir le hanailís feidhmíochta agus tiúnadh, ag baint úsáide as freastalaí gréasáin Go mar shampla.

Tá Go háirithe go maith anseo toisc go bhfuil uirlisí próifílithe aige pprof sa leabharlann chaighdeánach.

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

straitéis

Déanaimis liosta achoimre a chruthú dár n-anailís struchtúrach. Déanfaimid iarracht roinnt sonraí a úsáid chun cinntí a dhéanamh in ionad athruithe a dhéanamh bunaithe ar intuition nó buille faoi thuairim. Chun é seo a dhéanamh déanfaimid é seo:

  • Socraímid na teorainneacha leas iomlán a bhaint (riachtanais);
  • Ríomhaimid an t-ualach idirbhirt don chóras;
  • Déanaimid an tástáil (sonraí a chruthú);
  • Breathnaímid;
  • Déanaimid anailís - an gcomhlíontar na ceanglais go léir?
  • Socraímid é go heolaíoch, déanaimid hipitéis;
  • Déanaimid turgnamh chun an hipitéis seo a thástáil.

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Ailtireacht Freastalaí HTTP Simplí

Don alt seo úsáidfimid freastalaí HTTP beag i Golang. Is féidir gach cód ón alt seo a fháil anseo.

Is é an feidhmchlár atá á anailísiú ná freastalaí HTTP a dhéanann vótaíocht do Postgresql do gach iarratas. Ina theannta sin, tá Prometheus, nód_onnmhaireoir agus Grafana ann chun méadracht feidhmchláir agus córais a bhailiú agus a thaispeáint.

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Chun simpliú a dhéanamh, measaimid go n-imscartar gach seirbhís agus bunachar sonraí le chéile le haghaidh scálaithe cothrománach (agus ríomhanna a shimpliú):

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Spriocanna a shainiú

Ag an gcéim seo, déanaimid cinneadh ar an sprioc. Cad atáimid ag iarraidh a anailísiú? Cén chaoi a bhfuil a fhios againn nuair a bheidh sé in am deireadh a chur leis? San Airteagal seo, déanfaimid a shamhlú go bhfuil cliaint againn agus go bpróiseálfaidh ár seirbhís 10 iarratas in aghaidh an tsoicind.

В Leabhar SRE Google Déantar mionphlé ar mhodhanna roghnaithe agus samhaltaithe. Déanaimis an rud céanna agus tógfaimid samhlacha:

  • Folaigh: ba cheart 99% d'iarratais a chomhlánú i níos lú ná 60ms;
  • Costas: Ba cheart go n-ídíonn an tseirbhís an t-íosmhéid airgid is dóigh linn is féidir le réasún. Chun seo a dhéanamh, déanaimid tréchur a uasmhéadú;
  • Pleanáil acmhainne: Teastaíonn tuiscint agus doiciméadú ar cé mhéad cás den fheidhmchlár a chaithfear a rith, lena n-áirítear feidhmiúlacht iomlán scálaithe, agus cé mhéad cásanna a bheidh ag teastáil chun riachtanais tosaigh ualaigh agus soláthair a chomhlíonadh. iomarcaíocht n+1.

D’fhéadfadh go n-éileoidh foighne barrfheabhsú chomh maith le hanailís, ach is léir gur gá anailís a dhéanamh ar an tréchur. Agus an próiseas SRE SLO á úsáid, tagann an t-iarratas moille ón gcustaiméir nó ón ngnóthas, arna ionadú ag úinéir an táirge. Agus comhlíonfaidh ár seirbhís an oibleagáid seo ón tús gan aon socruithe!

Timpeallacht tástála a bhunú

Le cabhair ó thimpeallacht tástála, beimid in ann ualach tomhaiste a chur ar ár gcóras. Le haghaidh anailíse, ginfear sonraí ar fheidhmíocht na seirbhíse gréasáin.

Ualach idirbhirt

Úsáideann an timpeallacht seo Vegeta chun ráta iarratais HTTP saincheaptha a chruthú go dtí go stoptar é:

$ 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

Breathnóireacht

Cuirfear ualach idirbhirt i bhfeidhm ag am rite. Chomh maith le méadracht iarratais (líon iarratas, latencies freagartha) agus córas oibriúcháin (cuimhne, LAP, IOPS), seolfar próifíliú an fheidhmchláir chun tuiscint a fháil ar na háiteanna ina bhfuil fadhbanna aige, chomh maith le conas a chaitear am LAP.

Próifíliú

Is cineál tomhais é próifíliú a ligeann duit a fheiceáil cá bhfuil am LAP ag dul nuair a bhíonn feidhmchlár á rith. Ligeann sé duit a chinneadh go díreach cén áit agus cé mhéad ama próiseálaí a chaitear:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Is féidir na sonraí seo a úsáid le linn anailíse chun léargas a fháil ar am LAP amú agus obair neamhriachtanach atá á déanamh. Is féidir le Go (pprof) próifílí a ghiniúint agus iad a shamhlú mar ghraif lasrach ag baint úsáide as tacar caighdeánach uirlisí. Labhróidh mé faoina n-úsáid agus treoir thus níos déanaí san alt.

Forghníomhú, breathnóireacht, anailís.

Déanaimis turgnamh. Déanfaimid feidhmiú, breathnóireacht agus anailísiú go dtí go mbeimid sásta leis an bhfeidhmíocht. Lig dúinn luach ualaigh íseal treallach a roghnú chun é a chur i bhfeidhm chun torthaí na gcéad tuairimí a fháil. Ag gach céim ina dhiaidh sin méadóimid an t-ualach le fachtóir scálaithe áirithe, a roghnaíodh le roinnt éagsúlachta. Déantar gach rith tástála ualaigh agus déantar líon na n-iarratas a choigeartú: make load-test LOAD_TEST_RATE=X.

50 iarratas in aghaidh an tsoicind

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Tabhair aird ar an dá ghraf is fearr. Léiríonn an barr ar chlé go bpróiseálann ár n-iarratas 50 iarratas in aghaidh an tsoicind (dar leis) agus taispeánann an barr ar dheis fad gach iarratais. Cuidíonn an dá pharaiméadar linn breathnú agus anailís a dhéanamh ar cibé an bhfuil muid laistigh dár dteorainneacha feidhmíochta nó nach bhfuil. Líne dhearg ar an ngraf Folaigh Iarratas HTTP léiríonn SLO ag 60ms. Léiríonn an líne go bhfuil muid i bhfad faoi bhun ár n-uas-am freagartha.

Breathnaímid ar thaobh an chostais:

10000 iarratas in aghaidh an tsoicind / 50 iarratas in aghaidh an fhreastalaí = 200 freastalaí + 1

Is féidir linn an figiúr seo a fheabhsú go fóill.

500 iarratas in aghaidh an tsoicind

Tosaíonn rudaí níos suimiúla ag tarlú nuair a shroicheann an t-ualach 500 iarratas in aghaidh an tsoicind:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Arís, sa ghraf barr ar chlé is féidir leat a fheiceáil go bhfuil an feidhmchlár ag taifeadadh gnáth-ualach. Murab amhlaidh an cás, tá fadhb ar an bhfreastalaí ar a bhfuil an feidhmchlár ag rith. Tá an graf latency freagartha suite ag barr ar dheis, ag taispeáint go raibh moill freagartha de 500-25ms mar thoradh ar 40 iarratas in aghaidh an tsoicind. Tá an 99ú peircintíl fós ag teacht go breá leis an SLO 60ms a roghnaíodh thuas.

I dtéarmaí costais:

10000 iarratas in aghaidh an tsoicind / 500 iarratas in aghaidh an fhreastalaí = 20 freastalaí + 1

Is féidir gach rud a fheabhsú go fóill.

1000 iarratas in aghaidh an tsoicind

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Seoladh iontach! Léiríonn an t-iarratas gur phróiseáil sé 1000 iarratas in aghaidh an tsoicind, ach sháraigh an SLO an teorainn fhola. Tá sé seo le feiceáil i líne p99 sa ghraf ar bharr na láimhe deise. In ainneoin go bhfuil an líne p100 i bhfad níos airde, tá na moilleanna iarbhír níos airde ná an t-uasmhéid de 60ms. Léimid isteach sa phróifíliú le fáil amach cad a dhéanann an feidhmchlár i ndáiríre.

Próifíliú

Le haghaidh próifíliú, socróimid an t-ualach go 1000 iarratas in aghaidh an tsoicind, ansin bain úsáid as pprof chun sonraí a ghabháil chun a fháil amach cá bhfuil an feidhmchlár ag caitheamh am LAP. Is féidir é seo a dhéanamh trí chríochphointe HTTP a ghníomhachtú pprof, agus ansin, faoi ualach, sábháil na torthaí ag baint úsáide as curl:

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

Is féidir na torthaí a thaispeáint mar seo:

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

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Taispeánann an graf cá háit agus cé mhéad a chaitheann an feidhmchlár am LAP. Ón tuairisc ó Brendan Gregg:

Is é an ais X an daonra próifíl cruachta, curtha in ord aibítre (ní am é seo), léiríonn an ais Y doimhneacht an chruach, ag comhaireamh ó náid ag [barr]. Is fráma cruachta é gach dronuilleog. Dá leithne an fráma, is minic a bhíonn sé i láthair sna cruacha. Ritheann an rud atá ar an mbarr ar an LAP, agus cad atá thíos na heilimintí linbh. De ghnáth ní chiallaíonn na dathanna rud ar bith, ach roghnaítear iad go randamach chun frámaí a dhifreáil.

Anailís - hipitéis

Maidir le tiúnadh, díreoimid ar iarracht a dhéanamh teacht ar am LAP amú. Lorgóimid na foinsí caiteachais is mó gan úsáid agus bainfimid iad. Bhuel, ag cur san áireamh go léiríonn próifíliú go cruinn cá háit go díreach a bhfuil an t-iarratas ag caitheamh a chuid ama próiseálaí, b'fhéidir go mbeidh ort é seo a dhéanamh arís agus arís eile, agus beidh ort cód foinse an fheidhmchláir a athrú, na tástálacha a athreáchtáil agus a fheiceáil go bhfuil an fheidhmíocht ag cur chuige. an sprioc.

Tar éis moltaí Brendan Gregg, léifimid an chairt ó bhun go barr. Taispeánann gach líne fráma cruachta (glao feidhme). Is é an chéad líne an pointe iontrála isteach sa chlár, tuismitheoir gach glaonna eile (i bhfocail eile, beidh sé ar a gcruach ag gach glao eile). Tá an chéad líne eile difriúil cheana féin:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Má fholaíonn tú an cúrsóir thar ainm feidhme ar an ngraf, taispeánfar an t-am iomlán a bhí sé ar an gcruach le linn dífhabhtaithe. Bhí feidhm HTTPServe ann 65% den am, feidhmeanna eile rite runtime.mcall, mstart и gc, thóg sé suas an chuid eile den am. Fíric spraíúil: caitear 5% den am iomlán ar cheisteanna DNS:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Is le Postgresql na seoltaí a lorgaíonn an clár. Cliceáil ar FindByAge:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Díol spéise é go léiríonn an clár, i bprionsabal, go bhfuil trí phríomhfhoinse ann a chuireann moill leis: naisc a oscailt agus a dhúnadh, sonraí a iarraidh, agus nascadh leis an mbunachar sonraí. Léiríonn an graf go dtógann iarratais DNS, naisc oscailte agus dúnta thart ar 13% den am iomlán forghníomhaithe.

Hipitéis: Ba cheart go laghdódh athúsáid naisc trí úsáid a bhaint as comhthiomsú am iarratais HTTP amháin, rud a fhágann gur féidir tréchur níos airde agus latency níos ísle.

An t-iarratas a shocrú - turgnamh

Déanaimid an cód foinse a nuashonrú, déan iarracht an nasc le Postgresql a bhaint do gach iarratas. Is é an chéad rogha a úsáid linn nasc ag leibhéal an iarratais. Sa turgnamh seo táimid cuirimis ar bun é Comhthiomsú nasc ag baint úsáide as sql tiománaí le haghaidh dul:

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

if err != nil {
   return nil, err
}

Forghníomhú, breathnóireacht, anailís

Tar éis an tástáil a atosú le 1000 iarratas in aghaidh an tsoicind, is léir go bhfuil leibhéil folaigh p99 tar éis filleadh ar an ngnáth le SLO 60ms!

Cad é an costas?

10000 iarratas in aghaidh an tsoicind / 1000 iarratas in aghaidh an fhreastalaí = 10 freastalaí + 1

Déanaimis é níos fearr fós!

2000 iarratas in aghaidh an tsoicind

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Léiríonn dúbailt an ualaigh an rud céanna, léiríonn an graf uachtarach ar chlé go ndéanann an t-iarratas 2000 iarratas a phróiseáil in aghaidh an tsoicind, tá p100 níos ísle ná 60ms, sásaíonn p99 an SLO.

I dtéarmaí costais:

10000 iarratas in aghaidh an tsoicind / 2000 iarratas in aghaidh an fhreastalaí = 5 freastalaí + 1

3000 iarratas in aghaidh an tsoicind

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Anseo is féidir leis an iarratas 3000 iarratas a phróiseáil le follas p99 níos lú ná 60ms. Ní sháraítear an SLO, agus glactar leis an gcostas mar seo a leanas:

10000 iarratas in aghaidh an tsoicind / in aghaidh 3000 iarratas in aghaidh an fhreastalaí = 4 fhreastalaí + 1 (tá an t-údar cruinnithe suas, thart. aistritheoir)

Déanaimis iarracht babhta eile anailíse.

Anailís - hipitéis

Bailímid agus taispeánaimid torthaí dífhabhtaithe an fheidhmchláir ag 3000 iarratas in aghaidh an tsoicind:

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Fós caitear 6% den am ar naisc a bhunú. Tá feabhas ar fheidhmíocht an chomhthiomsaithe a bhunú, ach is féidir leat a fheiceáil fós go leanann an feidhmchlár ag obair ar naisc nua a chruthú leis an mbunachar sonraí.

Hipitéis: Tá naisc, in ainneoin go bhfuil linn snámha ann, fós tite agus glanta, mar sin ní mór don fheidhmchlár iad a athshocrú. Ba cheart go gcabhródh socrú líon na gceangal atá ar feitheamh le méid na linne le foighne trí an t-am a chaitheann an feidhmchlár ag cruthú nasc a íoslaghdú.

An t-iarratas a shocrú - turgnamh

Ag iarraidh a shuiteáil MaxIdleConns comhionann le méid na linne (cur síos air freisin anseo):

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

Forghníomhú, breathnóireacht, anailís

3000 iarratas in aghaidh an tsoicind

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Tá p99 níos lú ná 60ms agus i bhfad níos lú p100!

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Léiríonn seiceáil an ghraf lasair nach bhfuil an nasc faoi deara a thuilleadh! Déanaimis seiceáil níos mine pg(*conn).query — ní thugaimid faoi deara ach an oiread an ceangal atá á bhunú anseo.

SRE: Anailís Feidhmíochta. Modh socraithe ag baint úsáide as freastalaí gréasáin simplí in Go

Conclúid

Tá anailís feidhmíochta ríthábhachtach chun a thuiscint go bhfuiltear ag comhlíonadh ionchais na gcustaiméirí agus riachtanais neamhfheidhmiúla. Is féidir le hanailís trí bhreathnuithe a chur i gcomparáid le hionchais na gcustaiméirí cuidiú a fháil amach cad atá inghlactha agus cad nach bhfuil. Soláthraíonn Go uirlisí cumhachtacha atá ionsuite sa ghnáthleabharlann a dhéanann anailís simplí agus inrochtana.

Foinse: will.com

Add a comment