SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

He taputapu kaha te tātari mahi me te whakatikatika mo te manatoko i te hanganga ture mo nga kaihoko.

Ka taea te whakamahi i te tātaritanga mahi ki te tirotiro mo nga kohungahunga i roto i te hotaka ma te whakamahi i te huarahi putaiao ki te whakamatautau i nga whakamatautau oro. Ka whakatauhia e tenei tuhinga he huarahi whanui mo te tātaritanga mahi me te whakatikatika, ma te whakamahi i te tūmau tukutuku Go hei tauira.

He pai rawa atu a Haere i konei na te mea kei a ia nga taputapu tohu pprof i roto i te whare pukapuka paerewa.

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Rautaki

Me hanga he rarangi whakarāpopoto mō tā mātou tātaritanga hanganga. Ka ngana taatau ki te whakamahi i etahi raraunga ki te whakatau whakatau, kaua ki te whakarereke i runga i te whakaaro mohio, i te whakaaro pohehe ranei. Hei mahi i tenei ka mahia e matou:

  • Ka whakatauhia e matou nga rohe arotautanga (nga whakaritenga);
  • Ka tatauhia e matou te kawenga tauwhitinga mo te punaha;
  • Ka mahia e matou te whakamatautau (hanga raraunga);
  • Ka titiro tatou;
  • Ka tātari matou - kua tutuki nga whakaritenga katoa?
  • Ka whakatakotohia e matou i runga i te tikanga putaiao, ka hanga he whakapae;
  • Ka mahia e matou he whakamatautau hei whakamatautau i tenei whakapae.

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Hangahanga Tūmau HTTP ngawari

Mo tenei tuhinga ka whakamahia e matou he tūmau HTTP iti i Golang. Ka kitea nga waehere katoa mai i tenei tuhinga konei.

Ko te tono e tātarihia ana he tūmau HTTP e pooti ana i a Postgresql mo ia tono. I tua atu, kei reira Prometheus, node_exporter me Grafana mo te kohikohi me te whakaatu i nga tono me nga inenga punaha.

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Hei whakangawari ake, ka whakaaro matou mo te whakatauine whakapae (me te whakamaarama i nga tatauranga) ka horahia tahi ia ratonga me ia putunga raraunga:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Te tautuhi i nga whaainga

I tenei taahiraa, ka whakatauhia e matou te kaupapa. He aha ta tatou e ngana ana ki te tātari? Me pehea e mohio ai kua tae ki te wa ka mutu? I roto i tenei tuhinga, ka whakaaro tatou kei a tatou nga kaihoko, a ka whakahaerehia e ta maatau ratonga nga tono 10 mo ia hekona.

В Puka Google SRE Ko nga tikanga whiriwhiri me te whakatauira ka korerohia. Me pena ano tatou ka hanga tauira:

  • Roopu: 99% o nga tono me whakaoti i roto i te iti iho i te 60ms;
  • Utu: Me pau te ratonga i te iti rawa o te moni e whakaaro ana matou ka taea. Ki te mahi i tenei, ka whakanuia e matou te whakaputanga;
  • Mahere kaha: Me mohio me te tuhi e hia nga waahanga o te tono me whakahaere, tae atu ki nga mahi whakahiatotanga katoa, me te maha o nga waahi ka hiahiatia hei whakatutuki i nga kawenga tuatahi me nga whakaritenga whakarato. tohenga n+1.

Me arotau pea te Rootiti hei taapiri atu ki te tātaritanga, engari me tino tātarihia te whakaputanga. A, no te whakamahi i te tukanga SRE SLO, ko te tono whakaroa ka puta mai i te kaihoko, i te pakihi ranei, e tohuhia ana e te rangatira o te hua. A ka whakatutukihia e ta maatau ratonga tenei herenga mai i te timatanga kaore he whakaritenga!

Te whakarite i tetahi taiao whakamatautau

Ma te awhina o te taiao whakamatautau, ka taea e taatau te utaina i runga i to maatau punaha. Mo te wetewete, ka hangaia nga raraunga mo te mahinga o te ratonga tukutuku.

Uihana tauwhitinga

Ka whakamahia e tenei taiao Huawhenua ki te hanga reiti tono HTTP ritenga kia mutu ra ano:

$ 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

Te tirohanga

Ka tukuna te uta tauwhitinga i te wa whakahaere. I tua atu i te tono (te maha o nga tono, te roanga whakautu) me te punaha whakahaere (te mahara, te PTM, te IOPS), ka whakahaerehia te tohu tono kia mohio ai kei hea nga raru me te pehea e pau ai te wa CPU.

Te whakakitenga

Ko te tohu he momo inenga ka taea e koe te kite kei hea te wa e haere ana te PTM ina e rere ana tetahi tono. Ka taea e koe te whakatau tika ki hea me te nui o te wa tukatuka:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ka taea te whakamahi i enei raraunga i te wa o te tātaritanga kia mohio ai koe mo te wa PTM moumou me nga mahi koretake e mahia ana. Ka taea e Haere (pprof) te whakaputa korero me te whakaata hei kauwhata mura ma te whakamahi i te huinga taputapu paerewa. Ka korero ahau mo to raatau whakamahinga me te aratohu tatūnga i muri mai i te tuhinga.

Te mahi, te tirohanga, te tātari.

Me mahi he whakamatautau. Ka mahi, ka mataki, ka wetewetehia kia makona tatou ki te mahi. Me whiriwhiri e tatou he uara kawenga iti rawa hei whakamahi kia whiwhi ai i nga hua o nga kitenga tuatahi. I ia hikoinga ka whai ake ka whakanuia e matou te kawenga me tetahi take tauine, kua tohua me etahi rereke. Ko ia oma whakamatautau ka mahia me te maha o nga tono kua whakatikahia: make load-test LOAD_TEST_RATE=X.

50 tono mo ia hekona

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Kia tupato ki nga kauwhata e rua o runga. Ko te taha maui o runga e whakaatu ana ko ta maatau tono e 50 nga tono mo ia hekona (e whakaaro ana) me te taha matau o runga e whakaatu ana i te roanga o ia tono. Ko nga tawhā e rua hei awhina i a tatou ki te titiro me te tātari mena kei roto tatou i o taatau rohe mahi, kaore ranei. Raina whero i runga i te kauwhata HTTP Tono Rooputanga whakaatu SLO i 60ms. Ko te rarangi e whakaatu ana kei raro rawa tatou i te wa whakautu morahi.

Kia titiro tatou ki te taha utu:

10000 tono mo ia hēkona / 50 tono mo ia tūmau = 200 tūmau + 1

Ka taea tonu e tatou te whakapai ake i tenei whika.

500 tono mo ia hekona

Ka timata nga mea whakamere ka eke te kawenga ki te 500 tono mo ia hekona:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ano, kei te kauwhata maui o runga ka kite koe kei te tuhi te tono i nga kawenga noa. Mena kaore tenei, he raruraru kei runga i te tūmau kei te whakahaere te tono. Kei te taha matau o runga te kauwhata torohū whakautu, e whakaatu ana ko te 500 tono mo ia hekona i puta te roanga whakautu o te 25-40ms. He pai tonu te 99 ōrau ki te 60ms SLO i tohua i runga ake nei.

Mo te utu:

10000 tono mo ia hēkona / 500 tono mo ia tūmau = 20 tūmau + 1

Ka taea tonu te whakapai ake i nga mea katoa.

1000 tono mo ia hekona

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Te whakarewanga nui! Ko te tono e whakaatu ana i tukatukahia e ia nga tono 1000 mo ia hēkona, engari i takahia e te SLO te rohe torohū. Ka kitea tenei i te rarangi p99 i te kauwhata matau o runga. Ahakoa te mea he nui ake te raina p100, he nui ake te roa o te roa o te 60ms. Me ruku tatou ki roto i te whakamohiotanga kia mohio ai he aha te mahi a te tono.

Te whakakitenga

Mo te whakatauira, ka whakatauhia e matou te uta ki te 1000 tono mo ia hekona, katahi ka whakamahi pprof ki te hopu raraunga kia mohio ai kei hea te tono e whakapau ana i te wa PTM. Ka taea tenei ma te whakahohe i te pito mutunga HTTP pprof, katahi, i raro i te utaina, tiakina nga hua ma te whakamahi curl:

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

Ka taea te whakaatu i nga hua penei:

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

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ko te kauwhata e whakaatu ana ki hea me te nui o te whakapaunga a te tono i te wa CPU. Mai i te whakaahuatanga mai Brendan Gregg:

Ko te tuaka X te taupori kōtaha tāpae, kua kōmaka ā-pū (ehara tēnei i te wā), e whakaatu ana te tuaka Y i te hōhonutanga o te tāpae, e tatau ana mai i te kore ki te [runga]. He tāpare tāpae ia tapawhā hāngai. Ko te whanui ake o te anga, ko te nuinga o nga wa kei roto i nga puranga. Ko nga mea kei runga ka rere i runga i te PTM, ko nga mea kei raro ko nga waahanga tamariki. Karekau he tikanga o nga tae, engari ka kowhiria noa iho hei wehe i nga papa.

Tātari - whakapae

Mo te whakatikatika, ka aro taatau ki te rapu i te wa PTM kua moumou. Ka rapua e matou nga puna nui rawa atu o nga whakapaunga koretake ka tangohia. Ana, i te mea ko te whakaaturanga e whakaatu tika ana ki te waahi e whakapaua ana e te tono tona wa tukatuka, me mahi e koe he maha nga wa, ka hiahia ano koe ki te whakarereke i te waehere puna tono, whakahoki ano i nga whakamatautau ka kite kua tata te mahi ki te whaainga.

Ka whai i nga tohutohu a Brendan Gregg, ka panuihia e matou te tūtohi mai i runga ki raro. Ka whakaatuhia e ia raina he anga tāpae (waea mahi). Ko te rarangi tuatahi te urunga ki roto i te hotaka, te matua o etahi atu waeatanga katoa (arā, ka mau atu nga waea katoa ki runga i to ratou puranga). He rereke te rarangi e whai ake nei:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ki te whakaparohia e koe te pehu ki runga i te ingoa o tetahi taumahi i runga i te kauwhata, ka whakaatuhia te tapeke o te waa i runga i te puranga i te wa e patuiro ana. Ko te mahi HTTPServe i reira 65% o te wa, etahi atu mahi wa whakahaere runtime.mcall, mstart и gc, i pau te toenga o te wa. Meka ngahau: 5% o te katoa o te wa ka pau mo nga patai DNS:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ko nga wahitau e rapuhia ana e te papatono no Postgresql. Patohia FindByAge:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

He mea whakamiharo, ko te kaupapa e whakaatu ana, ko te tikanga, e toru nga puna matua e taapiri ana i nga whakaroa: te whakatuwhera me te kati i nga hononga, te tono raraunga, me te hono ki te papaarangi. Ko te kauwhata e whakaatu ana ko nga tono DNS, te whakatuwhera me te kati hononga ka pau i te 13% o te katoa o te wa mahi.

Te whakapae: Ma te whakamahi ano i nga hononga e whakamahi ana i te whakahiato me whakaiti i te wa o te tono HTTP kotahi, ka taea te whakaputanga teitei ake me te iti ake o te roanga.

Te whakarite i te tono - whakamatautau

Ka whakahouhia e matou te waehere puna, ka ngana ki te tango i te hononga ki te Postgresql mo ia tono. Ko te kōwhiringa tuatahi ko te whakamahi puna hononga i te taumata tono. I tenei whakamatautau ka maatau me whakatu e tatou hononga hono ma te whakamahi i te taraiwa sql mo te haere:

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

if err != nil {
   return nil, err
}

Te mahi, te tirohanga, te tātari

I muri i te whakaara ano i te whakamatautau me nga tono 1000 mo ia hēkona, kua marama kua hoki mai nga taumata torohū o p99 ki te tikanga me te SLO o 60ms!

He aha te utu?

10000 tono mo ia hēkona / 1000 tono mo ia tūmau = 10 tūmau + 1

Kia pai ake ta tatou mahi!

2000 tono mo ia hekona

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ko te ruarua o te kawenga e whakaatu ana i te mea ano, ko te kauwhata maui o runga e whakaatu ana ka whakahaere te tono ki te tukatuka i nga tono 2000 mo ia hēkona, he iti iho te p100 i te 60ms, ka makona te p99 i te SLO.

Mo te utu:

10000 tono mo ia hēkona / 2000 tono mo ia tūmau = 5 tūmau + 1

3000 tono mo ia hekona

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

I konei ka taea e te tono te tukatuka i nga tono 3000 me te roanga p99 iti iho i te 60ms. Kaore e takahia te SLO, ka whakaaehia te utu e whai ake nei:

10000 tono mo ia hekona / ia 3000 tono mo ia tūmau = 4 tūmau + 1 (kua whakaemihia e te kaituhi, āhua. kaiwhakamaori)

Kia tamata tatou i tetahi atu wahanga o te tātari.

Tātari - whakapae

Ka kohia, ka whakaatuhia e matou nga hua o te patuiro i te tono i te 3000 tono mo ia hekona:

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Tonu 6% o te wa ka pau ki te whakatu hononga. Ko te whakarite i te puna wai kua pai ake te mahi, engari ka kite tonu koe kei te mahi tonu te tono ki te hanga hononga hou ki te papaaarangi.

Te whakapae: Ko nga hononga, ahakoa te waahi o te puna wai, kei te whakahekehia, ka horoi tonu, no reira me tautuhi ano te tono. Ko te tautuhi i te maha o nga hononga e tarewa ana ki te rahi o te puna kaukau ka awhina i te roanga ma te whakaiti i te wa e pau ai te tono ki te hanga hononga..

Te whakarite i te tono - whakamatautau

E ngana ana ki te tāuta MaxIdleConns he rite ki te rahi o te puna (kua whakaahuatia ano konei):

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

Te mahi, te tirohanga, te tātari

3000 tono mo ia hekona

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

He iti ake te p99 i te 60ms me te p100 iti ake!

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

Ko te tirotiro i te kauwhata mura ka kitea kua kore e kitea te hononga! Kia tirohia i roto i te taipitopito atu pg(*conn).query — kare ano matou e kite i te hononga e whakatuu ana ki konei.

SRE: Tātari Mahi. Tikanga tatūnga ma te whakamahi i te tūmau tukutuku ngawari i Go

mutunga

He mea nui te tātari mahi ki te mohio kei te tutuki nga tumanako a nga kaihoko me nga whakaritenga kore mahi. Ko te tātari ma te whakataurite i nga tirohanga me nga tumanako a nga kaihoko ka awhina i te whakatau he aha te mea e pai ana me te aha e kore. Ka whakarato a Go i nga taputapu kaha i hangaia ki roto i te whare pukapuka paerewa e ngawari ana te tātari me te waatea.

Source: will.com

Tāpiri i te kōrero