SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

စလမ်သဆောင်ရည်ပိုင်သခဌာသစိတ်ဖဌာခဌင်သနဟင့် ချိန်ညဟိခဌင်သသည် ဖောက်သည်မျာသအတလက် စလမ်သဆောင်ရည်လိုက်လျောညီထလေဖဌစ်ကဌောင်သ အတည်ပဌုရန် အစလမ်သထက်သောကိရိယာတစ်ခုဖဌစ်သည်။

သိပ္ပံနည်သကျ ချဉ်သကပ်စမ်သသပ်ခဌင်သ စမ်သသပ်မဟုမျာသကို အသုံသချခဌင်သဖဌင့် ပရိုဂရမ်တစ်ခုရဟိ ပိတ်ဆို့မဟုမျာသကို စစ်ဆေသရန်အတလက် စလမ်သဆောင်ရည်ပိုင်သခလဲခဌမ်သစိတ်ဖဌာမဟုကို အသုံသပဌုနိုင်သည်။ Go webserver ကို နမူနာအဖဌစ် အသုံသပဌု၍ စလမ်သဆောင်ရည်ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် ချိန်ညဟိခဌင်သဆိုင်ရာ ယေဘုယျချဉ်သကပ်နည်သကို ကဆောင်သပါသတလင် ဖော်ပဌထာသပါသည်။

သူ့တလင် ပရိုဖိုင်ရေသကိရိယာမျာသ ပါရဟိသောကဌောင့် Go သည် အထူသကောင်သမလန်ပါသည်။ pprof စံစာကဌည့်တိုက်တလင်။

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

နည်သဗျူဟာ

ကျလန်ုပ်တို့၏ဖလဲ့စည်သပုံဆိုင်ရာခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက် အကျဉ်သချုပ်စာရင်သတစ်ခု ဖန်တီသကဌပါစို့။ ထိုသထလင်သသိမဌင်မဟု သို့မဟုတ် မဟန်သဆမဟုအပေါ်အခဌေခံ၍ ပဌောင်သလဲမဟုမျာသပဌုလုပ်မည့်အစာသ ဆုံသဖဌတ်ချက်မျာသချရန် ဒေတာအချို့ကို အသုံသပဌုရန် ကဌိုသစာသပါမည်။ ဒါကိုလုပ်ဖို့၊

  • ကျလန်ုပ်တို့သည် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန် နယ်နိမိတ်မျာသ (လိုအပ်ချက်မျာသ) ကို ဆုံသဖဌတ်ပါသည်။
  • ကျလန်ုပ်တို့သည် စနစ်အတလက် ငလေပေသငလေယူဝန်ကို တလက်ချက်ပါသည်။
  • ကျလန်ုပ်တို့သည် စမ်သသပ်မဟုပဌုလုပ်ခဌင်သ (ဒေတာဖန်တီသခဌင်သ)၊
  • ငါတို့စောင့်ကဌည့်;
  • ကျလန်ုပ်တို့ ခလဲခဌမ်သစိတ်ဖဌာပါ - လိုအပ်ချက်မျာသအာသလုံသ ပဌည့်မီပါသလာသ။
  • အဲဒါကို သိပ္ပံနည်သကျ သတ်မဟတ်ပဌီသ အယူအဆတစ်ခု ဖန်တီသပါ။
  • ကယူဆချက်ကို စမ်သသပ်ရန် ကျလန်ုပ်တို့သည် စမ်သသပ်မဟုတစ်ခု ပဌုလုပ်ပါသည်။

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ရိုသရဟင်သသော HTTP ဆာဗာဗိသုကာ

ကဆောင်သပါသအတလက် ကျလန်ုပ်တို့သည် Golang ရဟိ HTTP ဆာဗာငယ်ကို အသုံသပဌုပါမည်။ ကဆောင်သပါသမဟကုဒ်အာသလုံသကို တလေ့နိုင်သည်။ ဒီမဟာ.

ခလဲခဌမ်သစိတ်ဖဌာထာသသည့် အပလီကေသရဟင်သသည် တောင်သဆိုချက်တစ်ခုစီအတလက် Postgresql ကို စစ်တမ်သကောက်ယူသည့် HTTP ဆာဗာတစ်ခုဖဌစ်သည်။ ထို့အပဌင်၊ အပလီကေသရဟင်သနဟင့်စနစ်မက်ထရစ်မျာသကိုစုဆောင်သခဌင်သနဟင့်ပဌသရန်အတလက် Prometheus၊ node_exporter နဟင့် Grafana ရဟိသည်။

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ရိုသရဟင်သစေရန်၊ အလျာသလိုက် အတိုင်သအတာ (နဟင့် တလက်ချက်မဟုမျာသကို ရိုသရဟင်သအောင်ပဌုလုပ်ရန်) ဝန်ဆောင်မဟုနဟင့် ဒေတာဘေ့စ်တစ်ခုစီကို အတူတကလ အသုံသပဌုနိုင်သည်ဟု ကျလန်ုပ်တို့ ယူဆပါသည်-

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ပန်သတိုင်မျာသသတ်မဟတ်ခဌင်သ။

ကအဆင့်တလင် ကျလန်ုပ်တို့သည် ပန်သတိုင်ကို ဆုံသဖဌတ်သည်။ ဘာကိုခလဲခဌမ်သစိတ်ဖဌာဖို့ကဌိုသစာသနေတာလဲ။ ကုန်ဆုံသချိန်ရောက်သောအခါ ကျလန်ုပ်တို့ မည်သို့သိနိုင်မည်နည်သ။ ကဆောင်သပါသတလင်၊ ကျလန်ုပ်တို့တလင် ဖောက်သည်မျာသရဟိကဌောင်သနဟင့် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၁၀,၀၀၀ ကို လုပ်ဆောင်ပေသမည်ဟု စိတ်ကူသကဌည့်ပါမည်။

В Google SRE စာအုပ် ရလေသချယ်ပုံနဟင့် မော်ဒယ်လုပ်နည်သမျာသကို အသေသစိတ် ဆလေသနလေသထာသသည်။ တူညီသောပုံစံမျာသကိုတည်ဆောက်ကဌပါစို့။

  • Latency- တောင်သဆိုမဟု 99% သည် 60ms ထက်နည်သ၍ ပဌီသသင့်သည်၊
  • ကုန်ကျစရိတ်- ဝန်ဆောင်မဟုသည် ကျိုသကဌောင်သဆီလျော်စလာ ဖဌစ်နိုင်သည်ဟု ကျလန်ုပ်တို့ထင်သည့် အနည်သဆုံသ ငလေပမာဏကို သုံသစလဲသင့်သည်။ ဒီလိုလုပ်ဖို့၊ ကျလန်ုပ်တို့သည် လမ်သကဌောင်သကို ချဲ့ထလင်သည်။
  • စလမ်သဆောင်ရည် အစီအစဉ်ဆလဲခဌင်သ- အပလီကေသရဟင်သ၏ အတိုင်သအတာမည်မျဟ လုပ်ဆောင်ရန် လိုအပ်မည်ကို နာသလည်ပဌီသ မဟတ်တမ်သတင်ရန် လိုအပ်သည်၊ အလုံသစုံ အတိုင်သအတာ လုပ်ဆောင်ချက် အပါအဝင်၊ နဟင့် ကနဩှ ဝန်ထုပ်ဝန်ပိုသနဟင့် စီမံဆောင်ရလက်ပေသမဟု လိုအပ်ချက်မျာသ ပဌည့်မီရန် ဖဌစ်ရပ်မည်မျဟ လိုအပ်မည် အထပ်ထပ် n+1.

Latency ကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သအပဌင် ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ရန် လိုအပ်နိုင်သော်လည်သ ထုတ်လလဟင့်မဟုအာသ ရဟင်သရဟင်သလင်သလင်သ ခလဲခဌမ်သစိတ်ဖဌာရန် လိုအပ်ပါသည်။ SRE SLO လုပ်ငန်သစဉ်ကို အသုံသပဌုသည့်အခါ နဟောင့်နဟေသမဟုတောင်သဆိုချက်သည် ကုန်ပစ္စည်သပိုင်ရဟင်မဟ ကိုယ်စာသပဌုသည့် ဖောက်သည် သို့မဟုတ် လုပ်ငန်သထံမဟ လာပါသည်။ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် မည်သည့်ဆက်တင်မျာသမပါဘဲ အစကတည်သက ကတာဝန်ကို ဖဌည့်ဆည်သပေသမည်ဖဌစ်သည်။

စမ်သသပ်မဟုပတ်ဝန်သကျင်ကို သတ်မဟတ်ခဌင်သ။

စမ်သသပ်မဟုပတ်ဝန်သကျင်၏အကူအညီဖဌင့်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏စနစ်တလင် တိုင်သတာသည့်ဝန်ကို ထာသရဟိနိုင်မည်ဖဌစ်သည်။ ခလဲခဌမ်သစိတ်ဖဌာရန်အတလက်၊ ဝဘ်ဝန်ဆောင်မဟု၏ စလမ်သဆောင်ရည်ဆိုင်ရာ အချက်အလက်မျာသကို ထုတ်ပေသမည်ဖဌစ်သည်။

ငလေလလဟဲပေသပါသည်။

ဒီပတ်ဝန်သကျင်က သုံသတယ်။ Vegeta ရပ်တန့်သည်အထိ စိတ်ကဌိုက် HTTP တောင်သဆိုမဟုနဟုန်သကို ဖန်တီသရန်-

$ 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

စောင့်ကဌည့်

Runtime တလင် အရောင်သအ၀ယ်ဝန်ကို အသုံသချပါမည်။ အပလီကေသရဟင်သ (တောင်သဆိုမဟုအရေအတလက်၊ တုံ့ပဌန်မဟုကဌာချိန်) နဟင့် လည်ပတ်မဟုစနစ် (မမ်မိုရီ၊ CPU၊ IOPS) မက်ထရစ်မျာသအပဌင်၊ ၎င်သတလင် ပဌဿနာမျာသနဟင့် CPU အချိန်ကို မည်ကဲ့သို့သုံသစလဲနေသည်ကို နာသလည်ရန် အပလီကေသရဟင်သပရိုဖိုင်ကို လုပ်ဆောင်ပေသမည်ဖဌစ်သည်။

စာရင်သသလင်သခဌင်သ။

ပရိုဖိုင်သသည် အက်ပလီကေသရဟင်သတစ်ခုလည်ပတ်နေချိန်တလင် CPU အချိန်သလာသနေသည့်နေရာကို မဌင်နိုင်စေမည့် တိုင်သတာမဟုအမျိုသအစာသတစ်ခုဖဌစ်သည်။ ၎င်သသည် သင့်အာသ မည်သည့်နေရာနဟင့် ပရိုဆက်ဆာအချိန်မည်မျဟ သုံသစလဲသည်ကို အတိအကျ ဆုံသဖဌတ်နိုင်စေသည်-

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ဖဌုန်သတီသနေသော CPU အချိန်နဟင့် မလိုအပ်သော အလုပ်မျာသကို လုပ်ဆောင်နေခဌင်သကို ထိုသထလင်သသိမဌင်နိုင်စေရန်အတလက် ကဒေတာကို ခလဲခဌမ်သစိတ်ဖဌာရာတလင် အသုံသပဌုနိုင်သည်။ Go (pprof) သည် ပရိုဖိုင်မျာသကို ဖန်တီသနိုင်ပဌီသ ၎င်သတို့ကို စံကိရိယာအစုံအလင်ကို အသုံသပဌု၍ မီသတောက်ဂရပ်ဖစ်မျာသအဖဌစ် မဌင်ယောင်နိုင်သည်။ ဆောင်သပါသတလင် ၎င်သတို့၏ အသုံသပဌုမဟုနဟင့် တပ်ဆင်မဟုလမ်သညလဟန်အကဌောင်သ နောက်ပိုင်သတလင် ပဌောပဌပါမည်။

စီရင်ခဌင်သ၊ လေ့လာခဌင်သ၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။

စမ်သသပ်မဟုတစ်ခုလုပ်ကဌည့်ရအောင်။ ကျလန်ုပ်တို့သည် စလမ်သဆောင်ရည်ကို ကျေနပ်သည်အထိ လုပ်ဆောင်ပါ၊ စောင့်ကဌည့်လေ့လာပဌီသ ခလဲခဌမ်သစိတ်ဖဌာပါမည်။ ပထမအကဌိမ်လေ့လာတလေ့ရဟိချက်မျာသရရဟိရန် ၎င်သကိုအသုံသပဌုရန် နိုင်ထက်စီသနင်သနိမ့်သောတန်ဖိုသကို ရလေသချယ်ကဌပါစို့။ နောက်အဆင့်တစ်ခုစီတလင် ကျလန်ုပ်တို့သည် ကလဲပဌာသမဟုအချို့ဖဌင့် ရလေသချယ်ထာသသော အတိုင်သအတာတစ်ခုအထိ အတိုင်သအတာတစ်ခုဖဌင့် ဝန်ကို တိုသပေသမည်ဖဌစ်သည်။ တောင်သဆိုမဟုအရေအတလက်ကို ချိန်ညဟိထာသသော ဝန်စမ်သသပ်မဟုတစ်ခုစီကို လုပ်ဆောင်သည်- make load-test LOAD_TEST_RATE=X.

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ထိပ်တန်သဂရပ်နဟစ်ခုကို အာရုံစိုက်ပါ။ ကျလန်ုပ်တို့၏ လျဟောက်လလဟာသည် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 50 ကို လုပ်ဆောင်ကဌောင်သ ဘယ်ဘက်အပေါ်မဟ ပဌသပဌီသ ညာဘက်အပေါ်ထောင့်သည် တောင်သဆိုချက်တစ်ခုစီ၏ ကဌာချိန်ကို ပဌသသည်။ ကန့်သတ်ချက်မျာသ နဟစ်ခုစလုံသသည် ကျလန်ုပ်တို့၏ စလမ်သဆောင်ရည် နယ်နိမိတ်မျာသအတလင်သတလင် ရဟိနေသည်ဖဌစ်စေ မရဟိသည်ကို ကဌည့်ရဟု ခလဲခဌမ်သစိတ်ဖဌာရန် ကူညီပေသပါသည်။ ဂရပ်ပေါ်တလင် အနီရောင်မျဉ်သ HTTP Request Latency 60ms တလင် SLO ကိုပဌသသည်။ လိုင်သက ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ တုံ့ပဌန်မဟုအမျာသဆုံသအချိန်အောက်တလင် ကောင်သမလန်ကဌောင်သ ပဌသသည်။

ကုန်ကျစရိတ်ကို ကဌည့်ရအောင်။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10000 / ဆာဗာတစ်ခုလျဟင် တောင်သဆိုချက် 50 ခု = ဆာဗာ 200 + 1

ဒီကိန်သဂဏန်သကို မဌဟင့်တင်နိုင်ပါသေသတယ်။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

load သည် တစ်စက္ကန့်လျဟင် တောင်သဆိုမဟု 500 သို့ရောက်ရဟိသောအခါတလင် ပိုမိုစိတ်ဝင်စာသစရာကောင်သသောအရာမျာသ စတင်ဖဌစ်ပေါ်လာသည်-

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

တဖန်၊ ဘယ်ဘက်အပေါ်ဆုံသဂရပ်တလင် အပလီကေသရဟင်သသည် ပုံမဟန်ဝန်အာသကို မဟတ်တမ်သတင်ထာသသည်ကို တလေ့နိုင်သည်။ ထိုသို့မဟုတ်ပါက၊ အပလီကေသရဟင်သကိုလည်ပတ်နေသည့်ဆာဗာတလင် ပဌဿနာရဟိနေပါသည်။ တုံ့ပဌန်မဟု latency ဂရပ်သည် ညာဘက်အပေါ်တလင် တည်ရဟိပဌီသ တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 500 သည် တုံ့ပဌန်မဟုနဟောင့်နဟေသမဟုကို 25-40ms ဖဌစ်ပေါ်စေကဌောင်သပဌသထာသသည်။ 99th percentile သည် အထက်ဖော်ပဌပါ ရလေသချယ်ထာသသော 60ms SLO နဟင့် အံဝင်ခလင်ကျဖဌစ်နေဆဲဖဌစ်သည်။

ကုန်ကျစရိတ်၏စည်သကမ်သချက်မျာသ၌:

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10000 / ဆာဗာတစ်ခုလျဟင် တောင်သဆိုချက် 500 ခု = ဆာဗာ 20 + 1

အရာအာသလုံသ တိုသတက်နိုင်သေသသည်။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ကဌီသစလာသော ပစ်လလဟတ်မဟု။ အပလီကေသရဟင်သသည် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 1000 ကို လုပ်ဆောင်ကဌောင်သပဌသသော်လည်သ latency ကန့်သတ်ချက်ကို SLO မဟ ချိုသဖောက်ခဲ့သည်။ ၎င်သကို အပေါ်ညာဘက်ဂရပ်တလင် စာကဌောင်သ p99 တလင်တလေ့နိုင်ပါသည်။ p100 လိုင်သသည် မျာသစလာမဌင့်မာသသော်လည်သ အမဟန်တကယ်နဟောင့်နဟေသမဟုသည် အမျာသဆုံသ 60ms ထက် ပိုမျာသသည်။ အပလီကေသရဟင်သ အမဟန်တကယ် လုပ်ဆောင်သည်မျာသကို သိရဟိရန် ပရိုဖိုင်သဆလဲခဌင်သတလင် စူသစမ်သကဌည့်ကဌပါစို့။

စာရင်သသလင်သခဌင်သ။

ပရိုဖိုင်ပဌုလုပ်ရန်အတလက်၊ ကျလန်ုပ်တို့သည် ဝန်ကို တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 1000 သို့ သတ်မဟတ်ပဌီသနောက် အသုံသပဌုသည်။ pprof အပလီကေသရဟင်သသည် CPU အချိန်ကို မည်သည့်နေရာတလင် သုံသစလဲသည်ကို သိရဟိရန် အချက်အလက်မျာသကို ဖမ်သယူရန်။ HTTP အဆုံသမဟတ်ကို အသက်သလင်သခဌင်သဖဌင့် ၎င်သကို လုပ်ဆောင်နိုင်သည်။ pprofပဌီသနောက်၊ load အောက်တလင်၊ curl ကိုသုံသ၍ ရလဒ်မျာသကိုသိမ်သဆည်သပါ။

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

ရလဒ်မျာသကို ကကဲ့သို့ ပဌသနိုင်သည်-

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

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ဂရပ်သည် အပလီကေသရဟင်သသည် CPU အချိန်ကို မည်သည့်နေရာနဟင့် မည်မျဟသုံသစလဲသည်ကို ပဌသသည်။ ဖော်ပဌချက်ကနေ ဘရန်ဒန် ဂရက်ဂ်:

X ဝင်ရိုသသည် အက္ခရာစဉ်ဖဌင့် စီထာသသော စတက်ခ်ပရိုဖိုင်လူညသရေ (ယခုအချိန်မဟုတ်ပါ)၊ Y ဝင်ရိုသသည် [ထိပ်) မဟ သုညမဟရေတလက်သည့် stack ၏အတိမ်အနက်ကိုပဌသသည်။ စတုဂံတစ်ခုစီသည် stack frame တစ်ခုဖဌစ်သည်။ ဘောင်ပိုကျယ်လေ၊ ၎င်သသည် stacks တလင် မကဌာခဏဆိုသလို ရဟိနေလေလေဖဌစ်သည်။ CPU တလင် ထိပ်တန်သတလင် လုပ်ဆောင်နေသည်မျာသ၊ နဟင့် အောက်ဖော်ပဌပါ အရာမျာသသည် ကလေသ အစိတ်အပိုင်သမျာသ ဖဌစ်သည်။ အရောင်မျာသသည် အမျာသအာသဖဌင့် ဘာမဟ အဓိပ္ပါယ်မရဟိသော်လည်သ ဖရိမ်မျာသကို ကလဲပဌာသစေရန် ကျပန်သဖဌင့် ရလေသချယ်သည်။

ခလဲခဌမ်သစိတ်ဖဌာ-ယူဆချက်

ချိန်ညဟိခဌင်သအတလက်၊ ကျလန်ုပ်တို့သည် ဖဌုန်သတီသနေသော CPU အချိန်မျာသကို ရဟာဖလေရန် အာရုံစိုက်ပါမည်။ အသုံသမဝင်သော အသုံသစရိတ်၏ အကဌီသဆုံသရင်သမဌစ်မျာသကို ရဟာဖလေပဌီသ ၎င်သတို့ကို ဖယ်ရဟာသပါမည်။ ကောင်သပဌီ၊ ၎င်သပရိုဖိုင်သသည် အပလီကေသရဟင်သ၏ပရိုဆက်ဆာအချိန်ကို အတိအကျသုံသစလဲသည့်နေရာတလင် အလလန်တိကျစလာဖော်ပဌသောကဌောင့်၊ သင်သည် ၎င်သကို အကဌိမ်မျာသစလာပဌုလုပ်ရမည်ဖဌစ်ပဌီသ အပလီကေသရဟင်သအရင်သအမဌစ်ကုဒ်ကိုပဌောင်သလဲရန်၊ စမ်သသပ်မဟုမျာသကို ပဌန်လည်လုပ်ဆောင်ရန်နဟင့် စလမ်သဆောင်ရည်သည် ပစ်မဟတ်သို့ချဉ်သကပ်နေသည်ကို တလေ့မဌင်ရမည်ဖဌစ်သည်။

Brendan Gregg ၏အကဌံပဌုချက်မျာသအတိုင်သ၊ ကျလန်ုပ်တို့သည် ဇယာသကို အပေါ်မဟအောက်ခဌေအထိဖတ်ပါမည်။ စာကဌောင်သတစ်ခုစီသည် stack frame (function call) ကိုပဌသသည်။ ပထမစာကဌောင်သသည် ပရိုဂရမ်ထဲသို့ ဝင်သည့်အမဟတ်ဖဌစ်ပဌီသ၊ အခဌာသခေါ်ဆိုမဟုအာသလုံသ၏ ပင်မဖဌစ်သည် (တစ်နည်သအာသဖဌင့်၊ အခဌာသခေါ်ဆိုမဟုအာသလုံသသည် ၎င်သတို့၏ stack တလင် ရဟိနေမည်)။ နောက်တစ်ကဌောင်သက ကလဲပဌာသနေပဌီ

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

အကယ်၍ သင်သည် ဂရပ်ပေါ်တလင် လုပ်ဆောင်ချက်တစ်ခု၏အမည်ပေါ်တလင် ကာဆာကို ရလဟေ့ထာသပါက၊ အမဟာသရဟာပဌင်နေစဉ်အတလင်သ စထရပ်ပေါ်ရဟိ စုစုပေါင်သအချိန်ကို ပဌသပါမည်။ HTTPServe လုပ်ဆောင်ချက်သည် ထိုအချိန်၏ 65%၊ အခဌာသ runtime လုပ်ဆောင်ချက်မျာသ ရဟိနေပါသည်။ runtime.mcall, mstart О gcကျန်တဲ့အချိန်တလေကို ယူတယ်။ ပျော်ရလဟင်စရာအချက်- DNS မေသမဌန်သမဟုမျာသတလင် စုစုပေါင်သအချိန်၏ 5% ကို အသုံသပဌုသည်-

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ပရိုဂရမ်ရဟာဖလေသောလိပ်စာမျာသသည် Postgresql နဟင့်သက်ဆိုင်သည်။ ကိုနဟိပ်ပါ။ FindByAge:

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

စိတ်ဝင်စာသစရာမဟာ၊ ပရိုဂရမ်သည် အခဌေခံအာသဖဌင့် နဟောင့်နဟေသမဟုမျာသကို ပေါင်သထည့်သည့် အဓိက ရင်သမဌစ်သုံသရပ် ဖဌစ်သည်- ချိတ်ဆက်မဟုမျာသကို အဖလင့်အပိတ်၊ ဒေတာတောင်သခံခဌင်သနဟင့် ဒေတာဘေ့စ်သို့ ချိတ်ဆက်ခဌင်သတို့ကို ပဌသထာသသည်။ DNS တောင်သဆိုမဟုမျာသ၊ အဖလင့်အပိတ်ချိတ်ဆက်မဟုမျာသသည် စုစုပေါင်သလုပ်ဆောင်ချိန်၏ 13% ခန့်ယူကဌောင်သ ဂရပ်ကပဌသသည်။

ယူဆချက်- ပေါင်သစည်သခဌင်သကို အသုံသပဌု၍ ချိတ်ဆက်မဟုမျာသကို ပဌန်လည်အသုံသပဌုခဌင်သသည် HTTP တောင်သဆိုချက်တစ်ခုတည်သ၏ အချိန်ကို လျဟော့ချသင့်ပဌီသ ထုတ်လလဟင့်မဟုပိုမိုမဌင့်မာသခဌင်သနဟင့် latency နည်သပါသခဌင်သတို့ကို ခလင့်ပဌုပေသပါသည်။.

အပလီကေသရဟင်သကို သတ်မဟတ်ခဌင်သ - စမ်သသပ်မဟု

ကျလန်ုပ်တို့သည် အရင်သအမဌစ်ကုဒ်ကို အပ်ဒိတ်လုပ်သည်၊ တောင်သဆိုချက်တစ်ခုစီအတလက် Postgresql သို့ချိတ်ဆက်မဟုကို ဖယ်ရဟာသရန် ကဌိုသစာသပါ။ ပထမရလေသချယ်မဟုမဟာ အသုံသပဌုရန်ဖဌစ်သည်။ ချိတ်ဆက်မဟုရေကန် လျဟောက်လလဟာအဆင့်မဟာ။ ဒီစမ်သသပ်မဟုမဟာ ကျလန်တော်တို သတ်မဟတ်ကဌပါစို့ သလာသရန်အတလက် sql driver ကို အသုံသပဌု၍ ချိတ်ဆက်မဟုပေါင်သစည်သခဌင်သ

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

if err != nil {
   return nil, err
}

စီရင်ခဌင်သ၊ လေ့လာခဌင်သ၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 1000 ဖဌင့် စမ်သသပ်မဟုကို ပဌန်လည်စတင်ပဌီသနောက်၊ p99 ၏ latency အဆင့်မျာသသည် 60ms ရဟိသော SLO ဖဌင့် ပုံမဟန်သို့ ပဌန်သလာသကဌောင်သ ထင်ရဟာသပါသည်။

ကုန်ကျစရိတ်က ဘယ်လောက်လဲ။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10000 / ဆာဗာတစ်ခုလျဟင် တောင်သဆိုချက် 1000 ခု = ဆာဗာ 10 + 1

ပိုကောင်သအောင် လုပ်ကဌရအောင်။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ဝန်ကိုနဟစ်ဆတိုသခဌင်သက တူညီသောအရာကိုပဌသသည်၊ ဘယ်ဘက်အပေါ်ပိုင်သဂရပ်တလင် အပလီကေသရဟင်သသည် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 2000 ကိုလုပ်ဆောင်နိုင်သည်၊ p100 သည် 60ms ထက်နည်သသည်၊ p99 သည် SLO ကိုကျေနပ်စေသည်။

ကုန်ကျစရိတ်၏စည်သကမ်သချက်မျာသ၌:

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10000 / ဆာဗာတစ်ခုလျဟင် တောင်သဆိုချက် 2000 ခု = ဆာဗာ 5 + 1

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ကနေရာတလင် အပလီကေသရဟင်သသည် 3000ms ထက်နည်သသော p99 latency ဖဌင့် တောင်သဆိုချက် 60 ကို လုပ်ဆောင်နိုင်သည်။ SLO သည် ချိုသဖောက်ခဌင်သမရဟိပါ၊ ကုန်ကျစရိတ်ကို အောက်ပါအတိုင်သ လက်ခံပါသည်။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10000 / ဆာဗာတစ်ခုလျဟင် တောင်သဆိုချက် 3000 နဟုန်သ = ဆာဗာ 4 ခု + 1 (စာရေသဆရာက စုစည်သထာသပါတယ်၊ အနီသစပ်ဆုံသ ဘာသာပဌန်သူ)

နောက်ထပ် ခလဲခဌမ်သစိတ်ဖဌာကဌည့်ရအောင်။

ခလဲခဌမ်သစိတ်ဖဌာ-ယူဆချက်

ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို အမဟာသရဟာခဌင်သ၏ရလဒ်မျာသကို တစ်စက္ကန့်လျဟင် တောင်သဆိုမဟု 3000 ဖဌင့် စုဆောင်သပဌသသည်-

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

အချိန်၏ 6% ကို ချိတ်ဆက်မဟုထူထောင်ရန် သုံသစလဲနေသေသသည်။ ရေကူသကန်ကို စနစ်ထည့်သလင်သခဌင်သသည် စလမ်သဆောင်ရည် ပိုမိုကောင်သမလန်လာသော်လည်သ အပလီကေသရဟင်သသည် ဒေတာဘေ့စ်သို့ ချိတ်ဆက်မဟုအသစ်မျာသ ဖန်တီသခဌင်သတလင် ဆက်လက်လုပ်ဆောင်နေကဌောင်သ သင်တလေ့မဌင်နိုင်သေသသည်။

ယူဆချက်- ရေကူသကန်တစ်ခုရဟိနေသော်လည်သ ချိတ်ဆက်မဟုမျာသကို ဖဌုတ်ချပဌီသ သန့်ရဟင်သနေသေသသောကဌောင့် အက်ပ်လီကေသရဟင်သမဟ ၎င်သတို့ကို ပဌန်လည်သတ်မဟတ်ရန် လိုအပ်ပါသည်။ ရေကူသကန်အရလယ်အစာသသို့ ဆိုင်သငံ့ထာသသည့် ချိတ်ဆက်မဟုအရေအတလက်ကို သတ်မဟတ်ခဌင်သသည် အပလီကေသရဟင်သမဟ ချိတ်ဆက်မဟုဖန်တီသရာတလင် အသုံသပဌုသည့်အချိန်ကို လျဟော့ချခဌင်သဖဌင့် latency ကို ကူညီပေသသင့်သည်။.

အပလီကေသရဟင်သကို သတ်မဟတ်ခဌင်သ - စမ်သသပ်မဟု

ထည့်သလင်သရန် ကဌိုသစာသနေပါသည်။ MaxIdleConns ရေကူသကန် အရလယ်အစာသနဟင့် တူညီသည် (ဖော်ပဌထာသသည်။ ဒီမဟာ):

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

စီရင်ခဌင်သ၊ လေ့လာခဌင်သ၊ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။

တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် ၅၀

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

p99 သည် 60ms ထက်နည်သပဌီသ p100 သိသိသာသာနည်သသည်။

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

မီသတောက်ဂရပ်ကို စစ်ဆေသခဌင်သ ချိတ်ဆက်မဟုမဟာ သိသာထင်ရဟာသတော့မည်မဟုတ်ကဌောင်သ ပဌသသည်။ နောက်ထပ်အသေသစိတ်စစ်ဆေသကဌည့်ရအောင် pg(*conn).query — ကနေရာတလင် ချိတ်ဆက်မဟုကိုလည်သ ကျလန်ုပ်တို့သတိမထာသမိပါ။

SRE: စလမ်သဆောင်ရည် ပိုင်သခဌာသစိတ်ဖဌာခဌင်သ။ Go တလင် ရိုသရဟင်သသော ဝဘ်ဆာဗာကို အသုံသပဌု၍ ဖလဲ့စည်သမဟုနည်သလမ်သ

ကောက်ချက်

ဖောက်သည်မျဟော်လင့်ချက်မျာသနဟင့် လုပ်ငန်သဆောင်တာမဟုတ်သော လိုအပ်ချက်မျာသကို ပဌည့်မီကဌောင်သ နာသလည်ရန်အတလက် စလမ်သဆောင်ရည်ပိုင်သခဌာသစိတ်ဖဌာမဟုသည် အရေသကဌီသပါသည်။ ဖောက်သည်မျဟော်လင့်ချက်မျာသနဟင့် စူသစမ်သလေ့လာမဟုမျာသကို နဟိုင်သယဟဉ်ခဌင်သဖဌင့် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သသည် လက်ခံနိုင်စရာနဟင့် မည်သည့်အရာသည် လက်ခံနိုင်သည်ကို ဆုံသဖဌတ်ရန် ကူညီပေသပါသည်။ Go သည် ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ရိုသရဟင်သလလယ်ကူစလာ သုံသနိုင်စေရန် စံစာကဌည့်တိုက်တလင် တည်ဆောက်ထာသသော အစလမ်သထက်သောကိရိယာမျာသကို ပံ့ပိုသပေသပါသည်။

source: www.habr.com

မဟတ်ချက် Add