ကျလန်ုပ်တို့သည် Yandex.Cloud တလင် ပလဲပေါင်သ 10 လက်ခံပါသည်။ အပိုင်သ 000

အာသလုံသပဲ မင်္ဂလာပါ သူငယ်ချင်သတို့။

* ကဆောင်သပါသသည် REBRAIN & Yandex.Cloud အဖလင့်အလုပ်ရုံဆလေသနလေသပလဲကို အခဌေခံထာသခဌင်သဖဌစ်ပဌီသ ဗီဒီယိုကိုကဌည့်ရဟုလိုပါက ကလင့်ခ်တလင် ကဌည့်ရဟုနိုင်သည် - https://youtu.be/cZLezUm0ekE

ကျလန်ုပ်တို့သည် မကဌာသေသမီက Yandex.Cloud ကို တိုက်ရိုက်စမ်သသုံသရန် အခလင့်အရေသရခဲ့သည်။ ကျလန်ုပ်တို့သည် ရဟည်လျာသပဌီသ ခက်ခက်ခဲခဲ စုံစမ်သစစ်ဆေသလိုသောကဌောင့်၊ ရိုသရဟင်သသော Wordpress ဘလော့ဂ်ကို cloud အခဌေခံဖဌင့် စတင်ရန် စိတ်ကူသကို ချက်ချင်သ စလန့်လလဟတ်လိုက်သည် - ပျင်သစရာကောင်သလလန်သပါသည်။ အချို့သောစဉ်သစာသပဌီသနောက်၊ ကျလန်ုပ်တို့သည် အချိန်နဟင့်တပဌေသညီမုဒ်တလင် ဖဌစ်ရပ်မျာသကိုလက်ခံခဌင်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သအတလက် ထုတ်လုပ်ရေသဝန်ဆောင်မဟုဗိသုကာနဟင့်ဆင်တူသည့်အရာတစ်ခုကို အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။

အလန်လိုင်သ (သာမက) စီသပလာသရေသလုပ်ငန်သ အမျာသစုသည် ၎င်သတို့၏ သုံသစလဲသူမျာသနဟင့် ၎င်သတို့၏ လုပ်ဆောင်ချက်မျာသနဟင့် ပတ်သက်သည့် အချက်အလက်မျာသ တောင်တန်သတစ်ခုကို တစ်နည်သနည်သဖဌင့် စုဆောင်သကဌသည်ကို ကျလန်ုပ် လုံသဝသေချာပါသည်။ အနည်သဆုံသအာသဖဌင့်၊ အချို့သော ဆုံသဖဌတ်ချက်မျာသချရန်အတလက် ကအရာသည် လိုအပ်သည် - ဥပမာအာသဖဌင့်၊ သင်သည် အလန်လိုင်သဂိမ်သတစ်ခုကို စီမံခန့်ခလဲပါက၊ အသုံသပဌုသူမျာသ မကဌာခဏ ပိတ်မိနေပဌီသ သင့်အရုပ်ကို ဖျက်ပစ်သည့် အဆင့်ရဟိ စာရင်သအင်သမျာသကို ကဌည့်ရဟုနိုင်ပါသည်။ သို့မဟုတ် အသုံသပဌုသူမျာသသည် မည်သည့်အရာကိုမျဟ မဝယ်ယူဘဲ သင့်ဆိုဒ်မဟ ထလက်ခလာသလာသခဌင်သ (မင်္ဂလာပါ Yandex.Metrica)။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့၏ဇာတ်လမ်သ- golang တလင် အက်ပလီကေသရဟင်သတစ်ခု မည်သို့ရေသခဲ့ပုံ၊ kafka vs rabbitmq vs yqs ကို စမ်သသပ်ပဌီသ Clickhouse အစုအဝေသတစ်ခုတလင် ဒေတာစီသကဌောင်သကို ရေသသာသပဌီသ yandex datalens မျာသကို အသုံသပဌု၍ ဒေတာကို မဌင်ယောင်ကဌည့်ပါ။ ပုံမဟန်အာသဖဌင့်၊ ကအရာအာသလုံသကို docker၊ terraform၊ gitlab ci နဟင့် prometheus ပုံစံဖဌင့် အခဌေခံအဆောက်အအုံဆိုင်ရာ နဟစ်သက်ဖလယ်မျာသဖဌင့် ပေါင်သစပ်ထာသသည်။ သလာသကဌရအောင်!

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

အပိုင်သ 1 (သင်ဖတ်နေပါသည်)။ ဖဌေရဟင်သချက်၏ သတ်မဟတ်ချက်မျာသနဟင့် ဗိသုကာလက်ရာမျာသအပေါ် ကျလန်ုပ်တို့ ဆုံသဖဌတ်မည်ဖဌစ်ပဌီသ golang ဖဌင့် အက်ပလီကေသရဟင်သတစ်ခုကိုလည်သ ရေသသာသပါမည်။
အပိုင်သ 2။ ကျလန်ုပ်တို့၏အက်ပလီကေသရဟင်သကို ထုတ်လုပ်ရန်၊ ၎င်သကို အတိုင်သအတာအထိ လုပ်နိုင်စေရန်နဟင့် ဝန်ကို စမ်သသပ်ပါသည်။
အပိုင်သ ၃။ ကျလန်ုပ်တို့သည် ဖိုင်မျာသတလင်မဟုတ်ဘဲ ကဌာသခံတစ်ခုတလင် မက်ဆေ့ချ်မျာသကို အဘယ်ကဌောင့်သိမ်သဆည်သရသနည်သ၊ kafka၊ rabbitmq နဟင့် yandex တန်သစီခဌင်သဝန်ဆောင်မဟုတို့ကိုလည်သ နဟိုင်သယဟဉ်ကဌည့်ကဌပါစို့။
အပိုင်သ ၄ ကျလန်ုပ်တို့သည် Clickhouse အစုအဝေသတစ်ခုအာသ ဖဌန့်ကျက်အသုံသပဌုမည်ဖဌစ်ပဌီသ ထိုနေရာတလင် ကဌာသခံမဟဒေတာမျာသကိုလလဟဲပဌောင်သရန် streaming ဝန်ဆောင်မဟုကိုရေသသာသကာ datalens တလင် ပုံရိပ်ယောင်ပုံဖော်ခဌင်သကို စနစ်ထည့်သလင်သပါမည်။
အပိုင်သ ၅ အခဌေခံအဆောက်အညတစ်ခုလုံသကို သင့်လျော်သောပုံသဏ္ဍာန်အဖဌစ် ယူဆောင်ကဌပါစို့ - gitlab ci ကို အသုံသပဌု၍ ci/cd ကိုတည်ဆောက်ပါ၊ prometheus နဟင့်ကောင်စစ်ဝန်ကိုအသုံသပဌု၍ စောင့်ကဌည့်ခဌင်သနဟင့် ဝန်ဆောင်မဟုရဟာဖလေတလေ့ရဟိမဟုကို ချိတ်ဆက်ပါ။

ТЗ

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

  1. ကျလန်ုပ်တို့သည် events.kis.im (kis.im သည် ဆောင်သပါသအာသလုံသတလင် ကျလန်ုပ်တို့အသုံသပဌုမည့် စမ်သသပ်ဒိုမိန်သဖဌစ်သည်)၊ HTTPS ကို အသုံသပဌု၍ ဖဌစ်ရပ်မျာသကို လက်ခံသင့်သည့် အဆုံသမဟတ်တစ်ခု ရဟိလိုပါသည်။
  2. အစီအစဉ်မျာသသည် ရိုသရဟင်သသော json တစ်ခုဖဌစ်သည်- {“event”: “view”, “os”: “linux”, “browser”: “chrome”}။ နောက်ဆုံသအဆင့်တလင် ကျလန်ုပ်တို့သည် နယ်ပယ်အနည်သငယ်ကို ထပ်ထည့်မည်ဖဌစ်သော်လည်သ ၎င်သသည် ကဌီသမာသသောအခန်သကဏ္ဍမဟ ပါဝင်မည်မဟုတ်ပါ။ ဆန္ဒရဟိပါက protobuf သို့ ပဌောင်သနိုင်သည်။
  3. ဝန်ဆောင်မဟုသည် တစ်စက္ကန့်လျဟင် ဖဌစ်ရပ်ပေါင်သ 10 ကို လုပ်ဆောင်နိုင်ရပါမည်။
  4. ကျလန်ုပ်တို့၏ဖဌေရဟင်သချက်တလင် သာဓကအသစ်မျာသကို ပေါင်သထည့်ရုံဖဌင့် အလျာသလိုက်အတိုင်သအတာကို တိုင်သတာရန်ဖဌစ်သင့်သည်။ client တောင်သဆိုမဟုမျာသအတလက် latency လျဟော့ချရန် ရဟေ့အပိုင်သကို မတူညီသော geolocation မျာသသို့ ရလဟေ့နိုင်လျဟင် ကောင်သပါသည်။
  5. အမဟာသခံနိုင်ရည်ရဟိသည်။ ဖဌေရဟင်သချက်သည် လုံလောက်သောတည်ငဌိမ်မဟုရဟိရမည်ဖဌစ်ပဌီသ မည်သည့်အစိတ်အပိုင်သ၏ပဌိုလဲမဟုကို ရဟင်သန်နိုင်ရမည် (အချို့သောအရေအတလက်အထိ၊ ဟုတ်ပါတယ်)။

ဗိသုကာအတတ်ပညာ

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

ကျလန်ုပ်တို့သည် Yandex.Cloud တလင် ပလဲပေါင်သ 10 လက်ခံပါသည်။ အပိုင်သ 000

ဒါဆို ငါတို့မဟာ ဘာတလေရဟိလဲ။

1. ဘယ်ဘက်တလင် အမျိုသမျိုသသော ပလဲမျာသကို ဖန်တီသပေသသည့် ကျလန်ုပ်တို့၏စက်ပစ္စည်သမျာသသည် စမတ်ဖုန်သပေါ်တလင် ကစာသစရာအဆင့်တစ်ခုကို ပဌီသမဌောက်သည့် ကစာသသမာသမျာသဖဌစ်စေ သို့မဟုတ် ပုံမဟန်ဘရောက်ဆာမဟတစ်ဆင့် အလန်လိုင်သစတိုသတလင် မဟာယူမဟုဖန်တီသသည့် ကစာသသမာသမျာသဖဌစ်သည်။ သတ်မဟတ်ချက်တလင်ဖော်ပဌထာသသည့်အတိုင်သ ဖဌစ်ရပ်တစ်ခုသည် ကျလန်ုပ်တို့၏အဆုံသမဟတ် - events.kis.im သို့ ပေသပို့သည့် ရိုသရဟင်သသော json တစ်ခုဖဌစ်သည်။

2. ပထမဆာဗာနဟစ်ခုသည် ရိုသရဟင်သသောဟန်ချက်ညီသူမျာသဖဌစ်ပဌီသ ၎င်သတို့၏အဓိကတာဝန်မျာသမဟာ-

  • အဆက်မပဌတ်ရရဟိနိုင်ပါစေ။ ၎င်သကိုလုပ်ဆောင်ရန်၊ ပဌဿနာမျာသရဟိသောအခါတလင် node မျာသအကဌာသ virtual IP ကိုပဌောင်သပေသမည့်ဥပမာ- Keepalived ကိုသင်အသုံသပဌုနိုင်သည်။
  • TLS ကို အဆုံသသတ်ပါ။ ဟုတ်ကဲ့၊ ၎င်သတို့အပေါ် TLS ကို ကျလန်ုပ်တို့ ရပ်စဲပါမည်။ ပထမညသစလာ၊ ကျလန်ုပ်တို့၏ဖဌေရဟင်သချက်သည် နည်သပညာဆိုင်ရာ သတ်မဟတ်ချက်မျာသနဟင့် ကိုက်ညီစေရန်၊ ဒုတိယအချက်မဟာ ကျလန်ုပ်တို့၏ နောက်ခံဆာဗာမျာသမဟ ကုဒ်ဝဟက်ထာသသော ချိတ်ဆက်မဟုတစ်ခုကို ထူထောင်ခဌင်သ၏ ဝန်ထုပ်ဝန်ပိုသကို သက်သာစေရန်။
  • ရရဟိနိုင်သော နောက်ခံဆာဗာမျာသအတလက် အဝင်တောင်သဆိုမဟုမျာသကို ချိန်ခလင်လျဟာညဟိပါ။ ကနေရာတလင် အဓိကစကာသလုံသကို သုံသနိုင်သည်။ ယင်သကိုအခဌေခံ၍ load balancers သည် ကျလန်ုပ်တို့၏ဆာဗာမျာသကို အပလီကေသရဟင်သမျာသဖဌင့် စောင့်ကဌည့်နိုင်ပဌီသ မအောင်မဌင်သော node မျာသသို့ လမ်သကဌောင်သကို ဟန်ချက်ညီအောင် ရပ်တန့်နိုင်ရမည်ကို နာသလည်လာပါသည်။

3. Balancers မျာသပဌီသနောက်၊ ကျလန်ုပ်တို့တလင် အတော်လေသရိုသရဟင်သသော အပလီကေသရဟင်သတစ်ခုကို လုပ်ဆောင်နေသည့် အပလီကေသရဟင်သဆာဗာမျာသရဟိသည်။ HTTP မဟတစ်ဆင့် ဝင်လာသော တောင်သဆိုမဟုမျာသကို လက်ခံနိုင်သည်၊ ပေသပို့ထာသသော json ကို တရာသဝင်အောင်ပဌုလုပ်ပဌီသ ဒေတာကို ကဌာသခံအဖဌစ် ထည့်သလင်သနိုင်မည်ဖဌစ်သည်။

4. ပုံကဌမ်သသည် kafka အာသ ကဌာသခံတစ်ခုအဖဌစ် ပဌသသော်လည်သ၊ ကအဆင့်တလင် အခဌာသသော အလာသတူဝန်ဆောင်မဟုမျာသကို အသုံသပဌုနိုင်သည်။ တတိယဆောင်သပါသတလင် Kafka၊ rabbitmq နဟင့် yqs တို့ကို နဟိုင်သယဟဉ်ပါမည်။

5. ကျလန်ုပ်တို့၏ဗိသုကာလက်ရာ၏အဆုံသစလန်သောအချက်မဟာ Clickhouse - ဒေတာပမာဏမျာသစလာကို သိမ်သဆည်သပဌီသ စီမံဆောင်ရလက်နိုင်သည့် ကော်လံဘာသဒေတာဘေ့စ်ဖဌစ်သည်။ ကအဆင့်တလင်၊ ကျလန်ုပ်တို့သည် ကဌာသခံစနစ်မဟ ဒေတာကို သိုလဟောင်မဟုစနစ်သို့ လလဟဲပဌောင်သရန် လိုအပ်သည် (အပိုဒ် 4 တလင် ပိုမိုသိရဟိနိုင်သည်)။

ကဒီဇိုင်သသည် ကျလန်ုပ်တို့အာသ အလလဟာတစ်ခုစီကို အလျာသလိုက် အမဟီအခိုကင်သစလာ အတိုင်သအတာဖဌင့် တိုင်သတာနိုင်စေပါသည်။ Backend ဆာဗာမျာသသည် ထိန်သကျောင်သ၍မရပါ - နောက်ထပ်တစ်ခု ထပ်ထည့်ကဌည့်ရအောင် - ၎င်သတို့သည် နိုင်ငံမဲ့အက်ပ်လီကေသရဟင်သမျာသဖဌစ်သောကဌောင့် ၎င်သကို အလိုအလျောက်ပင် လုပ်ဆောင်နိုင်ပါသည်။ Kafka စတိုင်ကဌာသခံသည် အလုပ်မလုပ်ပါ—ဆာဗာမျာသထပ်ထည့်ကာ ကျလန်ုပ်တို့၏အကဌောင်သအရာ၏ အပိုင်သအချို့ကို ၎င်သတို့ထံ လလဟဲပဌောင်သကဌပါစို့။ Clickhouse က အဲဒါကို မကိုင်တလယ်နိုင်ဘူသ - မဖဌစ်နိုင်ဘူသ :) တကယ်တော့၊ ငါတို့က ဆာဗာတလေကို ချိတ်ဆက်ပဌီသ ဒေတာတလေကို ခလဲထုတ်မယ်။

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

ကျလန်ုပ်တို့သည် Yandex.Cloud တလင် ပလဲပေါင်သ 10 လက်ခံပါသည်။ အပိုင်သ 000

geolocation တစ်ခုစီတလင် application နဟင့် kafka ဖဌင့် load balancer ကိုကျလန်ုပ်တို့ချထာသပါသည်။ ယေဘုယျအာသဖဌင့်၊ အပလီကေသရဟင်သဆာဗာ 2 ခု၊ kafka node 3 ခုနဟင့် cloud balancer ဥပမာ၊ cloudflare သည် လုံလောက်သည်၊ ၎င်သသည် client ၏အရင်သအမဌစ် IP address ကိုအခဌေခံ၍ ပထဝီဝင်တည်နေရာအလိုက် application nodes မျာသရရဟိနိုင်မဟုနဟင့် balance တောင်သဆိုမဟုမျာသကိုစစ်ဆေသပေသမည်ဖဌစ်ပါသည်။ ထို့ကဌောင့်၊ အမေရိကန်ဖောက်သည်တစ်ညသမဟပေသပို့သောဒေတာသည် အမေရိကန်ဆာဗာမျာသပေါ်တလင် ရောက်ရဟိမည်ဖဌစ်သည်။ အာဖရိကမဟဒေတာသည် အာဖရိကန်ဖဌစ်သည်။

ထို့နောက်အရာအာသလုံသသည်အတော်လေသရိုသရဟင်သပါသည် - ကျလန်ုပ်တို့သည် Kafka set မဟ mirror tool ကိုအသုံသပဌုပဌီသနေရာအာသလုံသမဟဒေတာအာသလုံသကိုရုရဟာသရဟိကျလန်ုပ်တို့၏ဗဟိုဒေတာစင်တာသို့ကူသယူပါ။ အတလင်သပိုင်သ၊ ကျလန်ုပ်တို့သည် ဒေတာကို ခလဲခဌမ်သစိပ်ဖဌာပဌီသ နောက်ဆက်တလဲမဌင်ယောင်မဟုမျာသအတလက် Clickhouse တလင် မဟတ်တမ်သတင်ပါသည်။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် ဗိသုကာပညာကို ခလဲထုတ်လိုက်သည်- Yandex.Cloud ကို စတင်လဟုပ်ယမ်သလိုက်ကဌပါစို့။

ကျလန်ုပ်တို့သည် အက်ပလီကေသရဟင်သတစ်ခုရေသနေပါသည်။

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

တစ်နာရီကဌာအောင် (နာရီအနည်သငယ်ကဌာသည်ဖဌစ်စေ) ကျလန်ုပ်တို့ ကကဲ့သို့သော အရာတစ်ခုကို ရရဟိသည်- https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/main.go.

ကနေရာတလင် ကျလန်ုပ်မဟတ်သာသလိုသည့် အဓိကအချက်မျာသမဟာ အဘယ်နည်သ။

1. အပလီကေသရဟင်သကို စတင်သောအခါ၊ သင်သည် အလံနဟစ်ခုကို သတ်မဟတ်နိုင်သည်။ အဝင် http တောင်သဆိုချက်မျာသ (-addr) ကို နာသထောင်မည့် port တစ်ခုတလင် တာဝန်ရဟိပါသည်။ ဒုတိယမဟာ ကျလန်ုပ်တို့၏အဖဌစ်အပျက်မျာသကို မဟတ်တမ်သတင်မည့် kafka ဆာဗာလိပ်စာအတလက်ဖဌစ်သည် (-kafka)။

addr     = flag.String("addr", ":8080", "TCP address to listen to")
kafka    = flag.String("kafka", "127.0.0.1:9092", "Kafka endpoints”)

2. အပလီကေသရဟင်သသည် sarama စာကဌည့်တိုက်ကိုအသုံသပဌုသည် ([]github.com/Shopify/sarama) kafka အစုအဝေသသို့ မက်ဆေ့ချ်မျာသ ပေသပို့ရန်။ ကျလန်ုပ်တို့သည် အမဌင့်ဆုံသလုပ်ဆောင်မဟုအမဌန်နဟုန်သအတလက် ရည်ရလယ်သည့် ဆက်တင်မျာသကို ချက်ချင်သသတ်မဟတ်ထာသသည်-

config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForLocal
config.Producer.Compression = sarama.CompressionSnappy
config.Producer.Return.Successes = true

3. ကျလန်ုပ်တို့၏အပလီကေသရဟင်သတလင် အမျိုသမျိုသသော မက်ထရစ်မျာသကို စုဆောင်သပေသသည့် built-in prometheus client လည်သပါရဟိပါသည်။

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

4. ကျလန်ုပ်တို့၏လျဟောက်လလဟာတင်ခဌင်သလုပ်ငန်သစဉ်တလင် အဆုံသအချက်သုံသချက်-

  • /status - ကျလန်ုပ်တို့ အသက်ရဟင်နေကဌောင်သပဌသရန် ရိုသရဟင်သစလာ ok ပဌန်သလာသပါ။ Kafka အစုအဝေသ၏ရရဟိနိုင်မဟုကဲ့သို့သောစစ်ဆေသမဟုအချို့ကိုသင်ထည့်သလင်သနိုင်သည်။
  • /metrics - က url အရ၊ prometheus client သည် စုဆောင်သထာသသော မက်ထရစ်မျာသကို ပဌန်ပေသပါမည်။
  • /post သည် အတလင်သမဟ json ဖဌင့် POST တောင်သဆိုမဟုမျာသကို ပေသပို့မည့် အဓိကအဆုံသမဟတ်ဖဌစ်သည်။ ကျလန်ုပ်တို့၏အက်ပ်လီကေသရဟင်သသည် json ကိုတရာသဝင်မဟုရဟိမရဟိစစ်ဆေသပဌီသအရာအာသလုံသအဆင်ပဌေပါက၎င်သသည်ဒေတာကို Kafka အစုအဝေသသို့ရေသပေသသည်။

ကုဒ်မပဌည့်စုံပါက ကဌိုတင်စာရင်သသလင်သပါ - ၎င်သသည် (ပဌီသသင့်သည်!) ပဌီသမဌောက်နိုင်ပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် built-in net/http ကိုအသုံသပဌုခဌင်သကိုရပ်ပဌီသ ပိုမိုမဌန်ဆန်သော http သို့ပဌောင်သနိုင်သည်။ သို့မဟုတ် ဒေတာမျာသကို ကဌာသခံမဟ clickhouse အစုအဝေသသို့ လလဟဲပဌောင်သသည့်အခါ json တရာသဝင်မဟုစစ်ဆေသချက်ကို နောက်အဆင့်သို့ ရလဟေ့ခဌင်သဖဌင့် လုပ်ဆောင်ချိန်နဟင့် cpu ရင်သမဌစ်မျာသကို ရရဟိနိုင်သည်။

ပဌဿနာ၏ဖလံ့ဖဌိုသတိုသတက်မဟုဘက်ခဌမ်သအပဌင်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏အနာဂတ်အခဌေခံအဆောက်အအုံကို ချက်ချင်သစဉ်သစာသပဌီသ docker မဟတစ်ဆင့် ကျလန်ုပ်တို့၏လျဟောက်လလဟာကို အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။ အပလီကေသရဟင်သကိုတည်ဆောက်ရန်အတလက် နောက်ဆုံသ Dockerfile ဖဌစ်သည်။ https://github.com/RebrainMe/yandex-cloud-events/blob/master/app/Dockerfile. ယေဘူယျအာသဖဌင့်၊ ၎င်သသည် အလလန်ရိုသရဟင်သသည်၊ ကျလန်ုပ်အာရုံစိုက်လိုသည့် တစ်ခုတည်သသောအချက်မဟာ ကျလန်ုပ်တို့၏ကလန်တိန်နာ၏နောက်ဆုံသပုံကို လျဟော့ချနိုင်စေသည့် multistage assembly ဖဌစ်သည်၊

Cloud တလင် ပထမဆုံသခဌေလဟမ်သမျာသ

ပထမဆုံသအနေနဲ့ စာရင်သသလင်သလိုက်ပါ။ cloud.yandex.ru. လိုအပ်သော ကလက်လပ်မျာသအာသလုံသကို ဖဌည့်ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် အကောင့်တစ်ခုဖန်တီသပဌီသ cloud ဝန်ဆောင်မဟုမျာသကို စမ်သသပ်ရန်အတလက် အသုံသပဌုနိုင်သည့် ငလေပမာဏအချို့အတလက် ထောက်ပံ့ကဌေသပေသပါမည်။ ကျလန်ုပ်တို့၏ ဆောင်သပါသမဟ အဆင့်အာသလုံသကို ပဌန်လုပ်လိုပါက၊ ကထောက်ပံ့ငလေသည် သင့်အတလက် လုံလောက်ပါသည်။

မဟတ်ပုံတင်ပဌီသနောက်၊ cloud အရင်သအမဌစ်မျာသကို သင်စတင်ဖန်တီသနိုင်စေမည့် သီသခဌာသ cloud နဟင့် မူရင်သလမ်သညလဟန်တစ်ခုကို သင့်အတလက် ဖန်တီသပေသမည်ဖဌစ်သည်။ ယေဘူယျအာသဖဌင့်၊ Yandex.Cloud တလင် အရင်သအမဌစ်မျာသ၏ ဆက်နလယ်မဟုသည် ကကဲ့သို့ ဖဌစ်ပုံရသည်။

ကျလန်ုပ်တို့သည် Yandex.Cloud တလင် ပလဲပေါင်သ 10 လက်ခံပါသည်။ အပိုင်သ 000

အကောင့်တစ်ခုအတလက် cloud မျာသစလာကို သင်ဖန်တီသနိုင်သည်။ Cloud အတလင်သတလင် မတူညီသော ကုမ္ပဏီပရောဂျက်မျာသအတလက် မတူညီသော လမ်သညလဟန်မျာသ ပဌုလုပ်ပါ။ ကအကဌောင်သကို စာတမ်သပဌုစုခဌင်သတလင် ပိုမိုဖတ်ရဟုနိုင်ပါသည်- https://cloud.yandex.ru/docs/resource-manager/concepts/resources-hierarchy. စကာသမစပ်၊ ကျလန်ုပ်သည် ၎င်သကို အောက်ဖော်ပဌပါ စာသာသတလင် မကဌာခဏ ကိုသကာသပါမည်။ အခဌေခံအဆောက်အအုံတစ်ခုလုံသကို အစကနေစတည်ဆောက်တဲ့အခါ၊ စာရလက်စာတမ်သက တစ်ကဌိမ်ထက်ပိုပဌီသ ကူညီပေသတဲ့အတလက် အဲဒါကို လေ့လာဖို့ အကဌံပဌုထာသပါတယ်။

cloud ကို စီမံခန့်ခလဲရန်၊ သင်သည် ဝဘ်အင်တာဖေ့စ်နဟင့် ကလန်ဆိုသလ် အသုံသဝင်မဟု - yc နဟစ်ခုလုံသကို အသုံသပဌုနိုင်သည်။ ထည့်သလင်သခဌင်သကို command တစ်ခုတည်သဖဌင့် လုပ်ဆောင်သည် (Linux နဟင့် Mac Os အတလက်)

curl https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash

သင့်အတလင်သပိုင်သလုံခဌုံရေသကျလမ်သကျင်သူသည် အင်တာနက်မဟ scripts မျာသကို run ခဌင်သနဟင့်ပတ်သက်၍ အပဌင်သအထန်လုပ်နေပါက၊ ပထမညသစလာ သင်သည် script ကိုဖလင့်ပဌီသ ၎င်သကိုဖတ်နိုင်ပဌီသ ဒုတိယအနေဖဌင့်၊ root လုပ်ပိုင်ခလင့်မရဟိဘဲ ကျလန်ုပ်တို့၏အသုံသပဌုသူအောက်တလင် ၎င်သကို run နိုင်ပါသည်။

Windows အတလက် client တစ်ခုကို install လုပ်လိုပါက၊ ညလဟန်ကဌာသချက်မျာသကို အသုံသပဌုနိုင်ပါသည်။ ဒီမဟာ ပဌီသမဟ execute yc init၎င်သကို အပဌည့်အဝ စိတ်ကဌိုက်ပဌင်ဆင်ရန်-

vozerov@mba:~ $ yc init
Welcome! This command will take you through the configuration process.
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id= in order to obtain OAuth token.

Please enter OAuth token:
Please select cloud to use:
 [1] cloud-b1gv67ihgfu3bp (id = b1gv67ihgfu3bpt24o0q)
 [2] fevlake-cloud (id = b1g6bvup3toribomnh30)
Please enter your numeric choice: 2
Your current cloud has been set to 'fevlake-cloud' (id = b1g6bvup3toribomnh30).
Please choose folder to use:
 [1] default (id = b1g5r6h11knotfr8vjp7)
 [2] Create a new folder
Please enter your numeric choice: 1
Your current folder has been set to 'default' (id = b1g5r6h11knotfr8vjp7).
Do you want to configure a default Compute zone? [Y/n]
Which zone do you want to use as a profile default?
 [1] ru-central1-a
 [2] ru-central1-b
 [3] ru-central1-c
 [4] Don't set default zone
Please enter your numeric choice: 1
Your profile default Compute zone has been set to 'ru-central1-a'.
vozerov@mba:~ $

နိယာမအာသဖဌင့်၊ လုပ်ငန်သစဉ်သည် ရိုသရဟင်သသည် - ညသစလာ သင်သည် cloud ကိုစီမံခန့်ခလဲရန် oauth တိုကင်တစ်ခုရရန်၊ cloud ကိုရလေသချယ်ပဌီသ သင်အသုံသပဌုမည့် folder ကိုရလေသချယ်ပါ။

သင့်တလင် တစ်ခုတည်သသော cloud တလင် အကောင့်မျာသစလာ သို့မဟုတ် ဖိုင်တလဲမျာသရဟိပါက၊ သင်သည် yc config ပရိုဖိုင်ဖန်တီသပဌီသ ၎င်သတို့ကဌာသတလင် ပဌောင်သခဌင်သမဟတစ်ဆင့် သီသခဌာသဆက်တင်မျာသဖဌင့် နောက်ထပ်ပရိုဖိုင်မျာသကို ဖန်တီသနိုင်သည်။

အထက်ပါနည်သလမ်သမျာသအပဌင် Yandex.Cloud အဖလဲ့သည် အလလန်ကောင်သမလန်ကဌောင်သ ရေသသာသခဲ့သည်။ terraform အတလက် plugin cloud အရင်သအမဌစ်မျာသကို စီမံခန့်ခလဲရန်အတလက်။ ကျလန်ုပ်အနေဖဌင့်၊ ကျလန်ုပ်သည် ဆောင်သပါသ၏တစ်စိတ်တစ်ပိုင်သအဖဌစ် ဖန်တီသမည့် အရင်သအမဌစ်အာသလုံသကို ဖော်ပဌသည့် git repository ကို ပဌင်ဆင်ခဲ့သည်။ https://github.com/rebrainme/yandex-cloud-events/. ကျလန်ုပ်တို့သည် မာစတာဌာနခလဲကို စိတ်ဝင်စာသပါသည်၊ ၎င်သကို ပဌည်တလင်သတလင် ပုံတူပလာသလိုက်ကဌပါစို့။


vozerov@mba:~ $ git clone https://github.com/rebrainme/yandex-cloud-events/ events
Cloning into 'events'...
remote: Enumerating objects: 100, done.
remote: Counting objects: 100% (100/100), done.
remote: Compressing objects: 100% (68/68), done.
remote: Total 100 (delta 37), reused 89 (delta 26), pack-reused 0
Receiving objects: 100% (100/100), 25.65 KiB | 168.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
vozerov@mba:~ $ cd events/terraform/

terraform တလင်အသုံသပဌုသည့် အဓိက variable အာသလုံသကို main.tf ဖိုင်တလင် ရေသသာသထာသသည်။ စတင်ရန်၊ အောက်ပါအကဌောင်သအရာဖဌင့် terraform ဖိုင်တလဲတလင် private.auto.tfvars ဖိုင်ကို ဖန်တီသပါ။

# Yandex Cloud Oauth token
yc_token = ""
# Yandex Cloud ID
yc_cloud_id = ""
# Yandex Cloud folder ID
yc_folder_id = ""
# Default Yandex Cloud Region
yc_region = "ru-central1-a"
# Cloudflare email
cf_email = ""
# Cloudflare token
cf_token = ""
# Cloudflare zone id
cf_zone_id = ""

ကျလန်ုပ်တို့သည် console utility ကို configure လုပ်ထာသပဌီသဖဌစ်သောကဌောင့် variable အာသလုံသကို yc config list မဟယူနိုင်သည်။ ကိုယ်ရေသကိုယ်တာဒေတာကို မတော်တဆ မထုတ်ဝေမိစေရန်အတလက် private.auto.tfvars ကို .gitignore တလင် ချက်ချင်သထည့်ရန် သင့်အာသ ကျလန်ုပ်အကဌံပဌုလိုပါသည်။

private.auto.tfvars တလင် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဆာဗာမျာသသို့ DNS မဟတ်တမ်သမျာသဖန်တီသရန်နဟင့် ပင်မဒိုမိန်သ events.kis.im ကို proxy ပဌုလုပ်ရန် Cloudflare မဟဒေတာကိုလည်သ သတ်မဟတ်ပေသပါသည်။ cloudflare ကို အသုံသမပဌုလိုပါက main.tf နဟင့် dns.tf ဖိုင်တလင် လိုအပ်သော dns မဟတ်တမ်သမျာသကို ဖန်တီသရန် တာဝန်ရဟိသော cloudflare ဝန်ဆောင်မဟုပေသသူ၏ ကနညသအစကို ဖယ်ရဟာသလိုက်ပါ။

ကျလန်ုပ်တို့၏လုပ်ငန်သတလင် ကျလန်ုပ်တို့သည် ဝဘ်အင်တာဖေ့စ်၊ ကလန်ဆိုသလ်အသုံသပဌုမဟု နဟင့် terraform နည်သလမ်သသုံသခုလုံသကို ပေါင်သစပ်မည်ဖဌစ်သည်။

Virtual ကလန်ရက်မျာသ

ရိုသရိုသသာသသာသပဌောရလျဟင် သင်သည် cloud အသစ်တစ်ခုဖန်တီသသောအခါတလင် သင်သည် သီသခဌာသကလန်ရက်တစ်ခုနဟင့် ရရဟိနိုင်မဟုဇုန်တစ်ခုစီအတလက် တစ်ခုစီအတလက် ကလန်ရက်ခလဲ 3 ခု အလိုအလျောက်ဖန်တီသပေသမည်ဖဌစ်သောကဌောင့် ကအဆင့်ကို ကျော်သလာသနိုင်သည်။ သို့သော် ကျလန်ုပ်တို့သည် ၎င်သ၏ကိုယ်ပိုင်လိပ်စာဖဌင့် ကျလန်ုပ်တို့၏ပရောဂျက်အတလက် သီသခဌာသကလန်ရက်တစ်ခု ပဌုလုပ်လိုသေသသည်။ Yandex.Cloud တလင် ကလန်ရက်အလုပ်လုပ်ပုံ၏ ယေဘူယျ ပုံကဌမ်သကို အောက်ဖော်ပဌပါပုံတလင် ပဌထာသပါသည် (ရိုသသာသစလာ ကူသယူဖော်ပဌပါသည်။ https://cloud.yandex.ru/docs/vpc/concepts/)

ကျလန်ုပ်တို့သည် Yandex.Cloud တလင် ပလဲပေါင်သ 10 လက်ခံပါသည်။ အပိုင်သ 000

ထို့ကဌောင့် သင်သည် အရင်သအမဌစ်မျာသအချင်သချင်သ ဆက်သလယ်နိုင်သည့် ဘုံကလန်ရက်တစ်ခုကို ဖန်တီသပါ။ ရရဟိနိုင်မဟုဇုန်တစ်ခုစီအတလက်၊ subnet တစ်ခုကို ၎င်သ၏ကိုယ်ပိုင်လိပ်စာဖဌင့် ဖန်တီသထာသပဌီသ ယေဘုယျကလန်ရက်သို့ ချိတ်ဆက်ထာသသည်။ ရလဒ်အနေဖဌင့်၊ ၎င်သရဟိ cloud အရင်သအမဌစ်မျာသအာသလုံသသည် မတူညီသောရရဟိနိုင်မဟုဇုန်မျာသတလင်ရဟိနေသော်လည်သ ဆက်သလယ်နိုင်သည်။ မတူညီသော cloud ကလန်ရက်မျာသသို့ ချိတ်ဆက်ထာသသော အရင်သအမဌစ်မျာသကို ပဌင်ပလိပ်စာမျာသမဟတစ်ဆင့်သာ မဌင်နိုင်ပါသည်။ စကာသမစပ် ဒီမဟော်အထဲမဟာ ဘယ်လိုအလုပ်လုပ်လဲ၊ Habre တလင် ကောင်သစလာဖော်ပဌခဲ့သည်။.

ကလန်ရက်ဖန်တီသမဟုကို သိုလဟောင်မဟုမဟ network.tf ဖိုင်တလင် ဖော်ပဌထာသပါသည်။ အဲဒီမဟာ ဘုံပုဂ္ဂလိကကလန်ရက်အတလင်သပိုင်သတစ်ခုကို ဖန်တီသပဌီသ မတူညီတဲ့ရရဟိနိုင်မဟုဇုန်တလေမဟာ ၎င်သကိုချိတ်ဆက်ပါ - internal-a (172.16.1.0/24), internal-b (172.16.2.0/24), internal-c (172.16.3.0/24)၊ )

Terraform ကို စတင်ပဌီသ ကလန်ရက်မျာသ ဖန်တီသပါ-

vozerov@mba:~/events/terraform (master) $ terraform init
... skipped ..

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_vpc_subnet.internal-a -target yandex_vpc_subnet.internal-b -target yandex_vpc_subnet.internal-c

... skipped ...

Plan: 4 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

yandex_vpc_network.internal: Creating...
yandex_vpc_network.internal: Creation complete after 3s [id=enp2g2rhile7gbqlbrkr]
yandex_vpc_subnet.internal-a: Creating...
yandex_vpc_subnet.internal-b: Creating...
yandex_vpc_subnet.internal-c: Creating...
yandex_vpc_subnet.internal-a: Creation complete after 6s [id=e9b1dad6mgoj2v4funog]
yandex_vpc_subnet.internal-b: Creation complete after 7s [id=e2liv5i4amu52p64ac9p]
yandex_vpc_subnet.internal-c: Still creating... [10s elapsed]
yandex_vpc_subnet.internal-c: Creation complete after 10s [id=b0c2qhsj2vranoc9vhcq]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

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

virtual စက်မျာသဖန်တီသခဌင်သ။

အပလီကေသရဟင်သကို စမ်သသပ်ရန်၊ ကျလန်ုပ်တို့သည် virtual machine နဟစ်ခုကို ဖန်တီသရန်သာ လိုအပ်မည်ဖဌစ်သည် - ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို တည်ဆောက်ပဌီသ လုပ်ဆောင်ရန် ပထမ၊ အဝင်မက်ဆေ့ချ်မျာသကို သိမ်သဆည်သရန် ဒုတိယမဟာ Kafka ကို အသုံသပဌုရန် လိုအပ်မည်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို စောင့်ကဌည့်ရန် prometheus ကို configure လုပ်မည့် အခဌာသစက်ကို ဖန်တီသပါမည်။

virtual machines မျာသကို ansible ကို အသုံသပဌု၍ configure လုပ်မည်၊ ထို့ကဌောင့် terraform ကိုမစတင်မီ၊ သင့်တလင် ansible ၏နောက်ဆုံသထလက်ဗာသရဟင်သတစ်ခုရဟိသည်ကို သေချာပါစေ။ ansible galaxy ဖဌင့် လိုအပ်သော အခန်သကဏ္ဍမျာသကို ထည့်သလင်သပါ-

vozerov@mba:~/events/terraform (master) $ cd ../ansible/
vozerov@mba:~/events/ansible (master) $ ansible-galaxy install -r requirements.yml
- cloudalchemy-prometheus (master) is already installed, skipping.
- cloudalchemy-grafana (master) is already installed, skipping.
- sansible.kafka (master) is already installed, skipping.
- sansible.zookeeper (master) is already installed, skipping.
- geerlingguy.docker (master) is already installed, skipping.
vozerov@mba:~/events/ansible (master) $

ansible ဖိုဒါအတလင်သတလင် ကျလန်ုပ်အသုံသပဌုသော ဥပမာ .ansible.cfg ဖလဲ့စည်သမဟုဖိုင်တစ်ခုရဟိသည်။ အဆင်ပဌေလာနိုင်ပါတယ်။

virtual machines မဖန်တီသမီ၊ သင့်တလင် ssh-agent လည်ပတ်နေပဌီသ ssh သော့တစ်ခုထည့်သလင်သထာသကဌောင်သ သေချာစေပါ၊ သို့မဟုတ်ပါက terraform သည် ဖန်တီသထာသသောစက်မျာသသို့ ချိတ်ဆက်နိုင်မည်မဟုတ်ပါ။ ငါ os x မဟာ bug တစ်ခုတလေ့ခဲ့တယ်၊ https://github.com/ansible/ansible/issues/32499#issuecomment-341578864. ထပ်မံမဖဌစ်ပလာသစေရန်အတလက် Terraform ကိုမစတင်မီ env အတလက် variable သေသသေသလေသထည့်ပါ။

vozerov@mba:~/events/terraform (master) $ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

terraform ပါသော folder တလင် ကျလန်ုပ်တို့သည် လိုအပ်သောအရင်သအမဌစ်မျာသကို ဖန်တီသသည်-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_compute_instance.build -target yandex_compute_instance.monitoring -target yandex_compute_instance.kafka
yandex_vpc_network.internal: Refreshing state... [id=enp2g2rhile7gbqlbrkr]
data.yandex_compute_image.ubuntu_image: Refreshing state...
yandex_vpc_subnet.internal-a: Refreshing state... [id=e9b1dad6mgoj2v4funog]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

... skipped ...

Plan: 3 to add, 0 to change, 0 to destroy.

... skipped ...

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

  1. build - စမ်သသပ်ခဌင်သနဟင့် အက်ပလီကေသရဟင်သတစ်ခုကို တည်ဆောက်ရန်အတလက် စက်တစ်ခု။ Docker ကို Ansible မဟ အလိုအလျောက် ထည့်သလင်သခဲ့သည်။
  2. စောင့်ကဌည့်စစ်ဆေသခဌင်သ - စောင့်ကဌည့်ရေသစက် - prometheus & grafana ၎င်သတလင်တပ်ဆင်ထာသသည်။ အကောင့်ဝင် / စကာသဝဟက်စံ: admin / admin
  3. kafka သည် port 9092 တလင် kafka ထည့်သလင်သထာသသော အသေသစာသစက်တစ်ခုဖဌစ်သည်။

၎င်သတို့အာသလုံသ နေရာတလင် ရဟိနေကဌောင်သ သေချာစေကဌပါစို့။

vozerov@mba:~/events (master) $ yc compute instance list
+----------------------+------------+---------------+---------+---------------+-------------+
|          ID          |    NAME    |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+------------+---------------+---------+---------------+-------------+
| fhm081u8bkbqf1pa5kgj | monitoring | ru-central1-a | RUNNING | 84.201.159.71 | 172.16.1.35 |
| fhmf37k03oobgu9jmd7p | kafka      | ru-central1-a | RUNNING | 84.201.173.41 | 172.16.1.31 |
| fhmt9pl1i8sf7ga6flgp | build      | ru-central1-a | RUNNING | 84.201.132.3  | 172.16.1.26 |
+----------------------+------------+---------------+---------+---------------+-------------+

အရင်သအမဌစ်မျာသ ရဟိနေပဌီသ၊ ကနေရာမဟ ကျလန်ုပ်တို့သည် ၎င်သတို့၏ IP လိပ်စာမျာသကို ရယူနိုင်ပါသည်။ အောက်တလင်ဖော်ပဌထာသသောအကဌောင်သအရာတစ်လျဟောက်လုံသ ssh မဟတဆင့်ချိတ်ဆက်ရန်နဟင့်လျဟောက်လလဟာကိုစမ်သသပ်ရန် IP လိပ်စာမျာသကိုအသုံသပဌုပါမည်။ သင့်တလင် terraform နဟင့် ချိတ်ဆက်ထာသသော cloudflare အကောင့်တစ်ခုရဟိပါက၊ အသစ်ဖန်တီသထာသသော DNS အမည်မျာသကို လလတ်လပ်စလာ အသုံသပဌုပါ။
စကာသမစပ်၊ virtual machine တစ်ခုဖန်တီသသောအခါ၊ internal IP နဟင့် internal DNS name ကိုပေသသည်၊ ထို့ကဌောင့် network အတလင်သရဟိဆာဗာမျာသကိုအမည်ဖဌင့်ဝင်ရောက်ကဌည့်ရဟုနိုင်သည်-

ubuntu@build:~$ ping kafka.ru-central1.internal
PING kafka.ru-central1.internal (172.16.1.31) 56(84) bytes of data.
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=1 ttl=63 time=1.23 ms
64 bytes from kafka.ru-central1.internal (172.16.1.31): icmp_seq=2 ttl=63 time=0.625 ms
^C
--- kafka.ru-central1.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.625/0.931/1.238/0.308 ms

kafk ဖဌင့် အဆုံသမဟတ်ကို အပလီကေသရဟင်သသို့ညလဟန်ပဌရန် ၎င်သသည် ကျလန်ုပ်တို့အတလက် အသုံသဝင်ပါလိမ့်မည်။

လျဟောက်လလဟာကိုစုစည်သခဌင်သ။

ကောင်သတယ်၊ ဆာဗာတလေရဟိတယ်၊ အက်ပလီကေသရဟင်သတစ်ခုရဟိတယ် - ကျန်တာအာသလုံသက၎င်သကိုစုဝေသပဌီသထုတ်ဝေရန်ဖဌစ်သည်။ တည်ဆောက်မဟုအတလက် ကျလန်ုပ်တို့သည် ပုံမဟန် docker တည်ဆောက်မဟုကို အသုံသပဌုမည်ဖဌစ်သော်လည်သ ရုပ်ပုံသိုလဟောင်မဟုအဖဌစ် Yandex - container registry မဟ ဝန်ဆောင်မဟုကို အသုံသပဌုပါမည်။ ဒါပေမယ့် အရင်အရာတလေကို အရင်လုပ်ပါ။

ကျလန်ုပ်တို့သည် အပလီကေသရဟင်သကို တည်ဆောက်စက်သို့ ကူသယူကာ ssh မဟတစ်ဆင့် ဝင်ရောက်ပဌီသ ပုံကို စုစည်သပါ။

vozerov@mba:~/events/terraform (master) $ cd ..
vozerov@mba:~/events (master) $ rsync -av app/ [email protected]:app/

... skipped ...

sent 3849 bytes  received 70 bytes  7838.00 bytes/sec
total size is 3644  speedup is 0.93

vozerov@mba:~/events (master) $ ssh 84.201.132.3 -l ubuntu
ubuntu@build:~$ cd app
ubuntu@build:~/app$ sudo docker build -t app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM golang:latest AS build
... skipped ...

Successfully built 9760afd8ef65
Successfully tagged app:latest

တိုက်ပလဲတစ်ဝက်ပဌီသသလာသပါပဌီ - ယခုကျလန်ုပ်တို့၏အက်ပလီကေသရဟင်သ၏လုပ်ဆောင်နိုင်စလမ်သကိုစတင်ကာ kafka သို့ပေသပို့ခဌင်သဖဌင့်ကျလန်ုပ်တို့စစ်ဆေသနိုင်သည်-

ubuntu@build:~/app$ sudo docker run --name app -d -p 8080:8080 app /app/app -kafka=kafka.ru-central1.internal:9092</code>

С лПкальМПй ЌашОМкО ЌПжМП ПтправОть тестПвый event О пПсЌПтреть Ма Птвет:

<code>vozerov@mba:~/events (master) $ curl -D - -s -X POST -d '{"key1":"data1"}' http://84.201.132.3:8080/post
HTTP/1.1 200 OK
Content-Type: application/json
Date: Mon, 13 Apr 2020 13:53:54 GMT
Content-Length: 41

{"status":"ok","partition":0,"Offset":0}
vozerov@mba:~/events (master) $

အပလီကေသရဟင်သသည် အသံသလင်သခဌင်သအောင်မဌင်စလာ တုံ့ပဌန်ခဲ့ပဌီသ မက်ဆေ့ချ်တလင် ပါဝင်သည့် partition နဟင့် offset ၏ ID ကို ညလဟန်ပဌသည်။ လုပ်ရန်ကျန်သည်မဟာ Yandex.Cloud တလင် registry တစ်ခုဖန်တီသပဌီသ ကျလန်ုပ်တို့၏ပုံကို ထိုနေရာတလင် အပ်လုဒ်လုပ်ရန်ဖဌစ်သည် (စာကဌောင်သသုံသကဌောင်သကို အသုံသပဌု၍ ၎င်သကို registry.tf ဖိုင်တလင်ဖော်ပဌထာသသည်)။ သိုလဟောင်ခန်သတစ်ခု ဖန်တီသပါ-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_container_registry.events

... skipped ...

Plan: 1 to add, 0 to change, 0 to destroy.

... skipped ...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

oauth တိုကင်၊ iam တိုကင် သို့မဟုတ် ဝန်ဆောင်မဟုအကောင့်သော့ကို အသုံသပဌု၍ ကလန်တိန်နာမဟတ်ပုံတင်ခဌင်သတလင် စစ်မဟန်ကဌောင်သအထောက်အထာသပဌရန် နည်သလမ်သမျာသစလာရဟိပါသည်။ ကနည်သလမ်သမျာသအကဌောင်သ အသေသစိတ်အချက်အလက်မျာသကို စာရလက်စာတမ်သမျာသတလင် ကဌည့်ရဟုနိုင်ပါသည်။ https://cloud.yandex.ru/docs/container-registry/operations/authentication. ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုအကောင့်သော့ကို အသုံသပဌုပါမည်၊ ထို့ကဌောင့် အကောင့်တစ်ခုဖန်တီသပါ-

vozerov@mba:~/events/terraform (master) $ terraform apply -target yandex_iam_service_account.docker -target yandex_resourcemanager_folder_iam_binding.puller -target yandex_resourcemanager_folder_iam_binding.pusher

... skipped ...

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

အခု ကျန်တာအာသလုံသက အဲဒါအတလက် သော့တစ်ခုလုပ်ရမဟာ။

vozerov@mba:~/events/terraform (master) $ yc iam key create --service-account-name docker -o key.json
id: ajej8a06kdfbehbrh91p
service_account_id: ajep6d38k895srp9osij
created_at: "2020-04-13T14:00:30Z"
key_algorithm: RSA_2048

ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ သိုလဟောင်မဟု ID နဟင့်ပတ်သက်သော အချက်အလက်မျာသကို လက်ခံရရဟိသည်၊ သော့ကို လလဟဲပဌောင်သပဌီသ အကောင့်ဝင်ပါ-

vozerov@mba:~/events/terraform (master) $ scp key.json [email protected]:
key.json                                                                                                                    100% 2392   215.1KB/s   00:00

vozerov@mba:~/events/terraform (master) $ ssh 84.201.132.3 -l ubuntu

ubuntu@build:~$ cat key.json | sudo docker login --username json_key --password-stdin cr.yandex
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
ubuntu@build:~$

ဓါတ်ပုံကို registry သို့ အပ်လုဒ်တင်ရန်၊ ကျလန်ုပ်တို့သည် ကလန်တိန်နာ မဟတ်ပုံတင် ID လိုအပ်သည်၊ ၎င်သကို yc utility မဟ ယူပါသည်-

vozerov@mba:~ $ yc container registry get events
id: crpdgj6c9umdhgaqjfmm
folder_id:
name: events
status: ACTIVE
created_at: "2020-04-13T13:56:41.914Z"

ထို့နောက် ကျလန်ုပ်တို့၏ပုံကို နာမည်အသစ်ဖဌင့် tag လုပ်ပဌီသ အပ်လုဒ်လုပ်ပါ။

ubuntu@build:~$ sudo docker tag app cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
ubuntu@build:~$ sudo docker push cr.yandex/crpdgj6c9umdhgaqjfmm/events:v1
The push refers to repository [cr.yandex/crpdgj6c9umdhgaqjfmm/events]
8c286e154c6e: Pushed
477c318b05cb: Pushed
beee9f30bc1f: Pushed
v1: digest: sha256:1dd5aaa9dbdde2f60d833be0bed1c352724be3ea3158bcac3cdee41d47c5e380 size: 946

ပုံကို အောင်မဌင်စလာ တင်ပေသနိုင်သည်ကို ကျလန်ုပ်တို့ အတည်ပဌုနိုင်သည်-

vozerov@mba:~/events/terraform (master) $ yc container repository list
+----------------------+-----------------------------+
|          ID          |            NAME             |
+----------------------+-----------------------------+
| crpe8mqtrgmuq07accvn | crpdgj6c9umdhgaqjfmm/events |
+----------------------+-----------------------------+

စကာသမစပ်၊ သင်သည် Linux စက်တစ်ခုတလင် yc utility ကိုထည့်သလင်သပါက၊ သင်သည် command ကိုသုံသနိုင်သည်။

yc container registry configure-docker

docker ကို configure လုပ်ရန်။

ကောက်ချက်

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

  1. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏အနာဂတ်ဝန်ဆောင်မဟု၏ ဗိသုကာလက်ရာကို ဖန်တီသပေသပါသည်။
  2. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ စီသပလာသရေသယုတ္တိကို အကောင်အထည်ဖော်သည့် golang တလင် အပလီကေသရဟင်သတစ်ခု ရေသခဲ့သည်။
  3. အဲဒါကို စုဆောင်သပဌီသ သီသသန့် ကလန်တိန်နာ မဟတ်ပုံတင်မဟုမဟာ လောင်သထည့်တယ်။

နောက်အပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် စိတ်ဝင်စာသစရာကောင်သသည့်အရာမျာသဆီသို့ ဆက်သလာသပါမည် - ကျလန်ုပ်တို့၏အက်ပလီကေသရဟင်သကို ထုတ်လုပ်ရောင်သချပဌီသ နောက်ဆုံသတလင် ဝန်ထုပ်ဝန်ပိုသကို စတင်ပါမည်။ မပဌောင်သပါနဟင့်!

ကပစ္စည်သသည် REBRAIN & Yandex.Cloud ဖလင့်ပလဲအလုပ်ရုံဆလေသနလေသပလဲ၏ ဗီဒီယိုရိုက်ကူသမဟုတလင် ဖဌစ်သည်- ကျလန်ုပ်တို့သည် Yandex Cloud တလင် တစ်စက္ကန့်လျဟင် တောင်သဆိုချက် 10 ကို လက်ခံသည် - https://youtu.be/cZLezUm0ekE

အကယ်၍ သင်သည် ထိုကဲ့သို့သော ပလဲမျာသကို အလန်လိုင်သတလင် တက်ရောက်ပဌီသ အချိန်နဟင့်တပဌေသညီ မေသခလန်သမျာသမေသရန် စိတ်ဝင်စာသပါက ဆက်သလယ်လိုက်ပါ။ REBRAIN မဟ DevOps ချန်နယ်.

ဒီလိုပလဲမျိုသကျင်သပခလင့်ရတဲ့အတလက် Yandex.Cloud ကို အထူသကျေသဇူသတင်ရဟိပါတယ်။ ၎င်သတို့ထံသို့ လင့်ခ်- https://cloud.yandex.ru/prices

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

PS ကျလန်ုပ်တို့တလင် တစ်လလျဟင် အခမဲ့စာရင်သစစ် ၂ ခုရဟိသည်၊ သင်၏ပရောဂျက်သည် ၎င်သတို့ထဲမဟတစ်ခုဖဌစ်ကောင်သဖဌစ်နိုင်သည်။

source: www.habr.com

မဟတ်ချက် Add