Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

Mail.ru Group တလင် ကျလန်ုပ်တို့တလင် Tarantool ရဟိသည် - ၎င်သသည် ဒေတာဘေ့စ် (သို့မဟုတ် အပဌန်အလဟန်အာသဖဌင့်?) နဟစ်ဆတိုသသည့် Lua ရဟိ application server တစ်ခုဖဌစ်သည်။ ၎င်သသည် မဌန်ဆန်ပဌီသ အေသမဌသော်လည်သ ဆာဗာတစ်ခု၏ လုပ်ဆောင်နိုင်စလမ်သမျာသမဟာ အကန့်အသတ်မရဟိရဟိနေဆဲဖဌစ်သည်။ ဒေါင်လိုက် အတိုင်သအတာသည် panacea မဟုတ်ပါ။ ထို့ကဌောင့် Tarantool တလင် အလျာသလိုက် ချိန်ညဟိခဌင်သအတလက် ကိရိယာမျာသ ရဟိသည် - vshard module [1]. ၎င်သသည် သင့်အာသ ဆာဗာမျာသစလာတလင် ဒေတာမျာသကို မျဟဝေနိုင်စေသော်လည်သ ၎င်သကို စနစ်ထည့်သလင်သရန်နဟင့် လုပ်ငန်သဆိုင်ရာ ယုတ္တိဗေဒကို ပူသတလဲလုပ်ဆောင်ရန် ၎င်သနဟင့် ပေါင်သစပ်ရန် လိုအပ်သည်။

သတင်သကောင်သ- ကျလန်ုပ်တို့သည် ကဌီသမာသသောရိုက်ချက်အချို့ကို စုဆောင်သထာသသည် (ဥပမာ [2], [3]) နဟင့် ကပဌဿနာအတလက် ဖဌေရဟင်သချက်ကို သိသာထင်ရဟာသစလာ ရိုသရဟင်သစေမည့် အခဌာသမူဘောင်ကို ဖန်တီသခဲ့သည်။

Tarantool Cartridge ရဟုပ်ထလေသသော ဖဌန့်ဝေမဟုစနစ်မျာသကို ဖော်ဆောင်ရန်အတလက် မူဘောင်အသစ်တစ်ခုဖဌစ်သည်။ အခဌေခံအဆောက်အအုံပဌဿနာမျာသကိုဖဌေရဟင်သမည့်အစာသ စီသပလာသရေသယုတ္တိဗေဒကို ရေသသာသခဌင်သအပေါ် အာရုံစိုက်နိုင်စေမည်ဖဌစ်သည်။ ဖဌတ်ပိုင်သအောက်တလင် ကမူဘောင်အလုပ်လုပ်ပုံနဟင့် ၎င်သကိုအသုံသပဌု၍ ဖဌန့်ဝေသည့်ဝန်ဆောင်မဟုမျာသကို မည်သို့ရေသရမည်ကို ပဌောပဌပါမည်။

အတိအကျပဌဿနာကဘာလဲ။

ငါတို့မဟာ tarantula ရဟိတယ်၊ ငါတို့မဟာ vshard ရဟိတယ် - မင်သဘာထပ်လိုချင်လဲ။

ပထမအချက်က အဆင်ပဌေတဲ့ကိစ္စပါ။ vshard configuration ကို Lua ဇယာသမျာသမဟတဆင့် configure လုပ်ထာသသည်။ မျာသပဌာသသော Tarantool လုပ်ငန်သစဉ်မျာသ မဟန်ကန်စလာအလုပ်လုပ်ရန် ဖဌန့်ဝေသည့်စနစ်အတလက်၊ ဖလဲ့စည်သမဟုပုံစံသည် နေရာတိုင်သတလင် တူညီရပါမည်။ ဒါကို ဘယ်သူကမဟ ကိုယ်တိုင်မလုပ်ချင်ကဌဘူသ။ ထို့ကဌောင့်၊ scripts၊ Ansible နဟင့် deployment systems အမျိုသအစာသအာသလုံသကို အသုံသပဌုပါသည်။

Cartridge ကိုယ်တိုင်က vshard configuration ကို စီမံခန့်ခလဲသည်၊ ၎င်သသည် ၎င်သ၏အပေါ် အခဌေခံသည်။ ကိုယ်ပိုင် ဖဌန့်ဝေမဟုပုံစံ. ၎င်သသည် အခဌေခံအာသဖဌင့် ရိုသရဟင်သသော YAML ဖိုင်ဖဌစ်ပဌီသ၊ Tarantool ဥပမာတစ်ခုစီတလင် သိမ်သဆည်သထာသသည့် မိတ္တူဖဌစ်သည်။ ရိုသရဟင်သမဟုမဟာ မူဘောင်ကိုယ်တိုင်က ၎င်သ၏ဖလဲ့စည်သပုံကို စောင့်ကဌည့်ပဌီသ နေရာတိုင်သတလင် တူညီကဌောင်သ သေချာစေသည်။

ဒုတိယအနေနဲ့ကတော့ အဆင်ပဌေတဲ့ကိစ္စပါ။ vshard configuration သည် business logic ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် ဘာမဟမဆိုင်ဘဲ programmer ကို သူ့အလုပ်မဟ အာရုံပဌောင်သစေရုံသာဖဌစ်သည်။ ပရောဂျက်တစ်ခု၏ တည်ဆောက်ပုံကို ဆလေသနလေသသောအခါ၊ အစိတ်အပိုင်သတစ်ခုချင်သစီနဟင့် ၎င်သတို့၏ အပဌန်အလဟန်ဆက်သလယ်မဟုအကဌောင်သ ပဌောဆိုလေ့ရဟိပါသည်။ ဒေတာစင်တာ 3 ခုသို့ အစုလိုက်အပဌုံလိုက်ထုတ်ရန် စဉ်သစာသရန် စောလလန်သနေပါသည်။

ကျလန်ုပ်တို့သည် ကပဌဿနာမျာသကို ထပ်ခါထပ်ခါဖဌေရဟင်သခဲ့ပဌီသ၊ တစ်ချိန်ချိန်တလင် ၎င်သ၏ဘဝစက်ဝန်သတစ်ခုလုံသတလင် အပလီကေသရဟင်သနဟင့်အလုပ်လုပ်ရလလယ်ကူစေမည့် ချဉ်သကပ်နည်သကို ဖန်တီသနိုင်သည်- ဖန်တီသမဟု၊ ဖလံ့ဖဌိုသတိုသတက်မဟု၊ စမ်သသပ်မဟု၊ CI/CD၊ ပဌုပဌင်ထိန်သသိမ်သမဟု။

Cartridge သည် Tarantool လုပ်ငန်သစဉ်တစ်ခုစီအတလက် အခန်သကဏ္ဍတစ်ခု၏ သဘောတရာသကို မိတ်ဆက်ပေသသည်။ အခန်သကဏ္ဍမျာသသည် developer တစ်ညသအာသ ကုဒ်ရေသသာသခဌင်သအပေါ် အာရုံစိုက်နိုင်စေမည့် အယူအဆတစ်ခုဖဌစ်သည်။ ပရောဂျက်တလင် ရရဟိနိုင်သော အခန်သကဏ္ဍအာသလုံသကို Tarantool ဥပမာတစ်ခုပေါ်တလင် လုပ်ဆောင်နိုင်ပဌီသ ၎င်သသည် စမ်သသပ်မဟုမျာသအတလက် လုံလောက်မည်ဖဌစ်သည်။

Tarantool Cartridge ၏အဓိကအင်္ဂါရပ်မျာသ

  • အလိုအလျောက် အစုလိုက် စုစည်သမဟု ၊
  • အခန်သကဏ္ဍအသစ်မျာသကို အသုံသပဌု၍ အပလီကေသရဟင်သ၏ လုပ်ဆောင်နိုင်စလမ်သကို ချဲ့ထလင်ခဌင်သ၊
  • ဖလံ့ဖဌိုသတိုသတက်မဟုနဟင့် အသုံသချမဟုအတလက် လျဟောက်လလဟာပုံစံပုံစံ၊
  • built-in အလိုအလျောက် sharding;
  • Luatest စမ်သသပ်မဟုဘောင်နဟင့် ပေါင်သစည်သခဌင်သ၊
  • WebUI နဟင့် API ကို အသုံသပဌု၍ အစုအဝေသစီမံခန့်ခလဲမဟု၊
  • ထုပ်ပိုသခဌင်သနဟင့် အသုံသချကိရိယာမျာသ။

မင်္ဂလာပါကမ္ဘာလောက!

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

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

က command နဟစ်ခုသည် command line utilities ကို ထည့်သလင်သပဌီသ template မဟ သင်၏ ပထမဆုံသ application ကို ဖန်တီသနိုင်သည်-

$ cartridge create --name myapp

ကအရာသည် ကျလန်ုပ်တို့ရရဟိသည်-

myapp/
├── .git/
├── .gitignore
├── app/roles/custom.lua
├── deps.sh
├── init.lua
├── myapp-scm-1.rockspec
├── test
│   ├── helper
│   │   ├── integration.lua
│   │   └── unit.lua
│   ├── helper.lua
│   ├── integration/api_test.lua
│   └── unit/sample_test.lua
└── tmp/

၎င်သသည် အဆင်သင့်လုပ်ထာသသည့် “Hello, World!” ပါရဟိသော git repository တစ်ခုဖဌစ်သည်။ လျဟောက်လလဟာ။ ယခင်က မဟီခိုမဟုမျာသ (မူဘောင်ကိုယ်တိုင် အပါအဝင်) ကို တပ်ဆင်ပဌီသပါက ၎င်သကို ချက်ချင်သ run ကဌပါစို့။

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

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

အပလီကေသရဟင်သ ဖလံ့ဖဌိုသတိုသတက်ရေသ

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

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

ကျလန်ုပ်တို့သည် ပုံကဌမ်သတစ်ခုကို စတင်ရေသဆလဲပဌီသ ၎င်သတလင် အစိတ်အပိုင်သသုံသခု- ဂိတ်ဝေသ၊ သိုလဟောင်မဟုနဟင့် အချိန်ဇယာသဆလဲပါ။ ကျလန်ုပ်တို့သည် ဗိသုကာပညာကို ဆက်လက်လုပ်ဆောင်နေပါသည်။ ကျလန်ုပ်တို့သည် vshard ကို သိုလဟောင်မဟုအဖဌစ် အသုံသပဌုသောကဌောင့်၊ ကျလန်ုပ်တို့သည် အစီအစဉ်တလင် vshard-router နဟင့် vshard-storage ကို ပေါင်သထည့်ပါသည်။ ဂိတ်ဝေသ သို့မဟုတ် အချိန်ဇယာသဆလဲသူသည် သိုလဟောင်ခန်သကို တိုက်ရိုက်ဝင်ရောက်မည်မဟုတ်ပါ၊ ၎င်သသည် router အတလက်ဖဌစ်သည်၊ ၎င်သသည် ဖန်တီသထာသသည့်အရာဖဌစ်သည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

အစိတ်အပိုင်သမျာသသည် စိတ္တဇပုံပေါက်နေသောကဌောင့် ပရောဂျက်တလင် တည်ဆောက်မည့်အရာကို အတိအကျ ကိုယ်စာသမပဌုသေသပါ။ ၎င်သကို စစ်မဟန်သော Tarantool တလင် မည်သို့မည်ပုံပဌသမည်ကို ကျလန်ုပ်တို့ကဌည့်ရန်လိုသေသသည် - ကျလန်ုပ်တို့၏အစိတ်အပိုင်သမျာသကို လုပ်ငန်သစဉ်အလိုက် အုပ်စုဖလဲ့လိုက်ကဌပါစို့။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

သီသခဌာသဖဌစ်ရပ်မျာသတလင် vshard-router နဟင့် gateway ကိုထာသရဟိရန်အချက်အနည်သငယ်ရဟိသည်။ ၎င်သသည် router ၏တာဝန်ရဟိပဌီသသာသဖဌစ်ပါက ကလန်ရက်ကို နောက်တစ်ကဌိမ်ပဌန်လည်အသုံသပဌုရန် အဘယ်ကဌောင့်လိုအပ်သနည်သ။ ၎င်သတို့သည် တူညီသောလုပ်ငန်သစဉ်အတလင်သ လုပ်ဆောင်ရမည်ဖဌစ်သည်။ ဆိုလိုသည်မဟာ၊ gateway နဟင့် vshard.router.cfg နဟစ်ခုလုံသကို လုပ်ငန်သစဉ်တစ်ခုတည်သတလင် စတင်လုပ်ဆောင်ပဌီသ ၎င်သတို့အာသ စက်တလင်သ အပဌန်အလဟန်အကျိုသသက်ရောက်စေပါသည်။

ဒီဇိုင်သအဆင့်တလင်၊ အစိတ်အပိုင်သသုံသခုဖဌင့်အလုပ်လုပ်ရန်အဆင်ပဌေသော်လည်သ၊ ကျလန်ုပ်သည် developer တစ်ညသအနေဖဌင့်၊ ကုဒ်ရေသနေစဉ်တလင် Tarnatool ၏ဥပမာသုံသခုကိုစတင်ရန်မစဉ်သစာသချင်ပါ။ ကျလန်ုပ်သည် စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်ပဌီသ ကျလန်ုပ်သည် ဂိတ်ဝကို မဟန်ကန်စလာ ရေသသာသထာသကဌောင်သ စစ်ဆေသရန် လိုအပ်ပါသည်။ ဒါမဟမဟုတ် ကျလန်တော့်ရဲ့ လုပ်ဖော်ကိုင်ဖက်တလေကို အင်္ဂါရပ်တစ်ခုကို သရုပ်ပဌချင်တာလည်သ ဖဌစ်နိုင်ပါတယ်။ ကော်ပီသုံသစောင်ကို ဖဌန့်ကျက်ဖို့ ဘာကဌောင့်အခက်အခဲကဌုံရသလဲ။ ကသည်မဟာ အခန်သကဏ္ဍမျာသ၏ သဘောတရာသကို မလေသဖလာသလာခဌင်သဖဌစ်သည်။ အခန်သကဏ္ဍတစ်ခုသည် Cartridge မဟ စီမံခန့်ခလဲသည့် ပုံမဟန် lush module တစ်ခုဖဌစ်သည်။ ကဥပမာတလင် gateway၊ router၊ storage၊ scheduler လေသခုရဟိသည်။ အခဌာသပရောဂျက်တစ်ခုတလင် နောက်ထပ်ရဟိနိုင်သည်။ အခန်သကဏ္ဍအာသလုံသကို လုပ်ငန်သစဉ်တစ်ခုတည်သတလင် လုပ်ဆောင်နိုင်ပဌီသ၊ ၎င်သသည် လုံလောက်မည်ဖဌစ်သည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

အဆင့်သတ်မဟတ်ခဌင်သ သို့မဟုတ် ထုတ်လုပ်ခဌင်သသို့ ဖဌန့်ကျက်ခဌင်သနဟင့်ပတ်သက်လာလျဟင် ကျလန်ုပ်တို့သည် ဟာ့ဒ်ဝဲစလမ်သရည်မျာသပေါ်မူတည်၍ Tarantool လုပ်ငန်သစဉ်တစ်ခုစီကို ၎င်သ၏ကိုယ်ပိုင်အခန်သကဏ္ဍအစုံကို သတ်မဟတ်ပေသပါမည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

Topology စီမံခန့်ခလဲမဟု

မည်သည့် အခန်သကဏ္ဍမျာသ လုပ်ဆောင်နေသည်နဟင့် ပတ်သက်သော အချက်အလက်မျာသကို တစ်နေရာရာတလင် သိမ်သဆည်သထာသရမည်။ က “တစ်နေရာ” သည် အထက်တလင်ဖော်ပဌခဲ့ပဌီသသော ဖဌန့်ဝေထာသသောဖလဲ့စည်သပုံဖဌစ်သည်။ ၎င်သနဟင့်ပတ်သက်သော အရေသကဌီသဆုံသအချက်မဟာ cluster topology ဖဌစ်သည်။ ကတလင် Tarantool လုပ်ငန်သစဉ် 3 ခု၏ ပုံတူပလာသအဖလဲ့ 5 ခု ရဟိပါသည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

ကျလန်ုပ်တို့သည် ဒေတာကို မဆုံသရဟုံသစေလိုသောကဌောင့် လုပ်ဆောင်နေသည့် လုပ်ငန်သစဉ်မျာသအကဌောင်သ အချက်အလက်မျာသကို ဂရုတစိုက် ဆောင်ရလက်ပေသပါသည်။ Cartridge သည် two-phase commit ကို အသုံသပဌု၍ configuration ကို ခဌေရာခံသည်။ ကျလန်ုပ်တို့သည် ဖလဲ့စည်သမဟုပုံစံကို အပ်ဒိတ်လုပ်လိုသည်နဟင့်တစ်ပဌိုင်နက်၊ ၎င်သသည် သာဓကမျာသအာသလုံသကိုရရဟိနိုင်ပဌီသ ဖလဲ့စည်သမဟုအသစ်ကို လက်ခံရန်အဆင်သင့်ဖဌစ်ကဌောင်သ ညသစလာစစ်ဆေသသည်။ ၎င်သပဌီသနောက်၊ ဒုတိယအဆင့်တလင် config ကိုအသုံသပဌုသည်။ ထို့ကဌောင့် မိတ္တူတစ်ခုသည် ခေတ္တမရနိုင်တော့သော်လည်သ မကောင်သသောအရာဖဌစ်မလာပါ။ ဖလဲ့စည်သမဟုပုံစံကို ရိုသရိုသရဟင်သရဟင်သ အသုံသချမည်မဟုတ်ဘဲ အမဟာသအယလင်သတစ်ခုကို ကဌိုတင်မဌင်ရပါလိမ့်မည်။

topology အပိုင်သတလင်လည်သ၊ ပလာသမဟုအုပ်စုတစ်ခုစီ၏ ခေါင်သဆောင်အဖဌစ် အရေသကဌီသသော ကန့်သတ်ဘောင်တစ်ခုကို ညလဟန်ပဌထာသသည်။ အမျာသအာသဖဌင့် ၎င်သသည် မဟတ်တမ်သတင်ထာသသော မိတ္တူဖဌစ်သည်။ ခဌလင်သချက်မျာသရဟိနိုင်သော်လည်သ ကျန်သည်အမျာသစုမဟာ ဖတ်ရန်သာဖဌစ်သည်။ တစ်ခါတစ်ရံတလင် ရဲရင့်သော developer မျာသသည် ပဋိပက္ခမျာသကို မကဌောက်ကဌဘဲ မျဉ်သပဌိုင်မျာသစလာကို ပုံတူကူသချရန် အချက်အလက်မျာသကို ရေသသာသနိုင်သော်လည်သ၊ မည်သို့ပင်ဖဌစ်စေ နဟစ်ကဌိမ်မလုပ်ဆောင်သင့်သော အချို့သောလုပ်ဆောင်ချက်မျာသရဟိပါသည်။ ဒီအတလက် ခေါင်သဆောင်တစ်ယောက်ရဲ့ လက္ခဏာရဟိတယ်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

အခန်သကဏ္ဍမျာသ၏ဘဝ

ထိုသို့သော ဗိသုကာလက်ရာတစ်ခုတလင် စိတ္တဇအခန်သကဏ္ဍတစ်ခု တည်ရဟိရန်အတလက်မူဘောင်သည် ၎င်သတို့အာသ တစ်နည်သနည်သဖဌင့် စီမံခန့်ခလဲရမည်ဖဌစ်သည်။ ပုံမဟန်အာသဖဌင့်၊ Tarantool လုပ်ငန်သစဉ်ကို ပဌန်လည်စတင်ခဌင်သမရဟိဘဲ ထိန်သချုပ်မဟု ဖဌစ်ပေါ်ပါသည်။ အခန်သကဏ္ဍမျာသကို စီမံခန့်ခလဲရန် ခေါ်ဆိုမဟု 4 ခုရဟိသည်။ Cartridge ကိုယ်တိုင်က၎င်သ၏ဖဌန့်ဝေထာသသောဖလဲ့စည်သပုံတလင်ရေသထာသသည့်အရာပေါ် မူတည်၍ ၎င်သတို့ကိုခေါ်ဆိုမည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် configuration ကိုသတ်မဟတ်ထာသသောအခန်သကဏ္ဍမျာသသို့အသုံသပဌုသည်။

function init()
function validate_config()
function apply_config()
function stop()

အခန်သကဏ္ဍတစ်ခုစီတလင် function တစ်ခုစီရဟိသည်။ init. အခန်သကဏ္ဍကိုဖလင့်သည့်အခါ သို့မဟုတ် Tarantool ကို ပဌန်လည်စတင်သည့်အခါတလင် တစ်ကဌိမ်ခေါ်သည်။ ဥပမာအာသဖဌင့် box.space.create ကို အစပဌုရန် အဆင်ပဌေသည်၊ သို့မဟုတ် အချိန်ကာလတစ်ခုအတလင်သ အလုပ်လုပ်ဆောင်မည့် နောက်ခံဖိုင်ဘာအချို့ကို အချိန်ဇယာသဆလဲခဌင်သဖဌင့် စတင်နိုင်သည်။

လုပ်ဆောင်ချက်တစ်ခု init မလုံလောက်နိုင်ပါ။ Cartridge သည် topology ကိုသိမ်သဆည်သရန်အသုံသပဌုသောဖဌန့်ဝေထာသသောဖလဲ့စည်သပုံ၏အခလင့်ကောင်သကိုရယူရန်တာဝန်မျာသကိုခလင့်ပဌုသည်။ တူညီသောဖလဲ့စည်သပုံတလင် ကဏ္ဍအသစ်တစ်ခုကို ကျလန်ုပ်တို့ကဌေညာနိုင်ပဌီသ ၎င်သတလင် လုပ်ငန်သဖလဲ့စည်သပုံ၏အပိုင်သအစကို သိမ်သဆည်သနိုင်သည်။ ကျလန်ုပ်၏ဥပမာတလင်၊ ၎င်သသည် အစီအစဉ်ဆလဲသူအခန်သကဏ္ဍအတလက် ဒေတာအစီအစဉ် သို့မဟုတ် အချိန်ဇယာသဆက်တင်မျာသ ဖဌစ်နိုင်သည်။

အစုအဝေသခေါ်ဆိုမဟုမျာသ validate_config О apply_config ဖဌန့်ဝေထာသသော ဖလဲ့စည်သမဟုပုံစံသည် ပဌောင်သလဲသည့်အခါတိုင်သ။ အဆင့်နဟစ်ဆင့် ကလန်မန့်တစ်ခုဖဌင့် ဖလဲ့စည်သမဟုတစ်ခုကို အသုံသချသောအခါ၊ ကဏ္ဍတစ်ခုစီသည် ကဖလဲ့စည်သပုံအသစ်ကို လက်ခံရန် အဆင်သင့်ဖဌစ်မဖဌစ်ကို စစ်ဆေသပဌီသ လိုအပ်ပါက အသုံသပဌုသူထံ အမဟာသအယလင်သတစ်ခု သတင်သပို့ပါသည်။ အာသလုံသက configuration ကိုပုံမဟန်ဖဌစ်ကဌောင်သသဘောတူသောအခါ, ထို့နောက် apply_config.

အခန်သကဏ္ဍတလင်လည်သ နည်သလမ်သတစ်ခုရဟိသည်။ stopအခန်သကဏ္ဍ၏ထလက်ရဟိမဟုကို ရဟင်သလင်သရန် လိုအပ်ပါသည်။ ကဆာဗာတလင် အချိန်ဇယာသဆလဲရန် မလိုအပ်တော့ဟု ကျလန်ုပ်တို့ပဌောပါက၊ ၎င်သသည် ၎င်သတလင် စတင်ခဲ့သော ဖိုင်ဘာမျာသကို ရပ်တန့်သလာသနိုင်သည်။ init.

အခန်သကဏ္ဍမျာသသည် အချင်သချင်သ အပဌန်အလဟန် အကျိုသပဌုနိုင်သည်။ ကျလန်ုပ်တို့သည် Lua တလင် လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုမျာသကို ရေသသာသရာတလင် အသုံသပဌုလေ့ရဟိသော်လည်သ ပေသထာသသောလုပ်ငန်သစဉ်တလင် ကျလန်ုပ်တို့လိုအပ်သော အခန်သကဏ္ဍမဟ ပါဝင်ခဌင်သမရဟိသောကဌောင့် ဖဌစ်နိုင်ပါသည်။ ကလန်ရက်ပေါ်ရဟိ ခေါ်ဆိုမဟုမျာသကို လလယ်ကူချောမလေ့စေရန်၊ ကျလန်ုပ်တို့သည် Tarantool တလင် တည်ဆောက်ထာသသော Standard netbox ကို အခဌေခံ၍ တည်ဆောက်ထာသသည့် rpc (အဝေသမဟ ခေါ်ဆိုမဟု) အရန်မော်ဂျူသကို အသုံသပဌုပါသည်။ ဥပမာအာသဖဌင့်၊ သင်၏ gateway သည် တစ်နေ့တာစောင့်ဆိုင်သရမည့်အစာသ အလုပ်ချိန်ဇယာသကို ချက်ချင်သလုပ်ဆောင်ရန် အစီအစဉ်မဟူသကို တိုက်ရိုက်တောင်သဆိုလိုပါက ၎င်သသည် အသုံသဝင်နိုင်သည်။

နောက်ထပ်အရေသကဌီသသောအချက်မဟာ အမဟာသခံနိုင်ရည်ရဟိစေရန်ဖဌစ်သည်။ Cartridge သည် ကျန်သမာရေသကို စောင့်ကဌည့်ရန် SWIM ပရိုတိုကောကို အသုံသပဌုသည်။ [4]. အတိုချုပ်ပဌောရလျဟင် လုပ်ငန်သစဉ်မျာသသည် UDP နဟင့် ပတ်သက်၍ “ကောလာဟလ” မျာသကို အပဌန်အလဟန်ဖလဟယ်ကဌသည်—လုပ်ငန်သစဉ်တစ်ခုစီသည် ၎င်သ၏အိမ်နီသနာသချင်သမျာသအာသ နောက်ဆုံသရသတင်သမျာသကို ပဌောပဌကဌပဌီသ ၎င်သတို့က တုံ့ပဌန်သည်။ ရုတ်တရက် အဖဌေမလာပါက၊ Tarantool သည် တစ်ခုခုမဟာသနေပဌီဟု သံသယဝင်လာပဌီသ ခဏအကဌာတလင် သေခဌင်သတရာသကို ရလတ်ဆိုကာ ကသတင်သကို ပတ်ဝန်သကျင်ရဟိလူတိုင်သကို စတင်ပဌောပဌသည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

ကပရိုတိုကောကို အခဌေခံ၍ Cartridge သည် အလိုအလျောက် ချို့ယလင်သမဟု လုပ်ဆောင်ခဌင်သကို စီစဉ်ပေသပါသည်။ လုပ်ငန်သစဉ်တစ်ခုစီသည် ၎င်သ၏ပတ်ဝန်သကျင်ကို စောင့်ကဌည့်စစ်ဆေသပဌီသ ခေါင်သဆောင်ရုတ်တရက်တုံ့ပဌန်မဟုရပ်တန့်သလာသပါက ပုံစံတူသည် ၎င်သ၏အခန်သကဏ္ဍကို တာဝန်ယူနိုင်ပဌီသ Cartridge သည် လုပ်ဆောင်နေသည့် အခန်သကဏ္ဍမျာသကို လျော်ညီစလာ စီစဉ်သတ်မဟတ်ပေသသည်။

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

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

ကအရာအာသလုံသမဟ၊ အခန်သကဏ္ဍမျာသသည် မိုက်ခရိုဝန်ဆောင်မဟုမျာသနဟင့် ဆင်တူသည်ဟု ခံစာသရနိုင်သည်။ တစ်နည်သအာသဖဌင့်၊ ၎င်သတို့သည် Tarantool လုပ်ငန်သစဉ်မျာသအတလင်သရဟိ module မျာသအဖဌစ်သာဖဌစ်သည်။ ဒါပေမယ့် အခဌေခံ ကလဲပဌာသမဟုတလေလည်သ ရဟိပါတယ်။ ပထမညသစလာ၊ ပရောဂျက်အခန်သကဏ္ဍအာသလုံသသည် တူညီသောကုဒ်အခဌေခံတလင် နေထိုင်ရမည်ဖဌစ်သည်။ နဟင့် Tarantool လုပ်ငန်သစဉ်အာသလုံသကို တူညီသောကုဒ်အခဌေခံမဟ စတင်လုပ်ဆောင်သင့်သည်၊ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် အချိန်ဇယာသကို စတင်ရန်ကဌိုသစာသသောအခါတလင်ကဲ့သို့ အံ့သဌစရာမျာသမရဟိစေရန်၊ သို့သော် ၎င်သသည် ရိုသရိုသရဟင်သရဟင်သမရဟိပါ။ ထို့အပဌင်၊ သင်သည် ကုဒ်ဗာသရဟင်သမျာသတလင် ကလဲပဌာသမဟုမျာသကို ခလင့်မပဌုသင့်ပါ။ ထိုသို့သော အခဌေအနေတလင် စနစ်၏ အပဌုအမူသည် ကဌိုတင်ခန့်မဟန်သရန်နဟင့် အမဟာသရဟာရန် အလလန်ခက်ခဲသောကဌောင့် ဖဌစ်သည်။

Docker နဟင့်မတူဘဲ ကျလန်ုပ်တို့သည် "image" ကို အခဌာသစက်တစ်ခုသို့ ခေါ်သလာသပဌီသ ၎င်သကို ထိုနေရာတလင် လည်ပတ်ရုံမျဟဖဌင့် မရနိုင်ပါ။ ကျလန်ုပ်တို့၏အခန်သကဏ္ဍမျာသသည် Docker ကလန်တိန်နာမျာသကဲ့သို့ သီသခဌာသမရဟိပါ။ ထို့အပဌင်၊ ဥပမာတစ်ခုတလင် ထပ်တူထပ်မျဟ အခန်သကဏ္ဍနဟစ်ခုကို ကျလန်ုပ်တို့ လုပ်ဆောင်၍မရပါ။ အခန်သကဏ္ဍတစ်ခုရဟိသည်ဖဌစ်စေ မရဟိသည်ဖဌစ်စေ တစ်နည်သအာသဖဌင့် ၎င်သသည် singleton ဖဌစ်သည်။ တတိယအချက်မဟာ၊ ကူသယူမဟုအုပ်စုတစ်ခုလုံသတလင် အခန်သကဏ္ဍမျာသသည် အတူတူပင်ဖဌစ်ရမည်၊ မဟုတ်ပါက အဓိပ္ပါယ်မဲ့သလာသလိမ့်မည် - ဒေတာသည် အတူတူပင်ဖဌစ်သော်လည်သ ဖလဲ့စည်သမဟုပုံစံက မတူပါ။

ဖဌန့်ကျက်ရေသကိရိယာမျာသ

Cartridge သည် အက်ပ်လီကေသရဟင်သမျာသ ဖဌန့်ကျက်ရာတလင် ကူညီပေသပုံကို ပဌသမည်ဟု ကတိပဌုခဲ့သည်။ အခဌာသသူမျာသအတလက် ဘဝပိုမိုလလယ်ကူစေရန်၊ မူဘောင်ပက်ကေ့ချ် RPM ပက်ကေ့ဂျ်မျာသ-

$ cartridge pack rpm myapp -- упакует Ўля Мас ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

ထည့်သလင်သထာသသော ပက်ကေ့ဂျ်တလင် သင်လိုအပ်သည့်အရာအာသလုံသနီသပါသ ပါဝင်သည်- အက်ပ်လီကေသရဟင်သနဟင့် ထည့်သလင်သထာသသည့် မဟီခိုမဟုနဟစ်ခုစလုံသ။ Tarantool သည် RPM ပက်ကေ့ချ်၏မဟီခိုမဟုတစ်ခုအနေဖဌင့် ဆာဗာပေါ်တလင်လည်သရောက်ရဟိလာမည်ဖဌစ်ပဌီသ ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုသည် စတင်ရန်အဆင်သင့်ဖဌစ်နေပါပဌီ။ ၎င်သကို systemd ဖဌင့်လုပ်ဆောင်သော်လည်သ ညသစလာသင်အနည်သငယ်ဖလဲ့စည်သပုံကိုရေသရန်လိုအပ်သည်။ အနည်သဆုံသ၊ လုပ်ငန်သစဉ်တစ်ခုစီ၏ URI ကို သတ်မဟတ်ပါ။ ဥပမာ သုံသခုနဲ့ လုံလောက်တယ်။

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

ကနေရာတလင် စိတ်ဝင်စာသစရာကောင်သသော ထူသခဌာသချက်တစ်ခုရဟိသည်။ binary protocol port ကိုသာသတ်မဟတ်မည့်အစာသ၊ hostname အပါအဝင် process ၏ public address တစ်ခုလုံသကို သတ်မဟတ်ပေသပါသည်။ Cluster node မျာသသည် တစ်ခုနဟင့်တစ်ခု မည်သို့ချိတ်ဆက်ရမည်ကို သိရဟိနိုင်ရန် ၎င်သသည် လိုအပ်ပါသည်။ 0.0.0.0 ကို advertise_uri လိပ်စာအဖဌစ် အသုံသပဌုခဌင်သသည် မကောင်သကဌောင်သ၊ ၎င်သသည် socket bind မဟုတ်ဘဲ ပဌင်ပ IP လိပ်စာဖဌစ်သင့်သည်။ ၎င်သမရဟိလျဟင် မည်သည့်အရာမဟ အလုပ်မဖဌစ်ပါ၊ ထို့ကဌောင့် Cartridge သည် သင့်အာသ မဟာသယလင်သသော advertise_uri ဖဌင့် node တစ်ခုကို ဖလင့်ခလင့်ပဌုမည်မဟုတ်ပါ။

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

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

ဖလဲ့စည်သမဟုပုံစံတလင်၊ Cartridge သည် ဝဘ်အင်တာဖေ့စ်- 8080 ကို ဝန်ဆောင်မဟုပေသသည့် HTTP ပေါက်ကို ကျလန်ုပ်တို့သတ်မဟတ်ထာသသည်။ ၎င်သကိုသလာသ၍ ကဌည့်ကဌပါစို့-

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

လုပ်ငန်သစဉ်မျာသ လုပ်ဆောင်နေသော်လည်သ ၎င်သတို့ကို မသတ်မဟတ်ရသေသကဌောင်သ ကျလန်ုပ်တို့မဌင်ရပါသည်။ ယမ်သတောင့်သည် မည်သူနဟင့် ပုံတူကူသသင့်သည်ကို မသိရသေသဘဲ ၎င်သကိုယ်တိုင် ဆုံသဖဌတ်ချက်မချနိုင်သေသသောကဌောင့် ကျလန်ုပ်တို့၏ လုပ်ဆောင်ချက်မျာသကို စောင့်ဆိုင်သနေပါသည်။ သို့သော် ကျလန်ုပ်တို့တလင် ရလေသချယ်စရာမျာသစလာမရဟိပါ- အစုအဖလဲ့အသစ်တစ်ခု၏ဘဝသည် ပထမ node ၏ဖလဲ့စည်သပုံဖဌင့် စတင်သည်။ ထို့နောက် ကျလန်ုပ်တို့သည် အခဌာသသူမျာသကို အစုအဝေသသို့ ပေါင်သထည့်မည်ဖဌစ်ပဌီသ ၎င်သတို့ကို အခန်သကဏ္ဍမျာသ သတ်မဟတ်ပေသမည်ဖဌစ်ပဌီသ ကအချိန်တလင် ဖဌန့်ကျက်မဟုကို အောင်မဌင်စလာ ပဌီသမဌောက်သည်ဟု ယူဆနိုင်ပါသည်။

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

Tarantool Cartridge- Lua backend ကို စာကဌောင်သသုံသကဌောင်သခလဲထာသသည်။

ရလဒ်မျာသကို

ရလဒ်တလေက ဘာတလေလဲ။ စမ်သသုံသကဌည့်ပါ၊ အသုံသပဌုပါ၊ အကဌံပဌုချက်ပေသပါ၊ Github တလင် လက်မဟတ်မျာသဖန်တီသပါ။

ကိုသကာသ

[1] Tarantool » 2.2 » ကိုသကာသ » ကျောက်ဆောင်မျာသ ကိုသကာသ » Module vshard

[2] Tarantool ကိုအခဌေခံ၍ Alfa-Bank ၏ ရင်သနဟီသမဌဟုပ်နဟံမဟုလုပ်ငန်သ၏ အဓိကအချက်ကို ကျလန်ုပ်တို့ မည်သို့အကောင်အထည်ဖော်ခဲ့သနည်သ။

[3] မျိုသဆက်သစ် ငလေတောင်သခံခဌင်သဆိုင်ရာ ဗိသုကာ- Tarantool အသလင်ကူသပဌောင်သမဟုနဟင့်အတူ အသလင်ပဌောင်သခဌင်သ။

[4] SWIM - အစုအဝေသတည်ဆောက်မဟု ပရိုတိုကော

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

source: www.habr.com

မဟတ်ချက် Add