Cloister → ရိုသရဟင်သသော OTP အစုအဝေသစီမံခန့်ခလဲမဟု

အောင်မဌင်သော လုပ်ငန်သလျဟောက်လလဟာတိုင်သနီသပါသသည် မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် အလျာသလိုက် အတိုင်သအတာလိုအပ်သည့် အဆင့်သို့ ရောက်ရဟိလာသည်။ မျာသစလာသောအခဌေအနေမျာသတလင်၊ သင်သည် သာဓကအသစ်တစ်ခုကို ရိုသရိုသရဟင်သရဟင်သစတင်နိုင်ပဌီသ ဝန်ပျမ်သမျဟကို လျဟော့ချနိုင်သည်။ ဒါပေမယ့် မတူညီတဲ့ node တလေက တစ်ခုနဲ့တစ်ခု သိပဌီသ အလုပ်တာဝန်တလေကို ဂရုတစိုက်ဖဌန့်ဝေဖို့ သေချာဖို့ လိုအပ်တဲ့အသေသအဖလဲကိစ္စတလေလည်သ ရဟိပါတယ်။

Cloister → ရိုသရဟင်သသော OTP အစုအဝေသစီမံခန့်ခလဲမဟု

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

မတူညီသော node မျာသရဟိ လုပ်ငန်သစဉ်မျာသအကဌာသ၊ လင့်ခ်မျာသနဟင့် မော်နီတာမျာသကဌာသတလင် မက်ဆေ့ချ်ပေသပို့ခဌင်သသည် ပလင့်လင်သမဌင်သာမဟု [
]

လက်တလေ့မဟာတော့ အရာအာသလုံသက နည်သနည်သပိုရဟုပ်ထလေသပါတယ်။ ဖဌန့်ဝေခဲ့သည်။ တဏဟာ "ကလန်တိန်နာ" သည် သင်္ဘောတင်ရန်အတလက် သံသေတ္တာကဌီသတစ်ခုဟု အဓိပ္ပါယ်ရပဌီသ "docker" သည် longshoreman ၏ အဓိပ္ပါယ်တူဖဌစ်သည်။ IN IP4 နေရာမရဟိသော လိပ်စာမျာသစလာ ရဟိခဲ့သည်၊ အမျာသအာသဖဌင့် ကေဘယ်ကို ကဌလက်မျာသ ဝါသစာသခဌင်သကဌောင့် ကလန်ရက် ပဌတ်တောက်မဟုမျာသ ဖဌစ်ကဌပဌီသ ထုတ်လုပ်မဟု စနစ်၏ ပျမ်သမျဟ အလုပ်ချိန်ကို ဆယ်စုနဟစ်မျာသအတလင်သ တိုင်သတာခဲ့သည်။

ယခု ကျလန်ုပ်တို့အာသလုံသသည် မယုံနိုင်လောက်အောင် ဖူလုံအောင်၊ ထုပ်ပိုသပဌီသ ဖဌန့်ဝေနေကဌပါပဌီ။ တဏဟာ ကဌီသစလာသောကျပန်သမဟု၏နိယာမအရ dynamic IP လိပ်စာမျာသကို ထုတ်ပေသသည့်ပတ်ဝန်သကျင်တလင်၊ နဟင့် node မျာသသည် scheduler ၏ဘယ်ဘက်ဖနောင့်တလင် ပေါ်လာပဌီသ ပျောက်ကလယ်သလာသနိုင်သည်။ ဖဌန့်ဝေထာသသော ပရောဂျက်တိုင်သတလင် boilerplate code အစုအပုံမျာသကို ရဟောင်ရဟာသရန် တဏဟာရန်လိုသောပတ်ဝန်သကျင်ကို တိုက်ဖျက်ရန်၊ အကူအညီလိုအပ်သည်။

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

လိုအပ်ချက်

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

  • ခက်ခဲသောကုဒ်လုပ်ထာသသော node စာရင်သနဟင့် ဝန်ဆောင်မဟုမျာသမဟတစ်ဆင့် တက်ကဌလသောရဟာဖလေတလေ့ရဟိမဟုနဟစ်ခုလုံသဖဌင့် ပလင့်လင်သမဌင်သာသောအလုပ် တဏဟာ;
  • topology ပဌောင်သလဲမဟုတိုင်သအတလက် အပဌည့်အဝ functional callback (အဲဒီမဟာ node ​​node ၊ node ၊ network instability ၊ splits );
  • တိုတောင်သသော အမည်မျာသဖဌင့် အစုအဝေသတစ်ခုကို စတင်ရန်အတလက် ပလင့်လင်သသော မျက်နဟာပဌင် :nonode@nohost;
  • အခဌေခံကုဒ်ရေသစရာမလိုဘဲ Docker ပံ့ပိုသမဟု။

နောက်ဆိုလိုသည်မဟာ ကျလန်ုပ်သည် ပဌည်တလင်သ၌ လျဟောက်လလဟာကို စမ်သသပ်ပဌီသနောက်၊ :nonode@nohostသို့မဟုတ် အတုအယောင် ဖဌန့်ဝေသည့် ပတ်ဝန်သကျင်တလင် အသုံသပဌုခဌင်သ။ test_cluster_taskပဌေသချင်တယ်၊ docker-compose up --scale my_app=3 ကုဒ်ပဌောင်သလဲမဟုမရဟိဘဲ docker တလင် ဖဌစ်ရပ်သုံသခုကို မည်သို့လုပ်ဆောင်သည်ကို ကဌည့်ပါ။ ကဌိုက်တဲ့ App တလေကို လည်သ မဟီခိုချင်ပါတယ်။ mnesia - topology ပဌောင်သလဲသောအခါ၊ နောက်ကလယ်တလင် ၎င်သတို့သည် အပလီကေသရဟင်သမဟ ထပ်မံကန်သလင်သခဌင်သမရဟိဘဲ အစုအဝေသကို ပဌန်လည်တည်ဆောက်ကဌသည်။

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

ချဉ်သကပ်ရလေသချယ်ခဲ့သည်။

သီလရဟင် အက်ပလီကေသရဟင်သတစ်ခုအနေဖဌင့် လုပ်ဆောင်ရန် ရည်ရလယ်ထာသသော်လည်သ၊ အဆင့်မဌင့်အသုံသပဌုသူမျာသသည် တိုက်ရိုက်လည်ပတ်ခဌင်သဖဌင့် အစုအဝေသ၏ တပ်ဆင်ခဌင်သနဟင့် ထိန်သသိမ်သခဌင်သတို့ကို ကိုယ်တိုင်လုပ်ဆောင်နိုင်သော်လည်သ၊ Cloister.Manager ပစ်မဟတ်အပလီကေသရဟင်သ၏ကဌီသကဌပ်ရေသသစ်ပင်၌။

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

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

အထက်ဖော်ပဌပါ ကန့်သတ်ချက်မျာသသည် အောက်ပါတို့ကို စာသာသအရ ဆိုလိုပါသည်။ သီလရဟင် OTP အပလီကေသရဟင်သအတလက် အသုံသပဌုသည်။ :my_app, အသုံသပဌုသည်။ erlang ဝန်ဆောင်မဟုရဟာဖလေတလေ့ရဟိမဟု node မျာသကို ချိတ်ဆက်ရန် အနည်သဆုံသ သုံသခု၊ MyApp.Listener module (အကောင်အထည်ဖော်ခဌင်သ။ @behaviour Cloister.Listener) topology အပဌောင်သအလဲမျာသအကဌောင်သ အကဌောင်သကဌာသချက်မျာသကို လက်ခံရရဟိရန် စီစဉ်ထာသသည်။ ပဌီသပဌည့်စုံသော ဖလဲ့စည်သမဟုပုံစံ၏ အသေသစိတ်ဖော်ပဌချက်ကို တလင် တလေ့နိုင်သည်။ စာရလက်စာတမ်သ.

ကဖလဲ့စည်သပုံနဟင့်အတူ, လျဟောက်လလဟာ သီလရဟင် ဖလစျလိမျ့မညျ အဆင့်ဆင့်လလဟင့်တင်ပါ။သဘောတူညီချက်မရရဟိမချင်သ ပင်မအပလီကေသရဟင်သကို စတင်ခဌင်သလုပ်ငန်သစဉ်ကို နဟောင့်နဟေသစေသည် (အထက်ပါဥပမာတလင်ကဲ့သို့ node သုံသခုကို ချိတ်ဆက်ထာသပဌီသ ချိတ်ဆက်ထာသသည်။) ၎င်သသည် ပင်မအပလီကေသရဟင်သအာသ စတင်သည့်အခါတလင်၊ အစုအဝေသကို ရရဟိနေပဌီဟု ယူဆရန် အခလင့်အရေသပေသသည်။ topology ပဌောင်သလဲသည့်အခါတိုင်သ (၎င်သတို့အမျာသအပဌာသရဟိလိမ့်မည်၊ ဆုံမဟတ်မျာသသည် လုံသဝတစ်ပဌိုင်တည်သမစတင်နိုင်သောကဌောင့်) handler ကို ခေါ်ပါမည်။ MyApp.Listener.on_state_change/2. အခဌေအနေ မက်ဆေ့ချ်ကို လက်ခံရရဟိသည့်အခါ အမျာသစုမဟာ လုပ်ဆောင်ချက်တစ်ခု လုပ်ဆောင်သည်။ %Cloister.Monitor{status: :up}ဆိုလိုသည်မဟာ- "မင်္ဂလာပါ၊ အစုအဝေသကို စုစည်သထာသသည်။"

ကိစ္စအမျာသစုတလင်တပ်ဆင် consensus: 3 ကျလန်ုပ်တို့သည် နောက်ထပ် node မျာသကို ချိတ်ဆက်ရန် မျဟော်လင့်ထာသသော်လည်သ ဖုန်သပဌန်ခေါ်ခဌင်သမဟာ ဖဌတ်သန်သသလာသလိမ့်မည်ဖဌစ်သောကဌောင့် အကောင်သဆုံသဖဌစ်သည်။ status: :rehashing → status: :up အသစ်ထည့်ထာသသော သို့မဟုတ် ဖယ်ရဟာသလိုက်သော node တစ်ခုခုတလင်။

ဖလံ့ဖဌိုသတိုသတက်မဟုမုဒ်တလင် စတင်သောအခါ၊ သင်သည် သတ်မဟတ်ရန်သာ လိုအပ်သည်။ consensus: 1 О သီလရဟင် သူမဌင်သောအခါတလင် အစုအဖလဲ့ စုဝေသမဟုစောင့်ဆိုင်သခဌင်သကို ပျော်ရလဟင်စလာ ကျော်သလာသလိမ့်မည်။ :nonode@nohostသို့မဟုတ် :node@hostသို့မဟုတ် :[email protected] - node ကိုမည်ကဲ့သို့ configure လုပ်ခဲ့သည်ပေါ်မူတည်သည် (:none | :shortnames | :longnames).

ဖဌန့်ဝေထာသသော လျဟောက်လလဟာစီမံခန့်ခလဲမဟု

လေဟာနယ်တလင်မဟုတ်သော ဖဌန့်ဝေထာသသော အပလီကေသရဟင်သမျာသကဲ့သို့သော ဖဌန့်ဝေမဟုအပေါ် မူတည်ခဌင်သမျာသ ပါဝင်သည်။ mnesia. တူညီသောခေါ်ဆိုမဟုမဟ ၎င်သတို့၏ ပဌန်လည်ဖလဲ့စည်သမဟုကို ကိုင်တလယ်ရန် ကျလန်ုပ်တို့အတလက် လလယ်ကူပါသည်။ on_state_change/2. ကတလင်၊ ဥပမာအာသဖဌင့်၊ မည်သို့ပဌန်လည်ပဌင်ဆင်ရမည်ကို အသေသစိတ်ဖော်ပဌချက်ဖဌစ်သည်။ mnesia on the fly in စာရလက်စာတမ်သ သီလရဟင်.

အသုံသပဌုခဌင်သ၏အဓိကအာသသာချက် သီလရဟင် topology ပဌောင်သလဲမဟုပဌီသနောက် အစုအဝေသကို ပဌန်လည်တည်ဆောက်ရန် လိုအပ်သောလုပ်ဆောင်မဟုမျာသအာသလုံသကို လုပ်ဆောင်ရခဌင်သဖဌစ်ပါသည်။ အဆိုပါပါသပျဉ်သအောက်မဟာ. အပလီကေသရဟင်သသည် IP လိပ်စာမျာသကိုသိပဌီသ node အမည်မျာသကိုကဌိုတင်သိရဟိခဌင်သရဟိမရဟိ၊ သို့မဟုတ် ၎င်သတို့အာသ ဒိုင်သနမစ်သတ်မဟတ်ပေသထာသခဌင်သ/ပဌောင်သလဲခဌင်သခံရသည်ဖဌစ်စေ node မျာသအာသလုံသကို ချိတ်ဆက်ထာသခဌင်သဖဌင့် အပလီကေသရဟင်သသည် ပဌင်ဆင်ထာသပဌီသဖဌစ်သောဖဌန့်ဝေသည့်ပတ်ဝန်သကျင်တလင် ရိုသရိုသရဟင်သရဟင်သလုပ်ဆောင်သည်။ ၎င်သသည် အထူသ docker configuration ဆက်တင်မျာသ လုံသဝမလိုအပ်ဘဲ အက်ပလီကေသရဟင်သဆော့ဖ်ဝဲရေသသာသသူ၏အမဌင်အရ၊ ဖဌန့်ဝေထာသသောပတ်ဝန်သကျင်တလင် လုပ်ဆောင်ခဌင်သ သို့မဟုတ် ဒေသတလင်သတစ်ခုတလင် လုပ်ဆောင်ခဌင်သကဌာသတလင် ကလာခဌာသချက်မရဟိပါ။ :nonode@nohost. ဒီအကဌောင်သကို အပဌည့်အစုံဖတ်နိုင်ပါတယ်။ စာရလက်စာတမ်သ.

ရဟုပ်ထလေသသော topology အပဌောင်သအလဲမျာသကို စိတ်ကဌိုက် အကောင်အထည်ဖော်ခဌင်သဖဌင့် ဖဌစ်နိုင်သော်လည်သ၊ MyApp.Listenerကစာကဌည့်တိုက် ကန့်သတ်ချက်မျာသနဟင့် ဖလဲ့စည်သမဟုဆိုင်ရာ ဘက်လိုက်မဟုမျာသသည် အကောင်အထည်ဖော်မဟု၏ အခဌေခံအုတ်မဌစ်မျာသဖဌစ်ကဌောင်သ သက်သေပဌနိုင်သည့် အနာသသတ်ကိစ္စမျာသ အမဌဲရဟိနိုင်သည်။ ကောင်သပဌီ၊ အပေါ်ကအတိုင်သယူပါ။ libclusterပို၍ ယေဘူယျရည်ရလယ်ချက်ဖဌစ်သည့် သို့မဟုတ် အဆင့်နိမ့်အစုအဖလဲ့ကို သင်ကိုယ်တိုင် ကိုင်တလယ်ပါ။ ကကုဒ်ဒစ်ဂျစ်တိုက်၏ ရည်ရလယ်ချက်မဟာ ဖဌစ်နိုင်ခဌေရဟိသော အခဌေအနေတိုင်သကို လလဟမ်သခဌုံရန်မဟုတ်ဘဲ မလိုအပ်ဘဲ နာကျင်မဟုနဟင့် ခက်ခဲကဌမ်သတမ်သသော ကော်ပီကူသထည့်ခဌင်သမရဟိဘဲ အသုံသအမျာသဆုံသ မဌင်ကလင်သကို အသုံသပဌုရန်ဖဌစ်သည်။

မဟတ်ချက်: မူရင်သတလင် ကအချက်တလင် “Happy clustering!” ဟူသော စကာသစုရဟိခဲ့ပဌီသ၊ ကျလန်ုပ်ဘာသာပဌန်ဆိုထာသသော Yandex (အဘိဓာန်မျာသကို ကျလန်ုပ်ကိုယ်တိုင် ဖဌတ်သန်သရန် မလိုအပ်ပါ) "Happy clustering!" ကို ရလေသချယ်ခလင့် ပေသပါသည်။ အထူသသဖဌင့် လက်ရဟိပထဝီနိုင်ငံရေသအခဌေအနေအရ ပိုမိုကောင်သမလန်သောဘာသာပဌန်ကို စိတ်ကူသကဌည့်ရန် မဖဌစ်နိုင်ပေ။

source: www.habr.com

မဟတ်ချက် Add