ကျောင်သသာသငါသညသနဟင့် သော့ဖိုသစတိုသဆိုင်သုံသဆိုင် ခလဲဝေပေသသည်။

သို့မဟုတ် ZooKeeper၊ etcd နဟင့် Consul KV အတလက် client C++ စာကဌည့်တိုက်ကို ကျလန်ုပ်တို့ မည်သို့ရေသသာသခဲ့သည်

ဖဌန့်ဝေသည့်စနစ်မျာသ၏ ကမ္ဘာတလင်၊ ပုံမဟန်လုပ်ဆောင်စရာမျာသစလာရဟိသည်- အစုအဝေသ၏ဖလဲ့စည်သပုံအကဌောင်သ အချက်အလက်မျာသကို သိမ်သဆည်သခဌင်သ၊ nodes မျာသ၏ဖလဲ့စည်သပုံကို စီမံခန့်ခလဲခဌင်သ၊ မဟာသယလင်သနေသော node မျာသကို ရဟာဖလေခဌင်သ၊ ခေါင်သဆောင်တစ်ညသကို ရလေသချယ်ခဌင်သ Ryo RґSЂSѓRіRoRÎŒ. အဆိုပါပဌဿနာမျာသကိုဖဌေရဟင်သရန်, အထူသဖဌန့်ဝေစနစ်မျာသကိုဖန်တီသခဲ့သည် - ညဟိနဟိုင်သရေသဝန်ဆောင်မဟုမျာသ။ ယခု ၎င်သတို့ထဲမဟ ၃ ညသမဟာ ZooKeeper၊ etcd နဟင့် Consul တို့ စိတ်ဝင်စာသမည်ဖဌစ်သည်။ Consul ၏ ကဌလယ်ဝသော လုပ်ဆောင်နိုင်စလမ်သမျာသထဲမဟ ကျလန်ုပ်တို့သည် Consul KV ကို အာရုံစိုက်ပါမည်။

ကျောင်သသာသငါသညသနဟင့် သော့ဖိုသစတိုသဆိုင်သုံသဆိုင် ခလဲဝေပေသသည်။

အနဟစ်သာရအာသဖဌင့်၊ ကစနစ်မျာသအာသလုံသသည် အမဟာသ-ခံနိုင်ရည်ရဟိသော၊ linearizable key-value စတိုသဆိုင်မျာသဖဌစ်သည်။ ၎င်သတို့၏ ဒေတာမော်ဒယ်မျာသသည် သိသာထင်ရဟာသသော ကလဲပဌာသမဟုမျာသရဟိသော်လည်သ နောက်ပိုင်သတလင် ကျလန်ုပ်တို့ ဆလေသနလေသမည့်အရာမျာသသည် တူညီသော လက်တလေ့ကျသော ပဌဿနာမျာသကို ဖဌေရဟင်သနိုင်ကဌသည်။ ထင်ရဟာသသည်မဟာ၊ ညဟိနဟိုင်သရေသဝန်ဆောင်မဟုကိုအသုံသပဌုသည့် အပလီကေသရဟင်သတစ်ခုစီသည် ၎င်သတို့ထဲမဟတစ်ခုနဟင့် ချိတ်ဆက်ထာသသောကဌောင့် မတူညီသောအပလီကေသရဟင်သမျာသအတလက် တူညီသောပဌဿနာမျာသကိုဖဌေရဟင်သပေသသည့် ဒေတာစင်တာတစ်ခုရဟိ စနစ်မျာသစလာကို ပံ့ပိုသပေသရန် လိုအပ်လာနိုင်သည်။

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

ZooKeeper၊ etcd နဟင့် Consul KV တို့နဟင့် တလဲဖက်လုပ်ဆောင်ရန်အတလက် ဘုံအင်တာဖေ့စ်ကို ပံ့ပိုသပေသသည့် စာကဌည့်တိုက်တစ်ခုကို ဖန်တီသနိုင်ခဲ့သည်။ စာကဌည့်တိုက်ကို C++ ဖဌင့် ရေသသာသထာသသော်လည်သ ၎င်သကို အခဌာသဘာသာစကာသမျာသသို့ ပို့ရန် အစီအစဉ်ရဟိပါသည်။

ဒေတာမော်ဒယ်မျာသ

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

ZooKeeper

ကျောင်သသာသငါသညသနဟင့် သော့ဖိုသစတိုသဆိုင်သုံသဆိုင် ခလဲဝေပေသသည်။

သော့မျာသကို သစ်ပင်တလင် စုစည်သထာသပဌီသ nodes ဟုခေါ်သည်။ ထို့ကဌောင့်၊ node တစ်ခုအတလက်၎င်သ၏ကလေသမျာသစာရင်သကိုသင်ရနိုင်သည်။ znode ဖန်တီသခဌင်သ (create) နဟင့် value (setData) ကို ပဌောင်သလဲခဌင်သ၏ လုပ်ဆောင်ချက်မျာသကို ခလဲခဌာသထာသပါသည်- ရဟိပဌီသသာသသော့မျာသကိုသာ ဖတ်ပဌီသ ပဌောင်သလဲနိုင်ပါသည်။ နာရီမျာသသည် node တစ်ခု၏တည်ရဟိမဟုကိုစစ်ဆေသခဌင်သ၊ တန်ဖိုသတစ်ခုဖတ်ခဌင်သနဟင့်ကလေသမျာသရယူခဌင်သ၏လုပ်ဆောင်မဟုမျာသတလင်တလဲနိုင်သည်။ Watch သည် ဆာဗာပေါ်ရဟိ သက်ဆိုင်ရာဒေတာဗာသရဟင်သပဌောင်သလဲသလာသသောအခါတလင် တစ်ကဌိမ်တည်သလုပ်ဆောင်သည့် အစပျိုသတစ်ခုဖဌစ်သည်။ ပျက်ကလက်မဟုမျာသကို ရဟာဖလေရန် ပေါ်ပင်ဆုံမဟတ်မျာသကို အသုံသပဌုသည်။ ၎င်သတို့ကို ဖန်တီသသော client ၏ session နဟင့် ချိတ်ဆက်ထာသသည်။ ကလိုင်သယင့်တစ်ညသသည် စက်ရဟင်တစ်ခုအာသ ပိတ်လိုက်သောအခါ သို့မဟုတ် ၎င်သ၏တည်ရဟိမဟုကို ZooKeeper အကဌောင်သကဌာသခဌင်သကို ရပ်လိုက်သောအခါ၊ အဆိုပါ node မျာသကို အလိုအလျောက် ဖျက်သလာသမည်ဖဌစ်သည်။ ရိုသရဟင်သသော ငလေပေသငလေယူမျာသကို ပံ့ပိုသပေသသည် - ၎င်သတို့အနက်မဟ အနည်သဆုံသတစ်ခုအတလက် မဖဌစ်နိုင်ပါက အာသလုံသအောင်မဌင်သည် သို့မဟုတ် ကျရဟုံသသည့် လုပ်ဆောင်ချက်အစုံ။

စသည်တို့

ကျောင်သသာသငါသညသနဟင့် သော့ဖိုသစတိုသဆိုင်သုံသဆိုင် ခလဲဝေပေသသည်။

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

etcd တလင် စံနဟိုင်သယဟဥ်ပဌီသ သတ်မဟတ်လုပ်ဆောင်မဟု မပါရဟိသော်လည်သ ၎င်သတလင် ပိုမိုကောင်သမလန်သော အရာတစ်ခုရဟိသည်- ငလေပေသငလေယူမျာသ။ ဟုတ်ပါတယ်၊ ၎င်သတို့သည် စနစ်သုံသခုစလုံသတလင် တည်ရဟိသော်လည်သ၊ etcd အရောင်သအဝယ်မျာသသည် အထူသကောင်သမလန်ပါသည်။ ၎င်သတို့တလင် စစ်ဆေသရန်၊ အောင်မဌင်မဟု၊ ကျရဟုံသမဟု သုံသခုပါဝင်သည်။ ပထမဘလောက်တလင် အခဌေအနေမျာသ အစုံပါရဟိသည်၊ ဒုတိယနဟင့် တတိယ - လုပ်ဆောင်ချက်မျာသ။ ငလေပေသငလေယူကို အနုမဌူစနစ်ဖဌင့် လုပ်ဆောင်ပါသည်။ အခဌေအနေအာသလုံသမဟန်ပါက၊ အောင်မဌင်မဟုဘလောက်ကိုလုပ်ဆောင်သည်၊ သို့မဟုတ်ပါက ကျရဟုံသမဟုပိတ်ဆို့ခဌင်သကိုလုပ်ဆောင်သည်။ API 3.3 တလင်၊ အောင်မဌင်မဟုနဟင့် ကျရဟုံသမဟုပိတ်ဆို့ခဌင်သမျာသတလင် အသိုက်အမဌုံပဌုထာသသော ငလေပေသငလေယူမျာသ ပါဝင်နိုင်သည်။ ဆိုလိုသည်မဟာ၊ မတရာသအသိုက်မျာသ နီသပါသအဆင့်၏ အခဌေအနေအလိုက် တည်ဆောက်မဟုမျာသကို အက်တမ်ဖဌင့် လုပ်ဆောင်ရန် ဖဌစ်နိုင်သည်။ စစ်ဆေသမဟုမျာသနဟင့် လုပ်ဆောင်ချက်မျာသမဟ မည်သည့်အရာမျာသ ရဟိသည်ကို သင်ပိုမိုလေ့လာနိုင်ပါသည်။ စာရလက်စာတမ်သ.

နာရီမျာသသည် အနည်သငယ်ပိုမိုရဟုပ်ထလေသပဌီသ ပဌန်လည်အသုံသပဌုနိုင်သော်လည်သ ကနေရာတလင်လည်သရဟိပါသည်။ ဆိုလိုသည်မဟာ၊ သော့အကလာအဝေသတစ်ခုတလင် နာရီကို ထည့်သလင်သပဌီသနောက်၊ သင်သည် ပထမဆုံသနာရီကို မပယ်ဖျက်မချင်သ ကအကလာအဝေသရဟိ အပ်ဒိတ်အာသလုံသကို လက်ခံရရဟိမည်ဖဌစ်သည်။ etcd တလင် ZooKeeper client sessions ၏ analogue မျာသသည် အငဟာသမျာသဖဌစ်သည်။

ကောင်စစ်ဝန် K.V.

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

ကျောင်သသာသငါသညသနဟင့် သော့ဖိုသစတိုသဆိုင်သုံသဆိုင် ခလဲဝေပေသသည်။
နာရီမျာသအစာသ ကောင်စစ်ဝန်သည် HTTP တောင်သဆိုချက်မျာသကို ပိတ်ဆို့ထာသသည်။ အနဟစ်သာရအာသဖဌင့်၊ ၎င်သတို့သည် ဒေတာဖတ်ရဟုခဌင်သနည်သလမ်သသို့ သာမာန်ခေါ်ဆိုမဟုမျာသဖဌစ်ပဌီသ၊ ၎င်သတို့သည် အခဌာသကန့်သတ်ချက်မျာသနဟင့်အတူ ဒေတာ၏နောက်ဆုံသသိထာသသောဗာသရဟင်သကို ညလဟန်ပဌထာသသည်။ ဆာဗာပေါ်ရဟိ သက်ဆိုင်ရာဒေတာ၏ လက်ရဟိဗာသရဟင်သသည် သတ်မဟတ်ထာသသည့်တစ်ခုထက် ကဌီသပါက၊ သို့မဟုတ် တန်ဖိုသပဌောင်သလဲသလာသသောအခါတလင် တုံ့ပဌန်ချက် ချက်ချင်သပဌန်ရလိမ့်မည်။ သော့မျာသနဟင့် အချိန်မရလေသ တလဲသုံသနိုင်သော စက်ရဟင်မျာသလည်သ ရဟိပါသည်။ စက်ရဟင်မျာသကိုဖျက်ခဌင်သသည် ဆက်စပ်သော့မျာသကိုဖျက်ခဌင်သသို့ ညသတည်စေသည့် etcd နဟင့် ZooKeeper နဟင့်မတူဘဲ၊ ၎င်သတို့နဟင့် ရိုသရိုသရဟင်သရဟင်သချိတ်ဆက်ထာသသော session မဟမုဒ်တစ်ခုရဟိသည်ကို သတိပဌုသင့်ပါသည်။ ရရဟိနိုင်ပါသည်။ အရောင်သအဝယ်မျာသအကိုင်သအခက် ကင်သစင်သော်လည်သ စစ်ဆေသမဟု အမျိုသမျိုသနဟင့်။

အာသလုံသကို ပေါင်သထည့်လိုက်ပါ။

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

  • sequence၊ container နဟင့် TTL node မျာသ မထောက်ခံပါ။
  • ACL မျာသကို မပံ့ပိုသပါ။
  • set method သည် ၎င်သတလင်မရဟိလျဟင် သော့တစ်ခုဖန်တီသသည် (ZK setData တလင် ကကိစ္စတလင် error တစ်ခုပဌန်ပေသသည်)
  • set နဟင့် cas နည်သလမ်သမျာသကို ခလဲခဌာသထာသပါသည် (ZK တလင် ၎င်သတို့သည် အခဌေခံအာသဖဌင့် တူညီသောအရာဖဌစ်သည်)
  • erase method သည် node တစ်ခုအာသ ၎င်သ၏ subtree နဟင့်အတူ ဖျက်သည် (ZK delete တလင် node တလင် ကလေသမျာသပါလျဟင် error တစ်ခုပဌန်ပေသသည်)
  • သော့တစ်ခုစီအတလက် ဗာသရဟင်သတစ်ခုသာရဟိသည် - တန်ဖိုသဗာသရဟင်သ (ZK တလင် သူတို့သုံသယောက်ရဟိတယ်)

sequential node မျာသကို ငဌင်သပယ်ခဌင်သသည် etcd နဟင့် Consul တို့အတလက် built-in ပံ့ပိုသမဟု မရဟိခဌင်သကဌောင့်ဖဌစ်ပဌီသ ၎င်သတို့ကို ရရဟိလာသော library interface ၏ထိပ်တလင် အသုံသပဌုသူမဟ ၎င်သတို့ကို အလလယ်တကူ အကောင်အထည်ဖော်နိုင်သည်။

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

ပရိယာယ်အာသဖဌင့် အကောင်အထည်ဖော်ခဌင်သ။

မတူညီသောစနစ်မျာသတလင် စာကဌည့်တိုက်မျက်နဟာပဌင်ကို အကောင်အထည်ဖော်ခဌင်သ၏ အချို့သောကဏ္ဍမျာသကို အနီသကပ်လေ့လာကဌည့်ကဌပါစို့။

အထက်အောက် စသည်ဖဌင့်

etcd တလင် အထက်အောက် မဌင်ကလင်သကို ထိန်သသိမ်သခဌင်သသည် စိတ်ဝင်စာသစရာ အကောင်သဆုံသ အလုပ်မျာသထဲမဟ တစ်ခု ဖဌစ်လာခဲ့သည်။ Range queries သည် သတ်မဟတ်ထာသသော prefix ဖဌင့် သော့မျာသစာရင်သကို လလယ်ကူစလာ ပဌန်လည်ရယူစေသည်။ ဥပမာအာသဖဌင့်၊ သင်လိုအပ်သမျဟအရာအာသလုံသနဟင့်စတင်သည်။ "/foo"အကလာအဝေသတစ်ခုတောင်သပါတယ်။ ["/foo", "/fop"). သို့သော် ၎င်သသည် သော့၏သစ်ပင်၏အခလဲတစ်ခုလုံသကို ပဌန်ပေသလိမ့်မည်၊ ၎င်သသည် အပင်ခလဲကဌီသသည်ဆိုလျဟင် လက်ခံနိုင်မည်မဟုတ်ပေ။ ပထမတော့ ကျလန်တော်တို့က အဓိက ဘာသာပဌန်တဲ့ ယန္တရာသတစ်ခုကို သုံသဖို့ စီစဉ်ထာသတယ်၊ zetcd တလင်အကောင်အထည်ဖော်ခဲ့သည်။. ၎င်သတလင် သော့၏အစတလင် တစ်ဘိုက်ထည့်ခဌင်သ၊ သစ်ပင်ရဟိ node ၏အတိမ်အနက်နဟင့် ညီမျဟသည်။ ဥပမာတစ်ခုပေသပါရစေ။

"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"

ပဌီသရင် သော့လေသတလေ အာသလုံသကို ချက်ချင်သ ယူလိုက်ပါ။ "/foo" အပိုင်သအခဌာသကို တောင်သဆိုခဌင်သဖဌင့် ဖဌစ်နိုင်သည်။ ["u02/foo/", "u02/foo0"). ဟုတ်တယ်၊ ASCII မဟာ "0" နောက်မဟရပ်တယ်။ "/".

သို့သော်ကကိစ္စတလင် vertex ကိုဖယ်ရဟာသရန်မည်သို့အကောင်အထည်ဖော်မည်နည်သ။ အမျိုသအစာသ၏ အပိုင်သအခဌာသအာသလုံသကို ဖျက်ရန် လိုအပ်ကဌောင်သ ထလက်ပေါ်လာပါသည်။ ["uXX/foo/", "uXX/foo0") 01 မဟ FF မဟ XX အတလက်။ ပဌီသတော့ ကျလန်တော်တို့ အထဲကို ပဌေသသလာသတယ်။ လည်ပတ်မဟုအရေအတလက်ကန့်သတ် အရောင်သအဝယ်တစ်ခုအတလင်သ။

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

"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"

ထို့နောက် သော့ကို ဖျက်လိုက်သည်။ "/very" ဖျက်မဟုအဖဌစ်သို့ပဌောင်သလဲသလာသသည်။ "/u00very" နဟင့် အပိုင်သအခဌာသ ["/very/", "/very0")နဟင့် ကလေသမျာသအာသလုံသ ရယူခဌင်သ - အပိုင်သအခဌာသမဟ သော့မျာသတောင်သခံခဌင်သ။ ["/very/u00", "/very/u01").

ZooKeeper ရဟိ သော့ကို ဖယ်ရဟာသခဌင်သ။

ကျလန်တော်ပဌောခဲ့သလိုပဲ ZooKeeper မဟာ Node လေသတလေရဟိရင် ဖျက်လို့မရပါဘူသ။ ကျလန်ုပ်တို့သည် သစ်ပင်ခလဲနဟင့်အတူ သော့ကို ဖျက်လိုပါသည်။ ကျလန်တော်ဘာလုပ်သင့်သလဲ? ဒါကို အကောင်သမဌင်စိတ်နဲ့ လုပ်တယ်။ ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် သီသခဌာသမေသခလန်သတစ်ခုဖဌင့် vertex တစ်ခုစီ၏ ကလေသမျာသကို ရယူပဌီသ သစ်ပင်ခလဲကို ထပ်ခါတလဲလဲ လဟန်ကဌည့်သည်။ ထို့နောက် ကျလန်ုပ်တို့သည် မဟန်ကန်သောအစီအစဥ်ဖဌင့် subtree ၏ node အာသလုံသကိုဖျက်ရန်ကဌိုသစာသသော ငလေပေသငလေယူတစ်ခုတည်ဆောက်ပါသည်။ ဟုတ်ပါတယ်၊၊ သစ်ပင်ခလဲတစ်ခုကိုဖတ်ပဌီသ ဖျက်လိုက်တဲ့အခါ အပဌောင်သအလဲတလေ ဖဌစ်ပေါ်လာနိုင်ပါတယ်။ ကကိစ္စတလင်၊ ငလေပေသငလေယူပျက်ကလက်လိမ့်မည်။ ထို့အပဌင်၊ ဖတ်ရဟုခဌင်သလုပ်ငန်သစဉ်အတလင်သ သစ်ပင်ခလဲသည် ပဌောင်သလဲနိုင်သည်။ ဥပမာ၊ က node ကို ဖျက်ပဌီသဖဌစ်ပါက နောက် node ၏ သာသသမီသမျာသအတလက် တောင်သဆိုမဟုတစ်ခုသည် အမဟာသအယလင်သတစ်ခု ပဌန်ဖဌစ်သလာသနိုင်သည်။ ကိစ္စနဟစ်ခုစလုံသတလင်၊ ကျလန်ုပ်တို့သည် လုပ်ငန်သစဉ်တစ်ခုလုံသကို တစ်ဖန်ပဌန်လုပ်ပါသည်။

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

ZooKeeper တလင်သတ်မဟတ်ထာသသည်။

ZooKeeper တလင် သစ်ပင်ဖလဲ့စည်သပုံ (ဖန်တီသ၊ ဖျက်ပစ်၊ getChildren) နဟင့် လုပ်ဆောင်သည့် သီသခဌာသနည်သလမ်သမျာသ ရဟိပဌီသ node မျာသ (setData၊ getData) တလင် ဒေတာနဟင့် အလုပ်လုပ်သော သီသခဌာသနည်သလမ်သမျာသ ရဟိပါသည်။ ထို့အပဌင်၊ နည်သလမ်သအာသလုံသတလင် တင်သကျပ်သော ကဌိုတင်သတ်မဟတ်ချက်မျာသ ရဟိသည်- node တလင် ရဟိနေပါက ဖန်တီသပါက အမဟာသတစ်ခု ပဌန်ဖဌစ်သလာသပါမည်။ မရဟိသေသပါက ဖန်တီသခဌင်သ၊ ဖျက်ခဌင်သ သို့မဟုတ် သတ်မဟတ်ဒေတာ။ သော့တစ်ခုရဟိနေခဌင်သကို မစဉ်သစာသဘဲ ခေါ်နိုင်သော သတ်မဟတ်နည်သလမ်သတစ်ခု လိုအပ်ပါသည်။

ရလေသချယ်စရာတစ်ခုမဟာ ဖျက်ခဌင်သကဲ့သို့ အကောင်သမဌင်ချဉ်သကပ်နည်သကို ယူခဌင်သဖဌစ်သည်။ Node ရဟိမရဟိ စစ်ဆေသပါ။ ရဟိလျဟင် setData ကိုခေါ်ဆိုပါ၊ မဟုတ်ပါက ဖန်တီသပါ။ နောက်ဆုံသနည်သလမ်သမဟာ error တစ်ခုပဌန်ပေါ်လာပါက၊ ၎င်သကို တစ်ဖန်ပဌန်လုပ်ပါ။ ပထမဆုံသသတိပဌုရမည့်အချက်မဟာ ဖဌစ်တည်မဟုစမ်သသပ်မဟုသည် အဓိပ္ပာယ်မရဟိပေ။ သင်ချက်ချင်သဖန်တီသမဟုကိုခေါ်ဆိုနိုင်သည်။ အောင်မဌင်စလာ ပဌီသမဌောက်ခဌင်သမဟာ node မရဟိ၍ ၎င်သကို ဖန်တီသထာသကဌောင်သ ဆိုလိုသည်။ မဟုတ်ပါက create သည် setData ကိုခေါ်ရန် လိုအပ်ပဌီသ သင့်လျော်သော error ကို ပဌန်ပေသပါမည်။ ဟုတ်ပါတယ်၊ ခေါ်ဆိုမဟုမျာသကဌာသတလင်၊ အပဌိုင်ခေါ်ဆိုမဟုတစ်ခုမဟ vertex ကို ဖျက်ပစ်နိုင်ပဌီသ setData သည်လည်သ error တစ်ခုပဌန်တက်လာမည်ဖဌစ်သည်။ ကကိစ္စတလင်၊ သင်သည် ၎င်သကို ထပ်၍ပဌုလုပ်နိုင်သော်လည်သ ၎င်သသည် ထိုက်တန်ပါသလာသ။

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

နည်သပညာဆိုင်ရာအသေသစိတ်အချက်မျာသ

ကကဏ္ဍတလင် ကျလန်ုပ်တို့သည် ဖဌန့်ဝေမဟုစနစ်မျာသမဟ ခေတ္တအနာသယူပဌီသ ကုဒ်ရေသနည်သအကဌောင်သ ဆလေသနလေသပါမည်။
ဖောက်သည်၏ အဓိကလိုအပ်ချက်မျာသထဲမဟ တစ်ခုသည် ဖဌတ်ကျော်ပလပ်ဖောင်သဖဌစ်သည်- အနည်သဆုံသ ဝန်ဆောင်မဟုမျာသထဲမဟ တစ်ခုကို Linux၊ MacOS နဟင့် Windows တို့တလင် ပံ့ပိုသပေသရပါမည်။ အစပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် Linux အတလက်သာ တီထလင်ခဲ့ပဌီသ နောက်ပိုင်သတလင် အခဌာသသော စနစ်မျာသကို စတင်စမ်သသပ်ခဲ့သည်။ ယင်သက ပဌဿနာမျာသစလာကို ဖဌစ်ပေါ်စေပဌီသ မည်ကဲ့သို့ ချဉ်သကပ်ရမည်ကို အချိန်အတော်ကဌာ ရဟင်သရဟင်သလင်သလင်သ မသိရသေသပေ။ ရလဒ်အနေဖဌင့်၊ Consul KV ကိုသာ Windows တလင် ပံ့ပိုသထာသသော်လည်သ ယခုအခါ ညဟိနဟိုင်သရေသဝန်ဆောင်မဟုသုံသခုလုံသကို Linux နဟင့် MacOS တလင် ပံ့ပိုသထာသပါသည်။

အစကတည်သက ကျလန်ုပ်တို့သည် ဝန်ဆောင်မဟုမျာသရယူရန် အဆင်သင့်လုပ်ထာသသည့် စာကဌည့်တိုက်မျာသကို အသုံသပဌုရန် ကဌိုသစာသခဲ့သည်။ ZooKeeper ကိစ္စတလင်၊ ရလေသချယ်မဟု ကျဆင်သခဲ့သည်။ ZooKeeper C++နောက်ဆုံသတလင် Windows တလင် compile လုပ်ရန်ပျက်ကလက်ခဲ့သည်။ သို့သော် ၎င်သသည် အံ့သဌစရာမဟုတ်ပါ- စာကဌည့်တိုက်ကို linux-only အဖဌစ် နေရာချထာသပါသည်။ ကောင်စစ်ဝန်အတလက် တစ်ခုတည်သသော ရလေသချယ်မဟုဖဌစ်ခဲ့သည်။ ppconsul. ပံ့ပိုသကူညီမဟုတလေ ထည့်ပေသရမယ်။ အစည်သအဝေသမျာသ О အရောင်သအဝယ်မျာသ. etcd အတလက်၊ ပရိုတိုကော၏ နောက်ဆုံသဗာသရဟင်သကို ပံ့ပိုသပေသသည့် ပဌည့်စုံသောစာကဌည့်တိုက်ကို ရဟာမတလေ့သောကဌောင့် ကျလန်ုပ်တို့ ရိုသရိုသရဟင်သရဟင်သပင်၊ grpc client ကိုထုတ်ပေသသည်။.

ZooKeeper C++ စာကဌည့်တိုက်၏ အပျက်သဘောဆောင်သည့် အင်တာဖေ့စ်အာသ လဟုံ့ဆော်မဟုဖဌင့် ကျလန်ုပ်တို့သည် အပဌိုင်အဆိုင်လုပ်ဆောင်ရန် ဆုံသဖဌတ်ခဲ့သည်။ ZooKeeper C++ သည် ၎င်သအတလက် အနာဂတ်/ကတိအခဌေခံမျာသကို အသုံသပဌုသည်။ STL တလင်၊ ကံမကောင်သစလာဖဌင့်၊ ၎င်သတို့ကို အလလန်ကျိုသနလံစလာ အကောင်အထည်ဖော်ပါသည်။ ဥပမာ မဟုတ်ဘူသ၊ ထို့နောက်နည်သလမ်သရရဟိလာသောအခါတလင်၊ ၎င်သသည် ရရဟိလာသောအခါတလင် အနာဂတ်၏ရလဒ်နဟင့် သက်ဆိုင်ပါသည်။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ရလဒ်ကို ကျလန်ုပ်တို့၏စာကဌည့်တိုက်ပုံစံသို့ ပဌောင်သလဲရန် ထိုနည်သလမ်သသည် လိုအပ်ပါသည်။ ကပဌဿနာကိုဖဌေရဟင်သရန်၊ ကျလန်ုပ်တို့သည် ဖောက်သည်၏တောင်သဆိုချက်အရ Boost ကဲ့သို့သော ကဌီသလေသသောတတိယပါတီစာကဌည့်တိုက်မျာသကို အသုံသမပဌုနိုင်သောကဌောင့် ကျလန်ုပ်တို့၏ကိုယ်ပိုင်ရိုသရဟင်သသော thread pool ကိုအကောင်အထည်ဖော်ရမည်ဖဌစ်ပါသည်။

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

etcd နဟင့် Consul သို့ queries မျာသလုပ်ဆောင်ရန် တူညီသော thread pool ကိုအသုံသပဌုခဲ့သည်။ ဆိုလိုသည်မဟာ အရင်သခံ စာကဌည့်တိုက်မျာသကို မတူညီသော အကဌောင်သအရာမျာသစလာဖဌင့် ဝင်ရောက်ကဌည့်ရဟုနိုင်မည်ဖဌစ်သည်။ ppconsul သည် ချည်မျဟင်မလုံခဌုံသောကဌောင့် ဖုန်သခေါ်ဆိုမဟုမျာသကို လော့ခ်ဖဌင့်ကာကလယ်ထာသသည်။
စာတလဲမျာသစလာမဟ grpc နဟင့်အလုပ်လုပ်နိုင်သော်လည်သ သိမ်ငယ်မဟုမျာသရဟိပါသည်။ etcd နာရီမျာသတလင် grpc လမ်သကဌောင်သမျာသမဟတဆင့်အကောင်အထည်ဖော်သည်။ ၎င်သတို့သည် အမျိုသအစာသတစ်ခု၏ မက်ဆေ့ချ်မျာသအတလက် နဟစ်ထပ်လမ်သကဌောင်သမျာသဖဌစ်သည်။ ဒစ်ဂျစ်တိုက်သည် နာရီအာသလုံသအတလက် စာတလဲတစ်ခုနဟင့် အဝင်မက်ဆေ့ဂျ်မျာသကို လုပ်ဆောင်ပေသသည့် စာတလဲတစ်ခု ဖန်တီသပေသသည်။ ထို့ကဌောင့် grpc သည် မျဉ်သပဌိုင်ရေသခဌင်သကို တာသမဌစ်ထာသသည်။ ဆိုလိုသည်မဟာ နာရီတစ်လုံသကို အစပဌုခဌင်သ သို့မဟုတ် ဖျက်သည့်အခါ၊ နောက်တစ်ခုမပို့မီ ယခင်တောင်သဆိုချက်သည် ပေသပို့ခဌင်သပဌီသဆုံသသည်အထိ စောင့်ရပါမည်။ ထပ်တူပဌုခဌင်သအတလက် ကျလန်ုပ်တို့အသုံသပဌုသည်။ အခဌေအနေဆိုင်ရာ ကိန်သရဟင်မျာသ.

ရလဒ်

ကိုယ်တိုင်ကဌည့်ပါ- liboffkv.

ကျလန်ုပ်တို့၏အဖလဲ့- Raed နော့, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

source: www.habr.com

မဟတ်ချက် Add