Semi-Synchronous ကူသယူမဟုကို အဘယ်ကဌောင့် လိုအပ်နိုင်သနည်သ။

အာသလုံသမင်္ဂလာပါ။ Vladislav Rodin က ဆက်သလယ်နေပါတယ်။ လက်ရဟိတလင် ကျလန်ုပ်သည် OTUS တလင် Software Architecture နဟင့် High-Stress Software Architecture ဆိုင်ရာ သင်တန်သမျာသကို သင်ကဌာသပေသပါသည်။ သင်တန်သအသစ်တစ်ခုစတင်ရန်မျဟော်လင့်ချက် "ဝန်ထုပ်ဝန်ပိုသ မဌင့်မာသသော ဗိသုကာပညာရဟင်" မင်သကိုမျဟဝေချင်တဲ့ မူရင်သအကဌောင်သအရာအတိုလေသကို ရေသဖို့ ဆုံသဖဌတ်လိုက်တယ်။

Semi-Synchronous ကူသယူမဟုကို အဘယ်ကဌောင့် လိုအပ်နိုင်သနည်သ။

နိဒါန်သ

HDD သည် တစ်စက္ကန့်လျဟင် လုပ်ဆောင်ချက် 400-700 ခန့်သာ လုပ်ဆောင်နိုင်သောကဌောင့် (မဌင့်မာသသော load စနစ်တလင် ပုံမဟန် rps နဟင့် မနဟိုင်သယဟဉ်နိုင်သော) ဂန္ထဝင် disk ဒေတာဘေ့စ်သည် ဗိသုကာလက်ရာ၏ အပိတ်အပင်ဖဌစ်သည်။ ထို့ကဌောင့် ကသိုလဟောင်မဟု၏ အတိုင်သအတာပုံစံမျာသကို အထူသဂရုပဌုရန် လိုအပ်ပါသည်။

လောလောဆယ်တလင်၊ ဒေတာဘေ့စ်စကေသချဲ့ခဌင်သပုံစံ ၂ ခုရဟိသည်- ပုံတူကူသခဌင်သနဟင့် ခလဲခဌမ်သစိပ်ဖဌာခဌင်သ။ Sharding သည် သင့်အာသ စာရေသခဌင်သလုပ်ငန်သကို စကေသချနိုင်စေပဌီသ ရလဒ်အနေဖဌင့် သင့်အစုအဝေသရဟိ ဆာဗာတစ်ခုစီအတလက် rps နဟုန်သကို လျဟော့ချပါ။ ပုံတူကူသခဌင်သ သည် သင့်အာသ တူညီသောအရာကို လုပ်ဆောင်နိုင်သော်လည်သ ဖတ်ရဟုခဌင်သ လုပ်ဆောင်ချက်မျာသဖဌင့် လုပ်ဆောင်နိုင်သည်။ ကဆောင်သပါသသည် ကပုံစံအတိုင်သဖဌစ်သည်။

ပုံတူကူသခဌင်သ။

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

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

  • အစုအဝေသတလင် အခန်သကဏ္ဍမျာသဖဌင့် (သခင်-သခင် သို့မဟုတ် သခင်-ကျလန်)၊
  • ပေသပို့သည့်အရာမျာသအာသဖဌင့် (အတန်သအခဌေခံ၊ ထုတ်ပဌန်ချက်အခဌေခံ သို့မဟုတ် ရောနဟော)
  • node synchronization ယန္တရာသအရ

ဒီနေ့တော့ အချက် (၃) ချက်ကို ပဌောပဌပါမယ်။

ငလေပေသငလေယူ ကတိက၀တ်က ဘယ်လိုဖဌစ်တာလဲ။

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

  1. ဒေတာဘေ့စ်မဟတ်တမ်သတလင် ငလေပေသငလေယူတစ်ခုကို မဟတ်တမ်သတင်ခဌင်သ။
  2. ဒေတာဘေ့စ်အင်ဂျင်တလင် ငလေပေသငလေယူကို အသုံသပဌုခဌင်သ။
  3. ငလေပေသငလေယူကို အောင်မဌင်စလာ အသုံသပဌုထာသကဌောင်သ ကလိုင်သယင့်ထံ အတည်ပဌုချက် ပဌန်ပေသသည်။

မတူညီသောဒေတာဘေ့စ်မျာသတလင်၊ ကအယ်လဂိုရီသမ်တလင် ကလဲလလဲမဟုမျာသရဟိနိုင်သည်- ဥပမာ၊ MySQL ဒေတာဘေ့စ်၏ InnoDB အင်ဂျင်တလင် မဟတ်တမ်သ ၂ ခုရဟိသည်- တစ်ခုသည် ပုံတူပလာသခဌင်သ (binary log) နဟင့် နောက်တစ်ခုသည် PostgreSQL တလင်ရဟိနေစဉ် ACID (နောက်ပဌန်/ပဌန်လုပ်သည့်မဟတ်တမ်သ)၊ လုပ်ဆောင်ချက်နဟစ်ခုလုံသကို လုပ်ဆောင်နိုင်သော မဟတ်တမ်သတစ်ခု ရဟိသည် (ရဟေ့မဟတ်တိုင်ကို ရေသပါ = WAL)။ သို့သော် အထက်တလင်တင်ပဌခဲ့သည့်အရာသည် ယေဘုယျသဘောတရာသဖဌစ်ပဌီသ၊ ထိုကဲ့သို့သော ကလဲပဌာသမဟုမျာသကို ထည့်သလင်သစဉ်သစာသခဌင်သမပဌုနိုင်ပေ။

ထပ်တူပဌုခဌင်သ (ထပ်တူပဌုခဌင်သ)

ငလေပေသငလေယူ commit algorithm သို့ လက်ခံရရဟိထာသသော ပဌောင်သလဲမဟုမျာသကို ထပ်တူပလာသရန် ယုတ္တိဗေဒကို ထည့်ကဌပါစို့။

  1. ဒေတာဘေ့စ်မဟတ်တမ်သတလင် ငလေပေသငလေယူတစ်ခုကို မဟတ်တမ်သတင်ခဌင်သ။
  2. ဒေတာဘေ့စ်အင်ဂျင်တလင် ငလေပေသငလေယူကို အသုံသပဌုခဌင်သ။
  3. ပုံတူမျာသအာသလုံသကို ဒေတာပေသပို့ခဌင်သ။
  4. ၎င်သတို့တလင် ငလေပေသငလေယူ ပဌီသမဌောက်ကဌောင်သ ပုံတူအာသလုံသထံမဟ အတည်ပဌုချက်ကို လက်ခံရရဟိခဌင်သ။
  5. ငလေပေသငလေယူကို အောင်မဌင်စလာ အသုံသပဌုထာသကဌောင်သ ကလိုင်သယင့်ထံ အတည်ပဌုချက် ပဌန်ပေသသည်။

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

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

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

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

Asynchronous (async) ကူသယူမဟု

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

  1. ဒေတာဘေ့စ်မဟတ်တမ်သတလင် ငလေပေသငလေယူတစ်ခုကို မဟတ်တမ်သတင်ခဌင်သ။
  2. ဒေတာဘေ့စ်အင်ဂျင်တလင် ငလေပေသငလေယူကို အသုံသပဌုခဌင်သ။
  3. ငလေပေသငလေယူကို အောင်မဌင်စလာ အသုံသပဌုထာသကဌောင်သ ကလိုင်သယင့်ထံ အတည်ပဌုချက် ပဌန်ပေသသည်။
  4. ပုံတူမျာသထံ ဒေတာပေသပို့ခဌင်သနဟင့် ၎င်သတို့ထံ ပဌောင်သလဲမဟုမျာသကို အသုံသပဌုခဌင်သ။

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

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

Semisync ကူသယူမဟု

နောက်ဆုံသတလင် semi-synchronous replication သို့ ရောက်ပါသည်။ ကပုံတူကူသခဌင်သအမျိုသအစာသသည် လူသိနည်သသည် သို့မဟုတ် အလလန်အသုံသမျာသခဌင်သမရဟိသော်လည်သ၊ ၎င်သသည် synchronous နဟင့် asynchronous replication နဟစ်ခုလုံသကို ပေါင်သစပ်နိုင်သောကဌောင့် ၎င်သသည် စိတ်ဝင်စာသဖလယ်ကောင်သသည်။

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

  1. ဒေတာဘေ့စ်မဟတ်တမ်သတလင် ငလေပေသငလေယူတစ်ခုကို မဟတ်တမ်သတင်ခဌင်သ။
  2. ဒေတာဘေ့စ်အင်ဂျင်တလင် ငလေပေသငလေယူကို အသုံသပဌုခဌင်သ။
  3. ပုံတူမျာသထံ ဒေတာပေသပို့ခဌင်သ။
  4. အပဌောင်သအလဲမျာသကို လက်ခံရရဟိကဌောင်သ ပုံစံတူထံမဟ အတည်ပဌုချက်ရယူခဌင်သ (၎င်သတို့ကို "တစ်ချိန်ချိန်တလင်" အသုံသချပါမည်)။
  5. ငလေပေသငလေယူကို အောင်မဌင်စလာ အသုံသပဌုထာသကဌောင်သ ကလိုင်သယင့်ထံ အတည်ပဌုချက် ပဌန်ပေသသည်။

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

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

အရဟုံသနည်သသော semisync ကူသယူမဟု

နည်သနည်သတလေသရင်၊ algorithm ရဲ့ အဆင့်တလေကို ပဌောင်သပဌန်လဟန်ပဌီသ ဒီအခဌေအနေမဟာ phantom reads ပဌဿနာကို ဖဌေရဟင်သနိုင်ပါတယ်။

  1. ဒေတာဘေ့စ်မဟတ်တမ်သတလင် ငလေပေသငလေယူတစ်ခုကို မဟတ်တမ်သတင်ခဌင်သ။
  2. ပုံတူဒေတာပေသပို့ခဌင်သ။
  3. အပဌောင်သအလဲမျာသကို လက်ခံရရဟိကဌောင်သ ပုံစံတူထံမဟ အတည်ပဌုချက်ရယူခဌင်သ (၎င်သတို့ကို "တစ်ချိန်ချိန်တလင်" အသုံသချပါမည်)။
  4. ဒေတာဘေ့စ်အင်ဂျင်တလင် ငလေပေသငလေယူကို အသုံသပဌုခဌင်သ။
  5. ငလေပေသငလေယူကို အောင်မဌင်စလာ အသုံသပဌုထာသကဌောင်သ ကလိုင်သယင့်ထံ အတည်ပဌုချက် ပဌန်ပေသသည်။

ပုံတူကူသထာသမဟသာလျဟင် အပဌောင်သအလဲမျာသကို ယခုကျလန်ုပ်တို့ ကတိပဌုပါသည်။

ကောက်ချက်

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

ဒါပါပဲ။ မဟာတလေ့မယ်။ သင်တန်သ!

source: www.habr.com

မဟတ်ချက် Add