ဖဌန့်ဝေထာသသော Application မျာသကို တည်ဆောက်ခဌင်သ။ ဒုတိယအနီသစပ်ဆုံသ

ကဌေငဌာချက်

လုပ်ဖော်ကိုင်ဖက်မျာသ ၊ နလေရာသီလယ်တလင် တန်သစီခဌင်သစနစ်မျာသ၏ ဒီဇိုင်သဆိုင်ရာ ဆောင်သပါသတလဲမျာသကို ထုတ်ဝေရန် စီစဉ်ထာသပါသည်- "The VTrade Experiment" - ကုန်သလယ်မဟုစနစ်မျာသအတလက် မူဘောင်တစ်ခုရေသရန် ကဌိုသပမ်သမဟု။ စီသရီသသည် လဲလဟယ်မဟု၊ လေလံနဟင့် စတိုသဆိုင်တည်ဆောက်ခဌင်သဆိုင်ရာ သီအိုရီနဟင့် လက်တလေ့ကို ဆန်သစစ်မည်ဖဌစ်သည်။ ဆောင်သပါသရဲ့အဆုံသမဟာ သင်စိတ်ဝင်စာသဆုံသအကဌောင်သအရာတလေကို မဲပေသဖို့ ဖိတ်ခေါ်ပါတယ်။

ဖဌန့်ဝေထာသသော Application မျာသကို တည်ဆောက်ခဌင်သ။ ဒုတိယအနီသစပ်ဆုံသ

ကသည်မဟာ Erlang/Elixir ရဟိ ဖဌန့်ဝေထာသသော ဓာတ်ပဌုအက်ပ်လီကေသရဟင်သမျာသအကဌောင်သ စီသရီသ၏ နောက်ဆုံသဆောင်သပါသဖဌစ်သည်။ IN ပထမဆောင်သပါသ ဓာတ်ပဌုမဟုဗိသုကာပညာ၏ သီအိုရီအခဌေခံအုတ်မဌစ်မျာသကို သင်တလေ့ရဟိနိုင်သည်။ ဒုတိယဆောင်သပါသ ထိုကဲ့သို့သော စနစ်မျာသကို တည်ဆောက်ရန်အတလက် အခဌေခံပုံစံမျာသနဟင့် ယန္တရာသမျာသကို သရုပ်ဖော်သည်။

ယနေ့ကျလန်ုပ်တို့သည်ကုဒ်အခဌေခံနဟင့်ပရောဂျက်မျာသ၏ယေဘုယျအာသဖဌင့်ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာကိစ္စရပ်မျာသကိုတင်ပဌပါမည်။

ဝန်ဆောင်မဟုအဖလဲ့အစည်သ

လက်တလေ့ဘဝတလင်၊ ဝန်ဆောင်မဟုတစ်ခုဖန်တီသသောအခါ၊ သင်သည် ထိန်သချုပ်ကိရိယာတစ်ခုတလင် အပဌန်အလဟန်တုံ့ပဌန်မဟုပုံစံမျာသစလာကို မကဌာခဏ ပေါင်သစပ်ရမည်ဖဌစ်ပါသည်။ ဥပမာအာသဖဌင့်၊ ပရောဂျက်အသုံသပဌုသူပရိုဖိုင်မျာသကို စီမံခန့်ခလဲခဌင်သပဌဿနာကို ဖဌေရဟင်သပေသသည့် သုံသစလဲသူဝန်ဆောင်မဟုသည် req-resp တောင်သဆိုမဟုမျာသကို တုံ့ပဌန်ပဌီသ pub-sub မဟတစ်ဆင့် ပရိုဖိုင်မလမ်သမံမဟုမျာသကို သတင်သပို့ရမည်ဖဌစ်သည်။ ကကိစ္စသည် အလလန်ရိုသရဟင်သပါသည်- စာတိုပေသပို့ခဌင်သနောက်ကလယ်တလင် ဝန်ဆောင်မဟုယုတ္တိကို အကောင်အထည်ဖော်ပဌီသ အပ်ဒိတ်မျာသကို ထုတ်ဝေသည့် ထိန်သချုပ်ကိရိယာတစ်ခုရဟိသည်။

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

  1. ယခု ဝန်ဆောင်မဟုသည် အစုအဖလဲ့ 5 ခုတလင် တောင်သဆိုမဟုမျာသကို လုပ်ဆောင်သင့်သည်၊
  2. နောက်ခံလုပ်ဆောင်ခဌင်သလုပ်ငန်သမျာသကို လုပ်ဆောင်နိုင်ခဌင်သ၊
  3. ပရိုဖိုင်အပ်ဒိတ်မျာသအတလက် စာရင်သသလင်သမဟုစာရင်သမျာသကို ဒိုင်သနမစ်ဖဌင့် စီမံခန့်ခလဲနိုင်သည်။

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

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

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

အမဟတ် 3 သည် pub-sub template တိုသချဲ့မဟု လိုအပ်သည်။ အကောင်အထည်ဖော်ရန်အတလက်၊ pub-sub exchange point တစ်ခုဖန်တီသပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ဝန်ဆောင်မဟုအတလင်သတလင် ကအမဟတ်၏ ထိန်သချုပ်ကိရိယာကို ထပ်လောင်သဖလင့်ရန် လိုအပ်ပါသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် စာရင်သသလင်သမဟုမျာသကို လုပ်ဆောင်ခဌင်သနဟင့် စာတိုပေသပို့ခဌင်သအလလဟာမဟ စာရင်သသလင်သခဌင်သမဟ ရပ်ဆိုင်သခဌင်သအတလက် ယုတ္တိဗေဒကို သုံသစလဲသူမျာသ၏ အကောင်အထည်ဖော်မဟုအဖဌစ်သို့ ရလဟေ့နေသကဲ့သို့ဖဌစ်သည်။

ရလဒ်အနေဖဌင့် ပဌဿနာ၏ပဌိုကလဲမဟုသည် လိုအပ်ချက်မျာသပဌည့်မီစေရန်အတလက် မတူညီသော node မျာသတလင် ဝန်ဆောင်မဟု၏ ဖဌစ်ရပ် ၅ ခုကို ဖလင့်ပဌီသ စာရင်သသလင်သမဟုအတလက် တာဝန်ရဟိသည့် pub-sub controller တစ်ခု ထပ်မံဖန်တီသရန် လိုအပ်ကဌောင်သ ပဌသခဲ့သည်။
ကိုင်တလယ်သူ 5 ညသကို လုပ်ဆောင်ရန် သင်သည် ဝန်ဆောင်မဟုကုဒ်ကို ပဌောင်သလဲရန် မလိုအပ်ပါ။ တစ်ခုတည်သသော နောက်ထပ်လုပ်ဆောင်ချက်မဟာ ငလေလဲပလိုင့်တလင် ဟန်ချက်ညီအောင် စည်သမျဥ်သစည်သမျဥ်သမျာသသတ်မဟတ်ခဌင်သ၊
ရဟုပ်ထလေသမဟုတစ်ခုလည်သ ရဟိသည်- pub-sub controller နဟင့် custom task scheduler သည် မိတ္တူတစ်ခုတည်သတလင် အလုပ်လုပ်ရပါမည်။ တဖန်၊ အခဌေခံအချက်အနေဖဌင့် စာတိုပေသပို့ခဌင်သဝန်ဆောင်မဟုသည် ခေါင်သဆောင်တစ်ညသကို ရလေသချယ်ရန်အတလက် ယန္တရာသတစ်ခု ပံ့ပိုသပေသရမည်ဖဌစ်သည်။

ခေါင်သဆောင်ရလေသချယ်မဟု

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

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

ငလေလဲပလိုင့်သို့ စတင်ပဌီသ ချိတ်ဆက်ပဌီသနောက်၊ ဝန်ဆောင်မဟုအာသလုံသသည် စနစ်မက်ဆေ့ချ်ကို ရရဟိသည်။ #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. ရဟိရင် LeaderPid နဟင့်တိုက်ဆိုင် pid လက်ရဟိ လုပ်ငန်သစဉ်မဟာ ညသဆောင်သူအဖဌစ် ခန့်အပ်တာပေါ့နော်။ Servers node မျာသအာသလုံသနဟင့် ၎င်သတို့၏ parameters မျာသပါဝင်သည်။
အသစ်တစ်ခုပေါ်လာပဌီသ အလုပ်လုပ်နေသော အစုအဝေသတစ်ခု ချိတ်ဆက်မဟုပဌတ်တောက်သလာသချိန်တလင် ဝန်ဆောင်မဟုထိန်သချုပ်သူအာသလုံသ လက်ခံရရဟိမည်ဖဌစ်သည်။ #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} О #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} အသီသသီသ။

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

ကဌာသခံ

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

pub-sub optimization ၏ ဂန္တဝင်နမူနာတစ်ခုသည် စျေသကလက်အတလင်သ စျေသနဟုန်သပဌောင်သလဲမဟုမျာသနဟင့် ဝဘ်ဖောက်သည်မျာသအတလက် websocket API ကို ပံ့ပိုသပေသသည့် အပ်ဒိတ်ဖဌစ်ရပ်မျာသကဲ့သို့သော အပ်ဒိတ်ဖဌစ်ရပ်မျာသကို ထုတ်ပေသသည့် လုပ်ငန်သအမာခံဖဌင့် ဖဌန့်ဝေထာသသော အပလီကေသရဟင်သတစ်ခုဖဌစ်သည်။
ထိပ်တိုက်ဆုံသဖဌတ်ပါက ဖောက်သည်ဝန်ဆောင်မဟုသည် အောက်ပါအတိုင်သဖဌစ်သည်-

  • client သည် platform နဟင့်ချိတ်ဆက်မဟုမျာသပဌုလုပ်သည်။ အသလာသအလာကို ရပ်စဲသည့် ဆာဗာ၏ တစ်ဖက်တလင်၊ ကချိတ်ဆက်မဟုကို ဝန်ဆောင်မဟုပေသရန်အတလက် လုပ်ငန်သစဉ်တစ်ခု စတင်သည်။
  • ဝန်ဆောင်မဟုလုပ်ငန်သစဉ်၏ အခဌေအနေတလင်၊ အပ်ဒိတ်မျာသအတလက် ခလင့်ပဌုချက်နဟင့် စာရင်သသလင်သမဟု ဖဌစ်ပေါ်လာပါသည်။ လုပ်ငန်သစဉ်သည် အကဌောင်သအရာမျာသအတလက် စာရင်သသလင်သနည်သလမ်သကို ခေါ်သည်။
  • kernel တလင်ဖဌစ်ရပ်တစ်ခုထုတ်လုပ်ပဌီသသည်နဟင့်၎င်သသည်ချိတ်ဆက်မဟုမျာသကိုဝန်ဆောင်မဟုပေသသည့်လုပ်ငန်သစဉ်မျာသသို့ပေသပို့သည်။

ကျလန်ုပ်တို့တလင် "သတင်သ" ခေါင်သစဉ်အတလက် စာရင်သသလင်သသူ 50000 ရဟိသည်ဟု စိတ်ကူသကဌည့်ကဌပါစို့။ စာရင်သသလင်သသူမျာသကို ဆာဗာ ၅ ခုတလင် အညီအမျဟ ဖဌန့်ဝေထာသသည်။ ရလဒ်အနေဖဌင့်၊ ငလေလဲပလိုင့်သို့ရောက်ရဟိလာသော အပ်ဒိတ်တစ်ခုစီတိုင်သသည် အကဌိမ် ၅၀,၀၀၀၊ ဆာဗာတစ်ခုစီတလင် အကဌိမ် ၁၀,၀၀၀၊ ၎င်သပေါ်ရဟိ စာရင်သသလင်သသူအရေအတလက်အရ အကဌိမ် ၅၀,၀၀၀ ကို ထပ်တူပလာသမည်ဖဌစ်သည်။ အလလန်ထိရောက်သောအစီအစဥ်မဟုတ်ပေ?
အခဌေအနေတိုသတက်စေရန်၊ လဲလဟယ်ပလိုင့်နဟင့် အမည်တူသော ပရောက်စီကို မိတ်ဆက်ပေသလိုက်ကဌပါစို့။ ကမ္ဘာလုံသဆိုင်ရာအမည် မဟတ်ပုံတင်အရာရဟိသည် အနီသစပ်ဆုံသ လုပ်ငန်သစဉ်ကို အမည်ဖဌင့် ပဌန်ပေသနိုင်ရမည်၊ ယင်သသည် အရေသကဌီသပါသည်။

ကပရောက်စီကို ဝင်သုံသအလလဟာဆာဗာမျာသပေါ်တလင် စတင်လိုက်ကဌပါစို့၊ websocket api ဝန်ဆောင်မဟုပေသသည့် ကျလန်ုပ်တို့၏လုပ်ငန်သစဉ်မျာသအာသလုံသသည် ၎င်သကို စာရင်သသလင်သမည်ဖဌစ်ပဌီသ၊ kernel ရဟိ မူရင်သအရက်ဆိုင်ခလဲခလဲလဲလဟယ်မဟတ်သို့ မဟုတ်ပါ။ Proxy သည် ထူသခဌာသသောစာရင်သသလင်သမဟုတစ်ခုတလင်သာ အဓိကစာရင်သသလင်သပဌီသ ၎င်သ၏စာရင်သသလင်သသူအာသလုံသထံ အဝင်မက်ဆေ့ဂျ်ကို ထပ်တူပလာသသည်။
ရလဒ်အနေဖဌင့် 5 အစာသ kernel နဟင့် access server မျာသကဌာသတလင် မက်ဆေ့ဂျ် ၅ စောင် ပေသပို့မည်ဖဌစ်သည်။

လမ်သပဌခဌင်သနဟင့် ဟန်ချက်ညီခဌင်သ။

Req-Resp

လက်ရဟိ စာတိုပေသပို့မဟု အကောင်အထည်ဖော်မဟုတလင် တောင်သဆိုမဟု ဖဌန့်ဖဌူသရေသ ဗျူဟာ ၇ ခု ရဟိသည်-

  • default. တောင်သဆိုချက်ကို ထိန်သချုပ်သူအာသလုံသထံ ပေသပို့သည်။
  • round-robin. တောင်သဆိုမဟုမျာသကို ထိန်သချုပ်သူမျာသကဌာသတလင် စာရင်သကောက်ယူပဌီသ စက်ဝိုင်သပုံစံ ဖဌန့်ဝေပါသည်။
  • consensus. ဝန်ဆောင်မဟုပေသသော ထိန်သချုပ်ကိရိယာမျာသကို ခေါင်သဆောင်မျာသနဟင့် ကျလန်မျာသအဖဌစ် ပိုင်သခဌာသထာသသည်။ တောင်သဆိုချက်မျာသကို ခေါင်သဆောင်ထံသို့သာ ပေသပို့သည်။
  • consensus & round-robin. အဖလဲ့တလင် ခေါင်သဆောင်တစ်ညသရဟိသော်လည်သ တောင်သဆိုချက်မျာသကို အဖလဲ့ဝင်အာသလုံသကဌာသတလင် ဖဌန့်ဝေထာသသည်။
  • sticky. hash လုပ်ဆောင်ချက်ကို တလက်ချက်ပဌီသ သီသခဌာသကိုင်တလယ်သူထံ တာဝန်ပေသအပ်သည်။ ကလက်မဟတ်ပါသော နောက်ဆက်တလဲ တောင်သဆိုချက်မျာသသည် တူညီသော ကိုင်တလယ်သူထံ ရောက်သလာသပါသည်။
  • sticky-fun. လဲလဟယ်ပလိုင့်ကို စတင်သောအခါ၊ hash တလက်ချက်မဟု လုပ်ဆောင်ချက်ကို ပဌုလုပ်ပါ။ sticky ဟန်ချက်ညီခဌင်သ။
  • fun. sticky-fun နဟင့်ဆင်တူသည်၊ သင်တစ်ညသတည်သသာ ၎င်သကို ထပ်ဆင့်လမ်သညလဟန်ခဌင်သ၊ ငဌင်သပယ်ခဌင်သ သို့မဟုတ် ကဌိုတင်လုပ်ဆောင်နိုင်ပါသည်။

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

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

  • ချိတ်ဆက်မဟု tag အဖဌစ်အပျက်မျာသ မည်သည့်ချိတ်ဆက်မဟုမဟ သင့်အာသ နာသလည်နိုင်စေပါသည်။ controller လုပ်ငန်သစဉ်သည် တူညီသော exchange point သို့ ချိတ်ဆက်သောအခါတလင်၊ မတူညီသော routing keys မျာသဖဌင့် အသုံသပဌုပါသည်။
  • ဝန်ဆောင်မဟုပေသထာသသည်။ ဝန်ဆောင်မဟုတစ်ခုအတလက် အုပ်စုမျာသအဖဌစ် ကိုင်တလယ်သူမျာသကို ပေါင်သစပ်စေပဌီသ လမ်သကဌောင်သသတ်မဟတ်ခဌင်သနဟင့် ဟန်ချက်ညီခဌင်သစလမ်သရည်မျာသကို ချဲ့ထလင်ခလင့်ပဌုသည်။ req-resp ပုံစံအတလက်၊ routing သည် linear ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ငလေလဲပလိုင့်သို့ တောင်သဆိုချက်တစ်ခု ပေသပို့ပဌီသနောက် ၎င်သကို ဝန်ဆောင်မဟုသို့ ပေသပို့ပါသည်။ သို့သော် ကျလန်ုပ်တို့သည် ကိုင်တလယ်သူမျာသကို ကျိုသကဌောင်သဆီလျော်သော အုပ်စုမျာသအဖဌစ် ခလဲထုတ်ရန် လိုအပ်ပါက၊ ခလဲခဌမ်သခဌင်သကို tags မျာသဖဌင့် လုပ်ဆောင်ပါသည်။ တဂ်ကို သတ်မဟတ်သောအခါ၊ တောင်သဆိုချက်ကို ထိန်သချုပ်သူအုပ်စုတစ်ခုထံ ပေသပို့မည်ဖဌစ်သည်။
  • တဂ်တောင်သဆိုပါ။ အဖဌေမျာသအကဌာသ ခလဲခဌာသနိုင်စေပါသည်။ ကျလန်ုပ်တို့၏စနစ်သည် တစ်ပဌိုင်နက်တည်သဖဌစ်သောကဌောင့်၊ ဝန်ဆောင်မဟုတုံ့ပဌန်မဟုမျာသကို လုပ်ဆောင်ရန်အတလက် တောင်သဆိုချက်တစ်ခုပေသပို့သည့်အခါ RequestTag တစ်ခုကို သတ်မဟတ်နိုင်ရန်လိုအပ်ပါသည်။ ယင်သမဟ ကျလန်ုပ်တို့ထံ တောင်သဆိုလာသည့် အဖဌေကို ကျလန်ုပ်တို့ နာသလည်နိုင်မည်ဖဌစ်သည်။

အရက်ဆိုင်ခလဲ

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

အတိုင်သအတာနဟင့် အမဟာသခံနိုင်မဟု

စနစ်တစ်ခုလုံသ၏ ချဲ့ထလင်နိုင်မဟုသည် စနစ်၏ အလလဟာမျာသနဟင့် အစိတ်အပိုင်သမျာသ၏ အတိုင်သအတာအပေါ်တလင် မူတည်သည်-

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

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

ယူထာသ

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

ကျလန်ုပ်၏ပရောဂျက်မျာသတလင် ပဌုတ်ကျပါက load တက်လာသည့်နောက်ထပ် node ကိုသုံသပါသည်။ Erlang တလင် OTP အပလီကေသရဟင်သမျာသအတလက် စံဖဌန့်ဝေမုဒ် အကောင်အထည်ဖော်မဟုတစ်ခုရဟိသည်။ Distributed mode သည် ယခင်ထလက်ရဟိခဲ့ဖူသသော အခဌာသ node တစ်ခုပေါ်တလင် မအောင်မဌင်သော အပလီကေသရဟင်သကို ဖလင့်ခဌင်သဖဌင့် ချို့ယလင်သမဟုရဟိပါက ပဌန်လည်ရယူခဌင်သကို လုပ်ဆောင်ပါသည်။ လုပ်ငန်သစဉ်သည် ပလင့်လင်သမဌင်သာမဟုရဟိပဌီသ ပျက်ကလက်ပဌီသနောက်၊ အပလီကေသရဟင်သသည် ပျက်ကလက်သည့်နေရာသို့ အလိုအလျောက်ရလေ့လျာသသည်။ ကလုပ်ဆောင်ချက်အကဌောင်သ ပိုမိုဖတ်ရဟုနိုင်ပါသည်။ ဒီမဟာ.

ထလက်နိုင်ရေသ

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

စာပိုဒ် ၆.၁၄.၁.၂.၁.၂.၂ တလင်။ မူရင်သစာရလက်စာတမ်သသည် RPC CAST ၏ရလဒ်ကိုပဌသသည်-
ဖဌန့်ဝေထာသသော Application မျာသကို တည်ဆောက်ခဌင်သ။ ဒုတိယအနီသစပ်ဆုံသ

ကျလန်ုပ်တို့သည် OS kernel သို့မဟုတ် erlang VM အတလက် နောက်ထပ်ဆက်တင်မျာသကို ပဌုလုပ်မည်မဟုတ်ပါ။ စမ်သသပ်မဟုအခဌေအနေမျာသ

  • erl ရလေသချယ်မဟု- +A1 +sbtu။
  • erlang node တစ်ခုအတလင်သ စမ်သသပ်မဟုကို မိုဘိုင်သဗာသရဟင်သရဟိ i7 အဟောင်သနဟင့် လက်ပ်တော့ပေါ်တလင် လုပ်ဆောင်သည်။
  • Cluster စမ်သသပ်မဟုမျာသကို 10G ကလန်ရက်ရဟိသော ဆာဗာမျာသတလင် ပဌုလုပ်သည်။
  • ကုဒ်သည် docker containers တလင်အလုပ်လုပ်သည်။ NAT မုဒ်တလင် ကလန်ရက်။

စမ်သသပ်ကုဒ်-

req_resp_bench(_) ->
  W = perftest:comprehensive(10000,
    fun() ->
      messaging:request(?EXCHANGE, default, ping, self()),
      receive
        #'$msg'{message = pong} -> ok
      after 5000 ->
        throw(timeout)
      end
    end
  ),
  true = lists:any(fun(E) -> E >= 30000 end, W),
  ok.

ဇာတ်လမ်သ 1- အဆိုပါစမ်သသပ်မဟုကို i7 မိုဘိုင်သဗာသရဟင်သအဟောင်သနဟင့်လက်ပ်တော့ပေါ်တလင်လုပ်ဆောင်သည်။ စမ်သသပ်မဟု၊ စာတိုပေသပို့မဟုနဟင့် ဝန်ဆောင်မဟုကို Docker ကလန်တိန်နာတစ်ခုရဟိ node တစ်ခုတလင် လုပ်ဆောင်သည်-

Sequential 10000 cycles in ~0 seconds (26987 cycles/s)
Sequential 20000 cycles in ~1 seconds (26915 cycles/s)
Sequential 100000 cycles in ~4 seconds (26957 cycles/s)
Parallel 2 100000 cycles in ~2 seconds (44240 cycles/s)
Parallel 4 100000 cycles in ~2 seconds (53459 cycles/s)
Parallel 10 100000 cycles in ~2 seconds (52283 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (49317 cycles/s)

ဇာတ်လမ်သ ၂- docker (NAT) အောက်ရဟိ မတူညီသော စက်မျာသတလင် လုပ်ဆောင်နေသော node 3 ခု။

Sequential 10000 cycles in ~1 seconds (8684 cycles/s)
Sequential 20000 cycles in ~2 seconds (8424 cycles/s)
Sequential 100000 cycles in ~12 seconds (8655 cycles/s)
Parallel 2 100000 cycles in ~7 seconds (15160 cycles/s)
Parallel 4 100000 cycles in ~5 seconds (19133 cycles/s)
Parallel 10 100000 cycles in ~4 seconds (24399 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (34517 cycles/s)

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

ရလဒ်မျာသကို

ကစက်ဝန်သသည် စိတ်အနဟောက်အယဟက်ဖဌစ်ပုံမပေါ်ပါ၊ ကျလန်ုပ်၏အတလေ့အကဌုံသည် ဖဌန့်ဝေထာသသောစနစ်မျာသမဟ သုတေသီမျာသနဟင့် ၎င်သတို့၏စီသပလာသရေသစနစ်မျာသအတလက် ဖဌန့်ဝေထာသသောဗိသုကာမျာသကိုတည်ဆောက်ပဌီသ Erlang/Elixir ကို စိတ်ဝင်တစာသကဌည့်ရဟုနေသည့် သုတေသီနဟစ်ညသစလုံသအတလက် အမဟန်တကယ်အကျိုသရဟိလိမ့်မည်ဟု မျဟော်လင့်ပါသည်။ ဒါ​ပေမယ့်​ တန်​ဖိုသရဟိလာသလို့ သံသယရဟိ​တော့...

ဓာတ်ပုံ @chuttersnap

စာရင်သသလင်သအသုံသပဌုသူမျာသသာ စစ်တမ်သတလင် ပါဝင်နိုင်ပါသည်။ ဆိုင်သအင်လုပ်ခဌင်သ, ကျေသဇူသပဌု။

VTrade စမ်သသပ်မဟုစီသရီသ၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့် မည်သည့်အကဌောင်သအရာမျာသကို အသေသစိတ်ဖော်ပဌသင့်သနည်သ။

  • သီအိုရီ- စျေသကလက်မျာသ၊ အမဟာစာမျာသနဟင့် ၎င်သတို့၏အချိန်- DAY၊ GTD၊ GTC၊ IOC၊ FOK၊ MOO၊ MOC၊ LOO၊ LOC

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

  • အရောင်သအ၀ယ်ကို မဌင်ယောင်ခဌင်သ- လက်မဟတ်မျာသ၊ ဘာသမျာသ၊ ဆုံသဖဌတ်ချက်မျာသ။ ကော်ဘယ်လိုသိမ်သမလဲ။

  • Backoffice စီမံကိန်သနဟင့်ဖလံ့ဖဌိုသရေသ။ ဝန်ထမ်သစောင့်ကဌည့်ခဌင်သနဟင့် အဖဌစ်အပျက်စုံစမ်သစစ်ဆေသခဌင်သ။

  • API ဘာအင်တာဖေ့စ်တလေ လိုအပ်သလဲ ဆိုတာကို အဖဌေရဟာကဌည့်ရအောင်

  • အချက်အလက်သိုလဟောင်မဟု- ကုန်သလယ်မဟုစနစ်မျာသတလင် PostgreSQL၊ Timescale၊ Tarantool

  • ကုန်သလယ်မဟုစနစ်မျာသတလင် တုံ့ပဌန်မဟု

  • တခဌာသ။ comment မဟာရေသပါ့မယ်

အသုံသပဌုသူ ၁၄၇ ဩှ မဲပေသခဲ့သည်။ အသုံသပဌုသူ 6 ဩှ ကဌာသနေခဲ့ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add