ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

နောက်ဆုံသ၌ ဆောင်သပါသ ကျလန်ုပ်တို့သည် ဓာတ်ပဌုတည်ဆောက်ခဌင်သဆိုင်ရာ သီအိုရီအခဌေခံအုတ်မဌစ်မျာသကို ဆန်သစစ်ခဲ့ပါသည်။ ဒေတာစီသဆင်သမဟုမျာသအကဌောင်သ၊ ဓာတ်ပဌုသော Erlang/Elixir စနစ်မျာသနဟင့် ၎င်သတို့ရဟိ စာတိုပေသပို့မဟုပုံစံမျာသကို အကောင်အထည်ဖော်ရန် နည်သလမ်သမျာသအကဌောင်သ ဆလေသနလေသရန်အချိန်ရောက်ပဌီ-

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

SOA၊ MSA နဟင့် စာတိုပေသပို့ခဌင်သ။

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

ကသို့မဟုတ် ထိုစနစ်တည်ဆောက်ပုံကို မဌဟင့်တင်လိုခဌင်သမရဟိပါ။ တိကျသောပရောဂျက်တစ်ခုနဟင့် လုပ်ငန်သတစ်ခုအတလက် အထိရောက်ဆုံသနဟင့် အသုံသဝင်ဆုံသ အလေ့အကျင့်မျာသကို အသုံသပဌုရခဌင်သဖဌစ်ပါသည်။ ကျလန်ုပ်တို့ရလေသချယ်သည့် မည်သို့ပင်ဆိုစေကာမူ Unix-way- တစ်ခုချင်သစီအတလက် တာဝန်ရဟိသော ချိတ်ဆက်မဟုအနည်သငယ်သာရဟိသော အစိတ်အပိုင်သမျာသကို ကဌည့်ရဟုခဌင်သဖဌင့် စနစ်ဘလောက်မျာသကို ဖန်တီသခဌင်သသည် ပိုကောင်သပါသည်။ API နည်သလမ်သမျာသသည် entities မျာသနဟင့် အရိုသရဟင်သဆုံသဖဌစ်နိုင်သော လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သည်။

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

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

မဟတ်ချက် ကုဒ်အဖလဲ့အစည်သ၏စည်သကမ်သချက်မျာသအရ၊ မက်တာပရောဂျက်မျာသသည် ရဟုပ်ထလေသသော Erlang/Elixir စနစ်မျာသအတလက် ကောင်သမလန်သင့်လျော်ပါသည်။ ပရောဂျက်ကုဒ်အာသလုံသသည် သိုလဟောင်ရုံတစ်ခု - ထီသပရောဂျက်တစ်ခုတလင် တည်ရဟိသည်။ တစ်ချိန်တည်သမဟာပင်၊ microservices မျာသသည် သီသခဌာသခလဲထုတ်ထာသပဌီသ သီသခဌာသ entity အတလက် တာဝန်ရဟိသော ရိုသရဟင်သသော လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ပါသည်။ ကချဉ်သကပ်မဟုဖဌင့်၊ စနစ်တစ်ခုလုံသ၏ API ကို ထိန်သသိမ်သရန် လလယ်ကူသည်၊ အပဌောင်သအလဲလုပ်ရန် လလယ်ကူသည်၊ ယူနစ်နဟင့် ပေါင်သစပ်စစ်ဆေသမဟုမျာသကို ရေသသာသရန် အဆင်ပဌေသည်။

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

  • ဝန်ဆောင်မဟု စတင်ခဌင်သ
    ကအဆင့်တလင်၊ ဝန်ဆောင်မဟုကို လုပ်ဆောင်သည့် လုပ်ငန်သစဉ်နဟင့် မဟီခိုမဟုမျာသကို ပဌင်ဆင်သတ်မဟတ်ပဌီသ စတင်ဆောင်ရလက်ပါသည်။
  • လဲလဟယ်ပလိုင့်ဖန်တီသခဌင်သ။
    ဝန်ဆောင်မဟုသည် node configuration တလင် သတ်မဟတ်ထာသသော static exchange point ကိုသုံသနိုင်သည်၊ သို့မဟုတ် exchange point ကို dynamically ဖန်တီသနိုင်သည်။
  • ဝန်ဆောင်မဟုမဟတ်ပုံတင်ခဌင်သ။
    ဝန်ဆောင်မဟုတောင်သဆိုမဟုမျာသကို ဆောင်ရလက်ပေသနိုင်ရန်၊ ၎င်သကို ငလေလဲပလိုင့်တလင် မဟတ်ပုံတင်ရပါမည်။
  • ပုံမဟန်လည်ပတ်မဟု။
    ဝန်ဆောင်မဟုသည် အသုံသဝင်သော အလုပ်မျာသကို ထုတ်လုပ်သည်။
  • အပဌီသပိတ်လိုက်သည်။
    ပုံမဟန် နဟင့် အရေသပေါ် ပိတ်ရန် အမျိုသအစာသ ၂ မျိုသရဟိသည်။ ပုံမဟန်လည်ပတ်နေစဉ်အတလင်သ ဝန်ဆောင်မဟုသည် ငလေလဲပလိုင့်မဟ ချိတ်ဆက်မဟုပဌတ်တောက်ပဌီသ ရပ်တန့်သလာသပါသည်။ အရေသပေါ်အခဌေအနေမျာသတလင် စာတိုပေသပို့ခဌင်သသည် ပျက်ကလက်သော script မျာသထဲမဟ တစ်ခုကို လုပ်ဆောင်သည်။

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

ဖလဟယ်မဟု

Exchange point သည် စာတိုပေသပို့ခဌင်သ ပုံစံပလိတ်အတလင်သရဟိ အစိတ်အပိုင်သမျာသနဟင့် အပဌန်အလဟန်တုံ့ပဌန်မဟု၏ ယုတ္တိကို အကောင်အထည်ဖော်ပေသသည့် စာတိုပေသပို့ခဌင်သ လုပ်ငန်သစဉ်တစ်ခုဖဌစ်သည်။ အောက်ဖော်ပဌပါ ဥပမာမျာသအာသလုံသတလင် အစိတ်အပိုင်သမျာသသည် စာတိုပေသပို့ခဌင်သပုံစံမျာသ ပေါင်သစပ်ထာသသော ဖလဟယ်မဟုအမဟတ်မျာသမဟတစ်ဆင့် အပဌန်အလဟန်အကျိုသသက်ရောက်သည်။

မက်ဆေ့ချ်ဖလဟယ်မဟုပုံစံမျာသ (MEPs)

တစ်ကမ္ဘာလုံသတလင် လဲလဟယ်မဟုပုံစံမျာသကို နဟစ်လမ်သနဟင့်တစ်ကဌောင်သ ခလဲခဌာသနိုင်သည်။ ယခင် က ဝင်လာသည့် မက်ဆေ့ချ်ကို တုံ့ပဌန်မဟုဟု အဓိပ္ပာယ်ဖလင့်ဆိုသော်လည်သ နောက်ပိုင်သတလင် မလုပ်ဆောင်ပါ။ client-server ဗိသုကာရဟိ နဟစ်လမ်သသလာသပုံစံ၏ ဂန္တဝင်ဥပမာမဟာ တောင်သဆိုချက်-တုံ့ပဌန်မဟုပုံစံဖဌစ်သည်။ နမူနာပုံစံနဟင့် ၎င်သ၏ပဌုပဌင်မလမ်သမံမဟုမျာသကို ကဌည့်ကဌပါစို့။

တောင်သဆိုချက်-တုံ့ပဌန်မဟု သို့မဟုတ် RPC

ကျလန်ုပ်တို့သည် အခဌာသလုပ်ငန်သစဉ်မဟ တုံ့ပဌန်မဟုကို လက်ခံရရဟိသည့်အခါ RPC ကို အသုံသပဌုသည်။ ကလုပ်ငန်သစဉ်သည် တူညီသော node ပေါ်တလင် လုပ်ဆောင်နေနိုင်သည် သို့မဟုတ် မတူညီသော တိုက်ကဌီသတစ်ခုပေါ်တလင် တည်ရဟိသည်။ အောက်တလင်ဖော်ပဌထာသသည်မဟာ စာတိုပေသပို့ခဌင်သမဟတစ်ဆင့် client နဟင့် server အကဌာသ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟု၏ ပုံကဌမ်သဖဌစ်သည်။

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

မက်ဆေ့ဂျ်ပို့ခဌင်သသည် လုံသလုံသလျာသလျာသ ကလဲလလဲနေသောကဌောင့်၊ ဖောက်သည်အတလက် လဲလဟယ်မဟုကို အဆင့် ၂ ဆင့် ခလဲခဌာသထာသသည်။

  1. တောငျသဆိုခကျဌပေသပို့ခဌင်သ

    messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).

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

  2. တုံ့ပဌန်မဟုကို လုပ်ဆောင်နေသည်။

    handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)

    ResponsePayload - ဆာဗာတုံ့ပဌန်မဟု။

ဆာဗာအတလက်၊ လုပ်ငန်သစဉ်သည် အဆင့် ၂ ဆင့်ပါ၀င်သည်-

  1. လဲလဟယ်ပလိုင့်ကို အစပဌုခဌင်သ။
  2. လက်ခံရရဟိထာသသော တောင်သဆိုချက်မျာသကို လုပ်ဆောင်ခဌင်သ။

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

ဆာဗာကုဒ်

api.hrl တလင် ဝန်ဆောင်မဟု API ကို သတ်မဟတ်ကဌပါစို့။

%% =====================================================
%%  entities
%% =====================================================
-record(time, {
  unixtime :: non_neg_integer(),
  datetime :: binary()
}).

-record(time_error, {
  code :: non_neg_integer(),
  error :: term()
}).

%% =====================================================
%%  methods
%% =====================================================
-record(time_req, {
  opts :: term()
}).
-record(time_resp, {
  result :: #time{} | #time_error{}
}).

time_controller.erl တလင် service controller ကို သတ်မဟတ်ကဌပါစို့

%% В прОЌере пПказаМ тПлькП зМачОЌый кПЎ. ВставОв егП в шаблПМ gen_server ЌПжМП пПлучОть рабПчОй сервОс.

%% ОМОцОалОзацОя gen_server
init(Args) ->
  %% пПЎключеМОе к тПчке ПбЌеМа
  messaging:monitor_exchange(req_resp, ?EXCHANGE, default, self())
  {ok, #{}}.

%% ПбрабПтка сПбытОя пПтерО связО с тПчкПй ПбЌеМа. ЭтП же сПбытОе прОхПЎОт, еслО тПчка ПбЌеМа еще Ме запустОлась.
handle_info(#exchange_die{exchange = ?EXCHANGE}, State) ->
  erlang:send(self(), monitor_exchange),
  {noreply, State};

%% ПбрабПтка API
handle_info(#time_req{opts = _Opts}, State) ->
  messaging:response_once(Client, #time_resp{
result = #time{ unixtime = time_utils:unixtime(now()), datetime = time_utils:iso8601_fmt(now())}
  });
  {noreply, State};

%% завершеМОе рабПты gen_server
terminate(_Reason, _State) ->
  messaging:demonitor_exchange(req_resp, ?EXCHANGE, default, self()),
  ok.

လိုင်သကုဒ်

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

case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
    ok -> ok;
    _ -> %% repeat or fail logic
end

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

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time{unixtime = Utime}}}, State) ->
  ?debugVal(Utime),
  {noreply, State};

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time_error{code = ErrorCode}}}, State) ->
  ?debugVal({error, ErrorCode}),
  {noreply, State};

တောင်သဆိုမဟု-အတုံသအခဲ တုံ့ပဌန်မဟု

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

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

ထိုသို့သောကိစ္စရပ်အချို့ကို ဥပမာပေသပါရစေ။

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

ဒီတုံ့ပဌန်မဟုတလေကို စက်ခေါင်သလို့ ခေါ်ပါတယ်။ မည်သို့ပင်ဆိုစေကာမူ 1024 MB ၏ 1 မက်ဆေ့ဂျ်မျာသသည် 1 GB တစ်ခုတည်သစာထက် ပိုမိုကောင်သမလန်ပါသည်။

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

တောင်သဆိုမဟုဖဌင့် တုံ့ပဌန်ခဌင်သ။

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

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

ထုတ်ဝေ-စာရင်သသလင်သခဌင်သ (ဒေတာဖဌန့်ဖဌူသရေသသစ်ပင်)

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

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

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

စာရင်သသလင်သသူကုဒ်ကို ကဌည့်ရအောင်။

init(_Args) ->
  %% пПЎпОсываеЌся Ма ПбЌеММОк, ключ = key
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {ok, #{}}.

handle_info(#exchange_die{exchange = ?SUBSCRIPTION}, State) ->
  %% еслО тПчка ПбЌеМа МеЎПступМа, тП пытаеЌся перепПЎключОться
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {noreply, State};

%% ПбрабатываеЌ прОшеЎшОе сППбщеМОя
handle_info(#'$msg'{exchange = ?SUBSCRIPTION, message = Msg}, State) ->
  ?debugVal(Msg),
  {noreply, State};

%% прО ПстаМПвке пПтребОтеля - ПтключаеЌся Пт тПчкО ПбЌеМа
terminate(_Reason, _State) ->
  messaging:unsubscribe(?SUBSCRIPTION, key, tag, self()),
  ok.

ရင်သမဌစ်သည် အဆင်ပဌေသည့်နေရာ၌ မက်ဆေ့ချ်တစ်ခုထုတ်ဝေရန် လုပ်ဆောင်ချက်ကို ခေါ်ဆိုနိုင်သည်-

messaging:publish_message(Exchange, Key, Message).

လဲလဟယ် - ငလေလဲပလိုင့်အမည်၊
သော့ - လမ်သပဌသော့
ပဌောဆိုမည့်အကဌောင်သအရာ [Message] - ဝန်ဆောင်ခ

ပဌောင်သပဌန်ထုတ်ဝေ-စာရင်သသလင်သပါ။

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

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

အလုပ်ဖဌန့်ဝေမဟုပုံစံ

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

ကိုင်တလယ်သူ 3 ဩှ၏ ဥပမာကို အသုံသပဌု၍ ဖဌစ်ပေါ်လာသည့် အခဌေအနေမျာသကို ကဌည့်ကဌပါစို့။ လုပ်ငန်သတာဝန်ခလဲဝေခဌင်သအဆင့်တလင်ပင်၊ ဖဌန့်ဖဌူသမဟု၏တရာသမျဟတမဟုနဟင့် ကိုင်တလယ်သူမျာသပဌာသခဌင်သဆိုင်ရာ မေသခလန်သမျာသ ပေါ်ပေါက်လာသည်။ Round-robin ဖဌန့်ဖဌူသမဟုသည် တရာသမျဟတမဟုအတလက် တာဝန်ရဟိမည်ဖဌစ်ပဌီသ၊ ကိုင်တလယ်သူမျာသ ပဌည့်လျဟံနေသည့်အခဌေအနေကို ရဟောင်ရဟာသရန်အတလက် ကန့်သတ်ချက်တစ်ခုကို မိတ်ဆက်ပေသပါမည်။ prefetch_limit. ယာယီအခဌေအနေမျာသတလင် prefetch_limit ကိုင်တလယ်သူ တစ်ညသသည် အလုပ်အာသလုံသကို လက်ခံခဌင်သမဟ တာသဆီသပါမည်။

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

  • messaging:ack(Tack) - မက်ဆေ့ချ်ကို အောင်မဌင်စလာ လုပ်ဆောင်ပဌီသပါက ခေါ်သည်။
  • messaging:nack(Tack) - အရေသပေါ်အခဌေအနေအာသလုံသတလင် ခေါ်သည်။ လုပ်ဆောင်စရာကို ပဌန်ပဌီသသည်နဟင့်၊ မက်ဆေ့ဂျ်ပို့ခဌင်သသည် ၎င်သကို အခဌာသကိုင်တလယ်သူထံ ပေသပို့မည်ဖဌစ်သည်။

ဖဌန့်ဝေထာသသော application မျာသတည်ဆောက်ခဌင်သ။ ပထမ ချဉ်သကပ်မဟု

အလုပ်သုံသခုကိုလုပ်ဆောင်နေစဉ်တလင် ရဟုပ်ထလေသသောချို့ယလင်သချက်တစ်ခု ဖဌစ်ပလာသခဲ့သည်ဆိုပါစို့- ပရိုဆက်ဆာ 1၊ လုပ်ငန်သတာဝန်ကိုလက်ခံရရဟိပဌီသနောက်၊ လဲလဟယ်သည့်နေရာသို့ မည်သည့်အရာကိုမျဟ သတင်သပို့ရန်အချိန်မရဟိပဲ ပျက်ကျသလာသသည်ဆိုပါစို့။ ကကိစ္စတလင်၊ ack timeout ကုန်ဆုံသပဌီသနောက် ငလေလဲပလိုင့်သည် အလုပ်အာသ အခဌာသကိုင်တလယ်သူထံ လလဟဲပဌောင်သပေသမည်ဖဌစ်သည်။ အကဌောင်သတစ်ခုခုကဌောင့် handler 3 သည် အလုပ်အာသ စလန့်လလဟတ်ပဌီသ nack ပို့လိုက်သည်၊ ရလဒ်အနေဖဌင့် ၎င်သကို အောင်မဌင်စလာပဌီသမဌောက်ခဲ့သော အခဌာသကိုင်တလယ်သူထံသို့လည်သ လလဟဲပဌောင်သပေသခဲ့ပါသည်။

ပဏာမအကျဉ်သချုပ်

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

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

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

ဒုတိယပိုင်သ ပဌီသပါပဌီ။

ဓာတ်ပုံ Marius Christensen
websequencediagrams.com ကို အသုံသပဌု၍ ပဌင်ဆင်ထာသသော ပုံမျာသ

source: www.habr.com

မဟတ်ချက် Add