Asynchronous Communication
အရင်အခန်းမှာ Service တွေက တစ်ခုနဲ့တစ်ခု တိုက်ရိုက် “စကားပြော” ပြီး အဖြေကိုစောင့်တဲ့ (Synchronous Communication) ပုံစံကို ကျွန်တော်တို့ အဓိကထားလေ့လာခဲ့ပါတယ်။ ဒါပေမဲ့ ချက်ချင်းအဖြေမလိုအပ်တဲ့အခါ ဘာဖြစ်မလဲ။ ဒီအခန်းမှာတော့ Asynchronous Communication ကို အသေးစိတ်လေ့လာပါမယ်။ ဒါက နောက်ကွယ်မှာ အလုပ်တွေကို ကိုင်တွယ်နိုင်တဲ့၊ ဒဏ်ခံနိုင်ရည်ရှိပြီး အလွန်အမင်း Scale လုပ်နိုင်တဲ့ System တွေ တည်ဆောက်ရာမှာ အစွမ်းထက်တဲ့ ချဉ်းကပ်မှုတစ်ခု ဖြစ်ပါတယ်။
Asynchronous Communication ၏ အစွမ်း
Section titled “Asynchronous Communication ၏ အစွမ်း”Asynchronous Communication ဆိုတာ တကယ်တော့ ဘာလဲ?
Section titled “Asynchronous Communication ဆိုတာ တကယ်တော့ ဘာလဲ?”ကျွန်တော်တို့ရဲ့ ရိုးရှင်းတဲ့ ဥပမာနဲ့ နှိုင်းယှဉ်ကြည့်ကြရအောင်:
-
Synchronous Communication က ဖုန်းခေါ်တာနဲ့တူတယ် - သင်က တစ်စုံတစ်ယောက်ကို ဖုန်းခေါ်တယ်၊ ပြီးတော့ သူတို့ဖုန်းကိုင်ပြီး သင်လိုအပ်တဲ့အချက်အလက်ကို ပေးတဲ့အထိ လိုင်းပေါ်မှာ စောင့်နေရမယ်။ သူတို့ဖုန်းမကိုင်ရင် သင့်ခေါ်ဆိုမှုက မအောင်မြင်ဘူး၊ သင်လည်း ဘာမှဆက်လုပ်လို့မရတော့ဘူး။
-
Asynchronous Communication က စာပို့တာ (Text Message) နဲ့တူတယ် - သင်က Message တစ်စောင်ပို့လိုက်တယ်၊ ပြီးတော့ သင့်ဖုန်းကို ချက်ချင်းချပြီး တခြားအလုပ်တစ်ခုခု ဆက်လုပ်လို့ရတယ်။ တခြားလူက Message ကိုတွေ့ပြီး နောက်မှသင့်ကို ပြန်ဆက်သွယ်လိမ့်မယ်လို့ ယုံကြည်ထားတယ်။ သင်က ကိုယ့်အလုပ်ကိုယ်ဆက်လုပ်နေတာကို ရပ်တန့်ထားစရာမလိုဘူး။
Software မှာတော့၊ ဒါက Service တစ်ခုက နောက်တစ်ခုကို Message တစ်စောင်ပို့လိုက်ပြီး ချက်ချင်းအဖြေပြန်မစောင့်ဘဲ အလုပ်ဆက်လုပ်နေတာကို ဆိုလိုပါတယ်။
Decoupling (တိုက်ရိုက်မချိတ်ဆက်ဘဲ ခွဲထုတ်ထားခြင်း)
Section titled “Decoupling (တိုက်ရိုက်မချိတ်ဆက်ဘဲ ခွဲထုတ်ထားခြင်း)”Asynchronous Communication ရဲ့ အဓိကအကျိုးကျေးဇူးက Decoupling ပါ။ ဒါက Service တွေက တစ်ခုနဲ့တစ်ခု တိုက်ရိုက်သိနေစရာမလိုဘူးလို့ ဆိုလိုပါတယ်။ Message ပို့တဲ့ Service က လက်ခံမယ့် Service က Online မှာရှိနေလား၊ အလုပ်ရှုပ်နေလား၊ ဒါမှမဟုတ် အစားထိုးခံလိုက်ရပြီလားဆိုတာ သိစရာမလိုပါဘူး။ သူက သူ့ Message ကို ဗဟိုက “စာတိုက်ပုံး” (Message Broker) တစ်ခုဆီ ပို့လိုက်ရုံပါပဲ၊ နောက်မှတစ်စုံတစ်ယောက်က ဒါကို လာယူလိမ့်မယ်လို့ ယုံကြည်လိုက်ရုံပါပဲ။
ဒီ Decoupling က ကျွန်တော်တို့ကို အဓိကအားသာချက်ကြီးနှစ်ခု ပေးပါတယ်-
၁။ ပိုမိုကောင်းမွန်သော Resilience (ပြဿနာများကို ကြံ့ကြံ့ခံနိုင်ခြင်း)
Section titled “၁။ ပိုမိုကောင်းမွန်သော Resilience (ပြဿနာများကို ကြံ့ကြံ့ခံနိုင်ခြင်း)”-
ဘယ်လိုအလုပ်လုပ်လဲ - သင့် Order Service က Confirmation Email တစ်စောင်ပို့ဖို့ Email Service ကို ပြောဖို့လိုတယ်ဆိုပါစို့။
-
Sync System မှာဆိုရင် - Email Service က ပျက်နေရင် ဒါမှမဟုတ် နှေးနေရင်၊ Order Service က Error ပြန်ရပြီး Order ကို အောင်မြင်အောင် မလုပ်နိုင်တော့တာမျိုး ဖြစ်နိုင်တယ်။
-
Async System မှာဆိုရင် - Order Service က “OrderPlaced” ဆိုတဲ့ Message တစ်ခုကို စာတိုက်ပုံးထဲကို ပို့လိုက်ရုံပဲ။ Email Service Online မှာရှိမရှိ သူစိတ်မဝင်စားဘူး။ Email Service က ပျက်နေရင်တောင်၊ Message က စာတိုက်ပုံးထဲမှာ ဘေးကင်းစွာရှိနေလိမ့်မယ်။ Email Service ပြန်တက်လာတဲ့အခါ၊ Message ကိုတွေ့ပြီး Email ပို့ပါလိမ့်မယ်။ Order Service ကတော့ လုံးဝမထိခိုက်သွားပါဘူး။
-
၂။ ပိုမိုကောင်းမွန်သော Scalability (အလုပ်ပိုများကို ကိုင်တွယ်နိုင်ခြင်း)
Section titled “၂။ ပိုမိုကောင်းမွန်သော Scalability (အလုပ်ပိုများကို ကိုင်တွယ်နိုင်ခြင်း)”-
ဘယ်လိုအလုပ်လုပ်လဲ - သင့် Website မှာ User အသစ် Sign Up လုပ်တဲ့သူတွေ ရုတ်တရက် အများကြီးတိုးလာတယ်ဆိုပါစို့။ Sign Up တစ်ခုချင်းစီအတွက် Welcome Email တစ်စောင်ပို့ဖို့ လိုအပ်ပါတယ်။
-
Async နဲ့ဆိုရင် Sign Up Request တစ်ခုချင်းစီက “SendWelcomeEmail” Message တစ်စောင်ကို စာတိုက်ပုံးထဲကို ထည့်ပေးပါတယ်။ Email Service တစ်ခုတည်းက ကိုင်တွယ်နိုင်တာထက် Message တွေ ပိုများလာရင် သင်က Email Service Copy တွေကို အလွယ်တကူ ထပ်ပြီး Run ပေးလိုက်ရုံပါပဲ။ သူတို့အားလုံးက စာတိုက်ပုံးထဲက Message တွေကို အတူတကွ ဝိုင်းပြီး ရှင်းလင်းပေးနိုင်ပါတယ်၊ ဒါက တန်းစီနေတဲ့ Customer တွေအများကြီးကို ကိုင်တွယ်ဖို့ ပိုက်ဆံရှင်းကောင်တာတွေ ထပ်ဖွင့်ပေးလိုက်သလိုပါပဲ။ Sign Up Process ကို မနှေးကွေးစေဘဲ အလုပ်တွေကို Scale လုပ်နိုင်ပါတယ်။