Asynchronous Communication
အရင်အခန်းတွေမှာ Service တွေ တစ်ခုနဲ့တစ်ခု API ခေါ်ပြီး ချက်ချင်းအဖြေကို စောင့်တဲ့ (Synchronous) ပုံစံကို လေ့လာခဲ့ပါတယ်။ ဒါပေမဲ့ အချို့အလုပ်တွေက ချက်ချင်းအဖြေရဖို့ မလိုပါဘူး။ အဲ့ဒီလို နေရာတွေမှာ Asynchronous Communication ကို သုံးပါတယ်။ သူက System တွေကို ပိုပြီး ခံနိုင်ရည်ရှိအောင်နဲ့ ပိုပြီး Scale လုပ်ရလွယ်အောင် ကူညီပေးပါတယ်။
Synchronous နဲ့ Asynchronous ဘာကွာလဲ?
Section titled “Synchronous နဲ့ Asynchronous ဘာကွာလဲ?”- Synchronous က ဖုန်းခေါ်တာနဲ့ တူပါတယ်။ ခင်ဗျား သူငယ်ချင်းကို ဖုန်းခေါ်ရင် သူ ဖုန်းကိုင်တဲ့အထိ စောင့်ရမယ်။ သူ ဖုန်းမကိုင်ရင် ခင်ဗျား ဘာမှ ဆက်လုပ်လို့ မရဘူး။ အလုပ်က ရပ်နေမယ်။ (Blocking)
- Asynchronous က စာပို့တာ (SMS) နဲ့ တူပါတယ်။ ခင်ဗျား သူငယ်ချင်းဆီ Message ပို့လိုက်မယ်။ ပြီးရင် ဖုန်းချပြီး ကိုယ့်အလုပ်ကိုယ် ဆက်လုပ်လို့ရတယ်။ သူ အားတဲ့အချိန်မှ ဖတ်ပြီး ပြန်ပို့လိမ့်မယ်။ အလုပ်က မရပ်သွားဘူး။ (Non-blocking)
Software Architecture မှာဆိုရင်၊ Service A က Service B ဆီကို Message တစ်ခု ပို့လိုက်တယ်။ ပြီးရင် Service B ဆီက အဖြေကို စောင့်မနေဘဲ Service A က သူ့အလုပ်သူ ဆက်လုပ်နေတာကို Asynchronous လို့ ခေါ်ပါတယ်။
Decoupling (အမှီအခို ကင်းခြင်း)
Section titled “Decoupling (အမှီအခို ကင်းခြင်း)”Asynchronous ရဲ့ အကြီးမားဆုံး အားသာချက်က Service တွေ တစ်ခုနဲ့တစ်ခု အမှီအခို ကင်းသွားတာ (Decoupled ဖြစ်သွားတာ) ပါပဲ။ Service တစ်ခုက Message ကို Message Broker (စာတိုက်ပုံး) ဆီ ပို့လိုက်ရုံပါပဲ။ ကျန်တဲ့ Service က အဲ့ဒီ စာတိုက်ပုံးကနေ သွားယူပါတယ်။ Service တွေက တစ်ခုနဲ့တစ်ခု တိုက်ရိုက် မသိကြတော့ပါဘူး။
ဒီလို အမှီအခို ကင်းသွားတဲ့အတွက် အဓိက အကျိုးကျေးဇူး နှစ်ခု ရလာပါတယ်။
1. System ကို ပိုမို ခိုင်မာစေခြင်း (Resilience)
Section titled “1. System ကို ပိုမို ခိုင်မာစေခြင်း (Resilience)”User တစ်ယောက် Website မှာ အကောင့်ဖွင့်ရင် Welcome Email ပို့ရမယ် ဆိုပါစို့။
- Sync နဲ့လုပ်ရင်:
UserServiceကEmailServiceကို တိုက်ရိုက်ခေါ်မယ်။ အကယ်၍EmailServiceက ပျက်နေရင်UserServiceပါ အလုပ်လုပ်လို့ မရတော့ဘူး။ User က အကောင့်ဖွင့်လို့ မရတော့ဘူး။ - Async နဲ့လုပ်ရင်:
UserServiceက “အကောင့်အသစ် ဖွင့်လိုက်ပြီ” ဆိုတဲ့ Message ကို Message Broker ဆီ ပို့လိုက်မယ်။EmailServiceပျက်နေရင်တောင် Message က Broker ထဲမှာ ရှိနေမယ်။EmailServiceပြန်ကောင်းလာတဲ့အခါ အဲ့ဒီ Message ကိုယူပြီး Email ဆက်ပို့သွားလိမ့်မယ်။ User အနေနဲ့ အကောင့်ဖွင့်တဲ့ နေရာမှာ ဘာပြဿနာမှ ကြုံရမှာ မဟုတ်ပါဘူး။
2. ပမာဏ အများကြီးကို အလွယ်တကူ ကိုင်တွယ်နိုင်ခြင်း (Scalability)
Section titled “2. ပမာဏ အများကြီးကို အလွယ်တကူ ကိုင်တွယ်နိုင်ခြင်း (Scalability)”User တွေ အများကြီး တစ်ပြိုင်နက်တည်း အကောင့်လာဖွင့်တယ် ဆိုပါစို့။
Sync ပုံစံနဲ့ဆိုရင် EmailService က မနိုင်တော့ဘဲ System တစ်ခုလုံး နှေးသွားနိုင်ပါတယ်။ Async ပုံစံမှာတော့ Request တွေ အားလုံးက Message Broker ထဲကိုပဲ ဝင်သွားပါတယ်။ EmailService တစ်ခုတည်းနဲ့ မနိုင်တော့ဘူးဆိုရင် EmailService ကို ၂ ခု၊ ၃ ခု ထပ်ပွား (Scale out) လိုက်ရုံပါပဲ။ သူတို့တွေက Message Broker ထဲက Message တွေကို ဝိုင်းပြီး အလုပ်လုပ်သွားကြပါလိမ့်မယ်။