Architectural Patterns: Message Queues & Pub/Sub
Message Broker ဆိုတာ ဘာလဲ?
Section titled “Message Broker ဆိုတာ ဘာလဲ?”Pattern တွေအကြောင်း မပြောခင် Message Broker (ဥပမာ - RabbitMQ, Apache Kafka, AWS SQS) အကြောင်း အရင်သိဖို့လိုပါတယ်။ သူက Service တွေကြားမှာ စာပို့ပေးတဲ့ “စာတိုက်” ကြီးနဲ့ တူပါတယ်။ Service တွေက တစ်ခုနဲ့တစ်ခု တိုက်ရိုက်စကားမပြောဘဲ၊ ဒီ Message Broker ဆီကိုပဲ Message တွေ ပို့ကြ၊ ယူကြပါတယ်။
ဒီ Message Broker ကိုသုံးပြီး ဆက်သွယ်တဲ့ အဓိကနည်းလမ်း (Pattern) နှစ်ခုရှိပါတယ်။
1. Message Queues (တစ်ဦးကပို့၊ တစ်ဦးကယူ)
Section titled “1. Message Queues (တစ်ဦးကပို့၊ တစ်ဦးကယူ)”ဒီ Pattern မှာ Message တစ်ခုကို Producer က ပို့လိုက်ရင်၊ တစ်ဖက်မှာရှိတဲ့ Consumer အများကြီးထဲကမှ တစ်ယောက်တည်းကသာ အဲ့ဒီ Message ကို လက်ခံရရှိပြီး အလုပ်လုပ်ပါတယ်။
ဥပမာ - ဘဏ်က ကောင်တာများ ဘဏ်မှာ လူတွေ တန်းစီ (Queue) နေကြတယ်။ ကောင်တာ (Consumer) သုံးခုရှိတယ်။ ရှေ့ဆုံးက လူတစ်ယောက် (Message) ကို အားနေတဲ့ ကောင်တာတစ်ခုက ခေါ်ပြီး ဝန်ဆောင်မှုပေးလိုက်မယ်။ တခြားကောင်တာတွေက အဲ့ဒီလူကို ထပ်ခေါ်စရာ မလိုတော့ဘူး။ အလုပ်တစ်ခုကို တစ်ယောက်ပဲ လုပ်သွားတာပါ။
ဘယ်အချိန်မှာ သုံးမလဲ? အလုပ်တစ်ခုကို တစ်ကြိမ်ပဲ သေချာပေါက် လုပ်စေချင်တဲ့အခါ သုံးပါတယ်။ ဥပမာ - User တင်လိုက်တဲ့ ဓာတ်ပုံကို Resize လုပ်ချင်တယ်။ “Resize လုပ်ပေးပါ” ဆိုတဲ့ Message ကို Queue ထဲထည့်လိုက်မယ်။ Worker တစ်ခုက ယူပြီး Resize လုပ်သွားမယ်။ ပြီးရင် အဲ့ဒီ Message ကို ဖျက်လိုက်မယ်။
2. Publish/Subscribe သို့မဟုတ် Pub/Sub (တစ်ဦးကပို့၊ အများကယူ)
Section titled “2. Publish/Subscribe သို့မဟုတ် Pub/Sub (တစ်ဦးကပို့၊ အများကယူ)”ဒီ Pattern မှာကျတော့ Publisher က Message (Event လို့လည်းခေါ်တယ်) တစ်ခုကို ထုတ်လွှင့်လိုက်ရင်၊ အဲ့ဒီသတင်းကို စိတ်ဝင်စားလို့ Subscribe လုပ်ထားတဲ့ လူတိုင်း (Service တိုင်း) ဆီကို Message ရောက်သွားပါတယ်။
ဥပမာ - ရေဒီယို သတင်းကြေညာခြင်း ရေဒီယိုကနေ “မုန်တိုင်းလာနေပြီ” ဆိုတဲ့ သတင်း (Event) ကို လွှင့်လိုက်တယ်။ အဲ့ဒီလိုင်းကို ဖွင့်ထားတဲ့ (Subscribe လုပ်ထားတဲ့) လူတိုင်း အဲ့ဒီသတင်းကို ကြားရမယ်။ ငါးဖမ်းသမားက လှေသိမ်းမယ်၊ တောင်သူက ကောက်ပဲသီးနှံရိတ်မယ် စသဖြင့် ကိုယ်နဲ့ဆိုင်ရာ အလုပ်တွေကို အသီးသီး ဆက်လုပ်ကြမယ်။ ရေဒီယိုစခန်းက ဘယ်သူတွေ ဘာလုပ်မယ်ဆိုတာ လိုက်ပူစရာမလိုဘူး။
ဘယ်အချိန်မှာ သုံးမလဲ? System ထဲမှာ တစ်ခုခုဖြစ်သွားတဲ့အခါ (ဥပမာ - User အသစ်ရောက်လာတာ၊ Order အသစ်ဝင်လာတာ)၊ အဲ့ဒီအကြောင်းကို Service အများကြီးက သိဖို့လိုတဲ့အခါ သုံးပါတယ်။ ဒါကို Event-Driven Architecture လို့လည်း ခေါ်ပါတယ်။
ဥပမာ - Customer က Order တစ်ခု တင်လိုက်တယ်။ Order Service က “Order အသစ်ဝင်လာပြီ (OrderPlaced)” လို့ သတင်းလွှင့်လိုက်မယ်။
- Shipping Service က အဲ့ဒီသတင်းကိုကြားတော့ ပစ္စည်းပို့ဖို့ ပြင်မယ်။
- Notification Service က Customer ဆီ Email ပို့မယ်။
- Analytics Service က အရောင်းစာရင်းမှာ သွားမှတ်မယ်။
Service သုံးခုလုံးက တူညီတဲ့ သတင်းတစ်ခုတည်းကို ရယူပြီး သူတို့လုပ်ရမယ့်အလုပ်တွေကို အပြိုင်လုပ်သွားကြတာ ဖြစ်ပါတယ်။