ကျွန်တော် ဘာလို့ Monolithic ပဲ ရွေးချယ်တာလဲ

Microservice နဲ့ ပတ်သက်ပြီး developer တွေ မေးနေကြတာရှိတယ်။ Microservice ဆိုတာ ဘာလဲ။ သိဖို့ လိုလား။ ပြောင်းသင့်လား။ သုံးသင့်လား ဆိုပြီး။ ဘယ်အရာ မဆို pros and consရှိတာပဲ။

အခု အချိန် ထိ Microservice နဲ့ Monolithic ဆိုရင် Monolithic နဲ့ ပဲ အမြဲစ ဖို့ပဲ အကြံပေးတယ်။ Monolithic ကိုပဲ ရွေးချယ်ဖို့ ဆုံးဖြတ်တယ်။
Monolithic က ခေတ်မရှိတော့ဘူး။ Netflix တို့ Facebook တို့ Microservices တွေ နဲ့ ရေးနေကြတာ ကျွန်တော်တို့ လည်း ရေးသင့်တယ်။ သိထားသင့်တယ် လို့ ထင်ကောင်းထင်ကြတယ်။

သိထားတာကတော့ သိထားသင့်တယ်။ အတွေ့အကြုံ ရအောင် ရေးမယ်ဆိုလည်း တကယ် လိုအပ်သည့် project မှာ ရေးဖို့ပဲ အကြံပေးလိုတယ်။

Microservice ရဲ့ အဓိက အားသာချက်ကတော့ Separation of Concerns က အဓိကပဲ။ Coding ရေးနေသည့် သူတိုင်း သိထားသင့်တာကလည်း separation of concerns ကို သိကို သိနေရမှာ။ separation of concerns က single responsibility ဖြစ်ချင်လို့ပဲ။

Microservice ရေးဖို့ လိုသည့် အဓိက ပြဿနာက developer တွေက singel responsibility နဲ့ separation of concerns ကို Monolithic မှာ သေချာ မရေးနိုင်တော့သည့် အခါမှာ single responsiblity ဖြစ်အောင် micro service ထိ ဆင်းရေးရတာပဲ။

Team က အရမ်းကြီးလာသည့် အခါမှာ communication က ကျလာတယ်။ Developer ၂ ယောက် communcation နဲ့ developer ၁၀ ယောက် ရေးသည့် communcation တောင် မတူတော့ဘူး။ အယောက် ၁၀၀ ဆို သာပြီး ဆိုးပဲ။ အဲဒီအခါမှာ function တွေ ထပ်နေတာ separation of concerns ကို မလိုက်နာသည့် developer တွေ single responsibility တွေကို လိုက်မရေးနိုင်သည့် developer တွေ ပါလာကောင်း ပါလာနိုင်တယ်။

အဲဒီ အခါမှာ Microservice ထိ ခွဲရေးဖို့က အသင့်တော်ဆုံးပဲ။ Scalability နဲ့ Microservice က တိုက်ရိုက် သက်ဆိုင်နေတာတော့ မဟုတ်ဘူး။ Monolithic မှာလည်း Scalability ဖြစ်အောင် ရေးထားရင် Scaling လုပ်လို့ရတယ်။

ဘာလို့ Monolithic ကို ရွေးချယ်ရလဲ ဆိုရင်

၁။ Team size သေး ခြင်း နှင့် seniors developer နည်းခြင်း
၂။ ကုန်ကျ စရိတ်သက်သာခြင်း
၃။ Team က single responsiblity နဲ့ separation of concerns ကို နားလည်ခြင်း တို့ ကြောင့်ပဲ။

Microservice မှာ Micro ပါတယ် ဆိုပြီး စျေးလည်း သက်သာသွားမယ် မထင်နဲ့။ Monolithic ထက် ကုန်ကျစရိိတ်များတယ်။ နောက်ပြီး CI/CD မှာလည်း services တွေ အများကြီး ဖြစ်သွားသည့် အတွက် configuration တွေ အများကြီး လုပ်ရတယ်။ Microservice ဆိုရင် DevOps တွေ ပို အလုပ်ရှုပ်တာ အမှန်ပဲ။
Monolithic ဆိုပေမယ့် အပြည့်အဝ Monolithic တော့ မရေးဖြစ်ပါဘူး။

sample architecture

Monolithic ဆိုပေမယ့် Mail , Queue, Log Services တွေကို ခွဲထုတ်ပြီးတော့ အခြား projects တွေ နဲ့ အတူတူ မျှသုံးတာ များတယ်။

Microservice ကို ရေးဖို့ အတွက် service တစ်ခု ခြင်းစီမှာ seniors တစ်ယောက် ရှိနေမှ အဆင်ပြေမယ်။ မဟုတ်ရင် services တွေကို ရေးထားတာ SOLID principle မသိ ၊ separation of concerns မသိ ၊ SLAP (Single Level Of Abstraction) Principle မသိ နဲ့ ဆိုရင် နောက်ပိုင်း အဲဒီ service ပိုင်းက code တွေကို ဘယ်သူမှ ဝင်ပြီး ပြင်ချင်မှာ မဟုတ်ဘူး။ Micro Serive ရေးပေမယ့် ထူးမှာ မဟုတ်ဘူး။

အနှစ်ချုပ်ရရင် အခု ထက် ထိ Monolithic ကို ပဲ အဓိက ထားတယ်။ စျေးသက်သာတယ်။​ Human Resource လည်း နည်းတယ်။ လူနည်းသည့် အတွက် team size သေးသည့် အတွက် guide လုပ်ရတာနဲ့ manage လုပ်ရတာ လည်း သက်သာတယ်။