Horizontal လား Vertical လား

Categories DevOps

ကျွန်တော် အိပ်မရသေးတာနဲ့ စာရေးချင်စိတ်ပေါက်လာလို့ ဒီအကြောင်းလေးကို ရေးပေးချင်တယ်ဗျ။ ဒီဘက်ခေတ်မှာ DevOps တစ်ယောက်အနေနဲ့ပဲဖြစ်စေ SysAdmin ဖြစ်စေ Developer ပဲဖြစ်စေပေါ့နော် Application တခုဟာ ဘယ်လိုမျိုး Scalable ဖြစ်အောင် လုပ်မလဲဆိုတာက အရေးကြီးလာပါပြီ။ Horizon တွေ Vertical တွေ ခဏထားပါအုံးမယ်။ ပထမဆုံးအနေနဲ့ Scalability ဆိုတဲ့အကြောင်းကိုအရင် ပြောချင်ပါတယ်။

Scalability ဆိုတာ ရှင်းရှင်းပြောရရင်ပေါ့ဗျာ ကျွန်တော်တို့ Application တခုမှာ အသုံးပြုသူ ထောင်ချီ မက သောင်းချီသိန်းချီရှိတယ် ဆိုပါစို့။ ကျွန်တော်တို့အနေနဲ့ Application ကြီး Website ကြီးက Online ပေါ်မှာ အချိန်မရွေး ရှိနေဖို့ တိုတိုပြောရရင် 0 Downtime ဖြစ်စေဖို့ (9.999999999999%) စသည့်လောက်ထိ ရှိနေဖို့ လိုအပ်ပါတယ်။ User များတာနဲ့အမျှ ကျွန်တော်တို့ရဲ့ Server တွေရဲ့ ခံနိုင်ရည်က အရေးကြီးလာပါတယ်။ များပြားလှသော User တွေရဲ့ Request တွေကို Handle လုပ်နိုင်ဖို့ ကျွန်တော်တို့အနေနဲ့ မိမိတို့ အသုံးပြုတဲ့ Services တွေ Server တွေကို အလွယ်တကူ တိုးနိုင် လျော့နိုင် အစရှိသည်ဖြင့်လုပ်ခြင်းဟာ Scalable လုပ်ခြင်းပဲ ဖြစ်ပါတယ်။ User များတဲ့အချိန်ဆို ဘယ် ဆာဗာတွေသုံးမယ် နည်းသွားရင် ဘယ်ဆာဗာ အစရှိသည်ဖြင့်ပေ့ါဗျာ။ ဒီလောက်ဆိုရင် Scalable ဆိုတဲ့ ဝေါဟာရကို နားလည်လောက်ပြီ ထင်ပါတယ်။ ကဲ ထားပါတော့ ကျွန်တော် ပြောချင်တဲ့ အကြောင်းကို ဆက်သွားရအောင်ဗျာ။

ပထမဆုံး ပြောချင်တာက Vertical Scaling ပါ။ ကျွန်တော်တို့ ငယ်ငယ်ကလည်း သင်္ချာတို့ ဘာတို့မှာသင်ခဲ့ဖူးပြီးသားဖြစ်ပါတယ်။ အောက်က ပုံလေးကို ကြည့်စေချင်ပါတယ်။

Vertical ဆိုရင် အထောင်ပေ့ါနော် ဆိုလိုတာကတော့ ကျွန်တော်တို့အနေနဲ့ Server (1CPU x 2GB RAM) ရှိတဲ့ ဆာဗာ တလုံးနဲ့ မိမိ Application ကို Run ထားတယ်ဆိုပါတော့။ User တွေအရမ်းများလာလို့ Server ကြီးက လေးလာတယ် Down တာမျိုးတွေဖြစ်တဲ့အခါမှာ ကျွန်တော်တို့အနေနဲ့ အလွယ်တကူ 4CPU x 8GB RAM ရှိတဲ့ Server အဖြစ် အဆင့်မြှင့်လိုက်ခြင်း အားဖြင့်လည်း ကျွန်တော်တို့ Application ကို ခံနိုင်ရည်ရှိစေပါတယ်။ လိုအပ်ရင် လိုအပ်သလို CPU တိုးတာပဲဖြစ်စေ RAM ထပ်မြှင့်လိုက်တာပဲ ဖြစ်စေ လုပ်နိုင်ပါတယ်။ ပိုက်ဆံတော့ ပိုကုန်လာတာပေ့ါနော်။ ဒီလောက်ဆို Vertical Scaling ဆိုတာ ဘာလဲ မျက်စိထဲ မြင်လောက်ပြီလို့ထင်တယ်ဗျ။ လိုအပ်ရင်လိုအပ်သလို တခုအပေါ်မှာ ထပ်ထပ်တင်သွားတယ်လို့ ယူဆလိုက်လို့လည်း ရပါတယ်။ တော်တော်များများ အလျင်စလို အရေးပေါ်အခြေအနေမှာ သုံးကြတဲ့ နည်းလမ်းဖြစ်ပါတယ်။

Vertical အကြောင်း နည်းနည်းလောက်သိပြီးသွားပြီဆိုတော့ Horizontal အကြောင်း နည်းနည်းရိပ်မိလောက်ပြီထင်ပါတယ်။ ပုံထဲမှာလိုပဲ သူက အလျားလိုက်တိုးခြင်းဖြစ်ပါတယ်။ ဆိုလိုတာက ကျွန်တော်တို့အနေနဲ့ 1CPU x 2GB RAM ရှိတဲ့ Server အသုံးပြုထားတာကို မနိုင်တော့တဲ့အခါ နောက်ထပ် 1 CPU x 2GB RAM ရှိတဲ့ Server တခု ထပ်လုပ်ပြီး Application တင် Run ပြီးတော့ Load Balancing Method တွေသုံးပြီး Scalable လုပ်ခြင်းပဲဖြစ်ပါတယ်။ မိမိတို့ အသုံးပြုတဲ့ Server တလုံးက Down သွားတယ်ဆိုရင်တောင် အခြားနောက်တလုံးက ဆက် Run နေသေးတာမို့လို့ Website ကြီး လုံးဝ Down သွားမှာမဟုတ်ပါဘူး။ Vertical မှာတော့ တလုံးထဲကိုသုံးထားတာဖြစ်လို့ Down တာနဲ့ အကုန် Down သွားမှာပဲ ဖြစ်ပါတယ်။ ပိုက်ဆံအနေအထားအရကြည့်မယ်ဆိုရင်တော့ Vertical ထက်ပိုမိုသက်သာစေပါတယ်။ အောက်က ပုံကို ကြည့်တဲ့အခါ ပိုနားလည်သွားပါလိမ့်မယ်။

ကျွန်တော်တို့အနေနဲ့ မိမိ Application တခုကို Deploy မလုပ်ခင် Infra ကို စစဥ်းစားကတည်းက Scalable System ဖြစ်စေဖို့ အထူးသဖြင့် Horizontal Scaling ကို အဓိက ထားပြီး စဥ်းစားစေချင်ပါတယ်။ Application အတွက်ပဲဖြစ်စေ Database အတွက်ပဲဖြစ်စေ Load Balancer တွေ Database Replication တွေလုပ်ခြင်းအားဖြင့် Horizontal Scaling ကို ဆောင်ရွက်နိုင်ပါတယ်။

Vertical Scaling မှာတော့ data consistency အတွက် စိုးရိမ်စရာ သိပ်မရှိပါဘူး ဘာလို့လည်းဆိုတော့ သူက တခုထဲမှာပဲ အလုပ်လုပ်နေလို့ပါ။ Horizontal မှာတော့ စိုးရိမ်စရာရှိပါတယ်။ဘာလို့လည်းဆိုတော့ Horizontal မှာ က များစွာသော Servers တွေစီကနေ Data Transaction တွေသွားတာမို့လို့ ပိုမိုရှူပ်ထွေးပြီး maintain လုပ်ဖို့တော့ ခက်ခဲစေပါတယ်။ Centralized Database System တခုထားရှိဖို့လည်း လိုအပ်တယ်လို့ ပြောချင်ပါတယ်။

စာလည်းနည်းနည်းရှည်သွားပြီ ဒီလောက်ဆိုလည်း စာဖတ်တဲ့သူတွေအဖို့ Horizontal Scaling နဲ့ Vertical Scaling အကြောင်း နားလည်သွားပြီလို့လည်းထင်ပါတယ်။ ကျွန်တော်အနေနဲ့ နောက်ပိုင်းကျရင် Horizontal Scaling မှာ မရှိမဖြစ်လိုအပ်တဲ့ Load Balancing အကြောင်းတွေ Database Replication အကြောင်းတွေရေးပေးသွားဖို့ရှိပါတယ်။ နောက်ပိုင်းကျ AWS ရဲ့ Auto Scaling အကြောင်းရော ထပ်ရေးပေးပါအုံးမယ်။

ကျွန်တော် စာရေးသားမှုနဲ့ ပတ်သတ်ပြီး ကောမန့်မှာ လည်းထင်မြင်ချက်လေးတွေ အားပေးစကားလေးတွေ လည်းပြောသွားစေချင်ပါသေးတယ်။ နားမလည်တဲ့အရာရှိရင်လည်း မှားနေတာရှိရင်လည်း ထောက်ပြပြောဆို ဆွေးနွေးနိုင်ပါတယ်။

အားလုံးကို ကျေးဇူးတင်ပါတယ်။ သဘောကျရင် Share ပေးသွားစေချင်ပါတယ်။

ကောင်းသန့်လွင်

DevOps @ Myanmar