Virtualization နှင့် Containerization အကြား ကွာခြားချက်
ခေတ်သစ်ကွန်ပျူတာတွင်၊ အပလီကေးရှင်းများကို ပတ်ဝန်းကျင်များ (developer laptop များ၊ office server များနှင့် cloud) အကြား မြန်ဆန်၊ ထိရောက်စွာနှင့် အလွယ်တကူ ရွှေ့ပြောင်းရန် လိုအပ်ချက်သည် ဆက်လက်တိုးပွားနေပါသည်။ ဤလိုအပ်ချက်များကို မကြာခဏ အခြေခံသည့် နည်းပညာနှစ်ခုမှာ virtualization နှင့် containerization တို့ဖြစ်သည်။ နှစ်ခုစလုံးသည် တစ်ခုတည်းသော ရုပ်ပိုင်းဆိုင်ရာစက်ပေါ်တွင် "ပတ်ဝန်းကျင်" များစွာကို လည်ပတ်နိုင်စေသော်လည်း၊ ၎င်းတို့၏ လုပ်ဆောင်ချက်၊ အထီးကျန်မှုအဆင့်၊ အရင်းအမြစ်သုံးစွဲမှုနှင့် အသုံးပြုမှုအခြေအနေများသည် သိသိသာသာ ကွဲပြားပါသည်။ ဤဆောင်းပါးသည် virtualization နှင့် containerization အကြား ကွာခြားချက်များကို ပြည့်စုံစွာ ဆွေးနွေးထားပြီး မှန်ကန်သောဖြေရှင်းချက်ကို ရွေးချယ်ရာတွင် အထောက်အကူဖြစ်စေပါသည်။
၁။ Virtualization ရဲ့ အဓိပ္ပာယ်ဖွင့်ဆိုချက်
Virtualization ဆိုသည်မှာ ရုပ်ပိုင်းဆိုင်ရာ စက်တစ်ခုတည်းမှ virtual machine (VM) များစွာကို တစ်ပြိုင်နက်တည်း လည်ပတ်နိုင်စေသည့် နည်းပညာတစ်ခုဖြစ်သည်။ VM တစ်ခုစီသည် ကွန်ပျူတာအပြည့်အစုံကဲ့သို့ လုပ်ဆောင်သည်- ၎င်းတွင် ၎င်း၏ကိုယ်ပိုင် operating system၊ kernel၊ virtual drivers နှင့် ခွဲဝေထားသော resource space (CPU၊ RAM၊ storage) ရှိသည်။
Virtualization ကို ပုံမှန်အားဖြင့် hypervisor ဟုခေါ်သော software မှတစ်ဆင့် လုပ်ဆောင်လေ့ရှိသည်။ hypervisor သည် hardware resource များကို ခွဲဝေပေးရန်နှင့် virtual machine များကို စီမံခန့်ခွဲရန် တာဝန်ရှိသည်။ လူကြိုက်များသော hypervisor များ၏ ဥပမာများတွင် အောက်ပါတို့ ပါဝင်သည်-
– VMware ESXi
– မိုက်ခရိုဆော့ဖ် Hyper-V
- KVM (Kernel-based Virtual Machine)
– VirtualBox (ဒေသတွင်းလိုအပ်ချက်များအတွက် အထွေထွေ)
virtualization ဖြင့် Windows နှင့် Linux ကို physical server တစ်ခုတည်းတွင် run နိုင်သည်၊ သို့မဟုတ် isolation နှင့် multi-tenancy လိုအပ်ချက်များအတွက် Linux distribution များစွာကို run နိုင်သည်။
၂။ ကွန်တိန်နာအဖြစ်အသုံးပြုခြင်း၏ အဓိပ္ပာယ်ဖွင့်ဆိုချက်
Containerization ဆိုသည်မှာ application များကို container ဟုခေါ်သော သီးခြား unit များတွင် run သည့် နည်းလမ်းတစ်ခုဖြစ်သည်။ Container များသည် application များနှင့် ၎င်းတို့၏ dependencies (libraries၊ runtimes၊ configurations) များကို "package" လုပ်သောကြောင့် ၎င်းတို့သည် environment များစွာတွင် တသမတ်တည်း run နိုင်သည်။
VM များနှင့် အဓိကကွာခြားချက်မှာ container များတွင် ပြီးပြည့်စုံသော operating system မရှိပါ။ container များသည် kernel တစ်ခုကို host OS (သို့မဟုတ် container သည် VM ပေါ်တွင် လည်ပတ်နေပါက VM ၏ kernel) နှင့် မျှဝေသည်။ Isolation ကို Linux တွင် namespace များနှင့် cgroup များကဲ့သို့သော kernel feature များမှတစ်ဆင့် ရရှိပြီး ၎င်းတို့သည် process separation နှင့် resource restrictions များကို စီမံခန့်ခွဲသည်။
အကျော်ကြားဆုံး container platform များမှာ-
– ဒေါက်တာ
– ကွန်တိန်နာ
– ပေါ့ဒ်မန်း
– Kubernetes ကဲ့သို့ ညှိနှိုင်းဆောင်ရွက်မှု
ကွန်တိန်နာပြုလုပ်ခြင်းကို မိုက်ခရိုဝန်ဆောင်မှုများ၊ လျင်မြန်စွာ ဖြန့်ကျက်ခြင်းနှင့် ခေတ်မီ DevOps အခြေအနေများအတွက် အသုံးများသည်။
၃။ ဗိသုကာပညာ ကွာခြားချက်များ- VM နှင့် Container
Virtualization (VM)
VM မှာ ဒီလို layer တွေရှိပါတယ်။
၁။ ရုပ်ပိုင်းဆိုင်ရာ ဟာ့ဒ်ဝဲ
၂။ ဟိုက်ပါဗိုက်ဆာ
၃။ VM (တစ်ခုချင်းစီတွင် ၎င်း၏ကိုယ်ပိုင် OS + kernel ရှိသည်)
၄။ လျှောက်လွှာ
VM တစ်ခုစီတွင် ပြီးပြည့်စုံသော operating system တစ်ခုပါရှိသောကြောင့် VM များသည် “ပိုမိုလေးလံ” လေ့ရှိသော်လည်း ၎င်းတို့၏ isolation သည် အားကောင်းပြီး မတူညီသော OS များကို လည်ပတ်ရန် ပြောင်းလွယ်ပြင်လွယ်ရှိသည်။
ကွန်တိန်နာပြုလုပ်ခြင်း (ကွန်တိန်နာ)
ကွန်တိန်နာများတွင်၊ အလွှာများသည် ယေဘုယျအားဖြင့်-
၁။ ရုပ်ပိုင်းဆိုင်ရာ ဟာ့ဒ်ဝဲ
၂။ Host OS (kernel)
၃။ ကွန်တိန်နာ လည်ပတ်ချိန် (ဥပမာ Docker)
၄။ ကွန်တိန်နာ (အပလီကေးရှင်း + မှီခိုမှုများ)
ကွန်တိန်နာများသည် operating system ကို ထပ်တူမပွားသောကြောင့် ပေါ့ပါးပါသည်။ ရလဒ်အနေဖြင့် ၎င်းတို့ကို ဖန်တီးခြင်း၊ လုပ်ဆောင်ခြင်းနှင့် ဖြန့်ကျက်ခြင်းတွင် ပိုမိုမြန်ဆန်လေ့ရှိသည်။
၄။ အရင်းအမြစ်သုံးစွဲမှုတွင် ကွာခြားချက်များ
VM များသည် အောက်ပါတို့ကြောင့် အရင်းအမြစ်များ ပိုမိုသုံးစွဲကြသည်-
- VM တစ်ခုချင်းစီသည် OS အတွက် RAM လိုအပ်သည်
- hypervisor နှင့် OS disk image overhead ရှိသည်
– OS ကို boot လုပ်ခြင်းသည် အချိန်နှင့် အရင်းအမြစ်များ လိုအပ်သည်
ကွန်တိန်နာများသည် ပိုမိုစီးပွားရေးအရ တွက်ခြေကိုက်ပါသည်- အဘယ်ကြောင့်ဆိုသော်
- host kernel ကိုမျှဝေခြင်း
– ရုပ်ပုံအရွယ်အစားသည် အတော်လေးသေးငယ်သည် (OS VM ရုပ်ပုံနှင့် နှိုင်းယှဉ်ပါက)
- မြန်ဆန်စွာ စတင်/ရပ်တန့်ခြင်း (များသောအားဖြင့် စက္ကန့်ပိုင်း သို့မဟုတ် ထို့ထက်နည်းသော အချိန်အတွင်း)
သင့်ရည်မှန်းချက်က ဝန်ဆောင်မှုငယ်လေးတွေ ဒါဇင်ပေါင်းများစွာကနေ ရာပေါင်းများစွာအထိ လည်ပတ်ဖို့ဆိုရင် container တွေက ပိုထိရောက်မှုရှိပါတယ်။ ဒါပေမယ့် လုံးဝအထီးကျန်မှု ဒါမှမဟုတ် တခြား OS တစ်ခု လိုအပ်ရင် VM တွေက ပိုသက်ဆိုင်ပါတယ်။
၅။ Boot နှင့် Deployment Speed ကွာခြားချက်
VM တစ်ခုဟာ ကွန်ပျူတာအသစ်တစ်လုံးစတင်တာနဲ့ ဆင်တူပါတယ်- OS ကို boot လုပ်တာ၊ ဝန်ဆောင်မှုတွေကို initialize လုပ်တာ စတဲ့အရာတွေ လိုအပ်ပါတယ်။ VM ရဲ့ စတင်ချိန်ဟာ စက္ကန့်ဆယ်ဂဏန်းကနေ မိနစ်ပိုင်းအထိ ကြာနိုင်ပါတယ်။
ကွန်တိန်နာများသည် သီးခြားအပလီကေးရှင်းလုပ်ငန်းစဉ်များကို လုပ်ဆောင်ခြင်းနှင့် ပိုတူပါသည်။ ကွန်တိန်နာအများစုသည် ရုပ်ပုံနှင့် အပလီကေးရှင်း စတင်မှုပေါ် မူတည်၍ စက္ကန့်ပိုင်းအတွင်း သို့မဟုတ် ထို့ထက်နည်းသော အချိန်အတွင်း စတင်နိုင်ပါသည်။
CI/CD (Continuous Integration/Continuous Deployment) ရှုထောင့်မှကြည့်လျှင် container များကို ရွေးချယ်လေ့ရှိသည်၊ အဘယ်ကြောင့်ဆိုသော် ၎င်းတို့သည် build-test-deploy pipeline ကို မြန်ဆန်စေသောကြောင့် ဖြစ်သည်။
၆။ သီးခြားခွဲထားမှုနှင့် လုံခြုံရေးအဆင့်
အထီးကျန်ခြင်းသည် အရေးကြီးဆုံးသော အချက်များထဲမှ တစ်ခုဖြစ်သည်။
VM
- OS/kernels နယ်နိမိတ် သီးခြားရှိသောကြောင့် ပိုမိုအားကောင်းသော isolation။
– VM တစ်ခု ချို့ယွင်းသွားပါက သက်ရောက်မှုသည် ထို VM တွင်သာ ကန့်သတ်ထားလေ့ရှိသည် (သို့သော် hypervisor exploits များ၏ အန္တရာယ်ရှိနေသေးသည်)။
– ယုံကြည်မှုအဆင့်နိမ့်သော ငှားရမ်းသူများစွာရှိသော ပတ်ဝန်းကျင်များအတွက် သင့်လျော်သည် (ဥပမာ- မတူညီသောဖောက်သည်များကို လက်ခံခြင်း)။
ထည့်သောအရာ
- host kernel ကို မျှဝေအသုံးပြုခြင်းကြောင့် isolation သည် "ပိုမိုပါးလွှာ" သည်။
– kernel တွင် အားနည်းချက်ရှိပါက သို့မဟုတ် container configuration ညံ့ဖျင်းပါက (ဥပမာ၊ container သည် root အဖြစ် လည်ပတ်နေခြင်း၊ အခွင့်ထူးများလွန်းခြင်း)၊ host သို့ မြင့်တက်လာနိုင်ခြေ မြင့်တက်လာနိုင်သည်။
– ကွန်တိန်နာလုံခြုံရေးသည် rootless containers များအသုံးပြုခြင်း၊ စွမ်းရည်ကန့်သတ်ချက်များ၊ seccomp/apparmor/selinux၊ image scanning စသည်တို့အပေါ် များစွာမူတည်ပါသည်။
သို့သော်၊ ကွန်တိန်နာလုံခြုံရေးဂေဟစနစ်သည် အလျင်အမြန်ကြီးထွားလာနေပြီး အဖွဲ့အစည်းကြီးများစွာသည် အကောင်းဆုံးလုပ်ဆောင်မှုများဖြင့် ကွန်တိန်နာများကို လုံခြုံစွာလည်ပတ်ကြသည်။
၇။ သယ်ဆောင်ရလွယ်ကူမှုနှင့် ပတ်ဝန်းကျင်နှင့် သဟဇာတဖြစ်မှု
ကွန်တိန်နာများသည် အပလီကေးရှင်း သယ်ဆောင်ရလွယ်ကူမှုတွင် ထူးချွန်သည်-
- Container image တွေမှာ application dependencies တွေ ပါဝင်ပါတယ်။
– “ကျွန်ုပ်၏စက်တွင် လုပ်ဆောင်နေသည့်အရာ” သည် ဆာဗာများနှင့် cloud တွင်လည်း လုပ်ဆောင်နိုင်ကြောင်း သေချာစေသည်
– ပတ်ဝန်းကျင်နှင့် လိုက်လျောညီထွေဖြစ်မှု လိုအပ်သော ဖွံ့ဖြိုးတိုးတက်ရေးအဖွဲ့များအတွက် သင့်လျော်သည်
VM များသည်လည်း သယ်ဆောင်ရလွယ်ကူသော်လည်း အလေးချိန်ပိုများသည်။
– VM တစ်ခုကို ရွှေ့ပြောင်းခြင်းသည် OS အပြည့်အစုံကို ရွှေ့ပြောင်းခြင်းဖြစ်သည်
– ပုံဖိုင်အရွယ်အစား ကြီးနိုင်သည်
- ထောက်ပံ့မှု နှေးကွေးလေ့ရှိသည်
ခေတ်သစ်လက်တွေ့တွင် ပေါင်းစပ်မှုတစ်ခု မကြာခဏဖြစ်ပေါ်လေ့ရှိသည်- VM များကို တည်ငြိမ်ပြီး လုံခြုံသော “node များ” အဖြစ် အသုံးပြုပြီး application ပြောင်းလွယ်ပြင်လွယ်ရှိစေရန် container များကို ၎င်းတို့အပေါ်တွင် run ထားသည်။
၈။ လက်တွေ့အသုံးပြုမှု- ဘယ်ဟာကို ဘယ်အချိန်မှာ ရွေးချယ်ရမလဲ။
အောက်ပါအခြေအနေများတွင် Virtualization ကို အသုံးပြုပါ-
၁။ သင်သည် မတူညီသော OS (ဥပမာ Windows Server နှင့် Linux) ကို တစ်ပြိုင်နက်တည်း လည်ပတ်ရန် လိုအပ်ပါသည်။
၂။ ပတ်ဝန်းကျင်များအကြား ခိုင်မာသော အထီးကျန်မှုနှင့် နယ်နိမိတ်များ လိုအပ်ပါသည်။
၃။ သင်သည် containerize လုပ်ရန်ခက်ခဲသော legacy monolithic application တစ်ခုကို လုပ်ဆောင်နေပါသည်။
၄။ သင့်ရဲ့ အခြေခံအဆောက်အအုံဟာ virtual machine ကို အခြေခံထားပြီးဖြစ်ပြီး VM စီမံခန့်ခွဲမှုလည်း ရင့်ကျက်နေပါပြီ။
အောက်ပါအခြေအနေများတွင် ကွန်တိန်နာပြုလုပ်ခြင်းကို အသုံးပြုပါ-
၁။ သင်သည် မိုက်ခရိုဝန်ဆောင်မှုအပလီကေးရှင်း သို့မဟုတ် ခေတ်မီဗိသုကာတစ်ခုကို တည်ဆောက်နေပါသည်။
၂။ သင်သည် မြန်ဆန်သော ဖြန့်ကျက်မှုနှင့် dynamic scaling လိုအပ်သည်။
၃။ DevOps နှင့် CI/CD အတွက် တသမတ်တည်းရှိသော ပတ်ဝန်းကျင်တစ်ခု လိုအပ်ပါသည်။
၄။ သင်သည် ဝန်ဆောင်မှုငယ်များစွာအတွက် အရင်းအမြစ်ထိရောက်မှုကို လိုချင်သည်။
၉။ စီမံခန့်ခွဲမှုနှင့် စီစဉ်ညှိနှိုင်းမှုတွင် ကွာခြားချက်များ
VM များကို vCenter၊ OpenStack သို့မဟုတ် Hyper-V Manager ကဲ့သို့သော virtualization tools များကို အသုံးပြု၍ စီမံခန့်ခွဲသည်။ ၎င်းတို့သည် သိသိသာသာ တိုးချဲ့နိုင်သော်လည်း၊ VM များကို provisioning လုပ်ခြင်းသည် မကြာခဏ ပိုမိုတောင်းဆိုမှုရှိပြီး နှေးကွေးလေ့ရှိသည်။
Kubernetes ကဲ့သို့သော orchestrator များကို အသုံးပြု၍ containers များကို ယေဘုယျအားဖြင့် အတိုင်းအတာတစ်ခုအထိ စီမံခန့်ခွဲလေ့ရှိသည်။
- အလိုအလျောက် ချိန်ညှိခြင်း
- အလိုအလျောက် ပြန်လည်ကောင်းမွန်လာခြင်း (ကွန်တိန်နာသည် အလိုအလျောက် ပြန်လည်စတင်သည်)
- အတွင်းပိုင်း ဝန်အား ချိန်ညှိခြင်း
- အပ်ဒိတ်များနှင့် ပြန်လည်ရုပ်သိမ်းခြင်းများ
- ကြေငြာချက် (YAML ဖိုင်များကို အသုံးပြု၍)
ဒါကြောင့် cloud-native ecosystem အတွက် containerization ဟာ အံဝင်ခွင်ကျဖြစ်စေပါတယ်။
10. Kesimpulan
Virtualization နှင့် containerization နှစ်ခုစလုံးသည် အရေးကြီးသော်လည်း ၎င်းတို့သည် မတူညီသော လိုအပ်ချက်များကို ဖြည့်ဆည်းပေးပါသည်။ Virtualization သည် မြင့်မားသော isolation ရှိသော full-computer environment နှင့် မတူညီသော operating system များကို လည်ပတ်ရန် ပြောင်းလွယ်ပြင်လွယ်ရှိမှုကို ပေးစွမ်းသော်လည်း resource-intensive ဖြစ်ပြီး provisioning ပြုလုပ်ရန် နှေးကွေးပါသည်။ တစ်ချိန်တည်းမှာပင် containerization သည် application များကို လည်ပတ်ရန် ပိုမိုပေါ့ပါး၊ မြန်ဆန်ပြီး ပိုမိုသယ်ဆောင်ရလွယ်ကူသော နည်းလမ်းကို ပေးစွမ်းပြီး DevOps၊ microservices နှင့် ကြီးမားသော deployments များအတွက် အသင့်တော်ဆုံးဖြစ်ပြီး ကောင်းမွန်သော security နှင့် orchestration လုပ်ငန်းစဉ်များ လိုအပ်ကြောင်း သတိပေးချက်လည်း ရှိပါသည်။
အဆုံးစွန်အားဖြင့် အကောင်းဆုံးရွေးချယ်မှုမှာ “VM များ သို့မဟုတ် ကွန်တိန်နာများ” မဟုတ်ဘဲ နှစ်မျိုးလုံးပေါင်းစပ်ထားခြင်းဖြစ်သည်- အခြေခံအဆောက်အအုံအတွက် VM များနှင့် အပလီကေးရှင်းများကို ထိရောက်စွာလည်ပတ်ရန်အတွက် ကွန်တိန်နာများ။ ဤအခြေခံကွာခြားချက်များကို နားလည်ခြင်းဖြင့် သင့်အဖွဲ့အစည်း၏ လိုအပ်ချက်များနှင့် ကိုက်ညီသော ပိုမိုတည်ငြိမ်၊ လုံခြုံပြီး တိုးချဲ့နိုင်သော စနစ်များကို ဒီဇိုင်းဆွဲနိုင်ပါသည်။