လွယ်လွယ်ပြောရရင် Canary deployment ဆိုတာ software update အသစ်ကို user အားလုံးဆီ တစ်ပြိုင်နက် မထုတ်ဘဲ၊ လူနည်းနည်းဆီ အရင်ထုတ်စမ်းပြီး အဆင်ပြေမှ တဖြည်းဖြည်း လူများများဆီ တိုးထုတ်သွားတဲ့ နည်းလမ်းပါ။

မိုင်းတွင်းထဲက ကြက်တူရွေးငှက်လေးနဲ့ ဥပမာ ပြောရအောင်။ ရှေးတုန်းက မိုင်းတွင်းထဲ ဝင်မယ့် အလုပ်သမားတွေက ကြက်တူရွေးငှက် (canary) လေးကို အရင် လွှတ်တယ်။ ငှက်လေးက အဆိပ်ဓာတ်ငွေ့ကို လူထက် အများကြီး စောပြီး ခံစားရတယ်။ ငှက် အသက်ရှင်နေသေးရင် မိုင်းတွင်း လုံခြုံတယ် — လူတွေ ဝင်လို့ရပြီ။ ငှက် တစ်ခုခု ဖြစ်သွားရင် လူတွေ မဝင်ဘူး။ Software update လည်း ဒီလိုပဲ။ ဗားရှင်းအသစ်ကို “ငှက်” လို လူနည်းနည်းဆီ အရင် လွှတ်ကြည့်တယ် — ပြဿနာ ရှိမရှိ အရင်စမ်းတာ။

တကယ့် လုပ်ငန်းစဉ်က ဒီလိုပါ။ ဗားရှင်း 2.0 ထုတ်မယ်ဆိုပါစို့ —

အရင် user 1% လောက်ဆီပဲ 2.0 ပို့တယ်၊ ကျန် 99% က 1.0 ပဲ ဆက်သုံးနေတယ်
နာရီအနည်းငယ် စောင့်ပြီး metric တွေ ကြည့်တယ် — error rate တက်လာလား၊ server တုံ့ပြန်မှု နှေးသွားလား
အဆင်ပြေရင် 10%၊ ပြီးရင် 50%၊ နောက်ဆုံး 100% — တဖြည်းဖြည်း တိုးသွားတယ်
တစ်ဆင့်ဆင့်မှာ ပြဿနာတွေ့ရင် ချက်ချင်း rollback — ဆိုလိုတာက 1.0 ဗားရှင်းအဟောင်း ပြန်ထုတ်ပေးလိုက်တာ

ဒါကို ကိုယ်တိုင် ကြုံဖူးမှာပါ။ Facebook ဒါမှမဟုတ် Gmail app ကို update လုပ်ပြီးချင်း design ပြောင်းသွားတာ သူငယ်ချင်းဖုန်းမှာ တွေ့တယ်၊ ကိုယ့်ဖုန်းမှာ မပြောင်းသေးဘူး — အဲဒါ canary-style rollout ပဲ။ Company ကြီးတွေက user အားလုံးကို တစ်ပြိုင်နက် မထုတ်ဘူး။ အရင် တစ်စုဆီ ထုတ်ကြည့်ပြီး crash report တွေ စောင့်တယ်။

ဒါဆို blue-green deployment နဲ့ ဘာကွာလဲဆိုတော့ — blue-green ကျတော့ ဗားရှင်းနှစ်ခု (အပြာ = အဟောင်း၊ အစိမ်း = အသစ်) ကို တစ်ပြိုင်နက် run ထားပြီး traffic ကို တစ်ခါတည်း အကုန် ပြောင်းပေးလိုက်တာ။ မြန်တယ်၊ ဒါပေမယ့် အသစ်မှာ bug ပါရင် လူတိုင်း တစ်ပြိုင်နက် ခံရတယ်။ Canary ကျတော့ ဖြည်းဖြည်းချင်း တိုးသွားတော့ bug တွေ့ရင် ထိခိုက်သူ နည်းတယ်။ ဘယ်ဟာ သုံးမလဲဆိုတာ risk နဲ့ ဆုံးဖြတ်ရတယ်။

ကိုယ် developer တစ်ယောက်အနေနဲ့ ဒီအကြောင်း သိထားသင့်တာက —

Production မှာ update ထုတ်တိုင်း “တစ်ခါတည်း အကုန်” မထုတ်ပါနဲ့ — canary လို အဆင့်ဆင့် ထုတ်တဲ့ အကျင့်လုပ်ပါ
Rollout လုပ်နေတုန်း metric စောင့်ကြည့်ဖို့ monitoring (ဥပမာ error rate dashboard) အဆင်သင့် ရှိရမယ်
Rollback လုပ်နည်း ကြိုစဉ်းစားထားပါ — ပြဿနာတွေ့မှ ဗားရှင်းအဟောင်း ဘယ်မှာ ရှာရမလဲ မလုပ်နဲ့
Feature flag နဲ့ တွဲသုံးလို့ရတယ် — code အသစ်ကို အရင်ထည့်ထား၊ flag ဖွင့်မှ user တစ်စုဆီ ပြတာမျိုး
CI/CD pipeline (GitHub Actions လို) ထဲမှာ canary step ထည့်ထားရင် အလိုအလျောက် အဆင့်ဆင့် ထုတ်ပေးတယ်

အမှားပါတဲ့ update ကို လူသန်းချီဆီ တစ်ပြိုင်နက် ပို့မိတဲ့ ကုမ္ပဏီကြီးတွေ သတင်းမှာ ခဏခဏ တွေ့ဖူးမှာပါ။ Canary deployment ဆိုတာ အဲဒီလို အရှက်ကွဲစရာ အဖြစ်အပျက်မျိုး မဖြစ်အောင် “အရင်နည်းနည်း စမ်းကြည့်မယ်” ဆိုတဲ့ ရိုးရိုးရှင်းရှင်း အတွေးလေးပဲ။ ရိုးပေမယ့် တော်တော် ကယ်တင်နိုင်တယ်။ 🙂