Architecture တစ်ခုရဲ့ ရည်မှန်းချက်တွေက ဘာတွေလဲ
Feature တွေအပြင် System တစ်ခု “ဘယ်လောက်ကောင်းကောင်း” အလုပ်လုပ်သလဲဆိုတာ
Section titled “Feature တွေအပြင် System တစ်ခု “ဘယ်လောက်ကောင်းကောင်း” အလုပ်လုပ်သလဲဆိုတာ”Architecture ဆိုတာ System တစ်ခုက ဘာတွေလုပ်ပေးနိုင်သလဲ (features) ဆိုတာထက်၊ အဲ့ဒီအလုပ်တွေကို ဘယ်လောက်ကောင်းကောင်း လုပ်ဆောင်နိုင်သလဲ ဆိုတာကို အဓိကထားပါတယ်။ ဒီ “ဘယ်လောက်ကောင်းကောင်း” ဆိုတဲ့ အရည်အသွေးတွေကို Quality Attributes ဒါမှမဟုတ် “-ilities” လို့ခေါ်ပါတယ်။ ဒါတွေက ကိုယ့်ရဲ့ architectural blueprint ကို ပုံဖော်ပေးမယ့် အဓိကရည်မှန်းချက်တွေ ပါပဲ။
အရေးအကြီးဆုံး Quality Attributes တွေထဲက တချို့ကတော့:
-
Performance (တုံ့ပြန်မှုအမြန်နှုန်း) ⏱️
- ဘာကိုဆိုလိုတာလဲ: System က request တစ်ခုကို ဘယ်လောက်မြန်မြန်တုံ့ပြန်သလဲ။ ဒါကို latency (ကြာချိန်) နဲ့ throughput (အချိန်တစ်ခုအတွင်း ပြီးမြောက်တဲ့အလုပ်) နဲ့ တိုင်းတာတယ်။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “User တစ်သန်း တစ်ပြိုင်နက်တည်း သုံးနေရင်တောင်၊ search result တွေက ဘယ်လောက်မြန်မြန်ပေါ်လာသင့်လဲ?”
-
Scalability (တိုးချဲ့နိုင်စွမ်း) 📈
- ဘာကိုဆိုလိုတာလဲ: System က တိုးလာတဲ့ user တွေနဲ့ data တွေကို စွမ်းဆောင်ရည်မကျဘဲ ထိထိရောက်ရောက် ကိုင်တွယ်နိုင်ရဲ့လား။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “ကျွန်တော်တို့ရဲ့ user အရေအတွက်က တစ်ညတည်းနဲ့ နှစ်ဆတိုးလာခဲ့ရင်၊ system က မကျသွားဘဲ၊ မနှေးသွားဘဲ ကိုင်တွယ်နိုင်ပါ့မလား?”
-
Availability / Reliability (အမြဲတမ်းသုံးနိုင်မှု / ယုံကြည်စိတ်ချရမှု) ✅
- ဘာကိုဆိုလိုတာလဲ: System က ပျက်မကျဘဲ ပုံမှန်အလုပ်လုပ်နေတဲ့ အချိန်ရာခိုင်နှုန်း။ ဒါကို “nines” (ဥပမာ - 99.9% uptime) နဲ့ တိုင်းတာလေ့ရှိတယ်။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “Server တစ်လုံးပျက်သွားရင်၊ website တစ်ခုလုံး ရပ်သွားမှာလား၊ ဒါမှမဟုတ် ဆက်အလုပ်လုပ်နေနိုင်မလား?”
-
Maintainability (ပြင်ဆင်ထိန်းသိမ်းရလွယ်ကူမှု) 🔧
- ဘာကိုဆိုလိုတာလဲ: Developer တွေအတွက် bug တွေကို ရှာဖွေပြင်ဆင်ဖို့၊ update တွေလုပ်ဖို့၊ feature အသစ်တွေထည့်ဖို့ ဘယ်လောက်လွယ်ကူသလဲ။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “Developer အသစ်တစ်ယောက်က ဒီ system ရဲ့ အစိတ်အပိုင်းတစ်ခုကို နားလည်ပြီး ပြောင်းလဲမှုတစ်ခုလုပ်ဖို့ ဘယ်လောက်ကြာမလဲ?”
-
Security (လုံခြုံရေး) 🛡️
- ဘာကိုဆိုလိုတာလဲ: System ရဲ့ data နဲ့ လုပ်ဆောင်ချက်တွေကို ခြိမ်းခြောက်မှုတွေနဲ့ ခွင့်ပြုချက်မရှိဘဲ ဝင်ရောက်ခြင်းကနေ ကာကွယ်နိုင်စွမ်း။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “ကျွန်တော်တို့က user password တွေကို ဘယ်လိုကာကွယ်ထားသလဲ၊ SQL injection လိုမျိုး အဖြစ်များတဲ့ တိုက်ခိုက်မှုတွေကို ဘယ်လိုကာကွယ်မလဲ?”
-
Testability (စမ်းသပ်ရလွယ်ကူမှု) 🧪
- ဘာကိုဆိုလိုတာလဲ: System က ကောင်းကောင်းအလုပ်လုပ်ရဲ့လားဆိုတာကို စမ်းသပ်စစ်ဆေးဖို့ ဘယ်လောက်လွယ်ကူသလဲ။
- Architect တစ်ယောက်အနေနဲ့ စဉ်းစားရမှာက: “ကျွန်တော်တို့ system ရဲ့ အစိတ်အပိုင်းတစ်ခုချင်းစီကို သီးခြားခွဲပြီး စမ်းသပ်နိုင်လား၊ ဒါမှမဟုတ် တစ်ခုလုံးကို တစ်ခါတည်း စမ်းသပ်ရမှာလား?”
အဓိကနိယာမ - Architecture ဆိုတာ Trade-offs တွေအကြောင်းပါပဲ
Section titled “အဓိကနိယာမ - Architecture ဆိုတာ Trade-offs တွေအကြောင်းပါပဲ”တစ်ပြိုင်နက်တည်းမှာ အမြန်ဆုံး၊ အတိုးချဲ့နိုင်ဆုံး၊ အလုံခြုံဆုံး၊ တည်ဆောက်ထိန်းသိမ်းဖို့ အကုန်အကျအသက်သာဆုံးဖြစ်တဲ့ system တစ်ခုကို ဘယ်တော့မှ တည်ဆောက်လို့မရပါဘူး။ Architectural ဆုံးဖြတ်ချက်တိုင်းမှာ အပေးအယူ (trade-off) တစ်ခုရှိပါတယ်။ Quality Attribute တစ်ခုကို ပိုကောင်းအောင်လုပ်လိုက်ရင်၊ တခြားတစ်ခုကို အလျှော့ပေးရလေ့ရှိပါတယ်။
-
ဥပမာ ၁: Performance vs. Security
System တစ်ခုကို ပိုလုံခြုံအောင်လုပ်ဖို့၊ data encryption အလွှာတွေ၊ ရှုပ်ထွေးတဲ့ validation check တွေ ထပ်ထည့်ရနိုင်ပါတယ်။
ဒီအဆင့်တွေက processing အချိန်ပိုယူတဲ့အတွက်၊ system ရဲ့ performance ကို အနည်းငယ်နှေးသွားစေနိုင်ပါတယ်။
-
ဥပမာ ၂: Maintainability vs. Performance
System တစ်ခုကို ထိန်းသိမ်းရလွယ်ကူအောင်လုပ်ဖို့၊ code တွေကို သေးငယ်ပြီး တာဝန်ကိုယ်စီသတ်မှတ်ထားတဲ့ layer တွေ၊ service တွေအဖြစ် ခွဲထုတ်နိုင်ပါတယ်။
ဒီ service တွေက network ကနေတစ်ဆင့် ဆက်သွယ်တဲ့အခါ latency (ကြာချိန်) ဖြစ်ပေါ်စေပြီး၊ system ကို တစ်သားတည်းပေါင်းစပ်ထားတဲ့ monolith တစ်ခုထက် performance ပိုနည်းသွားစေနိုင်ပါတယ်။