Web Application Architecture
System design ဘက်နဲ့ပတ်သတ်ပြီး modern web application တွေဘယ်လိုတည်ဆောက်ထားသလဲ ဘာတွေပါသလဲဆိုတာ အကြမ်းဖျင်းရေးပေးထားတာပါ။ Ref ယူထားပြီးတော့ပေါ့။
1. DNS
Web က HTTP protocol ကိုသုံးတယ်။ User ကနေ ဥပမာ http://www.google.com ကိုရိုက်လိုက်ပြီဆိုရင် HTTP protocol ကိုသုံးပီး web application ဆီကိုဆက်သွယ်ရမယ်။ အဲ့လိုလုပ်ဖို့အတွက် web application
ရှိတဲ့ server ရဲ့ IP address ကိုသိဖို့လိုတယ်။ http://www.google.com က domain ပေါ့ လူဖတ်လို့လွယ်တယ်။ ့IP ဆိုတာ machine နားလည်တဲ့ address ပေါ့။
Domain ကနေ IP ကိုရဖို့ DNS( Domain Name System)ကိုသုံးရတယ်။ DNS က ပြောရရင် ်internet မှာ telephone directory တွေလိုအလုပ်လုပ်တာ။
သူ့ကို domain name တခုပေးလိုက်ရင် IP address ပြန်ပေးတယ်ပေါ့လေ။
ဒါတွေက browser ရဲ့ networking module ကနေလုပ်သွားမှာ။
2.Load Balancer
Web application တွေက traffic အရမ်းများလာတဲ့အခါ server တခု instance တခုလောက်နဲ့အဆင်မပြေဘူး။
အဲ့တော့ multiple server,multiple application တွေသုံးပီဲး load အများကြီးကို handle လုပ်ရတယ်။
အဲ့ဒီမှာ ခုနက server 1, server 2, server 3 ဆိုပြီး ထားမယ်ဆိုပါစို့။ ဒါမျိုးကို horizontal scaling လို့ခေါ်တယ်။
အဲ့မှာ request တခုကဝင်လာပြီဆိုရင် အဲ့ request ကိုဘယ် server ဆီပို့မလဲဆိုတာ တွက်ရတာ။
server1 က loadများနေတယ်ဆိုရင်သူ့ဆီပို့လို့မဖြစ်ဘူး။ ဒါမျိုး လုပ်ပေးတဲ့ ကောင်ကို load Balancer လို့ခေါ်တာ။
သူကလဲ အမျိုးမျိုးရှိသေးတယ်။ TCP/IP ဘယ် layer ပေါ်မူတည်ပြီး လုပ်တာမျိုးဆိုတာမျိုး။
3.Web App Servers
သူကတော့ တကယ့် web application logic ကိုလုပ်ပေးတာ။ဥပမာ Java နဲ့ရေးထားတဲ့ application တွေဆို tomcat/netty စတာတွေကနေ serve လုပ်ပေးတာမျိုး။
နောက် Node.js/Go စတာတွေဆို standalone မျိုးပေါ့။ web application ပေါ်မူတည်မယ်။ သုံးတဲ့ concurrency model လဲကွာမယ်။
ဥပမာ Thread based, event loop based စတာမျိုးပေါ့။
အဓိက user request ကို handle လုပ်ပေးပီဲးလိုတဲ့ business logic လုပ် DB မှာ save, response ပြန် ဒါမျိုးလုပ်ပေးတာ။
4.Database
Web application က data တွေ သိမ်းဖို့လိုတဲ့အခါ Database တွေကိုသုံးရတယ်, ဥပမာ MySQL,Oracle,Mongo စတာမျိုးပေါ့။
အဲ့မှာလဲ load balancing,clustering,scaling တွေ ပါတာမျိုးရှိနိုင်တယ်။
5. Caching Service
မကြာခန လိုတဲ့ data မျိုးကို database ကနေသွားသွားဆွဲတဲ့အခါ အဆင်မပြေဘူး ဘာလို့ဆိုတော့ IO ဆိုတာ နှေးလို့
အဲ့တော့ မြန်အောင် IO အစား memory ကိုသုံးမယ် data ကို memory ပေါ်တင်ထားမယ် ်memory ကနေ ပြန်ယူသုံးတော့မြန်တယ်။
ဒါကို cache လုပ်တယ်လို့ခေါ်တယ်။ ဥပမာ Redis,Memcache လိုကောင်တွေ။
မကြာခနလိုတဲ့ ဥပမာ FB လိုဆို login ဝင်တာနဲ့ Profile information ကလိုပြီးသား ဒါမျိုးကို cache ထဲ ထဲ့သိမ်းထားလိုက်တာမျိုး။
6. Job Queue
Application အနေနဲ့ချက်ချင်းပြီးဖို့မလိုတဲ့ asynchronous task တွေ နောက် scalability လိုတဲ့အခါမျိုးမှာ job Queue ကိုသုံးကြတယ်။
ဥပမာ email ပို့ဖို့လိုတာမျိုး ။ massive အများကြီးလိုလာရင် ခုနက web application server တွေကနေ queue ထဲကို email ပို့ဖို့လိုတဲ့ task တွေထထဲ့လိုက်မယ်။
ဒါဆို web application server က တခြားအလုပ်ဆက်လုပ်လို့ရတယ်။ Job queue တွေက email ပို့တာဆက်လုပ်ပေးလိမ့်မယ်။
အဲ့တော့ ပို scalable ဖြစ်တယ်။ မြန်မယ်ပေါ့။ RabbitMQ, Kafka စတာမျိုးတွေ ရှိတယ်။
7.Full-Text Search Service
Full text search ဆိုတာ google လိုမျိုး free form text နဲ့ရှာတာမျိုးကိုဆိုချင်တာ။ Application တွေမှာ အဓိက အားဖြင့် application log တွေ ရှိတယ်။ အဲ့တာမျိုးဆို ပြန်ရှာတာဘာညာက အရမ်းများရင် ခုနက full text search service တွေကိုသုံးရတယ် ဥပမာ ELK stack လိုကောင်တွေပေါ့။
8.Service
Web application ကိုတခြား system တွေက သုံးဖို့လိုတဲ့အခါ REST လို SOAP လိုကောင်တွေထုတ်ပေးထားတတ်ကြတယ်။ ဒါမျိုးကိုဆိုတာ။ Web Application ထဲမှာပေါင်းရေးတာဖြစ်ဖြစ် လိုအပ်လို့သက်သက် ခွဲထုတ်ရေးတာဖြစ်ဖြစ်လုပ်ကြတယ်။
9.Data warehouse
Databse နဲ့ warehouse ဘာကွာလဲဆိုတော့ database သည်နေ့စဉ်လုပ်ဆောင်နေတဲ့ transaction data မျိုးကိုသိမ်းတာ။ warehouse ကျတော့ reporting, analytics ဖို့ data ကိုသိမ်းတာများသောအားဖြင့် summary ပိုကျမယ်။ source အများကြီးကလာမယ် (database အများကြီး သို့မဟုတ် more than one application) volume ပိုများမယ်လို့ပြောလို့ရမယ်။
10. Cloud storage
အဓိက အားဖြင့် data ကို cloud ပေါ်မှာသွားသိမ်းတာ။ဘာပိုကောင်းလဲဆိုတော့ ကိုယ်တိုင် manage လုပ်စရာမလိုဘူး။ scalability ဘာညာ စိတ်ပူစရာမလိုဘူး ။ size ဘာညာ စိတ်ပူစရာမလိုဘူး။ ဒါတွေအားသာတယ်။မကောင်းတာကတော့ ပိုက်ဆံ။
11. CDN
Content delivery network လို့ခေါ်တာ ဥပမာ jquery file တဖိုင်ဆိုပါစို့ဒါဆို userတော်တော်များများ site တော်တော်များများကသုံးတယ်ဆိုပါစို့။ Multiple server တွေနအနေနဲ့ထားပြီး user နဲ့နီးစပ်တဲ့ server ကနေ ယူပေးတာဘာကောင်းလဲဆိုတော့ မြန်တယ်။
အဓိကအားဖြင့် web application တွေမှာ သုံးလေ့ရှိတဲ့ ့static HTML, JS, CSS file တွေကို သိမ်းတာ။
photo credit

Original link=>(https://m.facebook.com/story.php?story_fbid=pfbid0b5diyZXWDRtvLVT9zfDbCswC2KSQuQdjEmnnygRPoc4ZBxXQ4MQmBcKSjLhLTh95l&id=1819241055&mibextid=Nif5oz)