ပြီးခဲ့တဲ့ရက်တွေက apache အကြောင်းရော nginx အကြောင်းရော ရေးပေးပြီးသွားပြီ။ web server တွေက ဘယ်လိုအလုပ်လုပ်တယ်။ apache ကဘာလဲ၊ nginx က ဘာလဲ စသည်ဖြင့် နားလည်သွားလောက်ပြီလို့ထင်ပါတယ်။ ဒီနေ့တော့ အဲ့ဒီ နှစ်ခုကို comparison ပုံစံမျိုး ရေးသွားပါမယ်။

Apache ရော Nginx ရော က လက်ရှိ web server တွေထဲမှာအသုံးအများဆုံး software တွေလို့ပြောလို့ရပါတယ်။ နှစ်ခုလုံးက open source တွေချည်းပဲ၊ apache ကလည်း modular & thread based web server ဖြစ်သလို nginx ကလည်း performance ကို ဦးစားပေးထားတဲ့ asynchronous web server (reverse proxy server အနေနဲ့လည်း သုံးလို့ရ)။

နှစ်ခုစလုံး ကတော့ လက်ရှိမှာ support တွေ bug improvement တွေ development တွေကတော့ အကုန်လုပ်နေတဲ့အတွက် အဆင်ပြေတယ်။ Help Forums တွေလည်း အများကြီး ရှိတဲ့အတွက်အဆင်ပြေတယ်။ အခုနောက်ပိုင်းမှာ Nginx ကအမှီလိုက်လာလို့ သာ အရင်တုန်းကတော့ apache ရဲ့ documentation တွေ support တွေက ပိုကောင်းပါတယ်။ လက်ရှိမှာတော့ အတူတူလောက်ပါပဲ။

အဓိက သူတို့ နှစ်ခုကို ကွာခြားသွားစေတဲ့ အချက်က request တွေ handle လုပ်တဲ့ architecture ကွာသွားတာပါ။ Apache မှာ client requests တွေကို handle လုပ်ဖို့ thread base (single thread , multiple thread base စသည်ဖြင့် options တွေပေးထားတယ်) ကိုသုံးတယ်။ Nginx မှာတော့ memory consumption ပိုင်းသက်သာစေဖို့ asynchronously event driven base နဲ့သွားထားပါတယ်။
¬¬¬¬
Apache server မှာ thread တစ်ခုက connection တစ်ခုကိုပဲ process လုပ်တယ်။ Nginx မှာတော့ thread တစ်ခုက connections အများကြီးနဲ့ အလုပ်လုပ်နိုင်တယ်၊ process တွေအားလုံးကို event loop ထဲမှာထည့်ပြီး asynchronously အလုပ်လုပ်တဲ့အတွက် memory consumption ကိုလျော့ချနိုင်ပြီး performance level ကိုသိသိသာသာတိုးတက်စေပါတယ်။

apache မှာက multithreaded architecture ရှိတယ်ဆိုပေမဲ့လို့ nginx လို heavy traffic မှာတောင် tuning လုပ်နိုင်တဲ့ event-driven architecture မဟုတ်တဲ့အတွက် အရမ်းကြီးကောင်းနေပြီလို့ပြောလို့မရသေးပါဘူး။

static content serving လုပ်တဲ့နေရာမှာတော့ apache ရော nginx ရောအထူးတစ်လည် လုပ်စရာမလိုဘူး။ nginx ကတော့ static content serve လုပ်တဲ့နေရာမှာ ပိုမြန်တယ်။ dynamic content serve လုပ်တဲ့နေရာမှာတော့ သူ့မှာပါပြီးသား method ကိုပဲ သူ့ဘာသာသုံးပြီး render လုပ်နိုင်တယ်။ nginx ကတော့ အဲ့လိုမလုပ်နိုင်ဘူး၊ dynamic content တွေ serve လုပ်ဖို့အတွက် external processor တစ်ခုလိုအပ်တယ်၊ အဲ့ဒီ processor ဆီမှာ request ကို execute လုပ်ပြီးတော့ မှ render လုပ်တယ်၊ ဆိုတဲ့အတွက်ကြောင့် client ဆီက result ရောက်တာ relay ဖြစ်နိုင်တယ်။ ဒါပေမဲ့ apache လိုမျိုး dynamic content တွေ serve လုပ်ဖို့ processor လိုမျိုး ကို သူ့ရဲ့ worker process ထဲမှာ ထည့်မထားတာကလည်း ကောင်းတဲ့ အချက်တစ်ခုလို့ပြောလို့ရတယ်။ ဒါကြောင့် လည်း static content တွေ serve လုပ်ရင်ပိုမြန်တာ။

ကိုယ့်ရဲ့ business need အရ ကိုယ်နဲ့ အဆင်ပြေမယ့်ဟာ ရွေးသုံးကြတယ်။ တစ်ချို့တွေကြတော့ လည်း apache ကို web server အနေနဲ့ သုံးပြီး Nginx က reverse proxy server အနေနဲ့သုံးကြပါတယ် (နှစ်မျိုးလုံးတွဲသုံးတာပါ – ps ကျနော်တော့ မသုံးဘူးသေးပါ)။ အချုပ်အနေနဲ့ ပြောရမယ်ဆိုရင် ecosystem မှာ apache က တစ်ပန်းသာထားပေမဲ့ future မှာတော့ Nginx ကပိုသာသွားမယ်လို့ခန့်မှန်းရပါတယ်။