Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း

ဝဘ်အက်ပလီကေးရှင်းများကို ယခုအခါ နေရာတိုင်းတွင် အသုံးပြုနေကြပြီး သယ်ယူပို့ဆောင်ရေး ပရိုတိုကောများအားလုံးတွင် HTTP သည် ခြင်္သေ့၏ ရှယ်ယာကို သိမ်းပိုက်ထားသည်။ ဝဘ်အက်ပလီကေးရှင်း ဖွံ့ဖြိုးတိုးတက်မှု၏ ကွဲပြားချက်များကို လေ့လာသောအခါတွင် လူအများစုသည် အဆိုပါ အပလီကေးရှင်းများ အမှန်တကယ်လည်ပတ်နေသည့် လည်ပတ်မှုစနစ်အား အာရုံစိုက်မှုနည်းပါးသည်။ ဖွံ့ဖြိုးတိုးတက်မှု (Dev) နှင့် စစ်ဆင်ရေး (Ops) တို့ကို ခွဲခြားထားခြင်းကြောင့် အခြေအနေကို ပိုမိုဆိုးရွားစေသည်။ သို့သော် DevOps ယဉ်ကျေးမှု ထွန်းကားလာသည်နှင့်အမျှ၊ developer များသည် ၎င်းတို့၏ အက်ပ်လီကေးရှင်းများကို cloud တွင် လုပ်ဆောင်ရန် တာဝန်ရှိလာသည်၊ ထို့ကြောင့် operating system ၏ backend နှင့် သေချာစွာ ရင်းနှီးလာစေရန် ၎င်းတို့အတွက် အလွန်အသုံးဝင်ပါသည်။ ထောင်ပေါင်းများစွာ သို့မဟုတ် သောင်းနှင့်ချီသော တပြိုင်နက်ချိတ်ဆက်မှုများအတွက် စနစ်ကို အသုံးပြုရန် ကြိုးစားနေပါက ၎င်းသည် အထူးသဖြင့် အသုံးဝင်ပါသည်။

ဝဘ်ဝန်ဆောင်မှုများတွင် ကန့်သတ်ချက်များသည် အခြားသော အပလီကေးရှင်းများနှင့် အလွန်ဆင်တူသည်။ ၎င်းသည် load balancers သို့မဟုတ် database servers ပဲဖြစ်ဖြစ်၊ ဤအပလီကေးရှင်းများအားလုံးသည် စွမ်းဆောင်ရည်မြင့်မားသောပတ်ဝန်းကျင်တွင် အလားတူပြဿနာများရှိသည်။ ဤအခြေခံကန့်သတ်ချက်များကို နားလည်ပြီး ယေဘုယျအားဖြင့် ၎င်းတို့ကို မည်သို့ကျော်လွှားရမည်ကို သိရှိခြင်းသည် သင့်ဝဘ်အက်ပ်လီကေးရှင်းများ၏ စွမ်းဆောင်ရည်နှင့် အရွယ်အစားကို အကဲဖြတ်ရန် ကူညီပေးပါလိမ့်မည်။

ကောင်းစွာအသိဥာဏ်ရှိသော စနစ်ဗိသုကာများဖြစ်လာလိုသော လူငယ် developer များထံမှ မေးခွန်းများကို တုံ့ပြန်သည့်အနေဖြင့် ဤဆောင်းပါးတွဲများကို ရေးနေပါသည်။ Linux အက်ပလီကေးရှင်း ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းနည်းပညာများကို လည်ပတ်မှုစနစ်အဆင့်တွင် ၎င်းတို့လုပ်ဆောင်ပုံ၏ အခြေခံများကို နားမလည်ဘဲ ရှင်းလင်းစွာနားလည်ရန် မဖြစ်နိုင်ပါ။ အက်ပလီကေးရှင်းအမျိုးအစားများစွာရှိသော်လည်း၊ ဤစီးရီးတွင် ဘရောက်ဆာ သို့မဟုတ် စာသားတည်းဖြတ်ခြင်းကဲ့သို့သော desktop အပလီကေးရှင်းများထက် web-based applications များကို ရှာဖွေလိုပါသည်။ ဤအကြောင်းအရာသည် Linux သို့မဟုတ် Unix ပရိုဂရမ်များ မည်သို့အလုပ်လုပ်ပုံနှင့် ၎င်းတို့ကို စွမ်းဆောင်ရည်မြင့်မားစေရန် မည်သို့တည်ဆောက်ပုံတို့ကို နားလည်လိုသော developer များနှင့် ဗိသုကာများအတွက် ရည်ရွယ်ပါသည်။

ဘယ်ဟာကလဲ။ ဆာဗာအခန်း လည်ပတ်မှုစနစ်ဖြစ်ပြီး များသောအားဖြင့် သင့်အက်ပ်လီကေးရှင်းများသည် ဤ OS ပေါ်တွင် လုပ်ဆောင်လေ့ရှိသည်။ ငါ "Linux" လို့ပြောပေမယ့် ယေဘူယျအားဖြင့် Unix နဲ့တူတဲ့လည်ပတ်မှုစနစ်အားလုံးကို ဆိုလိုတယ်လို့ လုံခြုံစွာယူဆနိုင်ပါတယ်။ သို့သော်၊ အခြားစနစ်များတွင်ပါရှိသောကုဒ်ကို ကျွန်ုပ်မစမ်းသပ်ရသေးပါ။ ထို့ကြောင့် သင်သည် FreeBSD သို့မဟုတ် OpenBSD ကို စိတ်ဝင်စားပါက၊ သင်၏ရလဒ်များ ကွဲပြားနိုင်သည်။ Linux သီးသန့်တစ်ခုခုကို စမ်းကြည့်တဲ့အခါ၊ အဲဒါကို ထောက်ပြပါတယ်။

အက်ပ်တစ်ခုကို အစမှစတင်တည်ဆောက်ရန် ဤအသိပညာကို သင်အသုံးပြုနိုင်ပြီး ၎င်းကို ပြီးပြည့်စုံစွာ အကောင်းဆုံးဖြစ်အောင် ပြုလုပ်နိုင်သော်လည်း ထိုသို့မလုပ်ခြင်းသည် အကောင်းဆုံးဖြစ်သည်။ သင့်အဖွဲ့အစည်း၏ လုပ်ငန်းအပလီကေးရှင်းအတွက် C သို့မဟုတ် C++ တွင် ဝဘ်ဆာဗာအသစ်တစ်ခုရေးပါက၊ ၎င်းသည် သင်၏အလုပ်တွင် နောက်ဆုံးနေ့ဖြစ်နိုင်သည်။ သို့သော်၊ ဤအပလီကေးရှင်းများ၏ ဖွဲ့စည်းပုံကို သိရှိခြင်းသည် လက်ရှိပရိုဂရမ်များကို ရွေးချယ်ရာတွင် အထောက်အကူဖြစ်စေမည်ဖြစ်သည်။ လုပ်ငန်းစဉ်အခြေခံစနစ်များကို thread-based စနစ်များအပြင် ဖြစ်ရပ်အခြေခံစနစ်များနှင့် နှိုင်းယှဉ်နိုင်မည်ဖြစ်သည်။ အဘယ်ကြောင့် Nginx သည် Apache httpd ထက် ပိုကောင်းသနည်း၊ အဘယ်ကြောင့် Tornado အခြေပြု Python အပလီကေးရှင်းသည် Django အခြေခံ Python အပလီကေးရှင်းနှင့် နှိုင်းယှဉ်ပါက သုံးစွဲသူများကို ပိုမိုဝန်ဆောင်မှုပေးနိုင်သည့် အကြောင်းရင်းကို သင်နားလည်သဘောပေါက်မည်ဖြစ်သည်။

ZeroHTTPd- သင်ယူခြင်းတူးလ်

ZeroHTTPd သင်ကြားရေးကိရိယာတစ်ခုအနေနဲ့ ကျွန်တော် C မှာ အစကနေ ရေးခဲ့တဲ့ web server တစ်ခုပါ။ Redis ကို အသုံးပြုခွင့် အပါအဝင် ပြင်ပမှီခိုမှု မရှိပါ။ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ကိုယ်ပိုင် Redis လုပ်ထုံးလုပ်နည်းများကို လုပ်ဆောင်ပါသည်။ အသေးစိတ်အချက်အလက်များအတွက် အောက်တွင်ကြည့်ရှုပါ။

ကျွန်ုပ်တို့သည် သီအိုရီကို ရှည်လျားစွာ ဆွေးနွေးနိုင်သော်လည်း၊ ကုဒ်ရေးခြင်း၊ ၎င်းကို လုပ်ဆောင်ခြင်းနှင့် ဆာဗာဗိသုကာများအားလုံးကို တစ်ခုနှင့်တစ်ခု နှိုင်းယှဉ်ခြင်းထက် ပိုကောင်းသောအရာမရှိပါ။ ဤသည်မှာ အထင်ရှားဆုံးနည်းလမ်းဖြစ်သည်။ ထို့ကြောင့်၊ ကျွန်ုပ်တို့သည် ပုံစံတစ်ခုစီကို အသုံးပြု၍ ရိုးရှင်းသော ZeroHTTPd ဝဘ်ဆာဗာကို ရေးသားပါမည်- လုပ်ငန်းစဉ်-အခြေခံ၊ thread-based နှင့် event-based။ ဒီဆာဗာတစ်ခုစီကို စစ်ဆေးပြီး တစ်ခုနဲ့တစ်ခု နှိုင်းယှဉ်ကြည့်ရအောင်။ ZeroHTTPd ကို C ဖိုင်တစ်ခုတည်းတွင် အကောင်အထည် ဖော်ထားသည်။ ဖြစ်ရပ်အခြေခံ ဆာဗာတွင် ပါဝင်သည်။ uthashခေါင်းစီးဖိုင်တစ်ခုတည်းတွင်ပါရှိသော ကောင်းမွန်သော hash table အကောင်အထည်ဖော်မှု။ အခြားကိစ္စများတွင်၊ စီမံကိန်းကိုမရှုပ်ထွေးစေရန်အတွက်မှီခိုမှုမရှိပါ။

သင့်အား နားလည်စေရန်အတွက် ကုဒ်တွင် မှတ်ချက်များစွာ ရှိပါသည်။ ကုဒ်လိုင်းအနည်းငယ်ရှိ ရိုးရှင်းသောဝဘ်ဆာဗာတစ်ခုဖြစ်သောကြောင့် ZeroHTTPd သည် ဝဘ်ဖွံ့ဖြိုးတိုးတက်မှုအတွက် အနည်းဆုံးဘောင်တစ်ခုလည်းဖြစ်သည်။ ၎င်းတွင် အကန့်အသတ်ရှိသော လုပ်ဆောင်နိုင်စွမ်းရှိသော်လည်း တည်ငြိမ်သောဖိုင်များနှင့် အလွန်ရိုးရှင်းသော "ပြောင်းလဲနေသော" စာမျက်နှာများကို ဆောင်ရွက်ပေးနိုင်စွမ်းရှိသည်။ ZeroHTTPd သည် စွမ်းဆောင်ရည်မြင့်မားသော Linux အပလီကေးရှင်းများ ဖန်တီးနည်းကို လေ့လာရန်အတွက် ကောင်းမွန်သည်ဟု ဆိုရမည်ဖြစ်ပါသည်။ ယေဘုယျအားဖြင့်၊ ဝဘ်ဝန်ဆောင်မှုအများစုသည် တောင်းဆိုမှုများကို စောင့်မျှော်ကာ ၎င်းတို့ကို စစ်ဆေးပြီး ၎င်းတို့ကို လုပ်ဆောင်ပါသည်။ ဤသည်မှာ ZeroHTTPd လုပ်ဆောင်မည် အတိအကျဖြစ်သည်။ ဤသည်မှာ သင်ယူခြင်းအတွက် ကိရိယာတစ်ခုဖြစ်ပြီး ထုတ်လုပ်ခြင်းမဟုတ်ပါ။ အမှားအယွင်းများကို ကိုင်တွယ်ရာတွင် ကောင်းမွန်ခြင်းမရှိသည့်အပြင် အကောင်းဆုံးသော လုံခြုံရေးအလေ့အကျင့်များကို ကြွားလုံးထုတ်နိုင်ဖွယ်မရှိပါ (အိုး၊ ဟုတ်ပြီ၊ ငါအသုံးပြုခဲ့သည် strcpy) သို့မဟုတ် C ဘာသာစကား၏ လိမ္မာပါးနပ်သောလှည့်ကွက်များ ၊

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း
ZeroHTTPd ပင်မစာမျက်နှာ။ ပုံများအပါအဝင် မတူညီသော ဖိုင်အမျိုးအစားများကို ထုတ်ပေးနိုင်သည်။

ဧည့်စာအုပ်လျှောက်လွှာ

ခေတ်မီဝဘ်အက်ပလီကေးရှင်းများသည် အများအားဖြင့် static ဖိုင်များအထိ အကန့်အသတ်မရှိပါ။ ၎င်းတို့တွင် ဒေတာဘေ့စ်များ၊ ကက်ရှ်များ စသည်တို့နှင့် ရှုပ်ထွေးသော အပြန်အလှန် ဆက်သွယ်မှုများ ရှိကြသည်။ ထို့ကြောင့် လာရောက်လည်ပတ်သူများသည် ၎င်းတို့၏ အမည်အောက်တွင် ရေးသွင်းချက်များကို ချန်ထားနိုင်သည့် "Guest Book" ဟုခေါ်သော ရိုးရှင်းသော ဝဘ်အက်ပလီကေးရှင်းကို ဖန်တီးပါမည်။ ဧည့်စာအုပ်မှာ စောစောက ရေးထားတဲ့ စာတွေကို သိမ်းထားတယ်။ စာမျက်နှာ၏အောက်ခြေတွင်ဧည့်သည်ကောင်တာလည်းရှိသည်။

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း
ဝဘ်အပလီကေးရှင်း "ဧည့်သည်စာအုပ်" ZeroHTTPd

ဧည့်သည်တော်ကောင်တာနှင့် ဧည့်စာအုပ်စာရင်းများကို Redis တွင် သိမ်းဆည်းထားသည်။ Redis နှင့် ဆက်သွယ်မှုအတွက်၊ ကိုယ်ပိုင်လုပ်ထုံးလုပ်နည်းများကို အကောင်အထည်ဖော်သည်၊ ၎င်းတို့သည် ပြင်ပစာကြည့်တိုက်အပေါ် မမူတည်ပါ။ လူသိရှင်ကြားရရှိနိုင်ပြီး ကောင်းမွန်စွာစမ်းသပ်ထားသော ဖြေရှင်းချက်များရှိသောအခါတွင် homebrew ကုဒ်ကို ထုတ်ပြသည့် ကျွန်ုပ်သည် ပရိတ်သတ်ကြီးမဟုတ်ပါ။ သို့သော် ZeroHTTPd ၏ ရည်ရွယ်ချက်မှာ Linux စွမ်းဆောင်ရည်ကို လေ့လာရန်နှင့် HTTP တောင်းဆိုချက်များကို ဆောင်ရွက်ပေးနေစဉ်တွင် ပြင်ပဝန်ဆောင်မှုများသို့ ဝင်ရောက်ခြင်းမှာ ပြင်းထန်သော စွမ်းဆောင်ရည်သက်ရောက်မှုရှိသည်။ ကျွန်ုပ်တို့၏ဆာဗာဗိသုကာတစ်ခုစီတွင် Redis နှင့် ဆက်သွယ်မှုများကို အပြည့်အဝထိန်းချုပ်ရပါမည်။ အချို့သော ဗိသုကာလက်ရာများတွင် ကျွန်ုပ်တို့သည် ခေါ်ဆိုမှုများကို ပိတ်ဆို့ခြင်းများကို အသုံးပြုကြပြီး အချို့တွင် ကျွန်ုပ်တို့သည် ဖြစ်ရပ်အခြေခံလုပ်ထုံးလုပ်နည်းများကို အသုံးပြုကြသည်။ ပြင်ပ Redis အသုံးပြုသူ ဒစ်ဂျစ်တိုက်ကို အသုံးပြု၍ ဤထိန်းချုပ်မှုကို ပေးမည်မဟုတ်ပါ။ ထို့အပြင်၊ ကျွန်ုပ်တို့၏ Redis ဖောက်သည်သည် အနည်းငယ်သာ လုပ်ဆောင်နိုင်သည် (ရယူခြင်း၊ ဆက်တင်နှင့် သော့တစ်ခုတိုးခြင်း၊ ရယူခြင်းနှင့် ထပ်ထည့်ခြင်း)။ ထို့အပြင် Redis protocol သည် အလွန်ပြေပြစ်ပြီး ရိုးရှင်းပါသည်။ အထူးတလည် သင်ပေးဖို့တောင် မလိုပါဘူး။ ပရိုတိုကောသည် ကုဒ်စာကြောင်းတစ်ရာခန့်ဖြင့် အလုပ်လုပ်သည်ဟူသောအချက်က ၎င်းသည် မည်မျှကောင်းမွန်သည်ဟု ထင်မြင်ယူဆသည်ကို ပြသသည်။

client (browser) တောင်းဆိုသောအခါတွင် အပလီကေးရှင်းသည် မည်သည့်အရာလုပ်ဆောင်သည်ကို အောက်ပါပုံတွင်ပြသည်။ /guestbookURL.

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း
ဧည့်စာအုပ်လျှောက်လွှာ ဘယ်လိုအလုပ်လုပ်လဲ။

ဧည့်သည်စာအုပ် စာမျက်နှာကို ထုတ်ပေးသည့်အခါ၊ ပုံစံခွက်ကို မန်မိုရီအဖြစ် ဖတ်ရန်နှင့် Redis သို့ ကွန်ရက်ခေါ်ဆိုမှု သုံးကြိမ်ပြုလုပ်ရန် ဖိုင်စနစ်သို့ ခေါ်ဆိုမှုတစ်ခု ရှိပါသည်။ နမူနာဖိုင်တွင် အထက်ဖော်ပြပါ ဖန်သားပြင်ဓာတ်ပုံရှိ စာမျက်နှာအတွက် HTML အကြောင်းအရာအများစု ပါဝင်ပါသည်။ အကြောင်းအရာ၏ တက်ကြွသောအပိုင်းအတွက် အထူးနေရာချထားသူများလည်း ရှိသည်- ပို့စ်များနှင့် ဧည့်သည်ကောင်တာ။ ကျွန်ုပ်တို့သည် ၎င်းတို့အား Redis မှ လက်ခံရရှိပြီး ၎င်းတို့ကို စာမျက်နှာတွင် ထည့်သွင်းပြီး သုံးစွဲသူအား အပြည့်အ၀ ဖွဲ့စည်းထားသော အကြောင်းအရာကို ပံ့ပိုးပေးပါသည်။ Redis သည် သော့တန်ဖိုးအသစ်ကို တိုးလာသောအခါ Redis သို့ တတိယအကြိမ်ခေါ်ဆိုမှုကို ရှောင်ရှားနိုင်သည်။ သို့သော်၊ တူညီသောဖြစ်ရပ်အခြေခံတည်ဆောက်မှုရှိသော ကျွန်ုပ်တို့၏ဆာဗာအတွက်၊ ကွန်ရက်ခေါ်ဆိုမှုအများအပြားသည် သင်ယူမှုရည်ရွယ်ချက်အတွက် ကောင်းမွန်သောစမ်းသပ်မှုတစ်ခုဖြစ်သည်။ ထို့ကြောင့် ကျွန်ုပ်တို့သည် လာရောက်သူအရေအတွက်၏ Redis ပြန်တန်ဖိုးကို စွန့်ပစ်ပြီး သီးခြားခေါ်ဆိုမှုတစ်ခုဖြင့် ၎င်းကို မေးမြန်းပါ။

ဆာဗာဗိသုကာများ ZeroHTTPd

ကျွန်ုပ်တို့သည် ZeroHTTPd ၏ တူညီသောလုပ်ဆောင်နိုင်စွမ်းရှိသော်လည်း မတူညီသောဗိသုကာလက်ရာများဖြင့် ဗားရှင်းခုနစ်ခုကို တည်ဆောက်နေပါသည်။

  • အထပ်ထပ်
  • Fork ဆာဗာ (တောင်းဆိုမှုတစ်ခုလျှင် ကလေးလုပ်ငန်းစဉ်တစ်ခု)
  • Pre-fork server (လုပ်ငန်းစဉ်များကြိုတင်ချိတ်ဆက်ခြင်း)
  • လုပ်ဆောင်မှုအပိုင်းများပါရှိသော ဆာဗာ (တောင်းဆိုမှုတစ်ခုလျှင် စာတွဲတစ်ခု)
  • ကြိုတင်ကြိုးဖန်တီးမှုဖြင့် ဆာဗာ
  • ဗိသုကာအခြေခံ poll()
  • ဗိသုကာအခြေခံ epoll

HTTP တောင်းဆိုမှုများဖြင့် ဆာဗာကို တင်ခြင်းဖြင့် ဗိသုကာတစ်ခုစီ၏ စွမ်းဆောင်ရည်ကို ကျွန်ုပ်တို့ တိုင်းတာပါသည်။ သို့သော် အလွန်အပြိုင် ဗိသုကာလက်ရာများကို နှိုင်းယှဉ်သောအခါ၊ မေးမြန်းမှုအရေအတွက် တိုးလာသည်။ ကျွန်ုပ်တို့သည် သုံးကြိမ်စမ်းသပ်ပြီး ပျမ်းမျှတွက်ချက်ပါသည်။

စမ်းသပ်နည်းစနစ်

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း
ZeroHTTPd load testing setup

စမ်းသပ်မှုများ လုပ်ဆောင်သောအခါ အစိတ်အပိုင်းအားလုံးသည် တူညီသောစက်တွင် မလည်ပတ်ရန် အရေးကြီးပါသည်။ ဤကိစ္စတွင်၊ အစိတ်အပိုင်းများသည် CPU နှင့်ယှဉ်ပြိုင်သောကြောင့် OS သည် အပိုအချိန်ဇယားဆွဲခြင်းကို အကျုံးဝင်သည်။ ရွေးချယ်ထားသော ဆာဗာဗိသုကာတစ်ခုစီ၏ လည်ပတ်မှုစနစ်အပေါ်ကို တိုင်းတာခြင်းသည် ဤလေ့ကျင့်ခန်း၏ အရေးကြီးဆုံးပန်းတိုင်တစ်ခုဖြစ်သည်။ ကိန်းရှင်များကို ပေါင်းထည့်ခြင်းသည် လုပ်ငန်းစဉ်အတွက် ထိခိုက်စေပါလိမ့်မည်။ ထို့ကြောင့် အထက်ပုံတွင်ရှိသော ဆက်တင်သည် အကောင်းဆုံးဖြစ်သည်။

ဤဆာဗာတစ်ခုစီသည် အဘယ်အရာလုပ်ဆောင်သနည်း။

  • load.unixism.net- ဤနေရာတွင် ကျွန်ုပ်တို့ လုပ်ဆောင်သည်။ abApache Benchmark အသုံးဝင်မှု။ ကျွန်ုပ်တို့၏ဆာဗာဗိသုကာများကိုစမ်းသပ်ရန် လိုအပ်သောဝန်ကိုထုတ်ပေးသည်။
  • nginx.unixism.net- တစ်ခါတစ်ရံ ကျွန်ုပ်တို့သည် ဆာဗာပရိုဂရမ်တစ်ခု၏ စံနမူနာတစ်ခုထက်ပို၍ လုပ်ဆောင်လိုပါသည်။ ထိုသို့လုပ်ဆောင်ရန်၊ သင့်လျော်သောဆက်တင်များပါရှိသော Nginx ဆာဗာသည် ဝန်စည်စလယ်ကိရိယာတစ်ခုအနေဖြင့် အလုပ်လုပ်သည်။ ab ကျွန်ုပ်တို့၏ server လုပ်ငန်းစဉ်များဆီသို့။
  • zerohttpd.unixism.net- ဤနေရာတွင် ကျွန်ုပ်တို့၏ဆာဗာပရိုဂရမ်များကို မတူညီသော ဗိသုကာခုနစ်ခုတွင် တစ်ကြိမ်လျှင် တစ်ခုလုပ်ဆောင်ပါသည်။
  • redis.unixism.net- ဤဆာဗာသည် ဧည့်စာအုပ်စာရင်းများနှင့် ဧည့်သည်ကောင်တာများကို သိမ်းဆည်းထားသည့် Redis daemon ကို လုပ်ဆောင်သည်။

ဆာဗာအားလုံးသည် တူညီသော ပရိုဆက်ဆာ core ပေါ်တွင် လုပ်ဆောင်သည်။ စိတ်ကူးသည် ဗိသုကာတစ်ခုစီ၏ အမြင့်ဆုံးစွမ်းဆောင်ရည်ကို အကဲဖြတ်ရန်ဖြစ်သည်။ ဆာဗာပရိုဂရမ်အားလုံးကို တူညီသောဟာ့ဒ်ဝဲပေါ်တွင် စမ်းသပ်ထားသောကြောင့်၊ ၎င်းသည် နှိုင်းယှဉ်မှုအတွက် အခြေခံအချက်ဖြစ်သည်။ ကျွန်ုပ်၏ စမ်းသပ်တပ်ဆင်မှုတွင် ဒစ်ဂျစ်တယ်သမုဒ္ဒရာမှ ငှားရမ်းထားသော virtual ဆာဗာများ ပါဝင်သည်။

ငါတို့ ဘာကို တိုင်းတာတာလဲ။

မတူညီသော အညွှန်းကိန်းများကို တိုင်းတာနိုင်သည်။ ကျွန်ုပ်တို့သည် မတူညီသောအဆင့်များတွင် တောင်းဆိုမှုများဖြင့် ဆာဗာများကို တင်ခြင်းဖြင့် ပေးထားသောဖွဲ့စည်းပုံတစ်ခုစီတွင် ဗိသုကာတစ်ခုစီ၏စွမ်းဆောင်ရည်ကို အကဲဖြတ်သည်- ဝန်သည် ပြိုင်တူအသုံးပြုသူ 20 မှ 15 အထိ တိုးလာသည်။

စမ်းသပ်မှုရလဒ်

အောက်ဖော်ပြပါဇယားသည် မတူညီသောဗိသုကာလက်ရာများပေါ်ရှိ ဆာဗာများ၏စွမ်းဆောင်ရည်ကို အပြိုင်အဆင့်အမျိုးမျိုးတွင်ပြသသည်။ y-axis သည် တစ်စက္ကန့်လျှင် တောင်းဆိုမှုအရေအတွက်ဖြစ်ပြီး x-axis သည် parallel connections ဖြစ်သည်။

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း

Linux ကွန်ရက် အပလီကေးရှင်း စွမ်းဆောင်ရည်။ နိဒါန်း

အောက်တွင်ရလဒ်များနှင့်အတူဇယားတစ်ခုဖြစ်သည်။

စက္ကန့်အလိုက် တောင်းဆိုမှုများ

အပြိုင်အဆိုင်
ထပ်ခါထပ်ခါ
အမဲချိတ်
လမ်းခွဲကြို
streaming
ကြိုတင်ထုတ်လွှင့်ခြင်း။
မဲပေးပှဲ
epol

20
7
112
2100
1800
2250
1900
2050

50
7
190
2200
1700
2200
2000
2000

100
7
245
2200
1700
2200
2150
2100

200
7
330
2300
1750
2300
2200
2100

300
-
380
2200
1800
2400
2250
2150

400
-
410
2200
1750
2600
2000
2000

500
-
440
2300
1850
2700
1900
2212

600
-
460
2400
1800
2500
1700
2519

700
-
460
2400
1600
2490
1550
2607

800
-
460
2400
1600
2540
1400
2553

900
-
460
2300
1600
2472
1200
2567

1000
-
475
2300
1700
2485
1150
2439

1500
-
490
2400
1550
2620
900
2479

2000
-
350
2400
1400
2396
550
2200

2500
-
280
2100
1300
2453
490
2262

3000
-
280
1900
1250
2502
ကြီးမားသောပျံ့နှံ့မှု
2138

5000
-
ကြီးမားသောပျံ့နှံ့မှု
1600
1100
2519
-
2235

8000
-
-
1200
ကြီးမားသောပျံ့နှံ့မှု
2451
-
2100

10
-
-
ကြီးမားသောပျံ့နှံ့မှု
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

ဂရပ်နှင့် ဇယားမှ တစ်ပြိုင်နက် တောင်းဆိုချက် 8000 ထက်တွင် ကျွန်ုပ်တို့တွင် ကစားသူ နှစ်ဦးသာ ကျန်သည်- ကြိုတင်လမ်းခွဲ နှင့် epoll ကို တွေ့နိုင်သည်။ ဝန်ပိုလာသည်နှင့်အမျှ၊ စစ်တမ်းအခြေပြုဆာဗာသည် တိုက်ရိုက်လွှင့်ခြင်းထက် ပိုဆိုးသည်။ thread-pre-creation ဗိသုကာသည် epoll အတွက် ထိုက်တန်သော ပြိုင်ဘက်ဖြစ်သည်၊၊ Linux kernel သည် thread အများအပြားကို မည်မျှ ကောင်းမွန်စွာ အချိန်ဆွဲမည်ကို သက်သေပြပါသည်။

ZeroHTTPd အရင်းအမြစ်ကုဒ်

ZeroHTTPd အရင်းအမြစ်ကုဒ် ဒီမှာ. ဗိသုကာတစ်ခုစီအတွက် သီးခြားလမ်းညွှန်တစ်ခုရှိသည်။

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking │ ✜── main.c ├── 04_ main thread 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └── main.c ├── Makefile ├── အများသူငှာ │ ─ ├── . png └── တင်းပလိတ်များ └── ဧည့်သည်စာအုပ် └── index.html

ဗိသုကာအားလုံးအတွက် လမ်းညွှန်ခုနစ်ခုအပြင်၊ ထိပ်တန်းအဆင့်လမ်းညွှန်တွင် နောက်ထပ်နှစ်ခုရှိသည်- အများသူငှာနှင့် နမူနာပုံစံများ။ ပထမပုံတွင် index.html ဖိုင်နှင့် ပထမစခရင်ရှော့မှ ပုံပါရှိသည်။ သင်သည် အခြားဖိုင်များနှင့် ဖိုင်တွဲများကို ထိုနေရာတွင် ထားနိုင်ပြီး ZeroHTTPd သည် အဆိုပါ static ဖိုင်များကို ပြဿနာတစ်စုံတစ်ရာမရှိဘဲ လုပ်ဆောင်ပေးသင့်သည်။ ဘရောက်ဆာရှိ လမ်းကြောင်းသည် အများသူငှာ ဖိုဒါရှိ လမ်းကြောင်းနှင့် ကိုက်ညီပါက ZeroHTTPd သည် ဤလမ်းညွှန်ရှိ index.html ဖိုင်ကို ရှာဖွေသည်။ ဧည့်သည်စာအုပ်အတွက် အကြောင်းအရာကို အင်တိုက်အားတိုက်ထုတ်ပေးပါသည်။ ၎င်းတွင် ပင်မစာမျက်နှာတစ်ခုသာရှိပြီး ၎င်း၏အကြောင်းအရာသည် 'templates/guestbook/index.html' ဖိုင်ပေါ်တွင် အခြေခံထားသည်။ ZeroHTTPd သည် တိုးချဲ့မှုအတွက် ပြောင်းလဲနေသော စာမျက်နှာများကို အလွယ်တကူ ပေါင်းထည့်သည်။ အိုင်ဒီယာမှာ အသုံးပြုသူများသည် ဤလမ်းညွှန်တွင် နမူနာများကို ထည့်သွင်းနိုင်ပြီး ZeroHTTPd ကို လိုအပ်သလို တိုးချဲ့နိုင်သည်။

ဆာဗာခုနစ်ခုလုံးကို တည်ဆောက်ရန်၊ လုပ်ဆောင်ပါ။ make all ထိပ်တန်းအဆင့်လမ်းညွှန်မှ - တည်ဆောက်မှုများအားလုံးကို ဤလမ်းညွှန်တွင် ပေါ်လာပါမည်။ အကောင်ထည်ဖော်နိုင်သော ဖိုင်များသည် အများသူငှာ ရှာဖွေနေပြီး ၎င်းတို့ကို စတင်လိုက်သည့် လမ်းကြောင်းရှိ နမူနာပုံစံများ။

Linux API

ဤဆောင်းပါးစီးရီးရှိ အချက်အလက်များကို နားလည်ရန် သင်သည် Linux API ကို ကောင်းစွာနားလည်ရန် မလိုအပ်ပါ။ သို့သော်၊ ဤအကြောင်းအရာနှင့် ပတ်သက်၍ ပိုမိုဖတ်ရှုရန် အကြံပြုလိုပါသည်၊ အင်တာနက်ပေါ်တွင် ကိုးကားစရာ အရင်းအမြစ်များစွာ ရှိပါသည်။ ကျွန်ုပ်တို့သည် Linux API အမျိုးအစားများစွာကို ထိတွေ့မည်ဖြစ်သော်လည်း၊ ကျွန်ုပ်တို့၏ အဓိကအာရုံမှာ လုပ်ငန်းစဉ်များ၊ တွဲများ၊ ဖြစ်ရပ်များနှင့် ကွန်ရက်စဥ်များအပေါ်တွင် အဓိကထားလုပ်ဆောင်မည်ဖြစ်သည်။ Linux API ဆိုင်ရာ စာအုပ်များနှင့် ဆောင်းပါးများအပြင်၊ စနစ်ခေါ်ဆိုမှုများနှင့် အသုံးပြုထားသော စာကြည့်တိုက်လုပ်ဆောင်ချက်များအတွက် mana ကိုဖတ်ရန်လည်း အကြံပြုပါသည်။

စွမ်းဆောင်ရည်နှင့် အတိုင်းအတာ

စွမ်းဆောင်ရည်နှင့် ကျွမ်းကျင်ပိုင်နိုင်မှုအကြောင်း မှတ်ချက်တစ်ခု။ သီအိုရီအရတော့ သူတို့ကြားက ဆက်စပ်မှုမရှိပါဘူး။ သင့်တွင် တုံ့ပြန်မှုအချိန်မီလီစက္ကန့်အနည်းငယ်ဖြင့် ကောင်းမွန်စွာအလုပ်လုပ်နိုင်သော ဝဘ်ဝန်ဆောင်မှုတစ်ခု ရှိနိုင်သော်လည်း ၎င်းသည် အတိုင်းအတာတစ်ခုအထိ မရှိပါ။ အလားတူပင်၊ တုံ့ပြန်ရန် စက္ကန့်အနည်းငယ်ကြာသည့် စွမ်းဆောင်ရည်ညံ့ဖျင်းသော ဝဘ်အက်ပလီကေးရှင်းတစ်ခုလည်း ရှိကောင်းရှိနိုင်သော်လည်း၊ တစ်ပြိုင်နက်တည်း အသုံးပြုသူ ထောင်ပေါင်းများစွာကို ကိုင်တွယ်ရန် ဆယ်ဂဏန်းဖြင့် တိုင်းတာသည်။ သို့သော် မြင့်မားသောစွမ်းဆောင်ရည်နှင့် ကျွမ်းကျင်ပိုင်နိုင်မှုပေါင်းစပ်မှုသည် အလွန်အားကောင်းသောပေါင်းစပ်မှုတစ်ခုဖြစ်သည်။ စွမ်းဆောင်ရည်မြင့် အပလီကေးရှင်းများသည် ယေဘုယျအားဖြင့် အရင်းအမြစ်များကို လျှော့နည်းစွာ အသုံးပြုကြပြီး ဆာဗာတွင် တစ်ပြိုင်တည်း အသုံးပြုသူများကို ပိုမိုထိရောက်စွာ ဝန်ဆောင်မှုပေးကာ ကုန်ကျစရိတ်များကို လျှော့ချပေးသည်။

CPU နှင့် I/O လုပ်ဆောင်ချက်များ

နောက်ဆုံးတွင်၊ ကွန်ပျူတာတွင် I/O နှင့် CPU အတွက် ဖြစ်နိုင်ချေ နှစ်မျိုးရှိသည်။ အင်တာနက်မှတဆင့် တောင်းဆိုမှုများကို လက်ခံခြင်း (ကွန်ရက် I/O)၊ ဖိုင်များ (ကွန်ရက်နှင့် ဒစ်ခ် I/O) ဝန်ဆောင်မှုပေးခြင်း၊ ဒေတာဘေ့စ် (ကွန်ရက်နှင့် ဒစ်ခ် I/O) နှင့် ဆက်သွယ်ခြင်းတို့သည် I/O လုပ်ဆောင်ချက်များအားလုံးဖြစ်သည်။ အချို့သော ဒေတာဘေ့စ်မေးခွန်းများသည် CPU အကြိတ်အနယ်ရှိနိုင်သည် (အမျိုးအစားခွဲခြင်း၊ ပျမ်းမျှရလဒ်တစ်သန်း၊ စသည်ဖြင့်)။ ဝဘ်အပလီကေးရှင်းအများစုကို ဖြစ်နိုင်ချေအများဆုံး I/O ဖြင့် ကန့်သတ်ထားပြီး ပရိုဆက်ဆာကို စွမ်းဆောင်ရည်အပြည့်ဖြင့် အသုံးပြုခဲပါသည်။ အချို့သော I/O အလုပ်သည် CPU အများအပြားကို အသုံးပြုနေသည်ကို သင်တွေ့သောအခါ၊ ၎င်းသည် ညံ့ဖျင်းသော application architecture ၏ လက္ခဏာတစ်ခု ဖြစ်နိုင်သည်။ ၎င်းသည် CPU အရင်းအမြစ်များကို လုပ်ငန်းစဉ်စီမံခန့်ခွဲမှုနှင့် အကြောင်းအရာပြောင်းခြင်းတွင် ဖြုန်းတီးသွားသည်ဟု ဆိုလိုနိုင်သည်၊ ၎င်းသည် လုံးဝ အသုံးမဝင်ပါ။ ရုပ်ပုံလုပ်ဆောင်ခြင်း၊ အသံဖိုင်ပြောင်းလဲခြင်း သို့မဟုတ် စက်သင်ယူခြင်းကဲ့သို့သော အရာတစ်ခုခုကို လုပ်ဆောင်နေပါက အပလီကေးရှင်းသည် အားကောင်းသည့် CPU အရင်းအမြစ်များ လိုအပ်ပါသည်။ ဒါပေမယ့် Application အများစုအတွက် ဒါက ကိစ္စမရှိပါဘူး။

ဆာဗာဗိသုကာများအကြောင်း ပိုမိုလေ့လာပါ။

  1. အပိုင်း ၁- ထပ်ဆင့်ဗိသုကာပညာ
  2. ဒုတိယပိုင်း။ ခက်ရင်းဆာဗာများ
  3. အပိုင်း III ခက်ရင်းကြို ဆာဗာများ
  4. အပိုင်း IV လုပ်ဆောင်မှုအပိုင်းများပါရှိသော ဆာဗာများ
  5. အပိုင်း V။ ကြိုတင်ချည်ထားသော ဆာဗာများ
  6. အပိုင်း VI ။ Pol-based ဗိသုကာ
  7. အပိုင်း VII epol-based ဗိသုကာ

source: www.habr.com

မှတ်ချက် Add