OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။ညီလာခံမှ အစီရင်ခံစာ၏ စာသားမှတ်တမ်းကို ကျွန်ုပ်တို့ ပြန်လည်ထုတ်ဝေပါသည်။ HighLoad++ မော်စကိုမြို့အနီးရှိ Skolkovo တွင် ယမန်နှစ် နိုဝင်ဘာ ၇ ရက်မှ ၈ ရက်အထိ ကျင်းပခဲ့သည့် ၂၀၁၆။ ဗလာဒီမာ Protasov OpenResty နှင့် Lua ဖြင့် NGINX လုပ်ဆောင်ချက်ကို မည်သို့တိုးချဲ့ရမည်ကို ပြောပြသည်။

အားလုံးပဲမင်္ဂလာပါ ကျွန်တော့်နာမည်က Vladimir Protasov ပါ၊ Parallels မှာ အလုပ်လုပ်ပါတယ်။ ကိုယ့်အကြောင်း နည်းနည်းပြောပြမယ်။ ကျွန်တော့်ဘဝရဲ့ လေးပုံသုံးပုံလောက်က ကုဒ်ရေးနေတာပဲ။ ပကတိသဘောအရ ပရိုဂရမ်မာတစ်ယောက်ဖြစ်လာခဲ့တယ်၊ တစ်ခါတစ်ရံမှာ အိပ်မက်ထဲမှာ ကုဒ်တွေကို မြင်ခဲ့ရတယ်။ ဘဝ၏ လေးပုံတစ်ပုံသည် စက်မှုဖွံ့ဖြိုးတိုးတက်မှုဖြစ်ပြီး ထုတ်လုပ်မှုသို့ တိုက်ရိုက်သွားသော ကုဒ်ကို ရေးသားခြင်းဖြစ်သည်။ တချို့က သုံးပေမယ့် မသိတဲ့ကုဒ်။

ဘယ်လောက်ဆိုးခဲ့လဲ သိပါရစေ။ ကျွန်တော် ငယ်ငယ်တုန်းက ဝင်လာပြီး ဒီ terabyte databases နှစ်ခုကို ပေးတယ်။ ဤနေရာသည် လူတိုင်းအတွက် မြင့်မားသောဝန်ဖြစ်သည်။ ကွန်ဖရင့်တွေကို သွားပြီးတော့ မေးတယ် “ယောက်ျားတွေ ပြောပါ၊ မင်းမှာ ဒေတာအကြီးကြီး ရှိသလား၊ အားလုံးအေးဆေးပဲလား။ မင်းမှာ အခြေစိုက်စခန်း ဘယ်လောက်ရှိလဲ။ သူတို့က "ငါတို့မှာ 100 ဂစ်ဂါဘိုက်ရှိတယ်!" "အေး၊ 100 ဂစ်ဂါဘိုက်!" ပြီးတော့ ဖဲချပ်မျက်နှာကို သေသေသပ်သပ် ဘယ်လိုကယ်တင်ရမလဲဆိုတာ ကိုယ့်ကိုယ်ကိုယ် စဉ်းစားမိတယ်။ ဟုတ်တယ်၊ ကောင်တွေက အေးတယ်ထင်တယ်၊ ပြီးတော့ မင်းပြန်လာပြီး ဒီ multi-terabyte ဒေတာဘေ့စ်တွေနဲ့ တွေးနေတာပဲ။ ပြီးတော့ ဒါက အငယ်တန်းဖြစ်ခြင်း။ မည်ကဲ့သို့ ရိုက်သည်ကို သင် စိတ်ကူးကြည့်နိုင်ပါသလား။

ပရိုဂရမ်းမင်းဘာသာစကား 20 ကျော်ကို ငါသိတယ်။ ဒါက အလုပ်ခွင်မှာ ကြိုတွေးထားရမယ့် အရာပါ။ သူတို့က သင့်အား Erlang၊ C တွင်၊ C++ တွင်၊ Lua၊ Python တွင်၊ Ruby တွင်၊ အခြားအရာတစ်ခုခုတွင် သင့်အား ပေး၍ အားလုံးကိုဖြတ်ရပါမည်။ ယေဘူယျအားဖြင့် စွဲစွဲလန်းလန်း၊ ကိန်းဂဏန်းအတိအကျကို တွက်ချက်လို့ မရပေမယ့် 20 လောက်ရှိတဲ့ နေရာမှာ နံပါတ်ပျောက်သွားတယ်။

Parallels ဆိုတာ ဘာလဲ ၊ ငါတို့ ဘာလုပ်နေလဲ ဆိုတာကို ဒီမှာ အားလုံး သိကြတဲ့အတွက် ၊ ငါတို့ ဘယ်လောက် မိုက်လဲ ၊ ငါတို့ ဘာလုပ်နေလဲ ဆိုတာကို ငါ မပြောတော့ဘူး။ ကျွန်ုပ်တို့တွင် ကမ္ဘာတစ်ဝှမ်းရှိ ရုံးပေါင်း ၁၃ ခု၊ ဝန်ထမ်း ၃၀၀ ကျော်၊ မော်စကို၊ Tallinn နှင့် Malta တို့တွင် ဖွံ့ဖြိုးတိုးတက်မှုရှိကြောင်းသာ ပြောပြပါမည်။ ဆန္ဒရှိလျှင် ဆောင်းရာသီတွင် အေးနေပါက မော်လ်တာသို့ ပြောင်းရွှေ့နိုင်ပြီး ကျောကို နွေးထွေးရန် လိုအပ်ပါသည်။

အထူးသဖြင့်၊ ကျွန်ုပ်တို့၏ဌာနသည် Python 2 တွင် ရေးသားထားသည်။ ကျွန်ုပ်တို့သည် စီးပွားရေးလုပ်ကိုင်နေပြီး ခေတ်ဆန်သောနည်းပညာများကို မိတ်ဆက်ရန် အချိန်မရှိသောကြောင့် ကျွန်ုပ်တို့တွင် ဒုက္ခရောက်နေပါသည်။ ကျွန်ုပ်တို့တွင် Django ရှိသည်၊ အရာအားလုံးရှိသောကြောင့်၊ ကျွန်ုပ်တို့သည် ပိုလျှံသောပစ္စည်းများကိုယူ၍ လွှင့်ပစ်လိုက်သည်။ MySQL၊ Redis နှင့် NGINX တို့လည်းဖြစ်သည်။ ငါတို့မှာ တခြားအမိုက်စားအရာတွေ အများကြီးရှိတယ်။ ငါတို့မှာ MongoDB ရှိတယ်၊ ငါတို့မှာ လည်ပတ်နေတဲ့ ယုန်တွေရှိတယ်၊ ငါတို့မှာ ဘာမှမရှိဘူး၊ ဒါပေမယ့် ငါ့မှာမဟုတ်ဘူး၊ ငါမလုပ်ဘူး။

OpenResty

ကိုယ့်အကြောင်းကိုယ်ပြောပြတယ်။ ဒီနေ့ပြောမယ့်အကြောင်းအရာကို ကြည့်လိုက်ရအောင်။

  • OpenResty ဆိုတာ ဘာလဲ၊ အဲဒါကို ဘာနဲ့စားတာလဲ။
  • ကျွန်ုပ်တို့တွင် Python၊ NodeJS၊ PHP၊ Go နှင့် လူတိုင်းနှစ်သက်သည့် အခြားအမိုက်စားအရာများ ရှိသောအခါ ဘီးကို အဘယ်ကြောင့် ပြန်လည်တီထွင်သနည်း။
  • နှင့် လက်တွေ့ဘဝ ဥပမာအချို့။ အစီရင်ခံစာကို ၃.၅ နာရီကြာအောင် ဖြတ်တောက်ထားရတာကြောင့် ဥပမာအနည်းငယ်ရှိပါမယ်။

OpenResty သည် NGINX ဖြစ်သည်။ သူ့အား ကျေးဇူးတင်စွာဖြင့်၊ ကျွန်ုပ်တို့တွင် ကောင်းမွန်ပြည့်စုံသော ဝဘ်ဆာဗာတစ်ခု ရှိသည်၊ ကောင်းမွန်စွာ ရေးသားထားပြီး၊ ၎င်းသည် မြန်ဆန်စွာ အလုပ်လုပ်ပါသည်။ ထုတ်လုပ်မှုမှာ အများစုဟာ NGINX ကို အသုံးပြုတယ်လို့ ထင်ပါတယ်။ သူက ခပ်သွက်သွက်နဲ့ အေးအေးဆေးဆေးဆိုတာ အားလုံးသိပါတယ်။ ၎င်းတို့သည် ၎င်းတွင် အေးမြသော synchronous I/O ကို ပြုလုပ်ထားသောကြောင့် Python တွင် စက်ဘီးစီးထားသည့်အတိုင်း မည်သည့်အရာကိုမျှ စက်ဘီးစီးရန် မလိုအပ်ပါ။ Gevent က အေးတယ်၊ ကောင်းတယ်၊ ဒါပေမယ့် မင်း C-code ရေးပြီး gevent မှာ တစ်ခုခုမှားနေရင်၊ အမှားရှာပြင်တာ ရူးသွားလိမ့်မယ်။ ကျွန်တော့်မှာ အတွေ့အကြုံရှိခဲ့တယ်- အဲဒီမှာ ဘာမှားသွားလဲဆိုတာ အဖြေရှာဖို့ နှစ်ရက်လုံးလုံး အချိန်ယူခဲ့ရပါတယ်။ အကယ်၍ တစ်စုံတစ်ယောက်သည် လွန်ခဲ့သည့် ရက်သတ္တပတ်အနည်းငယ်က မတူးခဲ့ဘဲ ပြဿနာကို တွေ့ရှိပြီး အင်တာနက်ပေါ်တွင် ရေးခဲ့ကာ Google က ၎င်းကို မတွေ့ခဲ့ပါက ကျွန်ုပ်တို့ လုံးဝရူးသွပ်သွားမည်ဖြစ်သည်။

NGINX သည် caching နှင့် static content များကို လုပ်ဆောင်ပြီးဖြစ်သည်။ တစ်နေရာရာမှာ နှောင့်နှေးမနေစေဖို့၊ တစ်နေရာရာမှာ ဖော်ပြချက်တွေကို မဆုံးရှုံးစေဖို့အတွက် လူသားဆန်စွာပြုလုပ်နည်းကို သင်စိုးရိမ်စရာမလိုပါဘူး။ Nginx သည်အသုံးပြုရန်အလွန်အဆင်ပြေသည်၊ သင်ဘာယူရမည်ကိုစဉ်းစားရန်မလိုအပ်ပါ - WSGI၊ PHP-FPM၊ Gunicorn၊ Unicorn။ Nginx ကို စီမံခန့်ခွဲသူများထံ ပေးအပ်ခဲ့ပြီး ၎င်းတို့နှင့် မည်သို့လုပ်ဆောင်ရမည်ကို သိရှိထားသည်။ Nginx သည် တောင်းဆိုချက်များကို စနစ်တကျ လုပ်ဆောင်သည်။ ဒီအကြောင်း နည်းနည်းကြာမှ ပြောမယ်။ အတိုချုပ်အားဖြင့်၊ သူတောင်းဆိုမှုကိုလက်ခံလိုက်သည့်အချိန်၊ လုပ်ဆောင်ချိန်နှင့် အသုံးပြုသူအား အကြောင်းအရာကို ပေးသောအခါတွင် အဆင့်တစ်ခုရှိသည်။

Nginx သည် မိုက်သည်၊ သို့သော် ပြဿနာတစ်ခု ရှိသည်- ၎င်းသည် စိတ်ကြိုက်ပြင်ဆင်နိုင်သော်လည်း ယောက်ျားများသည် config ထဲသို့ တွန်းပို့လိုက်သော အေးမြသောအင်္ဂါရပ်များအားလုံးနှင့်ပင် လိုက်လျောညီထွေမဖြစ်နိုင်ပါ။ ဒီစွမ်းအားက မလုံလောက်ဘူး။ ထို့ကြောင့် တစ်ချိန်က Taobao မှ ယောက်ျားများသည် လွန်ခဲ့သော ရှစ်နှစ်ခန့်က Lua ကို ၎င်းတွင် တည်ဆောက်ခဲ့သည်ဟု ကျွန်တော်ထင်ပါသည်။ သူဘာပေးတာလဲ။

  • အရွယ်. သေးငယ်သည်။ LuaJIT သည် memory overhead ၏ 100-200 ကီလိုဘိုက်ဝန်းကျင်နှင့် စွမ်းဆောင်ရည်အနည်းဆုံး ပေးပါသည်။
  • အရှိန်. LuaJIT စကားပြန်သည် အခြေအနေများစွာတွင် C နှင့် နီးကပ်နေပြီး အချို့အခြေအနေများတွင် Java ကို ရှုံးသည်၊ အချို့တွင် ၎င်းကို ကျော်သွားနိုင်သည်။ အချိန်အတော်ကြာအောင်၊ အမိုက်ဆုံး JIT compiler သည် အနုပညာ၏ အဆင့်အတန်းဟု ယူဆခဲ့သည်။ အခု ပိုအေးတာတွေရှိပေမယ့် ဥပမာ V8 ကိုပဲ အရမ်းလေးတယ်။ အချို့သော JS စကားပြန်များနှင့် Java HotSpot သည် အချို့နေရာများတွင် ပိုမြန်သော်လည်း အချို့နေရာများတွင် ဆုံးရှုံးနေဆဲဖြစ်သည်။
  • သင်ယူရန်လွယ်ကူသည်။. သင့်တွင် Perl codebase တစ်ခုရှိပြီး သင် Booking မလုပ်ပါက Perl ပရိုဂရမ်မာများကို သင်တွေ့လိမ့်မည်မဟုတ်ပါ။ သူတို့မရှိသောကြောင့်၊ သူတို့အားလုံးကို သိမ်းသွားခဲ့ပြီး သင်ကြားရန်မှာ ရှည်လျားခက်ခဲသည်။ အခြားအရာတစ်ခုခုအတွက် ပရိုဂရမ်မာများကို လိုချင်ပါက၊ ၎င်းတို့ကို ပြန်လည်လေ့ကျင့်ရန် သို့မဟုတ် ရှာဖွေရန် လိုအပ်ပါသည်။ Lua ကိစ္စတွင်၊ အရာအားလုံးသည်ရိုးရှင်းသည်။ Lua ကို သုံးရက်အတွင်း မည်သည့် အငယ်တန်းမဆို သင်ယူနိုင်ပါသည်။ အဲဒါကို အဖြေထုတ်ဖို့ နှစ်နာရီလောက် အချိန်ယူရတယ်။ နောက်နှစ်နာရီကြာတော့ ထုတ်လုပ်မှုမှာ ကုဒ်ရေးနေပြီ။ တစ်ပတ်ခန့်အကြာတွင် သူသည် ထုတ်လုပ်ရေးသို့ တိုက်ရိုက်သွားကာ ထွက်ခွာသွားခဲ့သည်။

ရလဒ်အနေဖြင့်၊ ၎င်းသည်ဤပုံရသည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ဒီမှာ အများကြီးရှိတယ်။ OpenResty သည် lush နှင့် engins နှစ်ခုလုံးတွင် module များစွာကို စုစည်းထားသည်။ ပြီးတော့ မင်းမှာ အကုန်အဆင်သင့်ရှိတယ် - တပ်ဖြန့်ပြီး အလုပ်လုပ်တယ်။

ဥပမာ

စာသားတွေ လုံလောက်ပါပြီ၊ ကုဒ်ကို ဆက်သွားကြရအောင်။ ဒါကတော့ Hello World လေးပါ။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

အဲဒါဘာလဲ? ဒါက အင်ဂျင်တည်နေရာပါ။ ကျွန်ုပ်တို့ စိတ်မပူပါနှင့်၊ ကျွန်ုပ်တို့၏ကိုယ်ပိုင်လမ်းကြောင်းကို မရေးပါ၊ အဆင်သင့်လုပ်ထားသည့်တစ်ခုကို မယူပါ - ကျွန်ုပ်တို့တွင် ၎င်းကို NGINX တွင်ရှိပြီး၊ ကျွန်ုပ်တို့သည် ကောင်းမွန်ပြီး ပျင်းရိစွာ နေထိုင်ပါသည်။

content_by_lua_block Lua ဇာတ်ညွှန်းကို အသုံးပြု၍ ကျွန်ုပ်တို့သည် အကြောင်းအရာကို ဝန်ဆောင်မှုပေးနေသည်ဟု ဆိုထားသည့် ဘလောက်တစ်ခုဖြစ်သည်။ ကျွန်ုပ်တို့သည် အင်ဂျင်ပြောင်းလဲမှုကို ယူပါသည်။ remote_addr အထဲသို့ ချော်သွား၏။ string.format. ဒါက အတူတူပါပဲ။ sprintfLua ၌သာ၊ မှန်သည်သာ။ ပြီးတော့ ကျွန်တော်တို့က client ကိုပေးတယ်။

ရလဒ်အနေဖြင့်၊ ၎င်းသည်ဤကဲ့သို့ဖြစ်လိမ့်မည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ဒါပေမယ့် တကယ့်ကမ္ဘာကို ပြန်ရောက်သွားတယ်။ ထုတ်လုပ်ရေးတွင် Hello World ကို မည်သူမျှ အသုံးမပြုပါ။ ကျွန်ုပ်တို့၏အက်ပ်လီကေးရှင်းသည် အများအားဖြင့် ဒေတာဘေ့စ် သို့မဟုတ် အခြားတစ်နေရာသို့ သွားလေ့ရှိပြီး တုံ့ပြန်မှုတစ်ခုအတွက် အချိန်အများစုကို စောင့်မျှော်နေပါသည်။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ထိုင်စောင့်နေရုံပါပဲ။ သိပ်မကောင်းဘူး။ အသုံးပြုသူ 100.000 ရောက်လာသောအခါ၊ ကျွန်ုပ်တို့အတွက် အလွန်ခက်ခဲပါသည်။ ထို့ကြောင့်၊ ဥပမာတစ်ခုအနေဖြင့်ရိုးရှင်းသော application ကိုသုံးကြပါစို့။ ဥပမာ၊ ကြောင်ရုပ်ပုံတွေကို ရှာကြည့်မယ်။ ကျွန်ုပ်တို့သာလျှင် ရှာဖွေရုံသာမက၊ ကျွန်ုပ်တို့သည် သော့ချက်စာလုံးများကို ချဲ့ထွင်မည်ဖြစ်ပြီး၊ အသုံးပြုသူသည် "ကြောင်များ" ကို ရှာဖွေပါက ကြောင်များ၊ ပျော့ပျောင်းမှုများ အစရှိသည်တို့ကို တွေ့ရှိမည်ဖြစ်သည်။ ပထမဦးစွာ backend တွင်တောင်းဆိုမှုဒေတာကိုရယူရန်လိုအပ်သည်။ ဤပုံသည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

မျဉ်းနှစ်ကြောင်းသည် သင့်အား GET parameters များကို ကောက်ယူနိုင်သည်၊ ရှုပ်ထွေးမှုများမရှိပါ။ ထို့နောက် ဥပမာအားဖြင့်၊ ကျွန်ုပ်တို့သည် ပုံမှန် SQL query ကို အသုံးပြု၍ keyword နှင့် extension ဖြင့် table တစ်ခုပါရှိသော database တစ်ခုမှ ဤအချက်အလက်ကို ရယူပါသည်။ အရာအားလုံးရိုးရှင်းပါသည်။ ဤပုံသည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

စာကြည့်တိုက်ကို ကျွန်တော်တို့ ချိတ်ဆက်ပေးတယ်။ resty.mysqlအစုံပါပြီးသားပါ။ ကျွန်ုပ်တို့သည် မည်သည့်အရာကိုမျှ ထည့်သွင်းရန် မလိုအပ်ပါ၊ အားလုံးအဆင်သင့်ဖြစ်ပါပြီ။ SQL query တစ်ခုကို ချိတ်ဆက်နည်းနှင့် ပြုလုပ်နည်းကို သတ်မှတ်ပါ-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

နည်းနည်းကြောက်စရာကောင်းပေမယ့် အလုပ်လုပ်တယ်။ ဤတွင် 10 ကန့်သတ်ချက်ဖြစ်သည်။ မှတ်တမ်း 10 ခုကို ဆွဲထုတ်ပြီး ပျင်းတယ်၊ နောက်ထပ် မပြချင်တော့ဘူး။ SQL မှာ ကန့်သတ်ချက်ကို မေ့သွားတယ်။

ထို့နောက် မေးခွန်းအားလုံးအတွက် ပုံများကို ကျွန်ုပ်တို့ ရှာတွေ့သည်။ ကျွန်ုပ်တို့သည် တောင်းဆိုချက်များစွာကို စုဆောင်းပြီး Lua ဟုခေါ်သော ဇယားတစ်ခုတွင် ဖြည့်စွက်ပါ။ reqs, လုပ်ပါ။ ngx.location.capture_multi.

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

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

ကျွန်ုပ်တို့သည် ပျင်းရိပြီး HTTP ကိုင်တွယ်ခြင်းနှင့် ကက်ရှ်ချခြင်းတို့ကို မရေးချင်သောကြောင့်၊ ကျွန်ုပ်တို့သည် NGINX ကို ကျွန်ုပ်တို့အတွက် အရာရာတိုင်းကို လုပ်ဆောင်စေမည်ဖြစ်သည်။ မင်းမြင်တဲ့အတိုင်း တောင်းစရာရှိတယ်။ url/fetch၊ သူက ဒီမှာ

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ကျွန်ုပ်တို့သည် ရိုးရှင်းပါသည်။ proxy_passကက်ရှ်လုပ်ရမည့်နေရာ၊ ၎င်းကို မည်သို့ပြုလုပ်ရမည်ကို သတ်မှတ်ပါ၊ ကျွန်ုပ်တို့အတွက် အရာအားလုံး အဆင်ပြေပါသည်။

ဒါပေမယ့် ဒါက မလုံလောက်သေးပါဘူး၊ ကျွန်ုပ်တို့ဟာ သုံးစွဲသူကို ဒေတာကို ပေးဖို့လိုအပ်ပါသေးတယ်။ အရိုးရှင်းဆုံးစိတ်ကူးမှာ အရာအားလုံးကို JSON သို့ လွယ်ကူစွာ၊ စာကြောင်းနှစ်ကြောင်းဖြင့် စီစဥ်ရန်ဖြစ်သည်။ ကျွန်ုပ်တို့သည် Content-Type ပေးသည်၊ JSON ပေးသည်။

ဒါပေမယ့် အခက်အခဲတစ်ခုရှိပါတယ်- အသုံးပြုသူက JSON ကို မဖတ်ချင်ပါဘူး။ ရှေ့ဆုံး developer များကို ဆွဲဆောင်ရန် လိုအပ်ပါသည်။ တစ်ခါတလေမှာ အစပိုင်းမှာ လုပ်သလိုမျိုး မခံစားရပါဘူး။ ဟုတ်ကဲ့၊ SEO ကျွမ်းကျင်သူတွေက ပုံတွေကို ရှာနေတယ်ဆိုရင် သူတို့က ဂရုမစိုက်ဘူးလို့ ပြောပါလိမ့်မယ်။ ၎င်းတို့ကို အကြောင်းအရာအချို့ ပေးမည်ဆိုပါက၊ ကျွန်ုပ်တို့၏ ရှာဖွေရေးအင်ဂျင်များသည် မည်သည့်အရာကိုမျှ အညွှန်းမရှိဟု ဆိုလိမ့်မည်။

အဲဒါနဲ့ ဘာလုပ်ရမလဲ။ ဟုတ်ပါတယ် user ကို HTML ပေးမယ်။ လက်ကိုင်များဖြင့် ထုတ်လုပ်ခြင်းသည် အမှားအယွင်းမရှိ၊ ထို့ကြောင့် ကျွန်ုပ်တို့သည် တင်းပလိတ်များကို အသုံးပြုလိုပါသည်။ ဒီအတွက် စာကြည့်တိုက်ရှိတယ်။ lua-resty-template.

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ကြောက်စရာကောင်းတဲ့ OPM စာလုံးသုံးလုံးကို သင်မြင်ဖူးပါလိမ့်မယ်။ OpenResty သည် ၎င်း၏ကိုယ်ပိုင် ပက်ကေ့ဂျ်မန်နေဂျာပါရှိပြီး၊ အထူးသဖြင့် သင်သည် မတူညီသော module အများအပြားကို ထည့်သွင်းနိုင်သည်၊ lua-resty-template. ၎င်းသည် Django တင်းပလိတ်များနှင့် ဆင်တူသော ရိုးရိုးတန်းပလိတ်အင်ဂျင်ဖြစ်သည်။ အဲဒီမှာ ကုဒ်ရေးပြီး variable အစားထိုးလုပ်နိုင်ပါတယ်။

ရလဒ်အနေဖြင့်၊ အရာအားလုံးသည် ဤကဲ့သို့ဖြစ်နေလိမ့်မည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

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

အရာအားလုံးက အေးဆေးပါပဲ၊ ဒါပေမယ့် ကျွန်တော်တို့ ဖွံ့ဖြိုးတိုးတက်နေပြီး သုံးစွဲသူတွေကို မပြချင်သေးပါဘူး။ ခွင့်ပြုချက်တစ်ခုလုပ်ရအောင်။ ဒါကိုလုပ်ဖို့၊ NGINX က OpenResty ရဲ့သတ်မှတ်ချက်တွေနဲ့ တောင်းဆိုချက်ကို ဘယ်လိုကိုင်တွယ်မလဲဆိုတာ ကြည့်ကြရအောင်။

  • ပထမအဆင့် - ဝင်ရောက်ခွင့်သုံးစွဲသူက အခုမှလာတဲ့အခါ၊ ခေါင်းစီးတွေ၊ IP လိပ်စာအလိုက်၊ တခြားဒေတာတွေက သူ့ကိုကြည့်တယ်။ မကြိုက်ရင် ချက်ချင်းဖြတ်လို့ရပါတယ်။ ခွင့်ပြုချက်အတွက် ၎င်းကိုသုံးနိုင်သည်၊ သို့မဟုတ် တောင်းဆိုမှုများစွာကို လက်ခံရရှိပါက၊ ၎င်းတို့ကို ဤအဆင့်တွင် အလွယ်တကူဖြတ်နိုင်သည်။
  • ပြန်လည်ရေးသား. တောင်းဆိုချက်ဒေတာအချို့ကို ပြန်လည်ရေးသားခြင်း။
  • အကြောင်းအရာ. ကျွန်ုပ်တို့သည် သုံးစွဲသူအား အကြောင်းအရာကို ပေးပါသည်။
  • header filter. တုံ့ပြန်မှု ခေါင်းစီးများကို ပြောင်းပါ။ ငါတို့သုံးတယ်။ proxy_passအသုံးပြုသူထံ မပေးအပ်မီ ခေါင်းစီးအချို့ကို ကျွန်ုပ်တို့ ပြန်လည်ရေးသားနိုင်ပါသည်။
  • body filter. ကျွန်ုပ်တို့သည် ခန္ဓာကိုယ်ကို ပြောင်းလဲနိုင်သည်။
  • တုံး - သစ်ခုတ်ခြင်း။ နောက်ထပ်အလွှာမပါဘဲ elasticsearch တွင်မှတ်တမ်းများရေးနိုင်သည်။

ကျွန်ုပ်တို့၏ ခွင့်ပြုချက်သည် ဤကဲ့သို့ ဖြစ်သည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

အဲဒါကို ငါတို့ထည့်မယ်။ locationရှေ့တွင်ဖော်ပြထားသော၊ နှင့်အောက်ပါကုဒ်ကိုထိုနေရာတွင်ထည့်ပါ။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ကျွန်ုပ်တို့တွင် ကွတ်ကီး တိုကင်ရှိမရှိကို ကြည့်ရန်။ မဟုတ်ရင် ကျနော်တို့က ခွင့်ပြုချက်ပေးတယ်။ အသုံးပြုသူများသည် လိမ္မာပြီး ကွတ်ကီး တိုကင်ကို သတ်မှတ်ရန် လိုအပ်ကြောင်း ခန့်မှန်းနိုင်သည်။ ထို့ကြောင့် Redis တွင်လည်း ထည့်ထားပါမည်။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

Redis နှင့်အလုပ်လုပ်ရန်အတွက်ကုဒ်သည် အလွန်ရိုးရှင်းပြီး အခြားဘာသာစကားများနှင့်မတူပါ။ တစ်ချိန်တည်းမှာပင်၊ အဝင်/အထွက်အားလုံး၊ ဟိုမှာ ဘာရှိလဲ၊ ဒီမှာ ဘာရှိလဲ၊ အဲဒါက ပိတ်ဆို့နေတာမဟုတ်ဘူး။ synchronous code ရေးပါက၊ ၎င်းသည် asynchronously အလုပ်လုပ်ပါသည်။ ကုသိုလ်ကောင်းမှုဖြင့်သာ ကောင်းစွာပြု၏။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ခွင့်ပြုချက်ကို ကိုယ်တိုင်လုပ်ကြပါစို့။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

တောင်းဆိုချက်ကိုယ်ထည်ကို ဖတ်ဖို့လိုတယ်လို့ ပြောတယ်။ ကျွန်ုပ်တို့သည် POST အကြောင်းပြချက်များကို လက်ခံရရှိသည်၊ အကောင့်ဝင်ခြင်းနှင့် စကားဝှက်မှန်ကန်ကြောင်း စစ်ဆေးပါ။ မမှန်ရင် ခွင့်ပြုချက်တင်တယ်။ ၎င်းတို့မှန်လျှင် ကျွန်ုပ်တို့သည် တိုကင်ကို Redis သို့ ရေးလိုက်ပါသည်။

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

cookie ကို သတ်မှတ်ရန် မမေ့ပါနှင့်၊ ၎င်းကို စာကြောင်းနှစ်ကြောင်းဖြင့်လည်း လုပ်ဆောင်သည်-

OpenResty- NGINX ကို ပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

ဥပမာက ရိုးရှင်းတယ်၊ မှန်းဆတယ်။ ဟုတ်ပါတယ်၊ ကျွန်ုပ်တို့သည် ကြောင်များကို လူတို့အားပြသသည့် ဝန်ဆောင်မှုကို ပြုလုပ်မည်မဟုတ်ပါ။ ဒါပေမယ့် ငါတို့ကို ဘယ်သူသိလဲ။ ဒီတော့ ထုတ်လုပ်မှုမှာ ဘာတွေလုပ်ဆောင်နိုင်လဲဆိုတာကို လေ့လာကြည့်ရအောင်။

  • ရိုးရှင်းသော နောက်ခံဖိုင်. တစ်ခါတစ်ရံတွင် ကျွန်ုပ်တို့သည် backend သို့ ဒေတာအနည်းငယ်ကို ပေးရန်လိုအပ်သည်- တစ်နေရာရာတွင် ကျွန်ုပ်တို့သည် ရက်စွဲကို အစားထိုးရန် လိုအပ်သည်၊ အချို့နေရာများတွင် စာရင်းတစ်မျိုးကို ပြသရန် လိုအပ်သည်၊ ယခု site ပေါ်တွင် အသုံးပြုသူမည်မျှရှိသည်ကို ပြောပါ၊ ကောင်တာ သို့မဟုတ် စာရင်းဇယားပေါ်တွင် ဝက်အူလိုက်ပါ။ တစ်ခုခုတော့ သေးသေးလေး။ အနည်းငယ်မျှသာသောအပိုင်းများကို အလွန်လွယ်ကူစွာ ပြုလုပ်နိုင်သည်။ ဒါက မြန်မယ်၊ လွယ်မယ်၊ အရမ်းကောင်းလိမ့်မယ်။
  • ဒေတာကြိုတင်လုပ်ဆောင်ခြင်း။. တစ်ခါတစ်ရံ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏စာမျက်နှာတွင် ကြော်ငြာများကို မြှုပ်နှံလိုပြီး API တောင်းဆိုမှုများဖြင့် ဤကြော်ငြာများကို ယူပါသည်။ ဒီမှာလုပ်ရတာ အရမ်းလွယ်တယ်။ ခက်ခက်ခဲခဲ လုပ်ဆောင်နေပြီးဖြစ်သည့် ကျွန်ုပ်တို့၏ backend ကို မတင်ပါ။ ဤနေရာတွင် ကောက်ယူပြီး စုဆောင်းနိုင်ပါသည်။ ကျွန်ုပ်တို့သည် အချို့သော JS ကို ပုံသွင်းနိုင်သည် သို့မဟုတ် ဆန့်ကျင်ဘက်အနေနှင့် ၎င်းကို အသုံးပြုသူအား မပေးအပ်မီ တစ်စုံတစ်ခုကို ကပ်ဖြုတ်ပြီး ကြိုတင်လုပ်ဆောင်နိုင်သည်။
  • မိုက်ခရိုဝန်ဆောင်မှုအတွက် မျက်နှာစာ. ဒါက အရမ်းကောင်းတဲ့ ကိစ္စပါ၊ ကျွန်တော် အကောင်အထည်ဖော်လိုက်တာ။ အဲဒီမတိုင်ခင်က နိုင်ငံတွင်းတရားဝင်အဖွဲ့အစည်းတွေရဲ့ ထက်ဝက်လောက်ကို သတင်းပို့တဲ့ အီလက်ထရွန်းနစ်သတင်းပို့တဲ့ Tenzor မှာ အလုပ်လုပ်ခဲ့တယ်။ ကျွန်ုပ်တို့သည် ဝန်ဆောင်မှုတစ်ခုကို ပြုလုပ်ထားပြီး၊ တူညီသော ယန္တရားတစ်ခုကို အသုံးပြု၍ အရာများစွာကို လမ်းကြောင်းပြခြင်း၊ ခွင့်ပြုချက်နှင့် အခြားအရာများကို လုပ်ဆောင်ပါသည်။
    OpenResty သည် အရာခပ်သိမ်းကို တစ်ခုတည်းဝင်ရောက်ခွင့်နှင့် မျက်နှာပြင်တစ်ခုတည်းကို ပံ့ပိုးပေးရန်အတွက် သင်၏ မိုက်ခရိုဝန်ဆောင်မှုများအတွက် ကော်အဖြစ် အသုံးပြုနိုင်သည်။ သင့်တွင် Node.js ရှိသည်ဆိုသော ပုံစံဖြင့် microservices များကို ရေးသားနိုင်သောကြောင့်၊ သင့်တွင် PHP ရှိသည်၊ သင့်တွင် ဤနေရာတွင် Python ရှိသည်၊ ဤနေရာတွင် Erlang တစ်ခုခုရှိသည်၊ တူညီသောကုဒ်ကို နေရာတိုင်းတွင် ထပ်မရေးချင်ကြောင်း ကျွန်ုပ်တို့ နားလည်ပါသည်။ ထို့ကြောင့် OpenResty သည် ရှေ့တွင် ပလပ်ထိုးနိုင်သည်။
  • စာရင်းအင်းနှင့် ခွဲခြမ်းစိတ်ဖြာမှု. အများအားဖြင့် NGINX သည် ဝင်ပေါက်တွင်ရှိပြီး တောင်းဆိုမှုအားလုံးသည် ၎င်းကိုဖြတ်သန်းသွားပါသည်။ ဒီနေရာက စုဆောင်းရတာ အရမ်းအဆင်ပြေတယ်။ တစ်ခုခုကို သင်ချက်ချင်းတွက်ချက်ပြီး တစ်နေရာရာသို့ ပစ်ချနိုင်သည်၊ ဥပမာ၊ တူညီသော Elasticsearch၊ Logstash သို့မဟုတ် ၎င်းကို မှတ်တမ်းတွင်ရေးပြီး တစ်နေရာသို့ ပေးပို့နိုင်သည်။
  • Multi-User စနစ်များ. ဥပမာ- အွန်လိုင်းဂိမ်းတွေက အရမ်းကောင်းတယ်။ ယနေ့ Cape Town ရှိ Alexander Gladysh သည် OpenResty ကို အသုံးပြု၍ များစွာသောကစားသူဂိမ်းတစ်ခုကို လျင်မြန်စွာ နမူနာယူနည်းကို ပြောပြပါမည်။
  • တောင်းဆိုချက် စစ်ထုတ်ခြင်း (WAF). ယခုအခါတွင် ဝဘ်အက်ပလီကေးရှင်း Firewalls အမျိုးမျိုးကို ပြုလုပ်ရန် ခေတ်ဆန်နေပြီဖြစ်ပြီး ၎င်းတို့ကို ပံ့ပိုးပေးသည့် ဝန်ဆောင်မှုများစွာရှိသည်။ OpenResty ၏အကူအညီဖြင့်၊ သင်သည် သင့်လိုအပ်ချက်များနှင့်အညီ တောင်းဆိုမှုများကို ရိုးရှင်းလွယ်ကူစွာ စစ်ထုတ်မည့် ဝဘ်အက်ပလီကေးရှင်း firewall တစ်ခုဖြစ်အောင် ပြုလုပ်နိုင်သည်။ အကယ်၍ သင့်တွင် Python ရှိပါက၊ PHP သည် သင့်အား ကွန်ဆိုးလ်မှ မည်သည့်နေရာတွင်မှ ပေါက်ဖွားခြင်းမရှိပါက ၎င်းကို သေချာပေါက် ထည့်သွင်းမည်မဟုတ်ကြောင်း သင်နားလည်ပါသည်။ သင့်တွင် MySQL နှင့် Python ရှိသည်ကို သင်သိပါသည်။ ဖြစ်နိုင်သည်မှာ၊ ၎င်းတို့သည် လမ်းကြောင်းကူးခြင်းတစ်မျိုးမျိုးကို လုပ်ဆောင်ပြီး ဒေတာဘေ့စ်ထဲသို့ တစ်ခုခုကို ထိုးသွင်းရန် ကြိုးစားနိုင်သည်။ ထို့ကြောင့် သင်သည် အသုံးမကျသော တောင်းဆိုမှုများကို လျင်မြန်ပြီး ဈေးပေါပေါဖြင့် ရှေ့တွင် စစ်ထုတ်နိုင်ပါသည်။
  • ရပ်ရွာ။ OpenResty သည် NGINX ကိုအခြေခံသောကြောင့်၊ ၎င်းတွင်အပိုဆုတစ်ခုရှိသည်။ NGINX အသိုင်းအဝိုင်း. ၎င်းသည် အလွန်ကြီးမားပြီး ပထမဦးစွာ သင်ရရှိမည့်မေးခွန်းများစွာကို NGINX အသိုင်းအဝိုင်းမှ အဖြေပေးထားပြီးဖြစ်သည်။

    Lua developer များ. မနေ့က HighLoad ++ သင်တန်းကို လာလည်တဲ့ သူတွေနဲ့ စကားပြောပြီး Tarantool ကိုပဲ Lua လို့ ရေးထားတာ ကြားတယ်။ ဒီလိုမဟုတ်ပါဘူး၊ တော်တော်များများကို Lua နဲ့ရေးထားတယ်။ ဥပမာများ- OpenResty၊ Prosody XMPP ဆာဗာ၊ Love2D ဂိမ်းအင်ဂျင်၊ Lua ကို Warcraft နှင့် အခြားနေရာများတွင် ဇာတ်ညွှန်းရေးသားထားသည်။ Lua developer အများအပြားရှိပြီး ၎င်းတို့တွင် ကြီးမားပြီး တုံ့ပြန်မှုရှိသော အသိုက်အဝန်းတစ်ခုရှိသည်။ ကျွန်ုပ်၏ Lua မေးခွန်းအားလုံးကို နာရီအနည်းငယ်အတွင်း အဖြေပေးခဲ့ပါသည်။ စာပို့စာရင်းမှာ စာရေးတဲ့အခါ မိနစ်အနည်းငယ်အတွင်းမှာ အဖြေတွေအများကြီးရှိနေပြီ၊ သူတို့က ဘာနဲ့ ဘယ်လို၊ ဘာလဲဆိုတာ ဖော်ပြတယ်။ ကောင်းလိုက်တာ။ ကံမကောင်းစွာပဲ၊ ထိုသို့သော ရိုးသားသော အသိုင်းအဝိုင်းသည် နေရာတိုင်းတွင် မရှိပါ။
    OpenResty တွင် GitHub တွင် တစ်ခုခုပျက်သွားပါက ပြဿနာတစ်ခုကို သင်ဖွင့်နိုင်သည်။ Google Groups တွင် အထွေထွေပြဿနာများ ဆွေးနွေးနိုင်သည့် စာရင်းတစ်ခု ရှိပြီး တရုတ်လို စာပို့စာရင်းပါရှိသည် - သင်ဘယ်တော့မှ မသိပါ၊ အင်္ဂလိပ်စကား မပြောတတ်သော်လည်း တရုတ်စကား တတ်ကျွမ်းပါသည်။

ရလဒ်များကို

  • OpenResty သည် အလွန်အဆင်ပြေသော ဝဘ်ဘောင်တစ်ခုဖြစ်ကြောင်း ကျွန်ုပ်တင်ပြနိုင်မည်ဟု မျှော်လင့်ပါသည်။
  • ကုဒ်သည် ကျွန်ုပ်တို့ရေးသားသည့်အရာနှင့် ဆင်တူသောကြောင့်၊ ၎င်းတွင် ဝင်ရောက်မှုအဆင့်နိမ့်သည်၊ ဘာသာစကားသည် အလွန်ရိုးရှင်းပြီး အနည်းငယ်မျှသာဖြစ်သည်။
  • ၎င်းသည် ပြန်ခေါ်ခြင်းမရှိဘဲ အညီအမျှ I/O ကို ပံ့ပိုးပေးသည်၊ တစ်ခါတစ်ရံ NodeJS တွင် ရေးနိုင်သကဲ့သို့ ကျွန်ုပ်တို့တွင် ခေါက်ဆွဲများ ရှိမည်မဟုတ်ပါ။
  • ကျွန်ုပ်တို့သည် မှန်ကန်သော module နှင့် ကျွန်ုပ်တို့၏ကုဒ်ပါသော NGINX ကိုသာ လိုအပ်ပြီး အရာအားလုံးချက်ချင်းအလုပ်လုပ်သောကြောင့် ၎င်းတွင် လွယ်ကူစွာအသုံးချနိုင်သောကြောင့်ဖြစ်သည်။
  • ကြီးမားပြီး တုံ့ပြန်မှုရှိသော အသိုက်အဝန်း။

လမ်းကြောင်းဘယ်လို ပြီးသွားတယ်ဆိုတာ အတိအကျ မပြောခဲ့ဘူး၊ တော်တော်ရှည်တဲ့ ဇာတ်လမ်းဖြစ်သွားတယ်။

ХпасийОСавниПанио!

ဗွီဒီယိုဖွင့်ပါ

Vladimir Protasov - OpenResty- NGINX ကို ပြီးပြည့်စုံသော အပလီကေးရှင်းဆာဗာအဖြစ် ပြောင်းလဲခြင်း။

source: www.habr.com

မှတ်ချက် Add