අපි සම්මන්ත්රණයෙන් වාර්තාවේ පිටපත නැවත ප්රකාශයට පත් කරන්නෙමු 2016, පසුගිය වසරේ නොවැම්බර් 7-8 දිනවල මොස්කව් අසල Skolkovo හිදී පැවැත්විණි. OpenResty සහ Lua සමඟ NGINX ක්රියාකාරිත්වය දිගු කරන්නේ කෙසේදැයි කියයි.
හැමෝටම ආයුබෝවන්, මගේ නම Vladimir Protasov, මම සමාන්තර සඳහා වැඩ කරනවා. මම මම ගැන ටිකක් කියන්නම්. මම මගේ ජීවිතයෙන් හතරෙන් තුනක්ම ගත කරන්නේ කේතය ලිවීමටයි. මම වචනාර්ථයෙන් හරයට ක්රමලේඛකයෙකු බවට පත් විය: මම සමහර විට මගේ සිහින තුළ කේතය දකිමි. ජීවිතයෙන් හතරෙන් එකක් කාර්මික සංවර්ධනය, කෙලින්ම නිෂ්පාදනයට යන කේතය ලිවීමයි. ඔබ සමහරක් භාවිතා කරන නමුත් එය නොදන්නා කේතය.
එය කෙතරම් නරකද යන්න ඔබට දැන ගැනීමට. මම ටිකක් ජූනියර් කාලෙ මම ඇතුලට ඇවිත් මට මේ ටෙරාබයිට් ඩේටාබේස් දෙක දුන්නා. එය දැන් සෑම කෙනෙකුටම හයිලෝඩ් කිරීම සඳහා මෙහි ඇත. මම සම්මන්ත්රණවලට ගොස් ඇසුවෙමි: “යාලුවනේ, මට කියන්න, ඔබට විශාල දත්ත තිබේද, සියල්ල සිසිල්ද? ඔබට එහි පදනම් කීයක් තිබේද? ඔවුන් මට පිළිතුරු දුන්නේ: "අපට ගිගාබයිට් 100 ක් ඇත!" මම කිව්වා: "සිසිල්, ගිගාබයිට් 100!" ඒ වගේම පෝකර් ෆේස් එක පිළිවෙළට බේරගන්නේ කොහොමද කියලා මටම හිතුනා. ඔබ සිතන්නේ, ඔව්, යාලුවනේ නියමයි, එවිට ඔබ නැවත පැමිණ මෙම බහු-ටෙරාබයිට් දත්ත සමුදායන් සමඟ ටින්කර් කරන්න. අනික මේ ඉන්නේ කනිෂ්ඨයෙක්. හිතාගන්න පුළුවන්ද ඒක මොනතරම් පහරක් ද කියලා?
මම ක්රමලේඛන භාෂා 20කට වඩා දන්නවා. වැඩ කරන අතරතුර මට තේරුම් ගැනීමට සිදු වූයේ මෙයයි. ඔවුන් ඔබට Erlang වලින්, C වලින්, C++ වල, Lua වල, Python වල, Ruby වල, වෙනත් දෙයකින් කේතය ලබා දෙනවා, ඔබ ඒ සියල්ල කපා හැරිය යුතුයි. පොදුවේ, මට සිදු විය. නිශ්චිත සංඛ්යාව ගණනය කිරීමට නොහැකි වූ නමුත් කොතැනක හෝ 20 ක් පමණ අංකය නැති වී ඇත.
Parallels කියන්නේ මොකක්ද, අපි කරන්නේ මොනවද කියලා මෙතන ඉන්න හැමෝම දන්න නිසා, අපි කොච්චර සිසිල්ද, අපි කරන දේ ගැන මම කතා කරන්නේ නැහැ. අපි ඔබට ලොව පුරා කාර්යාල 13 ක්, සේවකයින් 300 කට වඩා, මොස්කව්, ටැලින් සහ මෝල්ටාවේ සංවර්ධනය ඇති බව පමණක් මම ඔබට කියමි. ඔබ කැමති නම්, ශීත ඍතුවේ දී ශීතල නම් සහ ඔබේ පිටුපස උණුසුම් කිරීමට අවශ්ය නම්, ඔබට මෝල්ටාවට ගෙන යා හැකිය.
විශේෂයෙන්, අපගේ දෙපාර්තමේන්තුව Python 2 හි ලියයි. අපි ව්යාපාරයේ යෙදී සිටින අතර විලාසිතාමය තාක්ෂණයන් හඳුන්වා දීමට අපට වෙලාවක් නැත, එබැවින් අපි දුක් විඳිමු. අපට ජැන්ගෝ ඇත, මන්ද එහි සෑම දෙයක්ම ඇති බැවින් අපි අතිරික්තය ගෙන එය විසි කළෙමු. එසේම MySQL, Redis සහ NGINX. ඒවගේම අපිට තවත් රසවත් දේවල් ගොඩක් තියෙනවා. අපට MongoDB ඇත, අපට හාවන් දුවනවා, අපට කිසිවක් නැත - නමුත් එය මගේ නොවේ, මම එය නොකරමි.
OpenResty
මම මම ගැන කිව්වා. අපි බලමු මම අද කතා කරන්න යන්නේ මොනවද කියලා.
- OpenResty යනු කුමක්ද සහ එය අනුභව කරන්නේ කුමක්ද?
- අප සතුව Python, NodeJS, PHP, Go සහ සියලු දෙනා සතුටු වන වෙනත් රසවත් දේවල් ඇති විට රෝදය නැවත සොයා ගන්නේ ඇයි?
- සහ සැබෑ ජීවිතයේ උදාහරණ කිහිපයක්. මට රිපෝට් එක ගොඩක් අඩු කරන්න උනා, පැය 3,5 ට ගත්ත නිසා උදාහරණ ටිකක් තියේවි.
OpenResty යනු NGINX වේ. ඔහුට ස්තූතියි, අපට සම්පූර්ණ වෙබ් සේවාදායකයක් ඇත, එය හොඳින් ලියා ඇත, එය වේගයෙන් ක්රියා කරයි. මම හිතන්නේ අපි බොහෝ දෙනෙක් නිෂ්පාදනයේදී NGINX භාවිතා කරනවා. ඔහු වේගවත් හා සිසිල් බව ඔබ කවුරුත් දන්නවා. ඔවුන් එහි සිසිල් සමමුහුර්ත I / O සාදන ලදී, එබැවින් පයිතන් හි ගෙවන්ට් සයිකල් කළ ආකාරයටම අපට කිසිවක් චක්රීය කිරීමට අවශ්ය නැත. Gevent නියමයි, නියමයි, නමුත් ඔබ C-code ලියන විට සහ gevent සමඟ යමක් වැරදුනහොත්, ඔබ එය නිදොස් කිරීමට පිස්සු වැටෙනු ඇත. මට අත්දැකීමක් තිබුණා: එහි සිදුවූ වරද කුමක්දැයි වටහා ගැනීමට සම්පූර්ණ දින දෙකක් ගත විය. මීට කලින් කවුරුහරි සති කීපයකට හාරලා නැත්නම්, ප්රශ්නේ හොයාගෙන, ඉන්ටර්නෙට් එකේ ලිව්වා නම්, ගූගල් එක හොයාගත්තේ නැත්තම් අපි හොඳටම පිස්සු වැටෙන්න තිබුණා.
NGINX දැනටමත් හැඹිලිගත කිරීම සහ ස්ථිතික අන්තර්ගතයන් සිදු කරයි. එය මානුෂීය ලෙස කරන්නේ කෙසේද යන්න ගැන ඔබ කරදර විය යුතු නැත, එවිට ඔබ කොතැනක හෝ මන්දගාමී නොවන පරිදි, ඔබට කොතැනක හෝ විස්තර නැති නොවේ. Nginx යෙදවීමට ඉතා පහසුයි, ඔබ ගත යුතු දේ ගැන සිතීමට අවශ්ය නැත - WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx ස්ථාපනය කර ඇත, පරිපාලකයින්ට ලබා දී ඇත, ඔවුන් එය සමඟ වැඩ කරන්නේ කෙසේදැයි දනී. Nginx ව්යුහගත ආකාරයෙන් ඉල්ලීම් සකසයි. මම මේ ගැන ටිකක් පසුව කතා කරන්නම්. කෙටියෙන් කිවහොත්, ඔහු ඉල්ලීම පිළිගත් විට, ඔහු සැකසූ විට සහ පරිශීලකයාට අන්තර්ගතය ලබා දුන් විට ඔහුට අදියරක් ඇත.
Nginx සිසිල් ය, නමුත් එක් ගැටළුවක් ඇත: එය අභිරුචිකරණය කළ හැකි වුවද, යාලුවනේ වින්යාසය තුළට තල්ලු කළ සියලුම සිසිල් විශේෂාංග සමඟ පවා එය නම්යශීලී නොවේ. මෙම බලය ප්රමාණවත් නොවේ. එමනිසා, ටාඕබාඕ හි යාලුවනේ වරෙක, මම සිතන්නේ මීට වසර අටකට පමණ පෙර, ලුවා එයට ගොඩනඟා ගත් බවයි. ඔහු ලබා දෙන්නේ කුමක්ද?
- විශාලත්වය. එය කුඩා වේ. LuaJIT යම් ස්ථානයකට කිලෝබයිට් 100-200 ක පමණ මතකයක් උඩිස් සහ අවම කාර්ය සාධනයක් ලබා දෙයි.
- වේගය. LuaJIT පරිවර්තකය බොහෝ අවස්ථාවන්හිදී C වලට සමීප වේ, සමහර අවස්ථාවන්හිදී එය Java වෙත අහිමි වේ, සමහර විට එය එය අභිබවා යයි. කලකට, එය නවීනතම, සිසිල්ම JIT සම්පාදකය ලෙස සැලකේ. දැන් සිසිල් ඒවා ඇත, නමුත් ඒවා ඉතා බරයි, උදාහරණයක් ලෙස, එකම V8. සමහර JS පරිවර්තකයන් සහ Java HotSpot සමහර ස්ථානවල වේගවත් වන නමුත් සමහර ස්ථානවල තවමත් අහිමි වේ.
- ඉගෙනීමට පහසුය. ඔබට පර්ල් කේත පදනමක් තිබේ නම් සහ ඔබ වෙන්කරවා නොගන්නේ නම්, ඔබට පර්ල් ක්රමලේඛකයින් සොයාගත නොහැක. ඔවුන් එහි නොමැති නිසා, ඔවුන් සියල්ලන්ම රැගෙන ගොස්, ඔවුන්ට ඉගැන්වීම දිගු හා දුෂ්කර ය. ඔබට වෙනත් දෙයක් සඳහා ක්රමලේඛකයින් අවශ්ය නම්, ඔවුන් නැවත පුහුණු කිරීමට හෝ සොයා ගැනීමට ද සිදු විය හැකිය. ලුවා සම්බන්ධයෙන් ගත් කල, සියල්ල සරල ය. ලුවා දින තුනකින් ඕනෑම කනිෂ්ඨයෙකුට ඉගෙන ගත හැකිය. මට ඒක තේරුම් ගන්න පැය දෙකක් විතර ගියා. පැය දෙකකට පසුව, මම දැනටමත් නිෂ්පාදනයේ කේතය ලියමින් සිටියෙමි. සතියකට පමණ පසු ඔහු කෙලින්ම නිෂ්පාදනයට ගොස් පිටත් විය.
එහි ප්රතිඵලයක් වශයෙන්, එය මෙසේ පෙනේ:

මෙතන ගොඩක් තියෙනවා. OpenResty විසින් luash සහ engins යන මොඩියුල සමූහයක් එකලස් කර ඇත. තවද ඔබ සියල්ල සූදානම් කර ඇත - යොදවා වැඩ කරයි.
උදාහරණ
ගී පද ඇති, අපි කේතය වෙත යමු. මෙන්න පොඩි Hello World එකක්:

එහි ඇත්තේ කුමක්ද? මෙය එන්ජිමේ පිහිටීමයි. අපි කරදර නොවන්න, අපි අපේම මාර්ගගත කිරීමක් ලියන්නේ නැත, අපි සූදානම් කළ එකක් ගන්නේ නැත - අපට එය දැනටමත් NGINX හි ඇත, අපි හොඳින් හා කම්මැලි ලෙස ජීවත් වෙමු.
content_by_lua_block යනු අපි Lua ස්ක්රිප්ට් එකක් භාවිතයෙන් අන්තර්ගතය සපයන බව පවසන කොටසකි. අපි engins variable එකක් ගන්නවා remote_addr සහ එය ලිස්සන්න string.format. මේකත් ඒ වගේමයි sprintf, Lua හි පමණක්, නිවැරදි පමණි. තවද අපි එය සේවාදායකයාට ලබා දෙමු.
ප්රතිඵලයක් වශයෙන්, එය මේ ආකාරයෙන් පෙනෙනු ඇත:

නමුත් නැවත සැබෑ ලෝකයට. නිෂ්පාදනයේදී, කිසිවෙකු Hello World යොදවන්නේ නැත. අපගේ යෙදුම සාමාන්යයෙන් දත්ත සමුදායට හෝ වෙනත් ස්ථානයකට යන අතර බොහෝ විට එය ප්රතිචාරයක් බලාපොරොත්තුවෙන් සිටී.

නිකන් ඉඳගෙන බලාගෙන ඉන්නවා. එය ඉතා හොඳ නැත. පරිශීලකයන් 100.000 ක් පැමිණි විට, එය අපට ඉතා අපහසු වේ. එබැවින්, උදාහරණයක් ලෙස සරල යෙදුමක් භාවිතා කරමු. අපි පින්තූර සොයමු, උදාහරණයක් ලෙස, බළලුන්. අපි පමණක් සොයන්නේ නැත, අපි මූල පද පුළුල් කරන්නෙමු, පරිශීලකයා "පූස් පැටවුන්" සෙව්වේ නම්, අපට බළලුන්, සුදුමැලි සහ යනාදිය සොයාගත හැකිය. මුලින්ම අපි backend එකේ request data ගන්න ඕන. එය මෙසේ පෙනේ:

පේළි දෙකක් ඔබට GET පරාමිතීන් ලබා ගැනීමට ඉඩ සලසයි, සංකූලතා නොමැත. එවිට අපි, උදාහරණයක් ලෙස, සාමාන්ය SQL විමසුමක් භාවිතයෙන් මූල පදය සහ දිගුව මගින් වගුවක් සහිත දත්ත සමුදායකින් මෙම තොරතුරු ලබා ගනිමු. සෑම දෙයක්ම සරලයි. එය මෙසේ පෙනේ:

අපි පුස්තකාලය සම්බන්ධ කරමු resty.mysql, අපි දැනටමත් කට්ටලයේ ඇති. අපට කිසිවක් ස්ථාපනය කිරීමට අවශ්ය නැත, සියල්ල සූදානම්. SQL විමසුමක් සම්බන්ධ කර ගන්නේ කෙසේද යන්න සඳහන් කරන්න:

එය ටිකක් බියජනකයි, නමුත් එය ක්රියා කරයි. මෙහි 10 සීමාවයි. අපි රෙකෝඩ් 10ක් ඇදලා දානවා, අපි කම්මැලියි, වැඩිය පෙන්නන්න ඕනේ නැහැ. SQL වලදී, මට සීමාව ගැන අමතක විය.
එවිට අපි සියලු විමසුම් සඳහා පින්තූර සොයා ගනිමු. අපි ඉල්ලීම් සමූහයක් එකතු කර ලූවා වගුවක් පුරවන්නෙමු reqs, සහ කරන්න ngx.location.capture_multi.

මෙම සියලු ඉල්ලීම් සමාන්තරව යන අතර පිළිතුරු අප වෙත ආපසු එවනු ලැබේ. ධාවන කාලය මන්දගාමී එකේ ප්රතිචාර කාලයට සමාන වේ. අපි සියල්ලෝම මිලි තත්පර 50 කින් ආපසු වෙඩි තැබුවොත් සහ අපි ඉල්ලීම් සියයක් යැව්වා නම්, එවිට අපට මිලි තත්පර 50 කින් ප්රතිචාරයක් ලැබෙනු ඇත.
අපි කම්මැලි නිසා සහ HTTP හැසිරවීම සහ හැඹිලි ලිවීමට අවශ්ය නැති නිසා, අපි NGINX අප වෙනුවෙන් සෑම දෙයක්ම කිරීමට සලස්වන්නෙමු. ඔබ දුටු පරිදි, ඉල්ලීමක් විය url/fetch, මෙන්න ඔහු:

අපි සරල කරනවා proxy_pass, හැඹිලිගත කළ යුත්තේ කොතැනද, එය කරන්නේ කෙසේද යන්න සඳහන් කරන්න, සහ සියල්ල අප වෙනුවෙන් ක්රියා කරයි.
නමුත් මෙය ප්රමාණවත් නොවේ, අපි තවමත් පරිශීලකයාට දත්ත ලබා දිය යුතුය. සරලම අදහස නම් JSON වෙත සියල්ල පහසුවෙන් පේළි දෙකකින් අනුක්රමික කිරීමයි. අපි Content-type දෙනවා, අපි JSON දෙනවා.
නමුත් එක් දුෂ්කරතාවයක් තිබේ: පරිශීලකයා JSON කියවීමට කැමති නැත. අපි ඉදිරිපස සංවර්ධකයින් ආකර්ෂණය කර ගත යුතුයි. සමහර වෙලාවට අපිට මුලින් ඒක කරන්න හිතෙන්නේ නැහැ. ඔව්, සහ SEO විශේෂඥයින් කියනු ඇත්තේ අපි පින්තූර සොයන්නේ නම්, ඔවුන් ගණන් නොගන්නා බවයි. අපි ඔවුන්ට යම් අන්තර්ගතයක් ලබා දුන්නොත්, ඔවුන් කියනු ඇත්තේ අපගේ සෙවුම් යන්ත්ර කිසිවක් සුචිගත නොකරන බවයි.
එය සමඟ කුමක් කළ යුතුද? ඇත්ත වශයෙන්ම, අපි පරිශීලකයාට HTML ලබා දෙන්නෙමු. හසුරුවලින් ජනනය කිරීම comme il faut නොවේ, එබැවින් අපට සැකිලි භාවිතා කිරීමට අවශ්යය. මේ සඳහා පුස්තකාලයක් ඇත lua-resty-template.

OPM කියන භයානක අකුරු තුන ඔබ දකින්න ඇති. OpenResty එහිම පැකේජ කළමණාකරුවෙකු සමඟ පැමිණේ, එමඟින් ඔබට විවිධ මොඩියුල පොකුරක් ස්ථාපනය කළ හැකිය, විශේෂයෙන්, lua-resty-template. එය Django සැකිලි වලට සමාන සරල අච්චු එන්ජිමකි. එහිදී ඔබට කේතය ලිවීම සහ විචල්ය ආදේශනය කළ හැකිය.
ප්රතිඵලයක් වශයෙන්, සෑම දෙයක්ම මේ ආකාරයෙන් පෙනෙනු ඇත:

අපි දත්ත ගෙන නැවත පේළි දෙකකින් අච්චුව රෙන්ඩර් කළෙමු. පරිශීලකයා සතුටුයි, බළලුන් ලැබුණා. අපි ඉල්ලීම පුළුල් කළ නිසා ඔහුට පූස් පැටවුන් සඳහා ලොම් මුද්රාවක් ද ලැබුණි. ඔබ කවදාවත් දන්නේ නැහැ, සමහර විට ඔහු එය සොයමින් සිටියත්, ඔහුගේ ඉල්ලීම නිවැරදිව සකස් කිරීමට ඔහුට නොහැකි විය.
සෑම දෙයක්ම සිසිල් ය, නමුත් අපි සංවර්ධනය වෙමින් පවතින අතර, අපට තවමත් පරිශීලකයින් පෙන්වීමට අවශ්ය නැත. අපි අවසරයක් කරමු. මෙය සිදු කිරීම සඳහා, OpenResty අනුව NGINX ඉල්ලීම හසුරුවන්නේ කෙසේදැයි බලමු:
- පළමු අදියර - ප්රවේශ, පරිශීලකයා දැන් පැමිණි විට, අපි ඔහු දෙස ශීර්ෂයෙන්, IP ලිපිනයෙන්, වෙනත් දත්තවලින් බැලුවෙමු. අපි එයට අකමැති නම් ඔබට එය වහාම කපා දැමිය හැකිය. මෙය අවසරය සඳහා භාවිතා කළ හැකිය, නැතහොත් අපට බොහෝ ඉල්ලීම් ලැබෙන්නේ නම්, අපට මෙම අදියරේදී ඒවා පහසුවෙන් කපා ගත හැකිය.
- නැවත ලියන්න. සමහර ඉල්ලීම් දත්ත නැවත ලිවීම.
- අන්තර්ගතය. අපි පරිශීලකයාට අන්තර්ගතය ලබා දෙන්නෙමු.
- ශීර්ෂ පෙරහන. ප්රතිචාර ශීර්ෂ වෙනස් කරන්න. අපි පාවිච්චි කළා නම්
proxy_pass, පරිශීලකයාට ලබා දීමට පෙර අපට සමහර ශීර්ෂයන් නැවත ලිවිය හැකිය. - ශරීර පෙරහන. අපට ශරීරය වෙනස් කළ හැකිය.
- ලඝු - ලොග් කිරීම. අතිරේක තට්ටුවක් නොමැතිව elasticsearch හි ලඝු-සටහන් ලිවීමට හැකිය.
අපගේ අවසරය මේ වගේ දෙයක් පෙනෙනු ඇත:

අපි එය එයට එකතු කරන්නෙමු location, අපි කලින් විස්තර කළ, සහ පහත කේතය එහි දමන්න:

අපි කුකීස් ටෝකනයක් තියෙනවද බලන්න. එසේ නොවේ නම්, අපි අවසරය මත විසි කරමු. පරිශීලකයන් කපටි වන අතර කුකී ටෝකනයක් සැකසිය යුතු බව අනුමාන කළ හැක. එබැවින්, අපි එය Redis හි ද තබමු:

Redis සමඟ වැඩ කිරීම සඳහා කේතය ඉතා සරල වන අතර අනෙකුත් භාෂාවලින් වෙනස් නොවේ. ඒ සමගම, සියලු ආදාන / ප්රතිදානය, එහි ඇති දේ, මෙහි ඇති දේ, එය අවහිර නොවේ. ඔබ සමමුහුර්ත කේතය ලියන්නේ නම්, එය අසමමුහුර්තව ක්රියා කරයි. gevent සමඟ මෙන්, හොඳින් පමණක් සිදු කර ඇත.

අවසර දීමම කරමු:

අපි ඉල්ලීම් ශරීරය කියවිය යුතු බව අපි කියමු. අපට POST තර්ක ලැබේ, පිවිසුම් සහ මුරපදය නිවැරදිදැයි පරීක්ෂා කරන්න. වැරදි නම්, අපි අවසරය මත විසි කරමු. ඒවා නිවැරදි නම්, අපි ටෝකනය Redis වෙත ලියන්නෙමු:

කුකිය සැකසීමට අමතක නොකරන්න, මෙයද පේළි දෙකකින් සිදු කෙරේ:

උදාහරණය සරලයි, අනුමානයි. ඇත්ත වශයෙන්ම, අපි මිනිසුන්ට බළලුන් පෙන්වන සේවාවක් නොකරමු. ඒත් කවුද අපිව දන්නේ. එබැවින් නිෂ්පාදනයේදී කළ හැකි දේ ගැන අපි බලමු.
- අවම පසුබිම. සමහර විට අපට පසුපෙළට දත්ත ටිකක් ලබා දිය යුතුය: කොතැනක හෝ අපට දිනය ආදේශ කළ යුතුය, කොහේ හරි අපට යම් ආකාරයක ලැයිස්තුවක් ප්රදර්ශනය කළ යුතුය, දැන් වෙබ් අඩවියේ කොපමණ පරිශීලකයින් සිටීදැයි කියන්න, කවුන්ටරයක් හෝ සංඛ්යාලේඛන මත ඉස්කුරුප්පු කරන්න. එතරම් කුඩා දෙයක්. සමහර අවම කෑලි ඉතා පහසුවෙන් සාදා ගත හැකිය. මෙය වේගවත්, පහසු සහ විශිෂ්ට වනු ඇත.
- දත්ත පෙර සැකසුම්. සමහර විට අපට අපගේ පිටුවේ දැන්වීම් කාවැද්දීමට අවශ්ය වන අතර, අපි මෙම දැන්වීම් API ඉල්ලීම් සමඟ ගනිමු. මෙන්න මේක කරන්න හරිම ලේසියි. දැනටමත් වෙහෙස මහන්සි වී වැඩ කරන අපගේ පසුපෙළ අපි පටවන්නේ නැත. ඔබට මෙතැනින් රැගෙන ගොස් එකතු කළ හැකිය. අපට JS කිහිපයක් අච්චු ගැසීම හෝ, ඊට ප්රතිවිරුද්ධව, පරිශීලකයාට ලබා දීමට පෙර යමක් ඇලවීම ඉවත් කිරීම, පෙර සැකසුම් කිරීම කළ හැක.
- ක්ෂුද්ර සේවා සඳහා මුහුණත. මේකත් ගොඩක් හොඳ කේස් එකක්, මම ඒක ක්රියාත්මක කළා. ඊට පෙර, මම රටේ නීත්යානුකූල ආයතනවලින් අඩකට පමණ වාර්තා සපයන විද්යුත් වාර්තාකරණ සමාගමක් වන ටෙන්සෝර් හි සේවය කළෙමි. අපි සේවාවක් සාදා ඇත, එකම යාන්ත්රණය භාවිතයෙන් බොහෝ දේ සිදු කෙරේ: මාර්ගගත කිරීම, අවසරය සහ තවත් දේ.
OpenResty සෑම දෙයකටම තනි ප්රවේශයක් සහ තනි අතුරු මුහුණතක් සැපයීම සඳහා ඔබේ ක්ෂුද්ර සේවා සඳහා මැලියම් ලෙස භාවිතා කළ හැක. ඔබට මෙහි Node.js ඇත, ඔබට මෙහි PHP ඇත, ඔබට මෙහි පයිතන් ඇත, මෙහි යම් Erlang දෙයක් තිබේ, යන ආකාරයට microservices ලිවිය හැකි බැවින්, එකම කේතය සෑම තැනකම නැවත ලිවීමට අපට අවශ්ය නොවන බව අපට වැටහේ. එබැවින්, OpenResty ඉදිරිපසට සම්බන්ධ කළ හැක. - සංඛ්යාලේඛන සහ විශ්ලේෂණ. සාමාන්යයෙන් NGINX පිවිසුමේ ඇති අතර සියලුම ඉල්ලීම් ඒ හරහා යයි. එය එකතු කිරීම ඉතා පහසු වන්නේ මෙම ස්ථානයේ ය. ඔබට වහාම යමක් ගණනය කර එය කොතැනක හෝ විසි කළ හැකිය, උදාහරණයක් ලෙස, එකම ඉලාස්ටික් සෙවුම්, ලොග්ස්ටාෂ් හෝ එය ලොගයට ලියා එය කොහේ හරි යවන්න.
- බහු-පරිශීලක පද්ධති. උදාහරණයක් ලෙස, ඔන්ලයින් ක්රීඩා කිරීම ද ඉතා හොඳයි. අද කේප් ටවුන් හි ඇලෙක්සැන්ඩර් ග්ලැඩිෂ් ඔබට OpenResty භාවිතයෙන් බහු ක්රීඩක ක්රීඩාවක් ඉක්මනින් මූලාකෘති කරන්නේ කෙසේදැයි කියනු ඇත.
- ඉල්ලීම් පෙරීම (WAF). දැන් සියලුම ආකාරයේ වෙබ් යෙදුම් ෆයර්වෝල් සෑදීම විලාසිතාවකි, ඒවා සපයන බොහෝ සේවාවන් තිබේ. OpenResty ආධාරයෙන්, ඔබට වෙබ් යෙදුම් ෆයර්වෝලයක් සාදාගත හැක, එය ඔබගේ අවශ්යතා අනුව සරලව සහ පහසුවෙන් ඉල්ලීම් පෙරහන් කරයි. ඔබ සතුව පයිතන් තිබේ නම්, ඔබ එය කොන්සෝලයෙන් ඕනෑම ස්ථානයකට ගෙන එන්නේ නම් මිස, නියත වශයෙන්ම PHP ඔබට එන්නත් නොකරන බව ඔබට වැටහේ. ඔබ දන්නවා ඔබට MySQL සහ Python තිබෙන බව. බොහෝ විට, මෙහිදී ඔවුන් යම් ආකාරයක නාමාවලි සංක්රමණයක් කිරීමට සහ දත්ත සමුදායට යමක් එන්නත් කිරීමට උත්සාහ කළ හැකිය. එමනිසා, ඔබට ඉක්මනින් සහ අඩු මිලට ඉදිරිපසින් ගොළු ඉල්ලීම් පෙරීමට හැකිය.
- ප්රජාව. OpenResty NGINX මත පදනම් වී ඇති බැවින්, එයට ප්රසාද දීමනාවක් ඇත - මෙයයි NGINX ප්රජාව. එය ඉතා විශාල වන අතර, ඔබට මුලින් ඇති බොහෝ ප්රශ්න වලට දැනටමත් NGINX ප්රජාව විසින් පිළිතුරු ලබා දී ඇත.
Lua සංවර්ධකයින්. ඊයේ මම HighLoad ++ පුහුණු දිනයට ආපු කොල්ලෝ එක්ක කතා කරලා ඇහුවා ලුවා වලින් ලියලා තියෙන්නේ Tarantool විතරයි කියලා. මෙය එසේ නොවේ, ලුවා තුළ බොහෝ දේ ලියා ඇත. උදාහරණ: OpenResty, Prosody XMPP සේවාදායකය, Love2D ක්රීඩා එන්ජිම, Lua Warcraft සහ වෙනත් තැන්වල ස්ක්රිප්ට් කර ඇත. Lua සංවර්ධකයින් විශාල ප්රමාණයක් ඇත, ඔවුන්ට විශාල සහ ප්රතිචාර දක්වන ප්රජාවක් ඇත. මගේ සියලුම Lua ප්රශ්න වලට පැය කිහිපයක් ඇතුළත පිළිතුරු ලැබුණි. ඔබ තැපැල් ලැයිස්තුවට ලියන විට, වචනාර්ථයෙන් මිනිත්තු කිහිපයකින් දැනටමත් පිළිතුරු රාශියක් ඇත, ඔවුන් විස්තර කරන්නේ කුමක්ද සහ කෙසේද, කුමක්ද යන්නයි. එය විශිෂ්ටයි. අවාසනාවකට, එවැනි කාරුණික අවංක ප්රජාවක් සෑම තැනකම නැත.
OpenResty සතුව GitHub ඇත, එහිදී ඔබට යමක් කැඩී ගියහොත් ගැටළුවක් විවෘත කළ හැක. ඔබට සාමාන්ය ප්රශ්න සාකච්ඡා කළ හැකි තැපැල් ලැයිස්තුවක් ගූගල් කණ්ඩායම්වල ඇත, චීන භාෂාවෙන් තැපැල් ලැයිස්තුවක් ඇත - ඔබ කිසි විටෙකත් නොදනී, සමහර විට ඔබ ඉංග්රීසි කතා නොකරන නමුත් ඔබට චීන භාෂාව පිළිබඳ දැනුමක් ඇත.
ප්රතිඵල
- OpenResty යනු වෙබය සඳහා සකස් කරන ලද ඉතා පහසු රාමුවක් බව මට පැවසීමට හැකි වූ බව මම බලාපොරොත්තු වෙමි.
- එයට ඇතුල්වීමේ අඩු සීමාවක් ඇත, කේතය අප ලියන දෙයට සමාන බැවින් භාෂාව තරමක් සරල සහ අවම වේ.
- එය ආපසු ඇමතුම් නොමැතිව අසමමුහුර්ත I/O සපයයි, සමහර විට අපට NodeJS හි ලිවිය හැකි බැවින් අපට නූඩ්ල්ස් නොමැත.
- එයට පහසු යෙදවීමක් ඇත, මන්ද අපට අවශ්ය වන්නේ නිවැරදි මොඩියුලය සහ අපගේ කේතය සහිත NGINX පමණක් වන අතර සියල්ල වහාම ක්රියාත්මක වේ.
- විශාල සහ ප්රතිචාර දක්වන ප්රජාව.
රවුටින් කරන්නේ කොහොමද කියලා මම විස්තරාත්මකව කිව්වේ නැහැ, ඒක ගොඩක් දිග කතාවක් වුණා.
Спасибо!

මූලාශ්රය: www.habr.com
