äŒè°å ±åæžã®èšé²ãåæ²èŒããŸã 2016å¹Žã¯æšå¹Ž7æ8æ¥ãXNUMXæ¥ã«ã¢ã¹ã¯ã¯è¿éã®ã¹ã³ã«ã³ãã§éå¬ãããã OpenResty ãš Lua ã䜿çšã㊠NGINX æ©èœãæ¡åŒµããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã¿ãªããããã«ã¡ã¯ãç§ã¯Parallelsã§åããŠããVladimir Protasovã§ããç§èªèº«ã«ã€ããŠå°ãã話ããããŠãã ãããç§ã¯äººçã®4åã®3ãã³ãŒããæžãã®ã«è²»ãããŠããŸããç§ã¯æåéããæ ¹ã£ããã®ããã°ã©ããŒã«ãªããŸããã倢ã®äžã§ã³ãŒããèŠãããšããããŸããç§ã®äººçã®4åã®1ã¯ç£æ¥éçºã§ãçç£ã«çŽæ¥æå ¥ãããã³ãŒããæžããŠããŸããäžéšã®äººã䜿çšããŠãããæ°ã¥ããŠããªãã³ãŒãã
ãããã©ãã ãã²ã©ãã£ããçè§£ããŠããããããã«ãç§ããŸã æ°äººã ã£ãé ãå ¥ç€Ÿãããš 100 ãã©ãã€ãã®ããŒã¿ããŒã¹ãäžããããŸãããä»ããã«ããå šå¡ã«ãšã£ãŠè² è·ãããã£ãŠããŸããç§ã¯ã«ã³ãã¡ã¬ã³ã¹ã«è¡ã£ãŠããçãããæããŠãã ãããããã°ããŒã¿ã§ãã¹ãŠãããŸãããã®ã§ãã? çããã®æ ç¹ã®èŠæš¡ã¯ã©ããããã§ãã?ããšå°ããŸããããããšåœŒãã¯ãã100ã®ã¬ãã€ããããŸã!ããšçããŸãããç§ã¯èšããŸããããããããXNUMXã®ã¬ãã€ãã ïŒããããŠãããŒã«ãŒãã§ã€ã¹ãããã«æ³šææ·±ãä¿ã€ãèããŸããããããã圌ãã¯ãããããšæã£ãŠããæ»ã£ãŠããŠãæ°ãã©ãã€ãã®ããŒã¿ããŒã¹ããããã®ã§ãããããæ°äººã§ãããããã©ããªææãæ³åã§ããŸãã?
ç§ã¯20以äžã®ããã°ã©ãã³ã°èšèªãç¥ã£ãŠããŸããããã¯ç§ãä»äºãããªããçè§£ããªããã°ãªããªãã£ãããšã§ãã ErlangãCãC++ãLuaãPythonãRuby ãªã©ã®ã³ãŒããäžããããããããã¹ãŠåãåããå¿
èŠããããŸããäžè¬çã«èšãã°ãããããªããã°ãªããŸããã§ãããæ£ç¢ºãªæ°ãæ°ããããšã¯ã§ããªãã£ããã20çªãããã§ãã®æ°ã¯å€±ãããã
ããã«ããçãã㯠Parallels ãäœã§ãããããããŠç§ãã¡ãäœãããŠããããç¥ã£ãŠããã®ã§ãç§ãã¡ãã©ãã»ã©çŽ æŽãããããäœãããŠãããã«ã€ããŠã¯è©±ããŸãããåœç€Ÿã¯äžçäžã« 13 ã®ãªãã£ã¹ãããã300 人以äžã®åŸæ¥å¡ãæ±ããã¢ã¹ã¯ã¯ãã¿ãªã³ããã«ã¿ã§éçºãè¡ã£ãŠããŸããå¬ã¯å¯ããŠèäžãæž©ããå¿
èŠãããå Žåã¯ããã«ã¿ã«ç§»äœããããšãã§ããŸãã
ç§ãã¡ã®éšéã¯ç¹ã« Python 2 ã§æžããŠããŸããç§ãã¡ã¯ããžãã¹ã«æºãã£ãŠãããæµè¡ã®ãã¯ãããžãŒãå®è£ ããæéããªããèŠããã§ããŸãã Django ãéžãã ã®ã¯ãããã«å šãŠãåãã£ãŠããããã§ãäœåãªãã®ã¯æšãŠãã ãã§ãã MySQLãRedisãNGINX ããä»ã«ãçŽ æµãªãã®ããããããããŸãã MongoDB ãããããŠãµã®ãèµ°ãåã£ãŠããŠããããããã®ãæã£ãŠããŸãããããã¯ç§ã®ãã®ã§ã¯ãªããç§ããã£ãŠããããšã§ããªãã®ã§ãã
OpenResty
ç§ã¯èªåèªèº«ã«ã€ããŠè©±ããŸããã仿¥ã¯äœã«ã€ããŠè©±ããèããŠã¿ãŸãããã
- OpenResty ãšã¯äœã§ãã? ãŸããã©ã®ããã«äœ¿çšããŸãã?
- PythonãNodeJSãPHPãGo ãªã©ã誰ããæºè¶³ã§ããã¯ãŒã«ãªãã®ãããã®ã«ããªãè»èŒªã®åçºæãããã®ã§ãããã?
- ãããŠäººçããã®äŸãããã€ãæããŸããã¬ããŒã㯠3,5 æéã®é·ãã«ãªããããå€§å¹ ã«ççž®ããå¿ èŠããããäŸã¯ã»ãšãã©ãããŸããã
OpenResty 㯠NGINX ã§ãã圌ã®ãããã§ãç§ãã¡ã¯ãããæžãããŠããŠãçŽ æ©ãåäœããæ¬æ Œç㪠Web ãµãŒããŒãæã«å ¥ããããšãã§ããŸãããç§ãã¡ã®ã»ãšãã©ã¯ãæ¬çªç°å¢ã§ NGINX ã䜿çšããŠãããšæããŸãã圌ãéããŠãã£ãããã®ã¯çããããåç¥ã§ããããã¯ãŒã«ãªåæ I/O ãçµã¿èŸŒãŸããŠãããããPython ã§ gevent ã埪ç°ãããã®ãšåãããã«ãäœã埪ç°ãããå¿ èŠã¯ãããŸããã Gevent ã¯ã¯ãŒã«ã§çŽ æŽãããã§ãããC ã³ãŒããæžããŠäœãåé¡ãçºçããå Žåãgevent ã§ãããã°ããã®ã¯å€§å€ã«ãªããŸããç§ãçµéšããŸããããäœãæªãã£ãã®ããçªãæ¢ããã®ã«äžž2æ¥ããããŸããããã誰ããæ°é±éã調ã¹ãŠåé¡ãèŠã€ããã€ã³ã¿ãŒãããã«æžã蟌ã¿ãGoogle ãèŠã€ããããªãã£ãããç§ãã¡ã¯å®å šã«æ°ãçã£ãŠããã§ãããã
NGINX ã«ã¯ãã§ã«ãã£ãã·ã¥ãšéçã³ã³ãã³ããå®è£ ãããŠããŸããã©ããã§é床ãèœãšããªãããã«ãã©ããã§èšè¿°åã倱ããªãããã«ã人éçãªæ¹æ³ã§è¡ãæ¹æ³ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã Nginx ã¯ãããã€ãéåžžã«ç°¡åãªã®ã§ãWSGIãPHP-FPMãGunicornãUnicorn ãªã©ãäœãæ¡çšããããèããå¿ èŠã¯ãããŸããã Nginx ãã€ã³ã¹ããŒã«ããã管çè ã«æäŸããã管çè ã¯ãããã©ã®ããã«æäœããããç¥ã£ãŠããŸãã Nginx ã¯æ§é åãããæ¹æ³ã§ãªã¯ãšã¹ããåŠçããŸããããã«ã€ããŠã¯åŸã»ã©ã話ãããŸããã€ãŸãããªã¯ãšã¹ããåãå ¥ããæ®µéããªã¯ãšã¹ããåŠçããæ®µéããããŠãŠãŒã¶ãŒã«ã³ã³ãã³ããè¿ã段éããããŸãã
Nginx ã¯çŽ æŽãããã§ãããåé¡ã 1 ã€ãããŸããã«ã¹ã¿ãã€ãºã§ããã«ãããããããæ§æã«è©°ã蟌ãŸããçŽ æŽãããæ©èœãã¹ãŠãåããŠããŠããæè»æ§ãååã§ã¯ãããŸããããã®åã¯ååã§ã¯ãããŸãããã ãããããTaobao ã®äººãã¡ã¯ãã£ãšæã確ã 8 幎åãããã« Lua ãçµã¿èŸŒãã ã®ã§ããããã¯äœãäžããã®ã§ãããã?
- ãµã€ãºã圌ã¯å°ããã§ãã LuaJIT ã§ã¯ãçŽ 100 ïœ 200 ãããã€ãã®ã¡ã¢ãª ãªãŒããŒããããšæå°éã®ããã©ãŒãã³ã¹ ãªãŒããŒããããçºçããŸãã
- ã¹ããŒãã LuaJIT ã€ã³ã¿ãŒããªã¿ã¯å€ãã®ç¶æ³ã§ C ã«è¿ãã§ãããç¶æ³ã«ãã£ãŠã¯ Java ããå£ããç¶æ³ã«ãã£ãŠã¯ Java ããåªããŠããŸãããã°ããã®éãããã¯æå 端ã®ãæãã¯ãŒã«ãª JIT ã³ã³ãã€ã©ãŒã§ãããšèããããŠããŸãããä»ã¯ãã£ãšãã£ããããã®ããããŸãããåãV8ã§ãéåžžã«éãã§ããäžéšã® JS ã€ã³ã¿ãŒããªã¿ãš Java ã® HotSpot ã¯ãäžéšã®éšåã§ã¯é«éåããŠããŸãããä»ã®éšåã§ã¯äŸç¶ãšããŠå£ã£ãŠããŸãã
- ç°¡åã«åŠã¹ããããšãã°ãPerl ã³ãŒã ããŒã¹ããããBooking ã§ãªãå Žåã¯ãPerl ããã°ã©ããŒãèŠã€ããããšã¯ã§ããŸããããããã¯ååšããªãã®ã§ããã¹ãŠå¥ªãããããããæããã®ã¯é·ããŠé£ããã®ã§ããä»ã®åéã®ããã°ã©ããŒãå¿ èŠãªå Žåã¯ãããã°ã©ããŒãåæè²ããããããã°ã©ããŒãæ¢ãå¿ èŠããããããããŸããã Lua ã®å Žåã¯ãã¹ãŠãã·ã³ãã«ã§ãã Lua ã¯ã©ããªåå¿è ã§ã 3 æ¥ã§ç¿åŸã§ããŸãããããçè§£ããã®ã«çŽ2æéããããŸããã 2 æé以å ã«ãç§ã¯ãã§ã«æ¬çªç°å¢ã§ã³ãŒããæžãå§ããŠããŸãããçŽ1é±éåŸã圌ã¯ããã«å¶äœã«åãæãããŸããã
çµæã¯æ¬¡ã®ããã«ãªããŸãã

ããã«ã¯ãããããããã OpenResty ã¯ãLua ãš Engine ã®äž¡æ¹ã®ã¢ãžã¥ãŒã«ã倿°åéããŠããŸããããã§ããã¹ãŠã®æºåãå®äºããå±éãããåäœããŠããŸãã
äŸ
æè©ã¯ååã§ããã³ãŒãã«ç§»ããŸããããããã«ã¡ãã£ãšãã Hello World ããããŸã:

ããã«ã¯ãªã«ããããŸããïŒããã¯ãšã³ãžã³ã®å Žæã§ããç§ãã¡ã¯æ°ã«ãããç¬èªã®ã«ãŒãã£ã³ã°ãæžããããæ¢è£œã®ã«ãŒãã£ã³ã°ãæ¡çšãããããŸãããNGINX ã«ãã§ã«ã«ãŒãã£ã³ã°ãçšæãããŠããã®ã§ãç§ãã¡ã¯æ¥œã«ãã®ãã³ããšæ®ãããŠããŸãã
content_by_lua_block â ããã¯ãLua ã¹ã¯ãªããã䜿çšããŠã³ã³ãã³ããé
ä¿¡ããŠããããšã瀺ããããã¯ã§ãã Engins倿°ãåããŸã remote_addr ãããŠãããæ»ã蟌ãŸãã string.formatãããã¯åãã§ã sprintfãLua ã§ã®ã¿ãæ£ããã ãã§ãããããŠãããã¯ã©ã€ã¢ã³ãã«æž¡ããŸãã
çµæã¯æ¬¡ã®ããã«ãªããŸãã

ããããçŸå®ã®äžçã«æ»ããŸãããã誰ã Hello World ãæ¬çªç°å¢ã«ãããã€ããŸãããç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯éåžžãããŒã¿ããŒã¹ãŸãã¯ä»ã®å Žæã«ã¢ã¯ã»ã¹ããã»ãšãã©ã®æéãå¿çã®åŸ
æ©ã«è²»ãããŸãã

ãã 座ã£ãŠåŸ
ã€ã ãã§ããããã¯ããŸãè¯ããããŸããã 100.000äžäººã®ãŠãŒã¶ãŒãæ¥ããšãç§ãã¡ã«ãšã£ãŠã¯éåžžã«å°é£ã«ãªããŸããããã§ã¯ãäŸãšããŠç°¡åãªã¢ããªã±ãŒã·ã§ã³ãçµã¿ç«ãŠãŠã¿ãŸããããããšãã°ç«ã®åçãæ¢ããŸããããããåã«æ€çŽ¢ããã ãã§ã¯ãªããããŒã¯ãŒããæ¡åŒµãããŠãŒã¶ãŒããåç«ããæ€çŽ¢ããå Žåã¯ãç«ããµããµãããç«ãªã©ãæ€çŽ¢ããŸãããŸããããã¯ãšã³ãã§ãªã¯ãšã¹ãããŒã¿ãååŸããå¿
èŠããããŸããæ¬¡ã®ããã«ãªããŸã:

2 è¡ã§ GET ãã©ã¡ãŒã¿ãåé¡ãªãååŸã§ããŸããæ¬¡ã«ãéåžžã® SQL ã¯ãšãªã䜿çšããŠãããŒã¯ãŒããšæ¡åŒµåã«ããããŒãã«ãæã€ããŒã¿ããŒã¹ãããã®æ
å ±ãååŸãããšããŸããç°¡åã§ãããæ¬¡ã®ããã«ãªããŸã:

ã©ã€ãã©ãªãæ¥ç¶ãã resty.mysqlãããã«ã¯ãã§ã«å«ãŸããŠããŸããäœãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸããããã¹ãŠæºåãã§ããŠããŸããæ¥ç¶æ¹æ³ãš SQL ã¯ãšãªã®äœææ¹æ³ãæå®ããŸãã

ããã¯å°ãæãã§ããããã¹ãŠããŸããããŸããããã§ã¯10ãéçã§ãã 10 ä»¶ã®ã¬ã³ãŒããåãåºããŸããããé¢åãªã®ã§ããã以äžã¯è¡šç€ºããŸããã SQL ã®å¶éãå¿ããŠããŸããã
次ã«ããã¹ãŠã®ãªã¯ãšã¹ãã®ç»åãæ€çŽ¢ããŸããããããã®ã¯ãšãªãéããŠãLuaããŒãã«ã«å
¥åããŸãã reqsãããŠç§ãã¡ã¯ãããå®è¡ããŸã ngx.location.capture_multi.

ããããã¹ãŠã®ãªã¯ãšã¹ãã¯äžŠè¡ããŠåŠçãããåçãè¿ãããŸããå®è¡æéã¯æãé
ããã®ã®å¿çæéãšåãã«ãªããŸããç§ãã¡å
šå¡ã 50 ããªç§ä»¥å
ã«è¿ä¿¡ãã50 ä»¶ã®ãªã¯ãšã¹ããéä¿¡ãããšãXNUMX ããªç§ä»¥å
ã«å¿çãå±ããŸãã
ç§ãã¡ã¯é¢åãªã®ã§ãHTTP åŠçãšãã£ãã·ã¥ãæžããããªãã®ã§ãNGINX ã«ãã¹ãŠãå®è¡ãããŸããã芧ã®ãšããã url/fetchãããã«åœŒã¯ããŸãïŒ

ã·ã³ãã«ã« proxy_passãã£ãã·ã¥ããå Žæã𿹿³ãæå®ãããšããã¹ãŠãããŸãæ©èœããŸãã
ããããããã ãã§ã¯ååã§ã¯ãããŸããããŠãŒã¶ãŒã«ããŒã¿ãæäŸããå¿ èŠããããŸããæãã·ã³ãã«ãªã¢ã€ãã¢ã¯ããã¹ãŠã 2 è¡ã§ç°¡åã« JSON ã«ã·ãªã¢ã«åããããšã§ãã Content-Type ãè¿ããJSON ãè¿ããŸãã
ãããã1 ã€é£ç¹ããããŸããããã¯ããŠãŒã¶ãŒã JSON ãèªã¿åããããªããšããããšã§ããããã³ããšã³ãéçºè ãåŒãä»ããå¿ èŠããããŸããæåã¯ãããããªãããšããããŸãããã㊠SEO ã®å°éå®¶ã¯ãç§ãã¡ãç»åãæ¢ããŠããã®ã§ããã°ãããã¯åœŒãã«ãšã£ãŠåé¡ã§ã¯ãªããšèšãã§ãããããããŠãç§ãã¡ãäœããã®ã³ã³ãã³ããæäŸãããšãæ€çŽ¢ãšã³ãžã³ã¯ç§ãã¡ã®ã³ã³ãã³ããäœãã€ã³ããã¯ã¹ããªããšèšãã§ãããã
ã©ãããã°ããã§ãããã?ãã¡ããããŠãŒã¶ãŒã« HTML ãæäŸããŸããæåã§çæããã®ã¯é©åã§ã¯ãªãã®ã§ããã³ãã¬ãŒãã䜿çšããå¿
èŠããããŸãããã®ããã®ã©ã€ãã©ãªããããŸãã lua-resty-template.

ãããããOPM ãšãã 3 ã€ã®æãããæåãèŠãããšãããã§ãããã OpenRestyã«ã¯ç¬èªã®ããã±ãŒãžãããŒãžã£ãŒãä»å±ããŠãããããã䜿ã£ãŠããŸããŸãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ã§ããŸãã lua-resty-templateãããã¯ãDjango ãã³ãã¬ãŒãã«äŒŒãã·ã³ãã«ãªãã³ãã¬ãŒã ãšã³ãžã³ã§ããããã§ã³ãŒããèšè¿°ãã倿°ã®çœ®æãè¡ãããšãã§ããŸãã
çµæããã¹ãŠã次ã®ããã«ãªããŸãã

ããŒã¿ãååŸããŠããã³ãã¬ãŒãã 2 è¡ã§å床ã¬ã³ããªã³ã°ããŸããããŠãŒã¶ãŒã¯ç«ãããã£ãŠå€§åã³ã§ããèŠæãåºãã£ãã®ã§ãåç«ã«å ããŠã¢ã¶ã©ã·ãããããŸããã誰ã«ãåãããªãããããããã圌ã¯ãŸãã«ãããæ±ããŠããã®ã«ãèªåã®èŠæ±ãæ£ãã衚çŸã§ããªãã£ãã®ãããããªãã
ãã¹ãŠçŽ æŽãããã®ã§ãããéçºäžãªã®ã§ãŸã ãŠãŒã¶ãŒã«å ¬éããããããŸãããæ¿èªãããŸãããããããå®è¡ããã«ã¯ãOpenResty ã®çšèªã§ NGINX ããªã¯ãšã¹ããåŠçããæ¹æ³ãèŠãŠã¿ãŸãããã
- ç¬¬äžæ®µé - ã¢ã¯ã»ã¹ãŠãŒã¶ãŒãå°çããã°ããã®ãšãã«ãããããŒãIP ã¢ãã¬ã¹ããã®ä»ã®ããŒã¿ã§ãŠãŒã¶ãŒã調ã¹ãŸãããæ°ã«å ¥ããªããã°ããã«åæã§ããŸããããã¯èªèšŒã«äœ¿çšã§ããŸããããªã¯ãšã¹ãã倧éã«å±ããå Žåã¯ããã®æ®µéã§ç°¡åã«ã«ããããããšãã§ããŸãã
- æžãçŽããäžéšã®ãªã¯ãšã¹ãããŒã¿ãæžãæããŠããŸãã
- ã³ã³ãã³ãããŠãŒã¶ãŒã«ã³ã³ãã³ããæäŸããŸãã
- ããããŒãã£ã«ã¿ãŒãã¬ã¹ãã³ã¹ ããããŒã眮ãæããŸããããç§ãã¡ã
proxy_passãŠãŒã¶ãŒã«æž¡ãåã«ãããã€ãã®ããããŒãæžãæããããšãã§ããŸãã - ããã£ãã£ã«ã¿ãŒãæ¬äœã亀æããããšãã§ããŸãã
- ãã° â ãã°èšé²ã远å ã®ã¬ã€ã€ãŒãªãã§ãã°ã elasticsearch ã«æžã蟌ãããšãã§ããŸãã
æ¿èªã¯æ¬¡ã®ããã«ãªããŸãã

ããã«è¿œå ããŸãã locationåã«èª¬æãã ã«ã次ã®ã³ãŒãã远å ããŸãã

ã¯ãããŒããŒã¯ã³ããããã©ããã確èªããŸããããã§ãªãå Žåã¯ãæ¿èªã®ããã«ãããã¹ããŒããŸãããŠãŒã¶ãŒã¯è³¢ãã®ã§ãCookie ããŒã¯ã³ãèšå®ããå¿
èŠãããããšãæšæž¬ã§ããŸããããã§ãããã Redis ã«ãé
眮ããŸãã

Redis ãæäœããããã®ã³ãŒãã¯éåžžã«ã·ã³ãã«ã§ãä»ã®èšèªãšå€ãããŸãããåæã«ããããšããã®äž¡æ¹ã§ã®ãã¹ãŠã®å
¥åºåã¯éããããã³ã°ã§ããåæã³ãŒããèšè¿°ãããšãéåæã§åäœããŸãã gevent ãšã»ãŒåãã§ãããããŸãã§ããŠããŸãã

èªèšŒèªäœãå®è¡ããŠã¿ãŸãããã

ãªã¯ãšã¹ãæ¬äœãèªã¿åãå¿
èŠããããšèšããŸãã POST åŒæ°ãåãåãããã°ã€ã³ãšãã¹ã¯ãŒããæ£ããããšã確èªããŸããééã£ãŠããå Žåã¯ãæ¿èªã®ããã«éä¿¡ããŸããããããæ£ãããã°ãããŒã¯ã³ã Redis ã«æžã蟌ã¿ãŸãã

ã¯ãããŒãèšå®ããããšãå¿ããªãã§ãã ãããããã 2 è¡ã§å®è¡ãããŸãã

åçŽã§æšæž¬çãªäŸããã¡ãããç«ãèŠãããµãŒãã¹ãäœãããã§ã¯ãããŸããã誰ãç§ãã¡ãç¥ã£ãŠãããã¯ããããŸããããããã§ã¯ãæ¬çªç°å¢ã§äœãã§ããããèŠãŠãããŸãããã
- ãããã«ãªããã¯ãšã³ããå Žåã«ãã£ãŠã¯ãããã¯ãšã³ãã«éåžžã«å°éã®ããŒã¿ãæäŸããå¿ èŠããããŸããããšãã°ãã©ããã«æ¥ä»ãæ¿å ¥ããããã©ããã«ãªã¹ããåºåããããçŸåšãµã€ãã«ã¢ã¯ã»ã¹ããŠãããŠãŒã¶ãŒæ°ã瀺ããããã«ãŠã³ã¿ãŒãçµ±èšãæ·»ä»ãããããå¿ èŠãããå Žåã§ãããããªå°ããªãã®ãæå°éã®ããŒã¹ãéåžžã«ç°¡åã«äœãããšãã§ããŸããããã«ãããè¿ éãç°¡åããããŠçŽ æŽããããã®ã«ãªããŸãã
- ããŒã¿ååŠçãããŒãžã«åºåãåã蟌ã¿ããå ŽåããããAPI ãªã¯ãšã¹ãã䜿çšããŠãã®åºåãååŸããŸããããã§ãããè¡ãã®ã¯éåžžã«ç°¡åã§ãããã§ã«æžåœã«åããŠããããã¯ãšã³ãã«éè² è·ããããããšã¯ãããŸããããã¡ãã§åãåã£ãŠçµã¿ç«ãŠãŠããã ããŸããããã€ãã® JS ãæ¥çããããéã«ãããåé¢ãããããŠãŒã¶ãŒã«æäŸããåã«äœããååŠçãããããããšãã§ããŸãã
- ãã€ã¯ããµãŒãã¹çšãã¡ãµãŒããããããšãŠãè¯ãäºäŸãªã®ã§ãå®è£
ããŠã¿ãŸããããã以åã¯ãé»åå ±åãæ±ããåœå
ã®æ³äººã®çŽåæ°ã«å ±åãµãŒãã¹ãæäŸããäŒç€ŸãTenzor ã§åããŠããŸãããç§ãã¡ã¯ãã«ãŒãã£ã³ã°ãèªèšŒãªã©ãå€ãã®ããšãåãã¡ã«ããºã ã䜿çšããŠå®è¡ãããµãŒãã¹ãäœæããŸããã
OpenResty ã¯ãã€ã¯ããµãŒãã¹ã®æ¥çå€ãšããŠäœ¿çšã§ãããã¹ãŠãžã®åäžã®ã¢ã¯ã»ã¹ãšåäžã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãããã€ã¯ããµãŒãã¹ã¯ãããã§ã¯ Node.jsãããã§ã¯ PHPãããã§ã¯ Pythonãããã§ã¯ Erlang ã®ãããªãã®ããšããããã«èšè¿°ã§ãããããåãã³ãŒããã©ãã§ãæžãçŽããããªãããšã¯çè§£ã§ããŸãããã®ãããOpenResty ãããã³ãã«ã€ã³ã¹ããŒã«ããããšãã§ããŸãã - çµ±èšãšåæãéåžžãNGINX ã¯å ¥ãå£ã«ããããã¹ãŠã®ãªã¯ãšã¹ãã¯ãããééããŸããããã¯çµã¿ç«ãŠãã®ã«ãšãŠã䟿å©ãªå Žæã§ããããã«äœããèšç®ããŠãåã ElasticsearchãLogstash ãªã©ã®ã©ããã«æããããåã«ãã°ã«æžã蟌ãã§ã©ããã«éä¿¡ãããããããšãã§ããŸãã
- ãã«ããŠãŒã¶ãŒã·ã¹ãã ãäŸãã°ããªã³ã©ã€ã³ã²ãŒã ãäœãã®ããšãŠãäžæã§ããæ¬æ¥ã±ãŒãã¿ãŠã³ã§ã¯ãAlexander Gladysh ã OpenResty ã䜿çšããŠãã«ããã¬ã€ã€ãŒ ã²ãŒã ã®ãããã¿ã€ããè¿ éã«äœæããæ¹æ³ã«ã€ããŠè¬æŒããŸãã
- ãªã¯ãšã¹ããã£ã«ã¿ãªã³ã°ïŒWAFïŒãæè¿ã§ã¯ãããããçš®é¡ã® Web ã¢ããªã±ãŒã·ã§ã³ ãã¡ã€ã¢ãŠã©ãŒã«ãäœæããããšãæµè¡ããŠãããããããæäŸãããµãŒãã¹ãæ°å€ããããŸãã OpenResty ã䜿çšãããšãèŠä»¶ã«å¿ããŠãªã¯ãšã¹ããã·ã³ãã«ãã€ç°¡åã«ãã£ã«ã¿ãªã³ã°ãã Web ã¢ããªã±ãŒã·ã§ã³ ãã¡ã€ã¢ãŠã©ãŒã«ãäœæã§ããŸãã Python ããæã¡ã®å Žåã¯ããã¡ããã©ããã®ã³ã³ãœãŒã«ãã PHP ãçæããªãéããPHP ãæ¿å ¥ãããããšã¯çµ¶å¯Ÿã«ãªãããšãçè§£ããŠããã¯ãã§ãã MySQL ãš Python ãããããšã¯ãåãã§ãããããããããããã§ãã£ã¬ã¯ããªãã©ããŒãµã«ãå®è¡ããŠãããŒã¿ããŒã¹ã«äœããæ¿å ¥ããããšããå¯èœæ§ããããŸãããããã£ãŠãããã³ããšã³ãã§çãããã¯ãšãªãè¿ éãã€å®äŸ¡ã«ãã£ã«ã¿ãªã³ã°ã§ããŸãã
- ã³ãã¥ããã£ã OpenRestyã¯NGINXäžã«æ§ç¯ãããŠãããããæ¬¡ã®ãããªå©ç¹ããããŸãã NGINX ã³ãã¥ããã£ãããã¯éåžžã«å€§ããªãã®ã§ãããæåã«æ±ãã§ããã質åã®ããªãã®éšåã¯ãNGINX ã³ãã¥ããã£ã«ãã£ãŠãã§ã«åçãããŠããŸãã
Luaéçºè ãæšæ¥ãHighLoad++ ãã¬ãŒãã³ã° ããŒã«æ¥ã人ãã¡ãšè©±ããããšãããTarantool ã ãã Lua ã§æžãããŠãããšèããŸãããããã¯çå®ã§ã¯ãããŸãããLua ã§æžããããã®ã¯ãããããããŸããäŸ: OpenRestyãProsody XMPP ãµãŒããŒãLove2D ã²ãŒã ãšã³ãžã³ãWarcraft ãªã©ã§ã¹ã¯ãªããåããã Luaã Lua éçºè ã¯ãããããããå€§èŠæš¡ã§åå¿ã®è¯ãã³ãã¥ããã£ããããŸãã Lua ã«é¢ããç§ã®è³ªåã¯ãã¹ãŠæ°æé以å ã«è§£æ±ºãããŸãããã¡ãŒãªã³ã° ãªã¹ãã«æžã蟌ããšãæåéãæ°å以å ã«ãäœãã©ã®ããã«ãäœãäœã§ãããã説æãã倧éã®å¿çãå±ããŸããããã¯ãšãŠãã¯ãŒã«ã§ãããæ®å¿µãªãããã©ãã«ã§ããã®ãããªèŠªåã§æž©ããã³ãã¥ããã£ãããããã§ã¯ãããŸããã
OpenResty çšã® GitHub ããããäœãåé¡ãçºçããå Žåã«åé¡ãå ±åã§ããŸãã Google ã°ã«ãŒãã«ã¯äžè¬çãªåé¡ã«ã€ããŠè°è«ã§ããã¡ãŒãªã³ã° ãªã¹ãããããäžåœèªã®ã¡ãŒãªã³ã° ãªã¹ãããããŸããè±èªã¯è©±ããªããŠãäžåœèªã¯ããããšããå ŽåããããŸãã
çµæ
- OpenResty ã Web åãã«ã«ã¹ã¿ãã€ãºãããéåžžã«äŸ¿å©ãªãã¬ãŒã ã¯ãŒã¯ã§ããããšãäŒããã°å¹žãã§ãã
- ã³ãŒãã¯ç§ãã¡ãæžããã®ãšäŒŒãŠãããèšèªã¯éåžžã«ã·ã³ãã«ã§ãããã«ãªã®ã§ãåå ¥éå£ã¯äœãã§ãã
- ã³ãŒã«ããã¯ãªãã®éåæ I/O ãæäŸãããããNodeJS ã§èšè¿°ããå Žåã®ããã«è€éãªåŠçã¯å¿ èŠãããŸããã
- å¿ èŠãªã¢ãžã¥ãŒã«ãšã³ãŒããåãã NGINX ã®ã¿ãå¿ èŠãªã®ã§ãå±éãç°¡åã§ããã¹ãŠãããã«æ©èœããŸãã
- å€§èŠæš¡ã§åå¿ã®è¯ãã³ãã¥ããã£ã
ã«ãŒãã£ã³ã°ãã©ã®ããã«è¡ããããã«ã€ããŠã¯è©³ãã説æããŸããã§ããããããã¯éåžžã«é·ã話ã«ãªã£ãŠããŸããŸããã
ããããšãããããŸããïŒ

åºæïŒ habr.com
