ã«ã³ãã¡ã¬ã³ã¹ã®å ±åæžã®ãã©ã³ã¹ã¯ãªãããåçºè¡ããŸãã
çãããããã«ã¡ã¯ãç§ã®ååã¯ãŠã©ãžããŒã« ããã¿ãœãã§ããParallels ã§åããŠããŸãã ç§èªèº«ã«ã€ããŠå°ãã話ããŸãã ç§ã¯äººçã® XNUMX åã® XNUMX ãã³ãŒãã®äœæã«è²»ãããŠããŸãã ç§ã¯æåéãã®æå³ã§åŸ¹åºçã«ããã°ã©ããŒã«ãªããŸããã倢ã®äžã§ã³ãŒããèŠãããšããããŸãã 人çã® XNUMX åã® XNUMX ã¯ç£æ¥ã®çºå±ã§ãããããã«æ¬çªç°å¢ã«å°å ¥ã§ããã³ãŒããäœæããŸãã 䜿ã£ãŠãããã©ç¥ããªã人ãããã³ãŒãã
ãããã©ãã»ã©ã²ã©ãã£ãããç¥ãããããã«ã ç§ããŸã å°ããžã¥ãã¢ã ã£ããšããç§ã¯ãã® 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 ã§äœãåé¡ãçºçãããšããããã°ã«å€¢äžã«ãªãã§ãããã ç§ãçµéšããããŸãããäœãåé¡ã ã£ãã®ããç解ããã®ã«äžž XNUMX æ¥ããããŸããã ãã誰ããæ°é±éåã«åé¡ãæãèµ·ãããŠåé¡ãèŠã€ããŠã€ã³ã¿ãŒãããã«æžãããã㊠Google ããããèŠã€ããããªãã£ãããç§ãã¡ã¯å®å šã«æ°ãçã£ãŠããŸã£ãŠããã§ãããã
NGINX ã¯ãã§ã«ãã£ãã·ã¥ãšéçã³ã³ãã³ããå®è¡ããŠããŸãã ã©ããã§é床ãèœã¡ãããèšè¿°åãã©ããã§å€±ãããªãããã«ã人éããããè¡ãæ¹æ³ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã Nginx ã¯ãããã€ããã®ã«éåžžã«äŸ¿å©ã§ãWSGIãPHP-FPMãGunicornãUnicorn ãªã©ãäœãæ¡çšããããèããå¿ èŠã¯ãããŸããã Nginx ãã€ã³ã¹ããŒã«ããã管çè ã«äžããããããã管çè ã¯ãã®æäœæ¹æ³ãç¥ã£ãŠããŸãã Nginx ã¯æ§é åãããæ¹æ³ã§ãªã¯ãšã¹ããåŠçããŸãã ããã«ã€ããŠã¯å°ãåŸã»ã©ã話ããŸãã ã€ãŸãããªã¯ãšã¹ããåãå ¥ãããšããåŠçãããšããã³ã³ãã³ãããŠãŒã¶ãŒã«æäŸãããšãã®ãã§ãŒãºããããŸãã
Nginx ã¯ã¯ãŒã«ã§ãããåé¡ã XNUMX ã€ãããŸããã«ã¹ã¿ãã€ãºã§ããã«ãããããããæ§æã«çµã¿èŸŒãŸããã¯ãŒã«ãªæ©èœããã¹ãŠåããŠããŠããååãªæè»æ§ããããŸããã ãã®åã§ã¯ååã§ã¯ãããŸããã ããã§ãã¿ãªããªã®äººã ã¯ãã€ãŠãXNUMX 幎ã»ã©åã ã£ããšæããŸãããã¿ãªããªã« Lua ãçµã¿èŸŒãã ã®ã§ãã 圌ã¯äœããããã®ã§ããããïŒ
- ãµã€ãºã å°ããã§ãã LuaJIT ã§ã¯ãçŽ 100 ïœ 200 ãããã€ãã®ã¡ã¢ãª ãªãŒããŒããããçºçããããã©ãŒãã³ã¹ã®ãªãŒããŒãããã¯æå°éã«æããããŸãã
- ã¹ããŒãã LuaJIT ã€ã³ã¿ãŒããªã¿ãŒã¯å€ãã®ç¶æ³ã§ C ã«è¿ããç¶æ³ã«ãã£ãŠã¯ Java ã«è² ãããŸãããç¶æ³ã§ã¯ Java ãè¿œãè¶ããŸãã ãã°ããã®éãããã¯æå 端ã®æãã¯ãŒã«ãª JIT ã³ã³ãã€ã©ãŒãšã¿ãªãããŠããŸããã ä»ã¯ãã£ãšã¯ãŒã«ãªãã®ããããŸãããããšãã°åãV8ã§ãéåžžã«éãã§ãã äžéšã® JS ã€ã³ã¿ãŒããªã¿ãŒãš Java HotSpot ã¯ãããã€ãã®ç¹ã§ã¯é«éã§ãããããã§ãããã€ãã®ç¹ã§ã¯é床ãäœäžããŸãã
- ç°¡åã«åŠã¹ãã ããšãã°ãPerl ã³ãŒãããŒã¹ãæã£ãŠããŠã Booking ãããŠããªãå ŽåãPerl ããã°ã©ããŒã¯èŠã€ãããŸããã 圌ãã¯ããã«ããªãã®ã§ã圌ãã¯ãã¹ãŠå¥ªããã圌ããæããã®ã¯é·ããŠé£ããã§ãã ä»ã®ç®çã§ããã°ã©ããŒãå¿ èŠãªå Žåã¯ãããã°ã©ããŒãåèšç·ŽããããèŠã€ããå¿ èŠããããããããŸããã Lua ã®å Žåããã¹ãŠãã·ã³ãã«ã§ãã Lua ã¯ã©ããªãžã¥ãã¢ã§ã XNUMX æ¥ããã°ç¿åŸã§ããŸãã ãããç解ããã®ã«çŽXNUMXæéããããŸããã XNUMX æéåŸãç§ã¯ãã§ã«æ¬çªç°å¢ã§ã³ãŒããäœæããŠããŸããã çŽ XNUMX é±éåŸã圌ã¯ããã«å¶äœã«åãæãããéè·ããŸããã
ãã®çµæã次ã®ããã«ãªããŸãã
ããã«ã¯ãããããããŸãã OpenResty ã¯ãluash ãšãšã³ãžã³ã®äž¡æ¹ãå«ãå€æ°ã®ã¢ãžã¥ãŒã«ãçµã¿ç«ãŠãŠããŸãã ããã§ããã¹ãŠã®æºåãæŽãããããã€ãããåäœããããã«ãªããŸããã
äŸ
æè©ã«ã€ããŠã¯ååãªã®ã§ãã³ãŒãã«ç§»ããŸãããã ããã«ã¡ãã£ãšãã Hello World ããããŸã:
ããã«ãããã®ïŒ ããããšã³ãžã³ã®äœçœ®ã§ãã å¿é
ããå¿
èŠã¯ãããŸãããç¬èªã®ã«ãŒãã£ã³ã°ãäœæããããæ¢è£œã®ã«ãŒãã£ã³ã°ã䜿çšãããããŸããããã§ã« NGINX ã«ãããé 調ã«æ æ°ã«æ®ãããŠããŸãã
content_by_lua_block
ã¯ãLua ã¹ã¯ãªããã䜿çšããŠã³ã³ãã³ããæäŸããŠããããšã瀺ããããã¯ã§ãã ãšã³ãžã³å€æ°ãååŸããŸã remote_addr
ãããŠãããæ»ã蟌ãŸããŸã string.format
ã ããã¯ãšåãã§ã sprintf
ãLua ã®ã¿ãæ£ãããã®ã®ã¿ã ãããŠãããã¯ã©ã€ã¢ã³ãã«æž¡ããŸãã
çµæãšããŠã次ã®ããã«ãªããŸãã
ããããçŸå®äžçã«æ»ããŸãã éçšç°å¢ã§ã¯ã誰ã Hello World ããããã€ããŸããã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯éåžžãããŒã¿ããŒã¹ãŸãã¯ä»ã®å Žæã«ã¢ã¯ã»ã¹ããã»ãšãã©ã®æéã¯å¿çãåŸ
ã¡ãŸãã
ãã 座ã£ãŠåŸ
ã£ãŠããŸãã ããŸãè¯ããªãã§ããã 100.000äžäººã®ãŠãŒã¶ãŒãæ¥ããšãç§ãã¡ã«ãšã£ãŠã¯éåžžã«å€§å€ã§ãã ãããã£ãŠãäŸãšããŠç°¡åãªã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠã¿ãŸãããã ããšãã°ç«ãªã©ã®åçãæ¢ããŸãã ãã æ€çŽ¢ããã ãã§ã¯ãªããããŒã¯ãŒããæ¡åŒµãããŠãŒã¶ãŒããåç«ããæ€çŽ¢ãããšãç«ããµããµããªã©ãæ€çŽ¢ãããŸãã ãŸããããã¯ãšã³ãã§ãªã¯ãšã¹ã ããŒã¿ãååŸããå¿
èŠããããŸãã 次ã®ããã«ãªããŸãã
XNUMX è¡ã§ GET ãã©ã¡ãŒã¿ãååŸã§ããŸããè€éãªããšã¯ãããŸããã 次ã«ãããšãã°ãéåžžã® SQL ã¯ãšãªã䜿çšããŠãããŒã¯ãŒããšæ¡åŒµåããšã«ããŒãã«ãæã€ããŒã¿ããŒã¹ãããã®æ
å ±ãååŸããŸãã ãã¹ãŠãã·ã³ãã«ã§ãã 次ã®ããã«ãªããŸãã
å³æžé€šãã€ãªã resty.mysql
ããã§ã«ãããã«å«ãŸããŠããŸãã äœãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãªãããã¹ãŠæºåãæŽã£ãŠããŸãã æ¥ç¶æ¹æ³ãš SQL ã¯ãšãªã®äœææ¹æ³ãæå®ããŸãã
å°ãæãã§ãããå¹æããããŸãã ããã§ã¯ 10 ãéçã§ãã 10 件ã®ã¬ã³ãŒããåãåºããŸãããæ ãè
ãªã®ã§ããã以äžã¯è¡šç€ºããããããŸããã SQL ã®å¶éãå¿ããŠããŸããã
次ã«ããã¹ãŠã®ã¯ãšãªã«å¯Ÿããç»åãèŠã€ããŸãã 倧éã®ãªã¯ãšã¹ããåéãããšããååã® Lua ããŒãã«ã«èšå
¥ããŸãã reqs
ã ãããŠããããŸã ngx.location.capture_multi
.
ããããã¹ãŠã®ãªã¯ãšã¹ãã¯äžŠè¡ããŠåŠçãããåçãè¿ãããŸãã å®è¡æéã¯ãæãé
ããã®ã®å¿çæéãšåãã«ãªããŸãã å
šå¡ã 50 ããªç§ä»¥å
ã«åæãã50 件ã®ãªã¯ãšã¹ããéä¿¡ããå ŽåãXNUMX ããªç§ä»¥å
ã«å¿çãåãåããŸãã
ç§ãã¡ã¯æ ãè
ã§ãHTTP åŠçãšãã£ãã·ã¥ãæžããããªãã®ã§ãNGINX ã«ãã¹ãŠãè¡ãããŸãã ã芧ã®ãšããããªã¯ãšã¹ãããããŸãã url/fetch
ãããã«åœŒã¯ããŸãïŒ
ç§ãã¡ã¯ã·ã³ãã«ã«ããŸã proxy_pass
ããã£ãã·ã¥ããå Žæãšãã®æ¹æ³ãæå®ãããšããã¹ãŠãããŸããããŸãã
ããããããã ãã§ã¯äžååã§ãããŠãŒã¶ãŒã«ããŒã¿ãæäŸããå¿ èŠããããŸãã æãåçŽãªã¢ã€ãã¢ã¯ããã¹ãŠã XNUMX è¡ã§ç°¡åã« JSON ã«ã·ãªã¢ã«åããããšã§ãã Content-Type ãæå®ããJSON ãæå®ããŸãã
ãã ããåé¡ã XNUMX ã€ãããŸãããŠãŒã¶ãŒã¯ JSON ãèªã¿ãããªãã®ã§ãã ããã³ããšã³ãéçºè ãåŒãä»ããå¿ èŠããããŸãã æåã¯ããæ°ãåºãªãããšããããŸãã ã¯ãããã㊠SEO å°é家ã¯ãç§ãã¡ãåçãæ¢ããŠããã®ã§ããã°ãæ°ã«ããªããšèšãã§ãããã ãããŠãç§ãã¡ã圌ãã«äœããã®ã³ã³ãã³ããæäŸãããšã圌ãã¯ç§ãã¡ã®æ€çŽ¢ãšã³ãžã³ã¯äœãã€ã³ããã¯ã¹ãä»ããŠããªããšèšãã§ãããã
ãããã©ããããïŒ ãã¡ããããŠãŒã¶ãŒã«ã¯ HTML ãæäŸããŸãã ãã³ãã«ã䜿ã£ãŠçæããã®ã¯äžäŸ¿ãªã®ã§ããã³ãã¬ãŒãã䜿çšããããšæããŸãã ããçšã®ã©ã€ãã©ãªããããŸã lua-resty-template
.
OPM ãšããæããã XNUMX æåãèŠãããšãããã¯ãã§ãã OpenResty ã«ã¯ç¬èªã®ããã±ãŒãž ãããŒãžã£ãŒãä»å±ããŠããããããä»ããŠããŸããŸãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ã§ããŸããç¹ã«ã lua-resty-template
ã ããã¯ãDjango ãã³ãã¬ãŒãã«äŒŒãã·ã³ãã«ãªãã³ãã¬ãŒã ãšã³ãžã³ã§ãã ããã§ã³ãŒããèšè¿°ããå€æ°ã®çœ®æãè¡ãããšãã§ããŸãã
çµæãšããŠããã¹ãŠã¯æ¬¡ã®ããã«ãªããŸãã
ããŒã¿ãååŸãããã³ãã¬ãŒãã XNUMX è¡ã§å床ã¬ã³ããªã³ã°ããŸããã ãŠãŒã¶ãŒã¯ç«ã飌ã£ãŠæºè¶³ã§ãã ãªã¯ãšã¹ããæ¡å€§ããã®ã§ãåç«çšã®ãªããã»ã€ãããã ããŸããã ãããã圌ã¯ãããæ¢ããŠããã®ã§ãããããèŠæ±ãæ£ããè¡šçŸã§ããŸããã§ããã
ãã¹ãŠãçŽ æŽãããã§ãããéçºäžã®ããããŸã ãŠãŒã¶ãŒã«ãèŠãããããããŸããã èªå¯ãããŠã¿ãŸãããã ãããè¡ãã«ã¯ãNGINX ã OpenResty ã®èŠ³ç¹ãããªã¯ãšã¹ããã©ã®ããã«åŠçããããèŠãŠã¿ãŸãããã
- 第XNUMX段é - ã¢ã¯ã»ã¹ãŠãŒã¶ãŒãã¡ããã©æ¥ããšããããããŒãIP ã¢ãã¬ã¹ããã®ä»ã®ããŒã¿ã«ãã£ãŠãŠãŒã¶ãŒã調ã¹ãŸããã æ°ã«å ¥ããªãå Žåã¯ããã«åãåã£ãŠããã ããŸãã ããã¯æ¿èªã«äœ¿çšã§ããŸãããŸãã倧éã®ãªã¯ãšã¹ããåãåã£ãå Žåã¯ããã®æ®µéã§ç°¡åã«ãªã¯ãšã¹ããåãåããããšãã§ããŸãã
- æžãçŽãã äžéšã®ãªã¯ãšã¹ãããŒã¿ãæžãæããŠããŸãã
- ã³ã³ãã³ãã ãŠãŒã¶ãŒã«ã³ã³ãã³ããæäŸããŸãã
- ããããŒãã£ã«ã¿ãŒã å¿çããããŒãå€æŽããŸãã ããç§ãã¡ã䜿ã£ãŠããã
proxy_pass
ããŠãŒã¶ãŒã«æž¡ãåã«ããã€ãã®ããããŒãæžãæããããšãã§ããŸãã - ããã£ãã£ã«ã¿ãŒã ç§ãã¡ã¯äœãå€ããããšãã§ããŸãã
- ãã° - ãã®ã³ã°ã ã¬ã€ã€ãŒãè¿œå ããã« elasticsearch ã«ãã°ãæžã蟌ãããšãã§ããŸãã
ç§ãã¡ã®èªå¯ã¯æ¬¡ã®ããã«ãªããŸãã
ããã«è¿œå ããŸã location
ãåã«èª¬æããããã«ãããã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
Cookie ããŒã¯ã³ããããã©ããã確èªããŸãã ããã§ãªãå Žåã¯ãæ¿èªãã¹ããŒããŸãã ãŠãŒã¶ãŒã¯ç¡çŸã§ãCookie ããŒã¯ã³ãèšå®ããå¿
èŠããããšæšæž¬ããå¯èœæ§ããããŸãã ãããã£ãŠãããã Redis ã«ãé
眮ããŸãã
Redis ãæäœããã³ãŒãã¯éåžžã«ã·ã³ãã«ã§ãä»ã®èšèªãšäœãå€ãããŸããã åæã«ããã¹ãŠã®å
¥å/åºåãããã«ãããã®ãããã«ãããã®ãããã¯ãããã¯ãããŸããã åæã³ãŒããäœæãããšããã®ã³ãŒãã¯éåæã§åäœããŸãã gevent ãšåæ§ã«ãããŸããã£ãã ãã§ãã
æ¿èªèªäœãè¡ã£ãŠã¿ãŸãããã
ãªã¯ãšã¹ãã®æ¬æãèªãå¿
èŠããããšèšããŸãã POST åŒæ°ãåãåãããã°ã€ã³ãšãã¹ã¯ãŒããæ£ããããšã確èªããŸãã æ£ãããªãå Žåã¯ãæ¿èªãã¹ããŒãããŸãã ããããæ£ããå Žåã¯ãããŒã¯ã³ã Redis ã«æžã蟌ã¿ãŸãã
Cookie ãèšå®ããããšãå¿ããªãã§ãã ãããããã XNUMX è¡ã§è¡ãããŸãã
ãã®äŸã¯åçŽã§ãããæšæž¬ã«ãããŸããã ãã¡ãããç«ã人ã«èŠãããµãŒãã¹ã¯äœããŸããã ããããç§ãã¡ã®ããšã誰ãç¥ã£ãŠããã§ãããã ããã§ã¯ãæ¬çªç°å¢ã§äœãã§ããããèŠãŠã¿ãŸãããã
- ããããªã¹ãã®ããã¯ãšã³ãã å Žåã«ãã£ãŠã¯ãããªãã®éã®ããŒã¿ãããã¯ãšã³ãã«æž¡ãå¿ èŠããããŸããã©ããã§æ¥ä»ã眮ãæããããã©ããã§äœããã®ãªã¹ãã衚瀺ããããçŸåšãµã€ãã«äœäººã®ãŠãŒã¶ãŒãããã®ãã衚瀺ããããã«ãŠã³ã¿ãŒãçµ±èšããã蟌ãã ãããå¿ èŠããããŸãã ãšãŠãå°ãããã®ã ããã€ãã®æå°éã®äœåã¯éåžžã«ç°¡åã«äœãããšãã§ããŸãã ããã¯éããŠç°¡åã§çŽ æŽããããã®ã«ãªããŸãã
- ããŒã¿ã®ååŠçã å Žåã«ãã£ãŠã¯ãããŒãžã«åºåãåã蟌ã¿ããå Žåãããããããã®åºåã 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 ++ ã®ãã¬ãŒãã³ã°æ¥ã«æ¥ã人ãã¡ãšè©±ãããšãããLua ã§æžãããŠããã®ã¯ Tarantool ã ãã ãšèããŸããã ããã§ã¯ãªããå€ãã®ããšã Lua ã§æžãããŠããŸãã äŸ: OpenRestyãProsody XMPP ãµãŒããŒãLove2D ã²ãŒã ãšã³ãžã³ãLua 㯠Warcraft ãªã©ã§ã¹ã¯ãªããåãããŠããŸãã Lua éçºè ã¯ããããããŠã倧èŠæš¡ã§åå¿ã®è¯ãã³ãã¥ããã£ããããŸãã Lua ã«é¢ãããã¹ãŠã®è³ªåã¯æ°æé以å ã«åçãããŸããã ã¡ãŒãªã³ã°ãªã¹ãã«æžã蟌ããšãæåéãæ°åã§ãã§ã«å€§éã®åçãå±ããŸãããããã¯ãäœãã©ã®ããã«ãäœãäœã§ãããã説æããŠããŸãã ããã¯çŽ æŽãããã æ®å¿µãªããããã®ãããªèŠªåã§èª å®ãªã³ãã¥ããã£ã¯ã©ãã«ã§ãããããã§ã¯ãããŸããã
OpenResty ã«ã¯ GitHub ããããäœããå£ããå Žåã«åé¡ããªãŒãã³ã§ããŸãã Google ã°ã«ãŒãã«ã¯äžè¬çãªåé¡ã«ã€ããŠè©±ãåãããšãã§ããã¡ãŒãªã³ã° ãªã¹ãããããäžåœèªã®ã¡ãŒãªã³ã° ãªã¹ãããããŸããããããè±èªã¯è©±ããŸããããäžåœèªã®ç¥èã¯ããã§ãããã
çµæ
- OpenRestyãWebã«ç¹åãããšãŠã䟿å©ãªãã¬ãŒã ã¯ãŒã¯ã§ããããšãäŒããã°å¹žãã§ãã
- ã³ãŒãã¯ç§ãã¡ãæžããã®ãšäŒŒãŠãããèšèªã¯éåžžã«ã·ã³ãã«ã§ãããã«ã§ãããããæ·å± ãäœããªããŸãã
- ã³ãŒã«ããã¯ãªãã§éåæ I/O ãæäŸããŸããNodeJS ã§èšè¿°ã§ããå ŽåããããããããŒãã«ã¯ãããŸããã
- å¿ èŠãªã®ã¯é©åãªã¢ãžã¥ãŒã«ãšã³ãŒããåãã NGINX ã ãã§ããããã¹ãŠãããã«æ©èœããããããããã€ã¯ç°¡åã§ãã
- 倧èŠæš¡ã§å¿çæ§ã®é«ãã³ãã¥ããã£ã
ã«ãŒãã£ã³ã°ãã©ã®ããã«è¡ããããã«ã€ããŠã¯è©³ãã説æããŸããã§ããããéåžžã«é·ã話ã«ãªã£ãŠããŸããŸããã
ããããšãããããŸããïŒ
åºæïŒ habr.com