SREãã¼ã ã®@cubicdaiyaã§ããä»åã¯ã¡ã«ã«ãªã§å©ç¨å®ç¸¾ã®ãã以ä¸ã®3ã¤ã®nginxã®ä½¿ãåãã«ç´¹ä»ãã¾ãã
nginxã¨ã¡ã«ã«ãª
æ¬ããã°ãéå»ã®ã¤ãã³ãã§ãä½åº¦ãç´¹ä»ãã¦ãã¾ãããã¡ã«ã«ãªã§ã¯ããã©ã¼ãã³ã¹ãã¹ã±ã¼ã©ããªãã£ãè¦æ±ãããæ§ã ãªã³ã³ãã¼ãã³ãã§nginxãããã¼ã«æ´»ç¨ãã¦ãã¾ããä¾ãã°ã
- ã³ã³ãã³ãé ä¿¡ï¼ãã£ãã·ã¥ï¼ãªãã¼ã¹ãããã·ï¼TLSã¿ã¼ããã¼ã·ã§ã³
- 20,000 req/secãªã¼ãã¼ã®APIï¼HTTPSï¼ãªã¯ã¨ã¹ããæããã¼ããã©ã³ãµ
- gRPCãApache SolrãGaurunçã®ããã«ã¦ã§ã¢ã®ããã®ãã¼ããã©ã³ãµ
- ngx_luaã«ãããã°åæåºç¤ã®ããã³ãã¨ã³ãããã¼ããã©ã³ãµããªãã¼ã¹ãããã·ã®æ¡å¼µ
ã¨ãã£ããã®ã§ããã¡ã«ã«ãªã§ã¯ãããã®ã³ã³ãã¼ãã³ããnginxãOpenRestyã§ç¨éã«å¿ãã¦ä½¿ãåããªããæ§ç¯ã»éç¨ãã¦ãã¾ãã
3ã¤ã®nginxã¨ã¡ã«ã«ãª
ã½ããã¦ã§ã¢ã¨ãã¦ã®é å¸ç©ã¨ãã観ç¹ã§è¨ãã¨nginxã«ã¯æ¬å®¶ã¨ã¯å¥ã«ãnginxã¨ngx_luaãã¯ããã¨ããå種ã¢ã¸ã¥ã¼ã«ãLuaï¼LuaJITããã³ãã«ããã½ããã¦ã§ã¢ã§ããOpenRestyã¨nginxã®ãã©ã¼ã¯ã§ããTengineãåå¨ãã¾ããï¼ãã¨ãnginxã®éçºå ã§ããNGINX, Incãæä¾ãã¦ããNGINX Plusã¨ããåç¨çã®nginxãããã¾ãããå©ç¨çµé¨ãä¹ããã®ã§ããã§ç´¹ä»ããã®ã¯æ§ãã¾ãï¼
nginx
ã¾ãã¯æ¬å®¶ã®nginxã§ããã¡ã«ã«ãªã§ã¯ä¸è¨ã®ã¹ã©ã¤ãã®ãããªTLSã¿ã¼ããã¼ã·ã§ã³ãL7ãã¼ããã©ã³ãµããªãã¼ã¹ãããã·ã¨ãã¦ã®ç¨éãã¡ã¤ã³ã«ãªãã¾ããï¼L4ãã¼ããã©ã³ãµã¨ãã¦ç¨¼åãã¦ããç®æãä¸é¨ããã¾ãï¼
é常ã®HTTPãµã¼ãããªãã¼ã¹ãããã·ã¨ãã¦ã¯ããã§ååãªä¸æ¹ãã¡ã«ã«ãªã§ã¯ï¼ä¸»ã«ngx_luaã§ï¼ããæè»ãªè¨å®ãè¡ãããçã®çç±ããå é¨ã®ãã¼ããã©ã³ãµã«OpenRestyãå©ç¨ããæ©ä¼ãå¢ãã¦ãã¦ãã¾ãã
OpenResty
OpenRestyã¯nginxã®ã»ãã«ngx_luaãã¯ããã¨ããCã§æ¸ãããå種ãµã¼ããã¼ãã£ã¢ã¸ã¥ã¼ã«ã¨ngx_luaã®APIãå©ç¨ããrestyã¢ã¸ã¥ã¼ã«ãããã¦Lua/LuaJITã§æ§æããã¦ãã¾ãã
OpenRestyã«å«ã¾ãã¦ããnginxèªä½ã¯æ¬å®¶ã®nginxã¨åºæ¬åããªã®ã§ãå¥ã«OpenRestyãå©ç¨ããªãã¦ãèªåã§ngx_luaãçµã¿è¾¼ãã ãããµã¼ãä¸ã«restyã¢ã¸ã¥ã¼ã«ãé
å¸ãããã¨ã§ä¼¼ããããªç°å¢ãæ§ç¯ãããã¨ã¯å¯è½ã§ãããOpenRestyã§ããã°ä¸»è¦ãªã¢ã¸ã¥ã¼ã«ãã©ã¤ãã©ãªã./configureãmakeãmake installã®ä¸é£ã®æµãã§ãã¹ã¦ã´ã½ãã¨ã¤ã³ã¹ãã¼ã«ããã¾ãããOpenRestyã®configureã¹ã¯ãªããã¯nginxã®configureã¹ã¯ãªãããç¶æ¿ãããã®ãªã®ã§nginxã®configureãªãã·ã§ã³ãã»ã¼ãã®ã¾ã¾å©ç¨ãããã¨ãã§ãã¾ãã
ãªã®ã§ãngx_luaãå©ç¨ããããããªã±ã¼ã¹ã§ã¯ç¹ã«çç±ããªããã°OpenRestyãå©ç¨ããæ¹ãæã£åãæ©ãããã¦éç¨ã楽ã«ãªãã®ã§ãªã¹ã¹ã¡ã§ãã
ã¡ã«ã«ãªã§ã®OpenRestyã®å©ç¨äºä¾ããã¦ãã¦ã«ã¤ãã¦ã¯éå»ã«ãã¹ããããã®ãããã®ã§ä½µãã¦ã覧ãã ããã
Tengine
Tengineã¯Alibaba社ã«ããnginxã®forkã§ããæ¬å®¶ã®nginxã«ã¯ãªãæ©è½ã®è¿½å ãæ¡å¼µãæ°å¤ãè¡ããã¦ãã¾ããããããnginxã®éçºãéå¸¸ã«æ´»çºãªãã¨ããããæ©è½é¢ã§ã®å·®ã¯ä»¥åã¨æ¯ã¹ãã¨å°ãããªã£ã¦ãã¦ãã¾ããä¾ãã°ãã¢ã¸ã¥ã¼ã«ã®åçãã¼ãã£ã³ã°ãUnbuffered uploadãconsistent hashã«ããã¢ããã¹ããªã¼ã ã®ãã¼ããã©ã³ã¹ãSocket Shardingãsyslogã®ãµãã¼ãã¨ãã£ãæ©è½ã®å®è£ ã¯Tengineãå è¡ãã¦ãã¾ããããç¾å¨ã¯nginxã§ãå©ç¨å¯è½ã§ãã
䏿¹ã§SPDY/3.1ã¨HTTP/2ã®åæãµãã¼ãã¨ãã£ãnginxã§ã¯ãµãã¼ãããã¦ããªãæ©è½ãä»ã§ãããããã¨ããã®ã§å ´åã«ãã£ã¦ã¯å©ç¨ããã¡ãªããã¯ä¾ç¶ã¨ãã¦ããã¾ãã
ã¡ã«ã«ãªã§ã¯ä»¥åSPDY/3.1ã¨HTTP/2ãä½µç¨ããç®çã§Tengineãå©ç¨ãã¦ãããµã¼ããããã¤ããã£ãã®ã§ãããä»ã¯CloudFlare, Inc.ãOSSã§å ¬éãã¦ããSPDY/3.1ã¨HTTP/2ã®åæå©ç¨ãå¯è½ã«ãããããããã¦ãnginxã«ç½®ãæãã£ã¦ãã¾ããï¼ãªã®ã§ç¾å¨ã¯Tengineã¯ä½¿ã£ã¦ãã¾ãããï¼
ã½ããã¦ã§ã¢ã®è¯ãæªãã¨ã¯å¥ã«æ°ãã¤ããã¨ãã
ã½ããã¦ã§ã¢ã®è¯ãæªãã¨ã¯å¥ã«3ã¤ã®nginxã使ãåããã«ããã£ã¦ä»¥ä¸ã®é ç®ã念é ã«ç½®ãã¦ããã¨ããã§ãããã
- OpenRestyãããã¯Tengineã¨æ¬å®¶ã®nginxã¨ã®äºææ§
- ãªãªã¼ã¹ãµã¤ã¯ã«ã®éã
OpenRestyãããã¯Tengineã¨æ¬å®¶ã®nginxã¨ã®äºææ§
OpenRestyã«å«ã¾ãã¦ããnginxèªä½ã¯æ¬å®¶ã®nginxã¨åºæ¬åãã§ãã
ã¾ããOpenRestyã«å«ã¾ãã¦ããã®ãã©ã®nginxã®ãã¼ã¸ã§ã³ãªã®ãã¯OpenRestyã®ãã¼ã¸ã§ã³ã§å¤å¥ã§ãã¾ãã
ä¾ãã°å·çæç¹ã§ã®OpenRestyã®ææ°ãã¼ã¸ã§ã³ã¯1.9.7.4ã§ãããããã¯nginx-1.9.7ããã¼ã¹ã«ãã¦ãã¾ãã
ããã¦æ¬¡æãªãªã¼ã¹åè£çã®1.9.15.1 RC1ã¯nginx-1.9.15ããã¼ã¹ã«ãã¦ãã¾ããã¤ã¾ãå
é 3ã¤ã®æ°åãnginxã®ãã¼ã¸ã§ã³çªå·ãæãã¦ããã¨ãããã¨ã§ãã
Tengineã¯å ã®nginxãããªãæ¡å¼µãã¦ããã«ãé¢ãããäºææ§ã¯é常ã«é«ãã§ããããªãªã¼ã¹ãµã¤ã¯ã«ãé·ãã®ã§ãã¼ã¹ã«ãã¦ãããã¼ã¸ã§ã³ãå¤ããªãå¾åãããã¾ããä¾ãã°å·çæç¹ã§ã®ææ°çã§ãã2.1.2ã¯nginx-1.6.2ããã¼ã¹ã«ãã¦ãã¾ããï¼å ¬å¼ã®README.mdã«ããã¨ãAll features of nginx-1.6.2 are inherited, i.e., it is 100% compatible with nginx.ãï¼
ãªãªã¼ã¹ãµã¤ã¯ã«ã®éã
æ¬å®¶ã®nginxã«ã¯mainlineã¨stableã¨ããï¼ã¤ã®éçºãã©ã³ããããã大ä½1ã2ã¶ææ¯ã«mainlineãã©ã³ãã®ææ°ãã¼ã¸ã§ã³ããªãªã¼ã¹ãããå¾åãããã¾ãã䏿¹stableãã©ã³ãã§ã®ãªãªã¼ã¹ã¯ç·æ¥æ§ã®é«ãä¿®æ£ãã¡ã¤ã³ã§ãã¾ãé »ç¹ã«ã¯è¡ããã¾ãããnginxã®mainlineãã©ã³ãã¨stableãã©ã³ãã®éãã«ã¤ãã¦ã¯nginxã®å ¬å¼ããã°ã§ç´¹ä»ããã¦ãã以ä¸ã®è¨äºãåèã«ãªãã¾ãã
OpenRestyãTengineã¯æ¬å®¶nginxã®ããæç¹ã§ã®ãã¼ã¸ã§ã³ããã¼ã¹ã«ãã¦ãªãªã¼ã¹ãããã®ã§ãèªãã¨ãªãªã¼ã¹ãµã¤ã¯ã«ã¯æ¬å®¶ã®nginxããé·ããªãå¾åã«ããã¾ããOpenRestyãTengineãå©ç¨ããéã¯ãã®ç¹ã«æ³¨æãã¾ãããã
ãã¾ããnginx-buildã«ããnginxãOpenRestyãTengineã®ãã«ãã®èªååã
ä¼¼ããããªã½ããã¦ã§ã¢ã3ã¤ãããã¨ãã«ããåãµã¼ãã¸ã®é å¸ãé¢åãªã®ã§ãã¡ã«ã«ãªã§ã¯nginx-buildãå©ç¨ãã¦å種ãã«ãã¿ã¹ã¯ãèªååãã¦ãã¾ãã
nginx-buildã¯æ¬å®¶ã®nginxã ãã§ãªããOpenRestyã¨Tengineã®ãã«ãã«ã対å¿ãã¦ããã®ã§ã©ãã§ãç°¡åã«ãã«ããããã¨ãã§ãã¾ãã
# nginxããã«ããã nginx-build -d work -v 1.11.0 # OpenRestyããã«ããã nginx-build -d work -openresty -openrestyversion=1.9.7.4 # Tengineããã«ããã nginx-build -d work -tengine -tengineversion=2.1.2
ã¾ããæè¿å ¬éãããCloudFlare, Inc.ã«ããSPDYã¨HTTP/2ã®åæãµãã¼ããå¯è½ã«ãããããã®ä»ã«ãéå»ã«SPDYãHTTP/2ã®å®è£ ã¨ãã£ã大ããªå¤æ´ãè¡ãããéã«ã¢ã«ãã¡çã¨ãã¦å ¬å¼ããããæä¾ããããã¨ãããã®ã§ããããã£ãã±ã¼ã¹ã«åãã¦å æ¥nginx-buildã«ä»»æã®ããããåãè¾¼ãããã®ãªãã·ã§ã³ã追å ãã¾ããã
nginx-build \ -d work \ -patch nginx__http2_spdy.patch \ -patch-opt "-p1" \ -v 1.9.7 \ --with-http_spdy_module \ --with-http_v2_module
ã¾ã¨ã
ã¡ã«ã«ãªã§å©ç¨å®ç¸¾ã®ãã3ã¤ã®nginxã®ä½¿ãåãã«ã¤ãã¦è§£èª¬ãã¾ãããé常ã®HTTPãµã¼ãã¨ãã¦å©ç¨ããåã«ã¯æ¬å®¶ã®nginxã ãã§ãååãªã±ã¼ã¹ãå¤ãã§ããããã¼ããã©ã³ãµã¼ããªãã¼ã¹ãããã·ã§Luaã®ãããªã¹ã¯ãªããè¨èªã§æ¡å¼µã§ããã¨ä½ãã¨ä¾¿å©ãªã®ã§æè¿ã¯OpenRestyã®å©ç¨ç®æãå¢ãã¦ãã¦ããã»ãã以åã¯SPDYã¨HTTP/2ã®åæãµãã¼ãã®ããã«Tengineãå©ç¨ãã¦ãããã¨ãããã¾ããã
OpenRestyãTengineãå©ç¨ããéã¯æ©è½é¢ã ãã§ãªãæ¬å®¶ã®nginxã¨ã®äºææ§ããªãªã¼ã¹ãµã¤ã¯ã«ã®éãã«æ³¨æãæãã¾ããããããã§ã¯ããnginxã©ã¤ããã




