isuconã«åå ãã¦ããï¼ãã¼ã ããããµããããã«ãã¼ãã®æ¦ç¥ãªã©
2011/08/27ã«è¡ãããなんでもありのWebアプリケーション高速化バトル、#isuconã«ãã¼ã ããããµããããã«ãã¼ãã¨ãã¦@netmarkjpããã@ishikawa84gããã®3人ã§åå ããéè¯ã æºåªå 3ä½ãããã«è¼ãã¾ãã*1ã
ã¾ãä»åã®åå ã«ããã£ã¦äºåã«èãã¦ãããã¿ãç´¹ä»ã
ããã¸ã§ã¯ã¿ã¼ãæã¡è¾¼ãã§ã¾ãæ ç»éè³ãèªåãã¡ã®ã¢ããã¼ã·ã§ã³ãä¸ãã
å½æ¥ç¾å°ã«åããéä¸ã§ã¬ã³ã¿ã«ã·ã§ããã«å¯ã£ã¦ソーシャル・ネットワークã®DVDãåãããã¨ããã®ã§ãããå
¨ã¦è²¸åºä¸ã§æ念ã
ãããããã¸ã§ã¯ã¿ã§åãµã¼ãã®topã常æ表示ãã¦ãããã¨ã§ã¨ã¦ãææ義ã«æ´»ç¨ã§ãã¾ãããããã¸ã§ã¯ã¿ã¼ãæåããã@ishikawa84gå
çã«æè¬ï¼
ä»å¾åæ§ã®ã¤ãã³ãããã£ãå ´åãããã¸ã§ã¯ã¿ãæºåããã®ã¯é£ããã¨ãã¦ãããµããã£ã¹ãã¬ã¤ã2å°ç®ã®ãã¼ãPCãããã¨ä¾¿å©ã ã¨æãã¾ããæã¡éã³ãèããã¨è»½ãã¦èãMacBook Air2å°æã¡ããã¹ãã§ãããã
SELinuxãæå¹ã«ãã¦æ§è½å£åããªããã¨ãä¸ã«ç¥ãããã
ç´ä½æ²æãã£ããã®ã®ãæçµçã«Enforcing(strict)ã§ã®éç¨ã«æåãããããã®ã¹ã³ã¢ãä¸ãããã¨ãã§ãã¾ããã
ä»åSELinuxã®è¨å®ã¯@ishikawa84gå
çå°ä»»ã§è¨å®ãã¦é ãã¾ããããããããã ãã®ããªã·ã¼è¨å®ãèªåã ãã®åã§å®è£
ããã®ã¯ã¡ãã£ã¨é£ããã§ããã
SELinuxå°å
¥ã«ããæ§è½å£åããããã³ãã³ãå®è¡ã®å¶ç´ãªã©ã«å¤å°è¦ãããããæãã§ã*2ã
ã¨ããããä»å¾ã¯SELinuxã¯ããã©ã«ãæå¹ã§ããã¨æããã
Webãµã¼ãã«Cherokeeãå°å ¥ãæ¥æ¬Cherokeeã¦ã¼ã¶ã¼ä¼ï¼ä»®ç§°ï¼ãè¨ç«ãã
ãã£ãããªã®ã§æ¥æ¬ã§ã¯ãã¾ãç¥ããã¦ããªãã§ãããCherokee Web Serverãå°å
¥ãããã¾ãæ§è½ã¢ãããã§ããããã§ããã°æ¥æ¬Cherokeeã¦ã¼ã¶ã¼ä¼ï¼ä»®ç§°ï¼ã®è¨ç«ããã®å ´ã§å®£è¨ãããã¨æã£ã¦ãã¾ãããã
psgiãFastCGIã§åãããã¨ãã§ããæ念ã
ãªããäºåã«Cherokeeã触ã£ã¦ã¿ãã¨ããæã£ã以ä¸ã«åºæ¥ããããããã¥ã¡ã³ãããã£ãããã¦ã¦GUIã®ç®¡çç»é¢ãããæãã§ããishikawa84gå çãSELinuxç¨ã®ããªã·ã¼ãä½ããã¦ãã®ã§SELinuxã§ãå®å¿ã§ãï¼ãã£ããï¼ï¼ã
ãµã¼ãéã®éä¿¡ããã¹ã¦IPv6ã«ç½®ãæãã¦æ§è½åä¸ãå³ã
ãã¼ããã©ã³ãµã¨Webãµã¼ãéãWebãµã¼ãã¨DBãµã¼ãéãIPv6ã§éä¿¡ããã¦ãIPv6ã®å®åãä¸ã«ç¥ããããäºå®ã§ããããå½æ¥ãã£ããIPv6ã®ãã¨ãå¿ãã¦ã¦å®æ½ãã¦ã¾ããã§ããã次åã®èª²é¡ã¨ãªãäºå®ã§ãã
æéããã£ããGentooãã¤ã³ã¹ãã¼ã«ãã¾ãããã
#isucon ãã¦ããªã»ãããã¦ãããããããã®ã§ãã¾ãGentooãã¤ã³ã¹ãã¼ã«ã§ããã
çããã®æå¾ ãè£åã£ã¦ãã¿ã¾ãããGentooãã¤ã³ã¹ãã¼ã«ããæéã¯ããã¾ããã§ããã
ãã¼ã ããããµããããã«ãã¼ãã§å®æ½ããå 容ã«ã¤ãã¦
ãã¦ããã¼ã ããããµããããã«ãã¼ãã§è¡ã£ãããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã§ãããå®æ½ãããã¨ã¯æ¬¡ã®ãããªæãã§ããã
- ãã³ããã¼ã¯å®è¡ä¸ã«topã®å®è¡çµæãç®è¦ç¢ºèªãä½ãããã«ããã¯ã«ãªã£ã¦ããã®ãã調ã¹ã
- MySQLã®ã¯ã¨ãªã¼ãã£ãã·ã¥ãæå¹ã«ãã
- slow queryã§ããã«ããã¯ã«ãªã£ã¦ããSQLã調æ»
- MySQLã®ã¹ãã¼ãã¨ããã°ã©ã ãæ¸ãæãã¦JOIN ... GROUP BY ... ORDER BY MAX(created_at) ... ã¨ãªã£ã¦ããã¨ããã解æ¶
- ãã¼ããã©ã³ãµã¼ã®Apacheãworkerãã¼ã¹ã«ãã
- éçã³ã³ãã³ã(js,img,css)ã¯ãã¼ããã©ã³ãµã«è¨ç½®ãããã¼ããã©ã³ãµããç´æ¥è¿ã
- Perlã®Devel::NYTProfã§ãããã¡ã¤ãªã³ã°ãè¡ããããã«ããã¯ã¨ãªã£ã¦ããé¨åã調ã¹ã
- ã«ã¼ãã«ãã©ã¡ã¼ã¿ã®ãã¥ã¼ãã³ã°ãè¡ã
- SELinuxãæå¹ã«ãã
ãã®ãã¡ä¸çªå¹æããã£ãã®ã¯3çªç®ã®ã¹ãã¼ãå¤æ´ã¨ããã«ã¨ããªãããã°ã©ã å¤æ´ã§ãããããã¯優勝されたチームfujiwara組ãè¡ãªã£ã¦ããã®ã¨å
¨ãåãææ³ã§ãã
5ã¾ã§ãè¡ã£ãæç¹ã§30000å¼±ç¨åº¦ã®ã¹ã³ã¢ã«ãªã£ãã®ã§ããã¨ã¯å¾®èª¿æ´ã«çµå§ãã¦ããæ°ããã¾ãã
ãã¼ããã©ã³ãµãnginxã«å¤ãã¦ãæ§è½ã¯ä¸ãããªãã£ãã®ã§æ·±ã追æ±ããApacheã®ã¾ã¾ã§éç¨ãã¾ããã
Webãµã¼ãé¨åãCherokeeã«ãããã¨ãã¾ããããPlackå¨ãããã¾ãç解ãã¦ãããFastCGIåã«å¤±æããããæ念ãã¦ãã¾ãã
MySQLããã¼ã¸ã§ã³ã¯MySQL謹製ã®5.5.15ã使ããã¦ãããããä¸ããã³ã³ãã¤ã«ãªã©ã¯ãã¦ã¾ãããMySQLã¯MySQL謹製ã®ãã¤ããªããã±ã¼ã¸ãä¸çªéãã®ã§ãã
ã¨ãããã¨ã§ããã¼ã åã¯ããããµããããã«ãã¼ãã§ãããçµå±ã¤ã³ãã©å¨ãã¯ãã¾ãå¼ããã»ã¼ããã©ã«ãã®ã¾ã¾ã§ãã*3ãçµæã¨ãã¦ã¢ããªã±ã¼ã·ã§ã³å¯ãã®å¤æ´ãã¡ã¤ã³ã«ãªã£ã¦ãã¾ãã¾ããã
ãã®ä»
ä»åããã°ã©ã ã«å¯¾ãã¦ç§ã®æ¹ã§å çã»ä¿®æ£ããå 容ã«ã¤ãã¦GitHubã«ã¢ãããã¾ãããæéããªãä¸ã§æ¥ãã§ã³ããããããããéãã³ãããã«ãªã£ã¦ããã¾ããã容赦ãã ããã
ã¾ã¨ã
æãããã¼ã ããããµããããã«ãã¼ãã®ãªã¼ãã¼ã§ãã@netmarkjpå çã®ãã®ä¸è¨ã§ç· ãããã¦ããã ãã¾ãã
ä»æ¥ã® #isucon ãå æ¥ã® #tuningathon ãã ãã©ããã¥ã¼ãã³ã°ã®ã¨ãã«hotspotãããªãã¨ããããããã®å¥½ããªäººãå¤ããåè¦ã§ããããã¦ã³ã¢ããã¼ãã§å®å®ãã¦ç¢ºå®ã«çæéã«ææåºãã®ã¯ããããçå®ã«ããã ã¢ããã¢ããã¼ãã§ããããã«ãªãã°å®å®ãã¦2ä½ã¨ãã
ããã«ããã¯å¤å®å¤§äºã ããã¨ãããã¨ã§ã
*1:ã©ããã準優勝ではなかったようですã
*2:ä¾ãã°ç´ ç´ã«ãµã¼ãã¹åèµ·åã¯ã§ããªããªãã¨ããtopã«ããã»ã¹ãåºã¦ããªããªãã¨ããã¨ãã£ã¦ãã©ã¡ãã対å¿çã¯ããã¾ãã