ã¿ã¤ãã«ã®éãã§ãPHP使ãã¨Scala使ãã¨Perl使ããéã¾ã£ã¦æ»åãå°½ãããã®ã§ããISUCONã«æåããã®ã§ãããISUCONå½æ¥ã¾ã§ã®æµãã¨å½æ¥ã®åçç¹ãªã©ãè¨é²ãã¦ããããã¨æãã¾ããç¹ã«æè¡çå 容ã¯ãªãã
Â
ã¤ãã§ã«ãæå¾ã«éãªæ±ºåã®äºæ³ãè¼ãã¦ããã¾ããã
Â
ããã°æ¸ããã°ã¨è¨ããªãã延ã³å»¶ã³ã«ãªã£ã¦ãã¦ãã¤ã®ã¾ã«ãISUCON決åãææ¥ã«è¿«ã£ã¦ããã®ã§æ ã¦ã¦å ¬éã
ãã¼ã ãã«ãã£ã³ã°
ãããã2å¹´é£ç¶PHPã§ISUCONã«åºå ´ãã2å¹´é£ç¶ã§ãåªåãã¦PHPã®åªç§ãã証æãã¦ã¿ãããã¨è¨ã£ã¦ã¯æ±ºåã¾ã§ã¯é²ãããã©ã決åã§ã¯æ¨æãã ã¨ããã®ããã¤ãã®ãã¿ã¼ã³ã ã£ãç§ã§ãããä»å¹´ã¯å¤ã«ãã¯ã¦ãªã¨ããååã®PHPã®ãã®åããªãPerlã¨Scalaã®ä¼ç¤¾ã«ã¤ã³ãã©æ
å½ã¨ãã¦è»¢è·ãã¦ããã¾ãã¦ããã¯ã¦ãªã®ç¤¾å¡ã¨ISUCONã«åºãå ´åãPerlãScalaã«ãªãã ãããPHPã®åªç§ãã¯ç¤ºãããã«ãªãã®ã極ãã¦æ®å¿µã§ã¯ãããã ããã¯ããã¨ãã¦ä»å¹´ããåªåããããã¨å¼·ãææ°è¾¼ã¿ããã£ã¦éããã¦ããã®ã§ããã
ããã¦åªåããããã«ç¤¾å
ã®ãããããªäººã«å£°ãããã¤ã¤ãã¼ã ãã«ãã£ã³ã°ãè¡ã£ã¦ããã®ã§ããããã§èª¤ç®çºçããªãã¨ãISUCON決åã®ãã10/31ã¯ç§ã®å¤§å¦æ代ã®å人ã®çµå©å¼ã®æ¥ã§ããã¾ãã¦ã çãISUCON決åãé å¼µã£ã¦ããä¸ãç§ã¯ã¯ããé ãä¹å·ã¾ã§åºæãã¦ãããã¨ãçºè¦ããã®ã§ããã
æµç³ã«æ±ºåã«åå ã§ããªãã®ã¯ç³ã訳ãªãã¨ãããã¨ã§å½æ声ãããã¦ããã¡ã³ãã¼ã«ã¯ä¸åº¦ãã¼ã 解æ£å®£è¨ãããããã§ãã決åã«ã¯åºãããªãã®ã§ããISUCONäºé¸ã ãã§ãåºããã§ãã 誰ãä¸ç·ã«åå ãã¦ããã ãã¾ããããã¨å¼±æ°ã«ç¤¾å
ã§å¼ã³ããã¦ããã¨ãããè¶
è¥æãåå ãã¦ããããã¨ã«ãªãã¾ãããå½¼ã¯ç¤¾å
ã§Scalaãæ¸ãã¦ãã ã¾ãããç§ã¯PHP使ããªãããScalaãJVMã¯å¦ã°ãªãã¦ã¯ãããªãã¨æã£ã¦ããã®ã§ããããScalaã§äºé¸ãæ¦ãããã¨æ±ºããã®ã¯å¤§å¤èªç¶ãªæµ ãã ã£ãã®ã§ãããããã¦ãæ´ã«ãScalaã§æ¦ãã®ã§ããScala使ãã§ãScalaãåå¼·ããã人ã§ãããã¨1人ã¡ã³ãã¼åéä¸ã§ãããã¨ç¤¾å
ã§å£°ããããã¨ãããè¥æã®ãã¼ãæ°å2人ç®ãPerl使ããæãæãã¦ããã¾ãã¦ãç¡äºã«ISUCONäºé¸ã«ã¯3人ãã¼ã ã§åå ã§ãããã¨ã«ãªã£ãã®ã§ããã
ãã®ãããªæµãã§ãPHP使ãã¨Scala使ãã¨Perl使ãã1åã«ä¼ãã¨ããããªã¼ã ã¡ã³ãã¼ã§ISUCONãæ¦ããã¨ã«ãªã£ãã®ã§ããã
決åã«åºãããªãç§ããã¼ã ãçµããã¨ããã®ã¯å¤§å¤ããããããå¬ããæã£ã次第ã§ã(ç§ã¯åå ã§ããªããã©)è¥ã2人ã«çµ¶å¯¾ã«æ±ºåãä½é¨ãã¦ããããããã¨å¼·ã決æãã次第ã§ããã
ãªããã¤ã³ãã©æ
å½ã¯ç§ã§ãã¨ã®2人ã¯ã¢ããªã±ã¼ã·ã§ã³ã¨ã³ã¸ãã¢ã¨ãªã£ã¦ããã¾ããã¾ããåã
ãããISUCONã§è¥è
æ½°ããã¿ãããªãã¨ãè¨ã£ã¦ããã®ã§ãããè¶
è¥ã2人ã¨ãã¼ã ãçµãã ãã¨ã«ããå¹³åå¹´é½¢ãåçã«ä¸ãã£ãããæ¹éã転æãããã£ããæ½°ããã¨ããæãã§é å¼µããã¨ã«ãã¾ããã
Â
ãªãã1人ã¯äº¬é½ããåå ã§æ®ã2人ã¯æ±äº¬ããåå ã¨ãããã¨ã§ãé éã§ãã£ã¦ã¾ããã
ãã¼ã å決ã
ãã¼ã åã¯å¤§åã§ããããã«ãã£ã¦å½æ¥ã®ãã³ã·ã§ã³ãããªãå¤ãã£ã¦ãã¾ãã
ãscalaç¥ããã常åãã殺æ®æç(ã©ã¸ã«ã«ãµã¼ã«ã¹)ããäºéè¨èª(ãã¹ããªãã¯ãªãã«ãã¼)ããªã©è²ã
æ¡ãåºãã¾ããããçµå±åå è
åä½ã®IDãæ··ãããããªãã¼ã åã«è½ã¡çãã¾ããã
äºåæºå
ãScalaã§è¡ããã¨è¨ã£ããã®ã®ã¤ã³ãã©æ
å½ã®ç§ãJVMã®ç¥èãå
¨ããªããã¨ããããå¿
æ»ã§JVMã®åå¼·ãè¡ãã¾ãããå
·ä½çã«ã¯ã社å
ã§JVMã®ã¤ã³ãã©ãè¦ã¦ããæ¹ã«ãJVMåå¼·ããããã§ããããæ¬ãªãã£ãããã¨èãã¦æãã¦ãããããJavaããã©ã¼ãã³ã¹ããã²ãããèªãã§ãã¾ããããã®çµæãJavaã®GCã«ã¤ãã¦ã¯çµæ§è©³ãããªã£ãæãããã¾ããã
Â
O'Reilly Japan - Javaããã©ã¼ãã³ã¹
ã¾ããæåã«è¨å®ãããã«ã¼ãã«ãã©ã¡ã¼ã¿ã®å¤ãå
¥ãã¦ãããããã¼ã«ã«ã¤ãã¦ã¾ã¨ãããããã¦ãã¾ããã
å½æ¥éå§åãå度ã®ä½¿ç¨è¨èªæ±ºã
ç§ãã¡ã¯ISUCONã®2æ¥ç®ã«åå ããã®ã§ãããTwitterãè¦ã¦ããéããISUCON1æ¥ç®ã®PHPå®è£
ã¯ä½ãå¤ãªãã¨ããã£ãã£ã½ãããISUCON1æ¥ç®ã¯Nodeå®è£
ããªãã£ãããããã¨ããæ
å ±ãè¦ã¦ããWebæ¥çã§ã¯ããã¾ã§ã¡ã¸ã£ã¼ã§ã¯ãªãScalaå®è£
ãä½ãããåé¡ãããå¯è½æ§ããããææªå®è£
èªä½ãåå¨ããªãå¯è½æ§ããããã¨ããçµè«ã«éããããscalaããã¡ã ã£ãå ´åã®ä½¿ç¨è¨èªã®é¸å®æ¹æ³ã決ãããã¨ã«ããã®ã§ããã
ããã§å度3人ã®ä½¿ç¨å¯è½è¨èªãªã©ã調æ»ããã¨ãããPHP, Scala, Perlã®è¶
å¾æè¨èªã®ä»ã«ãã3人ã¨ãJSã¯æ¸ãããã@stefafafanã¯PHPãèªãã ãã¨ãããããgoãªã3人ã¨ã大ä¸å¤«ï¼ããªã©ã¨ãã話ãåºãã®ã§ãããçµæã¨ãã¦ããç¹ã«ä½äºããªããã°Scalaã§ããããããScalaã«ä½ããã£ãå ´åã¯@stefafafanãã¾ã èªããç§ãè¶
å¾æãªPHPã§ãããã¨ããçµè«ã«ãªã£ãã®ã§ããã
ä»æãã°ããã失æã§ãããã¤ã³ãã©æ
å½ã®å¾æãªPHPã§ãã®ã¾ã¾ããã®ã§ã¯ãªããã¢ããªã±ã¼ã·ã§ã³ã¨ã³ã¸ãã¢ãå¾æãªè¨èªã«åãããã¹ãã§ãScalaããã¡ã ã£ããPerlã§ãããã¨ããã®ãæ£è§£ã ã£ããªãã¨ä»ã«ãªã£ã¦ã¯æãã¾ãã
Â
å½æ¥ãéå§
Â
éå§ãã¦æ©ã ãScalaå®è£ ã§ã¯ååã®ãã³ããã¼ã¯ã¯éãã¾ãããã¨ãã話ãåºã¦ãããããScalaã¯ããã¦ä¸è¨æ±ºãã¦ããæ¹ééãPHPã§ãããã¨ã«æ±ºå®ãã¾ããã
Â
ã¢ããªã±ã¼ã·ã§ã³ã¨ã³ã¸ãã¢2人ã«ã¯ã³ã¼ããèªãã§ãããã¤ã¤ç§ã¯ã¨ã«ããã¢ããªã±ã¼ã·ã§ã³ãåããã¨ããã®ã«æ³¨åããªããé å¼µã£ã¦ãããä¸æ¦ã¢ããªã±ã¼ã·ã§ã³ãåããã¦æåã®ãã³ããã¼ã¯ãéã£ãã®ã§ããããã§ããã£ãã
Â
å½æ¥ããã®å¾
Â
ã¢ã¯ã»ã¹ãã°ããé ãã¨ã³ããã¤ã³ããç¹å®ããã¹ãã¼ã¯ã¨ãªãã°ããé ãã¯ã¨ãªãç¹å®ããã¨ããã®ãè¡ããªãã15æãããã«3ä½ã«ãªã£ã¦ãã£ã¡ããã³ã·ã§ã³ä¸ãã£ããããªããããå¾ç¹ã®ä¼¸ã³ãããã§æ¢ã¾ãããã®å¾ã¯ç¹ã«ä½ãã§ããçµãã£ãã®ã§ããã
Â
ãªããmy.cnfãå¥ã®å ´æã«ãããã¨ã«æ°ã¥ããªãã£ãã¤ã³ãã©æ å½ã®ç§ã¯æ¬å½ã«æ»ãã¹ãåå¨ã¨ãã¦ååãå»ã¾ããã¹ãã§ãããã
Â
æå¾ã®10åãããã§ãªãããã³ããã¼ã¯ãfailãå§ãã¦ãæçµçã«å¾ç¹ãåºã¾ããã§ãããè¬ã
Â
åçç¹
Â
ä¸ã«ãè¨è¼ããã®ã§ãããç§ãã¤ã³ãã©æ å½ã ã£ãã®ã«ç§ãä¸çªå¾æ(ä»ã®2人ã¯ãããªã«å¾æã§ã¯ãªã)ãªè¨èªãé¸æãã¦ãã¾ã£ãã¨ããã®ãæ大ã®å¤±æã§ãååã®ç§ã®ããã«ããã¯ã£ã·ããå端ãªããã®çµææ§ã ãªå ´é¢ã§åé¡ãçºçããæãããã¾ããã
Â
ç§ã®ããã§åªç§ãª2人ã®è¶³ãå¼ã£å¼µã£ã¦ãã¾ã£ããªãã¨åçãããã
Â
ç§ãããã«ããã¯ã«ãªã£ããã¨ã§(ã¨ããããããããã«ãã£ã¦ç§ãããªããã³ãã£ããã¨ã§åªå 度ä»ããå´©å£ã)æ大ã«ãã°ãã£ãã®ã以ä¸2ç¹ã
Â
my.cnfãå¥ã®å ´æã«ããã®ã«æ°ã¥ããªãã£ã
Â
ISUCONéå§ç´å¾ããmy.cnfãæ¸ãæãã¦ã¹ãã¼ã¯ã¨ãªãã°ãåºãããã¨ãªã£ãããã§ããããªããmy.cnfãæ¸ãæãã¦ããã°ãåºã¾ããããããããããããªã¨æããªãããset globalã§ãã°ãåºãããã«ãªãããã®ç´å¾ã«å ¨ç¶å¥ã®çç±ã§mysqlãèµ·åããªããªããªã©äºä»¶ããããã®ã¾ã¾my.cnfã®ä»¶ã¯å¿ãå»ã£ã¦ãã¾ã ãã
æå¾ã®æ¹ã§ãããmy.cnfã®è¨å®ã¾ã ãã¦ãªãããããã¨ãªãinnodb buffer poolã®è¨å®ãªã©ãããã®ã§ããããããbuffer poolå¢ãããã®ã«ãªããOSãã¡ã¢ãªä½¿ã£ã¦ãªããªããDBãã¼ã¿ã®ãã¡ã¤ã«éçã«ãããªãã¨ã¯ãªãã¯ãã ãâ¦ãªãããããããªããã¨æãã¤ã¤ããã®å¾å¥ã®ä½ãã«ã¾ãå¿æ®ºããã¦ãã®ã¾ã¾ã«ãªã£ã¦ããã®ã§ãããã²ã©ãã£ãâ¦
Â
å人ã®éçºç°å¢ãä½ããªãã£ã
Â
æ¯å¹´ã®ããã«å人ã®éçºç°å¢ããµã¼ãä¸ã«å¥ãã¼ãã§ç«ã¡ä¸ãã¦ããã§éçºãããã¨æã£ã¦ããã®ã§ãããã©ããGCEã§ãã¡ã¤ã¢ã¦ã©ã¼ã«è¨å®ããã¦ãåããªãããã¼ã«ã«ã®éçºç°å¢ãä½ãã®ãPHPã¯ã¡ãã£ã¨é¢åã ãªãã¨ããæãã§ãæçµçã«ãã¢ããªã¨ã³ã¸ãã¢ã®1人ã¯ãµã¼ãä¸ã®ããã°ã©ã ãç´æ¥ç·¨éãããã1人ã¯PHPãæ¸ãããã¨ãªãã«ãé¢ããããã¼ã«ã«ã§é©å½ã«æ¸ãæãã¦ã¯pushãã¦ãµã¼ãä¸ã§åä½ãè¦ã¦ã¿ãã¨ããæãã«ãªããããªããã¡ããã¡ãã ã£ãã
Â
ããã«ããããããã§ãããããããã³ã¨ä½ã£ã¦ããã¤ãã»ã¼ãã®ã¾ã¾ããã¨åããããã¨ãã§ããå½¼ã¯ã¹ã²ã§ãªã¨æã£ãéãã§ããã
Â
è¯ãã£ããã¨
Â
ã¨ã«ãããç§ã決åã«åºãããªãç¶æ ã«ãããããããã¼ã ãçµæã§ãã¦äºé¸ã«åå ã§ãããã¨ã¯æ¬å½ã«å¬ããã£ãã§ããã¾ããåããã¼ã ã ã£ãè¥è 2人ã¯ãã®çµé¨ã«ãã£ã¦1å¹´å¾ããã®ããã人æã«ãªãæ¥å¹´ã®å¼ç¤¾ã®å±¤ã¯æ´ã«åããªãããæãã ãªã¨ããæã(è¥è ã«è² ããªãããã«ãã¡ããç§ãé å¼µãã¾ãã¨ãï¼)
Â
ãã¨ã15æãããã«n+1åé¡è§£æ±ºãã¦çªå¦3ä½ã«èºãåºãã®ã¯æ®éã«ãã³ã·ã§ã³ä¸ãã£ããå¬ããã£ãã
Â
決åäºæ³
Â
以ä¸ã®ãããªãã¦ãæãã®ã¯ã¼ããé£ã³äº¤ã
Â
ä¸å¿ è¦ãªãã¤ã¯ããµã¼ãã¹
Â
ããã¤ã¯ããµã¼ãã¹ããªã©ã¨è¨ã£ã¦1å°ã®ãµã¼ãå ã«ä¸å¿ è¦ã«è¤æ°ã®dockerã³ã³ããã(ãããã¯å¥ãã¼ãã§HTTPãµã¼ããä½å°ã)ç«ã£ã¦ããããããããäºãã®APIãå©ãã¾ãã£ã¦ããä¸ç観ãããããå解ãã(ãã¤ã¯ããµã¼ãã¹ãããããããã®ã¾ã¾å¥ãµã¼ãã¸æã£ã¦ããã)ã¨ããããå ¨ã¦ãå§ã¾ãã
Â
ããã°(?)ãã¼ã¿
Â
ã¢ã¯ã»ã¹æ å ±ã貯ãã¦æå¾ã«ãã®ã¢ã¯ã»ã¹æ å ±ãéè¨ããããã¹ã«ã¼ããããä¸ãã£ã¦ãã³ããã¼ã¯ä¸ã®ã¢ã¯ã»ã¹æ°ãå¢ããã»ã©æå¾ã®éè¨ã§ã¿ã¤ã ã¢ã¦ããããããªãã
Â
æåã¯åæçã«ãã°æ¸ãè¾¼ã¿åã³éè¨ããã¦ããã®ã§ãfluentd(ç)ã使ã£ã¦éåæã«ãããéè¨ãå¾ã§ã¾ã¨ãã¦ããããã«ããããããã¨ã§é£èºçã«ç¹æ°ä¸æãè¦è¾¼ã¾ãã(â¦ã®ãâ¦ï¼)ãç(åºé¡é£ããããã¯ãfluentdãæ´»èºããä½ããåºã¦ããã®ã§ã¯ãªããã¨ããäºæ³ããã)
Â
æå¾ã«
Â
æ¥å¹´ããã¯åªåããã(ãã®é ã«ã¯Perlãããã¯Scalaã®è£å´ã«ç¿çãã¦ããããã«é å¼µãã¾ã)
Â
ã¨ããããã§ãä¹å·è¡ã£ã¦ãã¾ãï¼çããISUCON決åé å¼µã£ã¦ï¼ï¼ï¼
Â
ä½µãã¦èªã¿ãã
Â
Â
Â
Â