¼«²ÈÀ½ #isucon2 ¤Î¤Ä¤¯¤ê¤«¤¿

¥«¥Æ¥´¥ê
¥Ö¥Ã¥¯¥Þ¡¼¥¯¿ô
¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ - ¼«²ÈÀ½ #isucon2 ¤Î¤Ä¤¯¤ê¤«¤¿
¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ

¤³¤ó¤Ë¤Á¤Ï¡¢tagomoris¤Ç¤¹¡£ISUCON2 ¤È¤¤¤¦¥¤¥Ù¥ó¥È¤Ç¼ç¤Ë¥ì¥®¥å¥ì¡¼¥·¥ç¥ó¤ò¹Í¤¨¤¿¤ê¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë¤òºî¤Ã¤¿¤ê¤·¤Æ¤¤¤Þ¤·¤¿¡£ÉáÃʤÏNHN Japan ¥¦¥§¥Ö¥µ¡¼¥Ó¥¹ËÜÉô¤È¤¤¤¦¤È¤³¤í¤ÇƯ¤¤¤Æ¤¤¤Þ¤¹¡£
ÀèÆüISUCON2¤Ï¹¬¤¤¤Ë¤âÂ繥ɾ¤Î¤¦¤Á¤Ë½ªÎ»¤·¤Þ¤·¤¿¤¬¡¢¤³¤Î¤ªÂꤪ¤è¤Ó´Ø·¸¤¹¤ëÏÃÂê¤ò¤¼¤Ò¿¤¯¤Î¿Í¤Ë¤âÃΤäƤ¤¤¿¤À¤­¤¿¤¤¡ª ¤È¤¤¤¦¤«¤³¤Î¤Þ¤Þ¼Î¤Æ¤ë¤È¤«¤Á¤ç¤Ã¤È¤â¤Ã¤¿¤¤¤Ê¤¤¡ª ¤È¤¤¤¦¤³¤È¤â¤¢¤ê¡¢ºî¶ÈÂоݤΥ¢¥×¥ê¥±¡¼¥·¥ç¥ó¥³¡¼¥É¡¢¤ª¤è¤Ó¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë°ì¼°¤ò¸ø³«¤·¤Æ¤¤¤Þ¤¹¡£

¤³¤Î¥¨¥ó¥È¥ê¤Ç¤Ï¡¢¤³¤ì¤òÍѤ¤¤Æ°ì¼°¤òưºî¤µ¤»¡¢¤´²ÈÄí¤Ç¤âISUCON2¤òºÆ¸½¤Ç¤­¤ë¤è¤¦¡¢¤¤¤¯¤Ä¤«¤Î¼ê½ç¤ò¤´ÀâÌÀ¤·¤Æ¤¤¤­¤Þ¤¹¡£¤¼¤Ò¤ß¤Ê¤µ¤ó¤â³Ú¤·¤¤ISUCON2¥é¥¤¥Õ¤òËþµÊ¤·¤Æ¤¯¤À¤µ¤¤¡£

¤¶¤¤¤ê¤ç¤¦

º£²ó¤Ï½é´ü¥Ç¡¼¥¿¤Ï¤¹¤Ù¤ÆWeb¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥³¡¼¥É¤«¤éÅêÆþ¤µ¤ì¤ë¤¿¤á¡¢¤³¤Î¥½¡¼¥¹¥³¡¼¥É°ì¼°¤¬¤¢¤ì¤Ð¤¹¤Ù¤ÆËÜÈÖ»þ¤ÈƱ¤¸¤è¤¦¤Ëưºî¤·¤Þ¤¹¡£
¥Ù¥ó¥Á¥Þ¡¼¥¯ÀßÄ꤬ËÜÈÖ»þ¤ÈƱ¤¸ÀßÄê¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤¿¤á¡¢¤¿¤È¤¨¤Ð¥Î¡¼¥ÈPC1Âæ¤Ç¤¹¤Ù¤ÆÆ°ºî¤µ¤»¤è¤¦¤È»×¤¦¤È¤«¤Ê¤ê½Å¤¤¤Ç¤·¤ç¤¦¡£¤½¤Î¾ì¹ç¤Ë¤Ï¥Ù¥ó¥Á¥Þ¡¼¥¯ÀßÄê¤òÊѹ¹¤·¤Þ¤¹(¸å½Ò)¡£

¤·¤¿¤´¤·¤é¤¨

ISUCON2´Ä¶­¤òºîÀ®¤¹¤ëPC¤Ç¤¹¤¬¡¢°Ê²¼¤Î¤â¤Î¤¬Æ°ºî¤¹¤ë´Ä¶­¤¬É¬ÍפǤ¹¡£¥«¥Ã¥³Æâ¤Î¥Ð¡¼¥¸¥ç¥ó¤ÏISUCON2ËÜÈִĶ­¤ÇÁªÂò¤·¤¿¤â¤Î¤Ç¤¹¡£

  • ¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë
    • Node.js 0.8.x (0.8.12)
    • MySQL 5.x (5.5)
    • http_load
  • Âоݥ¢¥×¥ê¥±¡¼¥·¥ç¥ó(¸À¸ì¤Ë¤Ä¤¤¤Æ¤Ï¤É¤ì¤«¤Ò¤È¤Ä)
    • MySQL 5.x (5.5)
    • Perl 5.x (5.16.1)
    • Ruby 1.9.x (1.9.3)
    • Python 2.7 (2.7.3)
    • Node.js 0.8.x (0.8.12)
    • PHP 5.3- (5.3)
    • Java 6

³Æ¸À¸ì¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë¤Ä¤¤¤Æ¤Ï perlbrew, rbenv (or rvm), nodebrew (or nvm) ¤Ê¤É¤òÍѤ¤¤ë¤Î¤¬ÊØÍø¤À¤È»×¤¤¤Þ¤¹¡£¼ê¸µ¤Ç´û¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤ì¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£Perl¤Ë¤Ä¤¤¤Æ¤Ï System Perl ¤¬ 5.8 ¤Î¾ì¹ç¤Ï¡¢perlbrew¤ò»È¤Ã¤Æ¿·¤·¤¤¤â¤Î¤òÆþ¤ì¤ë¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£

¤Þ¤¿¥ê¥Ð¡¼¥¹¥×¥í¥­¥·¤òÍѰդ¹¤ë¾ì¹ç¡¢ISUCON2¤Ç¤Ï Apache 2.2 ¤¬¥Ç¥Õ¥©¥ë¥È¤ÇÍѰդµ¤ì¤Æ¤¤¤Þ¤·¤¿¤Î¤Ç¡¢¤½¤ì¤Ë¤¢¤ï¤»¤ÆÍѰդ·¤Æ¤¯¤À¤µ¤¤¡£

¤ª¼ê¸µ¤Ç»î¤¹¤Ö¤ó¤Ë¤ÏOS¤òÇû¤é¤Ê¤¯¤ÆÎɤ¤¤È»×¤¤¤Þ¤¹(ISUCON2¤Ç¤ÏCentOS 5.8¤Ç¤·¤¿)¤¬¡¢http_load ¤òưºî¤µ¤»¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤Î¤Ç Linux ¤ä Mac OSX ¤Ê¤É¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£Mac OSX¤Î¾ì¹ç¤Ë¤ÏXcode¤Î¥¤¥ó¥¹¥È¡¼¥ë¤¬É¬ÍפǤ¹¡£

MySQL¤Ï¤½¤ì¤¾¤ì¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£Linux¤Î¾ì¹ç¤Ï¤ª¤½¤é¤¯¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¦¤Ç¥Ñ¥Ã¥±¡¼¥¸¤¬Ä󶡤µ¤ì¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¤«¤é¡¢¤½¤ì¤ò»È¤Ã¤Æ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£Oracle¤Î¥À¥¦¥ó¥í¡¼¥É¥µ¥¤¥È¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤â¤Î¤ò»È¤Ã¤Æ¤â¤è¤¤¤È»×¤¤¤Þ¤¹¡£
ISUCON2ËÜÈÖ»þ¤Î¥Ç¥Õ¥©¥ë¥ÈÀßÄ꤬¥ê¥Ý¥¸¥È¥êÃæ¤Î webapp/config/database/my.cnf ¤Ë¤¢¤ê¤Þ¤¹¡£ISUCON2ËÜÈÖ»þ¤Î¥µ¡¼¥Ð¥¹¥Ú¥Ã¥¯¤Ë¶á¤¤´Ä¶­¤Ç»î¤¹¾ì¹ç¤Ë¤Ï¤³¤ì¤ò»È¤Ã¤Æ¤â¤è¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£PC1Âæ¤À¤±¤Ç»î¤¹¤Ê¤é¥Ñ¥Ã¥±¡¼¥¸¤Î¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤Ê¤É¤Ç¤â¤È¤ê¤¢¤¨¤ºÎɤ¤¤Ç¤·¤ç¤¦¡£

¤Ä¤¯¤ê¤«¤¿

¤Ê¤Ë¤Ï¤È¤â¤¢¤ì¡¢¥½¡¼¥¹¥³¡¼¥É¤ò¼èÆÀ¤·¤Þ¤¹¡£Å¬Åö¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤òÁª¤ó¤Ç git clone ¤·¤Þ¤·¤ç¤¦¡£isucon2¥Ç¥£¥ì¥¯¥È¥ê¤ÎÃæ¤ËŸ³«¤µ¤ì¤Þ¤¹¡£

$ git clone git://github.com/tagomoris/isucon2.git
$ cd isucon2

Web¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òưºî¤µ¤»¤ë¤¿¤á¡¢¤Þ¤ºMySQL¤Ç¥¹¥­¡¼¥Þ¤ÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£

$ mysql -u root < webapp/config/database/isucon2.sql

Perl¤Ç¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤òưºî¤µ¤»¤ë¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£cpanm¥³¥Þ¥ó¥É¤Ç¿¾¯»þ´Ö¤¬¤«¤«¤ê¤Þ¤¹¡£

$ cd webapp/perl
$ ./cpanm -n -Lextlib --installdeps .
$ perl -Mlib=extlib/lib/perl5 extlib/bin/plackup -s Starman -E production --preload-app app.psgi

¤³¤ì¤òµ¯Æ°¤·¤¿»þÅÀ¤Ç http://localhost:5000/ ¤Ë¥Ö¥é¥¦¥¶¤«¤é¥¢¥¯¥»¥¹¤·¡¢°Ê²¼¤Î¤è¤¦¤Ê²èÌ̤¬½Ð¤ì¤Ð¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î½àÈ÷¤Ï¤â¤¦´°Î»¤Ç¤¹¡£

isucon2howto_1_app_init

http://localhost:5000/admin ¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤È¡Ö¥Ç¡¼¥¿½é´ü²½¡×¤È¤¤¤¦¥Ü¥¿¥ó¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ò²¡¤·¤Æ¤«¤éºÆÅÙ http://localhost:5000/ ¤ËÌá¤ë¤È¤¤¤¯¤Ä¤«¥Á¥±¥Ã¥È¤¬Ç㤨¤ë¾õÂ֤ˤʤäƤ¤¤Þ¤¹¤Î¤Ç¡¢»î¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£¥¨¥é¡¼¤â¤Ê¤¯¥Á¥±¥Ã¥È¹ØÆþ¤¬´°Î»¤·¡¢¹ØÆþ¤·¤¿ÈÖ¹æ¤Î¥·¡¼¥È¤¬²£¤Î¹ØÆþÍúÎò¤Ê¤É¤ËÈ¿±Ç¤µ¤ì¤Æ¤¤¤ì¤ÐOK¤Ç¤¹¡£

¾¤Î¸À¸ì¤Ç¤â¤Û¤Ü»÷¤¿¤è¤¦¤Ê¼ê½ç¤Ç¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬µ¯Æ°²Äǽ¤Ç¤¹¡£¸À¸ì¤´¤È¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë README ¤¬¤¢¤ë¤Î¤Ç¤½¤Á¤é¤ò³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£ÆÃ¤ËÆñ¤·¤¤¤È¤³¤í¤Ï̵¤¤¤È»×¤¤¤Þ¤¹¡£

¥ê¥Ð¡¼¥¹¥×¥í¥­¥·¤òÀßÄꤹ¤ë¾ì¹ç¤Ë¤ÏApache¤Ç mod_proxy (¤ämod_proxy_balancer)¤ò»ÈÍѤ¹¤ëÀßÄê¤òµ­½Ò¤·¤Þ¤¹¡£¤³¤ì¤Ï´Êñ¤Ë»î¤¹¤Ê¤é¹Ô¤ï¤Ê¤¯¤Æ¤â¤è¤¤¤Ç¤·¤ç¤¦¡£
º£²ó¤Ï¾ÜºÙ¤ò³ä°¦¤·¤Þ¤¹¤¬¡¢Á°²ó¤ÎISUCON´Ä¶­¤Î¤Ä¤¯¤ê¤«¤¿ ¤Ê¤É¤Ë¤âÀâÌÀ¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¼Â»Ü¤¹¤ë¾ì¹ç¤Ï»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£

¥Ù¥ó¥Á¥Þ¡¼¥¯¤Î½àÈ÷¤È¤·¤Æ¤Ï http_load ¤Î¥Ó¥ë¥É¤¬É¬ÍפǤ¹¡£¥Ñ¥Ã¥Á¤ò¤¢¤Æ¤¿¤â¤Î¤¬ tools/http_load_isucon2 ¤Ë¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤³¤ì¤òÍѤ¤¤Þ¤¹¡£

$ cd tools/http_load_isucon2
$ make

¤Þ¤¿¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë¤ËɬÍפʥ⥸¥å¡¼¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ò¹Ô¤¤¤Þ¤¹¡£

$ cd tools
$ npm install

¤³¤ì¤Ç´Êñ¤Ê¥Ù¥ó¥Á¥Þ¡¼¥¯¤¬Æ°ºî¤·¤Þ¤¹¡£³«È¯»þ¤Ë¼ê¸µ¤Ç»î¤¹¤¿¤á¤Î¥³¥Þ¥ó¥É¤òÍѰդ·¤Æ¤¢¤ê¤Þ¤¹¤«¤é¡¢¤½¤ì¤ò»È¤¦¤Î¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£°Ê²¼¤Î¥³¥Þ¥ó¥É¤Ç localhost:5000 ¤ËÂФ·¤Æ´Êñ¤Ê¥Ù¥ó¥Á¥Þ¡¼¥¯(ËÜÈÖISUCON2¤Î½Ì¾®ÈÇŪ¤Ê¤â¤Î)¤¬Áö¤ê¤Þ¤¹¡£

$ cd tools
$ ./test.sh 127.0.0.1 5000

´°Î»¤·¤¿¤éɸ½à½ÐÎϤËJSON¤Ç·ë²Ì¾ðÊ󤬽ÐÎϤµ¤ì¤Æ¤­¤Þ¤¹¡£"err" ¤Ë²¿¤â½Ð¤Æ¤Ê¤±¤ì¤Ð´ðËÜŪ¤Ë¤ÏÄ̤äƤ¤¤ë¤È»×¤Ã¤Æ¤è¤¤¤Ç¤¹¤¬¡¢"error" ¤ä "timeout" (HTTP¥¹¥Æ¡¼¥¿¥¹¤¬¥¨¥é¡¼¤Î¥ì¥¹¥Ý¥ó¥¹¡¢¤â¤·¤¯¤Ï¥ì¥¹¥Ý¥ó¥¹¤¬¥¿¥¤¥à¥¢¥¦¥È¤·¤¿¿ô)¤¬Â¿²á¤®¤ë¾ì¹ç¤Ï¥À¥á¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¤À¤¤¤¿¤¤°Ê²¼¤Î¤è¤¦¤Ê·ë²Ì¤Ë¤Ê¤ë¤È»×¤¤¤Þ¤¹¡£(¤³¤ì¤Ï¼«Ê¬¤Î MacBook Air ¾å¤Ç¼Â¹Ô¤·¤¿¤â¤Î¤Ç¤¹¡£¸«°×¤¤¤è¤¦¤ËÀ°·Á¤·¤Þ¤·¤¿¡£¤Þ¤¿"buyer"¤ÏÊ£¿ôɽ¼¨¤µ¤ì¤ë¤Ï¤º¤Ç¤¹¤¬¡¢¾Êά¤·¤Æ¤¤¤Þ¤¹¡£)

{ "name": "starter",
  "err": null,
  "result": { "result": "success" }
}
{ "name": "checker",
  "err": null,
  "result": {
    "get": { "success": 9, "timeout": 0, "error": {} },
    "buy": { "success": 1, "soldout": 0, "timeout": 0, "error": {} },
    "first_soldout": null
   }
}
{ "name": "httpload",
 "result": { "status": { "200": 255 },
             "fetches": 255
           }
}
{ "name": "buyer",
  "err": null,
  "result": {
    "get": { "success": 30, "timeout": 0, "error": {} },
    "buy": { "success": 10, "soldout": 0, "timeout": 0, "error": {} },
    "first_soldout": null
  }
}

¤³¤³¤Ç¤Î "buyer" ¤ª¤è¤Ó "checker" ¤Î "buy" ¤Î "success" ¿ô¤ò¹ç·×¤·¤¿¤â¤Î¤¬»þ´ÖÆâ¤ËÇä¤ì¤¿¥Á¥±¥Ã¥È¤Î¿ô¤Ç¤¹¤Í¡£´ðËÜŪ¤Ë¤ÏISUCON2¤Ç¤Ï¤³¤ì¤ò¶¥¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤¬8192¤Ë㤷¤¿¾ì¹ç¤Ë¤Ï "first_soldout" ¤Ëɽ¼¨¤µ¤ì¤ë¿ôÃÍ(¤ÎºÇ¤â¾®¤µ¤¤¤â¤Î)¤¬´°Çä½êÍ×»þ´Ö¤Î¤¿¤á¡¢¤³¤ì¤ò¾®¤µ¤¯¤¹¤ë¤Î¤¬ÌÜɸ¤Ç¤¹¡£

¤â¤ê¤Ä¤±

¤µ¤Æ¤³¤ì¤À¤È¥¹¥³¥¢¤¬¤ï¤«¤ê¤Þ¤»¤ó¤·¡¢·ë²Ì¤ÎÇİ®¤ä´ÉÍý¤â¤Á¤ç¤Ã¤ÈÂçÊѤǤ¹¡£¤Ê¤Î¤Ç¥Ù¥ó¥Á¥Þ¡¼¥¯´ÉÍýÍѤΥġ¼¥ë¤òµ¯Æ°¤·¤Þ¤·¤ç¤¦¡£

¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë¤Ï tools ¤Ë¤¢¤ë manager.js ¤ª¤è¤Ó agent.js ¤ò»ÈÍѤ·¤Þ¤¹¡£¤³¤ì¤é¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ï¤½¤ì¤¾¤ì config.json ¤È agent.json ¤Ç¤¹¤¬¡¢¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï localhost:5001 ¤È localhost:5002 ¤Ç¤½¤ì¤¾¤ìµ¯Æ°¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢1Âæ¤À¤±¤Ç»î¤¹¾ì¹ç¤Ë¤Ï¤³¤Î¤Þ¤Þ»È¤¦¤Î¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£

¤Þ¤º manager ¤¬»²¾È¤¹¤ë·ë²ÌÊݸÍѤΥǡ¼¥¿¥Ù¡¼¥¹¤ª¤è¤Ó¥Æ¡¼¥Ö¥ë¤òMySQL¤ËºîÀ®¤·¡¢¤½¤ì¤«¤émanager¤òµ¯Æ°¤·¤Þ¤¹¡£

$ mysql -u root < sql/isumaster.sql
$ node manager.js

µ¯Æ°¸å¡¢¥Ö¥é¥¦¥¶¤Ç http://localhost:5001/ ¤ò¸«¤ë¤È¼¡¤Î¤è¤¦¤Ê²èÌ̤¬¸«¤é¤ì¤ë¤Ï¤º¤Ç¤¹¡£

isucon2howto_2_manager_init

¤³¤ì¤¬ISUCON2¤Ç¤â»È¤ï¤ì¤¿´ÉÍý²èÌ̤Ǥ¹¤¬¡¢¤³¤Î¤Þ¤Þ¤À¤È¥¨¡¼¥¸¥§¥ó¥È¤¬µ¯Æ°¤·¤Æ¤¤¤Ê¤¤¤¿¤á¥Ù¥ó¥Á¥Þ¡¼¥¯¤¬¼Â¹Ô¤Ç¤­¤Þ¤»¤ó¡£¥¨¡¼¥¸¥§¥ó¥È¤ò°Ê²¼¤Î¥³¥Þ¥ó¥É¤Çµ¯Æ°¤·¤Þ¤¹¡£

$ node agent.js

¤½¤¦¤¹¤ë¤È¿ôÉäǴÉÍý²èÌ̤¬°Ê²¼¤Î¤è¤¦¤ËÊѤï¤ë¤Ç¤·¤ç¤¦(±¦²¼¤ËÃíÌÜ¡ª)¡£¤³¤¦¤Ê¤ë¤È¥Ù¥ó¥Á¥Þ¡¼¥¯¤ò¼ÂºÝ¤ËÁö¤é¤»¤ë¥¨¡¼¥¸¥§¥ó¥È¤¬½àÈ÷¤Ç¤­¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤¢¤È¤Ï¼Â¹Ô¤¹¤ë¤Î¤ß¤Ç¤¹¡£

isucon2howto_3_manager_agents

¤Ê¤ª¥Ù¥ó¥Á¥Þ¡¼¥¯¼Â¹ÔÁ°¤Ë´ÉÍý²èÌÌ¤Ç¥í¥°¥¤¥ó¤¬É¬ÍפǤ¹¡£config.json ¤Î "users" ¤Ë¥í¥°¥¤¥óÍѤΥ桼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¥ê¥¹¥È¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç "manager" ¥æ¡¼¥¶¤ò»È¤¦¤È¤è¤¤¤Ç¤·¤ç¤¦¡£¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤Ç¤Ï "local" ¥Á¡¼¥à¤òÁªÂò¤¹¤ì¤Ð localhost:5000 ¤ËÂФ·¤Æ¥Ù¥ó¥Á¥Þ¡¼¥¯¤¬Áö¤ë¤Î¤Ç¡¢ÀèÄøÎ©¤Á¾å¤²¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥¹¥³¥¢¤¬³Îǧ¤Ç¤­¤Þ¤¹¡£

isucon2howto_4_result

¤ä¤Ã¤Æ¤ß¤¿¤éFAILED¤Ë¤Ê¤ê¤Þ¤·¤¿¡Ä¡Ä¡£¹â¤¤ÊÂÎó¿ô¤ËÂбþ¤Ç¤­¤º¡¢Àܳ¤Ë¼ºÇÔ¤·¤¿HTTP¥ê¥¯¥¨¥¹¥È¤¬Â¿¿ô¤¢¤Ã¤¿¤è¤¦¤Ç¤¹¤Í¡£¸¶°ø¤¬¤ï¤«¤ì¤Ð¡¢¤¢¤È¤Ï²þÁ±¤¢¤ë¤Î¤ß¡ª

¤«¤¯¤·¤¢¤¸

¤Ê¤ª¾å½Ò¤Î³Æ¥×¥í¥»¥¹¤ÏÉáÄ̤˵¯Æ°¤¹¤ë¤ÈüËö¤ò¥Ö¥í¥Ã¥¯¤·¤Þ¤¹¤«¤é¡¢ËܳÊŪ¤Ë»þ´Ö¤ò¤«¤±¤Æ¤È¤ê¤¯¤à¤Ê¤é supervisord ¤Ê¤É¤ò»ÈÍѤ·¤Æ¾ï»þ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥Éµ¯Æ°¤¹¤ë´Ä¶­¤òºî¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£

¥Þ¥·¥ó¤òÊ£¿ôÂæ»È¤¨¤ë¾ì¹ç¤Ë¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥óµ¯Æ°ÍѤȥ٥ó¥Á¥Þ¡¼¥¯¼Â¹ÔÍѤËʬ¤±¤ë¤È¤¤¤¤¤È»×¤¤¤Þ¤¹¡£Ê¬»¶¹½À®¤ò¤È¤ë¤Ë¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£

  • ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¦
    • ¥ê¥Ð¡¼¥¹¥×¥í¥­¥·¥µ¡¼¥Ð(1Âæ)¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥µ¡¼¥Ð(1Âæ¤â¤·¤¯¤ÏÊ£¿ôÂæ)¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Ð(1Âæ)
    • ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÂФ¹¤ëÀܳÀè¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î»ØÄê¤Ï webapp/config/common.${env}.json ¤Ç¹Ô¤ï¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤ì¤òÊѹ¹¤·¤Þ¤·¤ç¤¦
  • ¥Ù¥ó¥Á¥Þ¡¼¥¯Â¦
    • manager(1Âæ¡¢MySQL¤â¤³¤³¤Ë)¡¢agent (1Âæ¤â¤·¤¯¤ÏÊ£¿ôÂæ)
    • agent.json ¤Ëmanager¤ÎIP¥¢¥É¥ì¥¹¤ª¤è¤Ó¥Ý¡¼¥È¤ò»ØÄꤷ¤Æµ¯Æ°¤·¤Þ¤¹

¤Þ¤¿PC1Âæ¤Î¤ß¡¢¤¢¤ë¤¤¤ÏÈæ³ÓŪÈóÎϤʥµ¡¼¥Ð¥Þ¥·¥ó¤Î¤ß¤Ç¼Â¹Ô¤¹¤ë¾ì¹ç¡¢ISUCON2ËÜÈ֤Υ٥ó¥Á¥Þ¡¼¥¯ÀßÄê¤Ç¤Ï¤Á¤ç¤Ã¤ÈÉé²Ù¤¬¹â²á¤®¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¥Ù¥ó¥Á¥Þ¡¼¥¯¥Ä¡¼¥ë¤«¤é¤ÎÀܳ¥¨¥é¡¼¤Ê¤É¤¬¤É¤¦¤·¤Æ¤âÉÑȯ¤¹¤ë¾ì¹ç¡¢ manager.js ¤ÎÀèÆ¬¤Ë¥Ù¥ó¥Á¥Þ¡¼¥¯¤Î³ÆÉôʬ¤Ë¤ª¤±¤ëÊÂÎó¿ô¡¦µ¯Æ°¥×¥í¥»¥¹¿ô¤¬½ñ¤¤¤Æ¤¢¤ê¤Þ¤¹¤«¤é¡¢¤³¤ì¤ò¸º¤é¤·¤Æ manager ¤òºÆµ¯Æ°¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

¤Ç¤­¤¢¤¬¤ê

¤³¤ì¤Ç´Ä¶­¤Ï´°À®¤Ç¤¹¡£»×¤¦Â¸Ê¬¤Ë¤¢¤Ê¤¿¤ÎISUCON2¤ò¤ª³Ú¤·¤ß¤¯¤À¤µ¤¤¡ª ¹âÆÀÅÀ¤ò¥²¥Ã¥È¤Ç¤­¤¿¤éblog¤Ê¤É¤Ë½ñ¤¤¤Æ¤¤¤¿¤À¤±¤ë¤È²æ¡¹¤â¤È¤Æ¤â´ò¤·¤¤¤Ç¤¹¡£

NHN Japan¤Ç¤ÏISUCON2¤È³Ú¤·¤¯·ã¤·¤¯³ÊÆ®¤Ç¤­¤ë¥¨¥ó¥¸¥Ë¥¢¤òÊ罸¤·¤Æ¤¤¤Þ¤¹¡ª

¥ì¥¹¥Ý¥ó¥¹
¥³¥á¥ó¥È(0)
¥È¥é¥Ã¥¯¥Ð¥Ã¥¯(0)

¤³¤Î¥¨¥ó¥È¥ê¡¼¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲÃ