ISUCON5 ã®äºé¸1æ¥ç®ã«ãã¼ã ãfujiwaraçµã(@fujiwara, @songmu, @sugyan) ã¨ãã¦åå ãã¦ãå ¨ä½éãã¦1ä½ã®ã¹ã³ã¢ã§ééãã¾ããã
ä»å㯠ISUCON 1 ã®æã®åªåãã¼ã ãåçµæã¨ããå½¢ã«ãªã£ãããã§ãããæåã¯ISUCON 4ã®æã¨åã社å ã®ãã¼ã ã§ã§ãããã¨æã£ã¦ããã§ããããã¨ãããæ¨å¹´åªåãã¼ã ã ã£ããLINE鏿 çãã 忍ããä»å忦ã§ããªãã¨ãããã¨ã§ãsugyanããã¼ã ã©ãããããã¨å°ã£ã¦ããã®ã§ã¤ãâ¦*1
å代fujiwaraçµãåçµæããã
— fujiwara (@fujiwara) 2015, 5æ 27
æºå
ä»åã¯OS㯠Ubuntu(ãã¼ã¸ã§ã³éå ¬é)ãªã®ãäºåã«ã¬ã®ã¥ã¬ã¼ã·ã§ã³ã§å ¬éããã¦ããã®ã§(åå¹´ã¾ã§ã¯CentOS, Amazon Linuxãªã©ã®RedHatç³»ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã§ãã)ãããã¯ãã£ã¨Webã¢ããªã±ã¼ã·ã§ã³ã®èµ·åã systemd ã§ãããããã ãããªãã¨äºæ¸¬ããã¦ãUbuntu 14.04LTS, 14.10, 15.04ã§æä½éã®åæè¨å®ã¨ãªãã¬ã¼ã·ã§ã³ãã§ããããã« Chef cookbook ãæ´åãã¦ããã¾ããã
ã¨ãã£ã¦ãã使ããããªããã±ã¼ã¸ããããããå ¥ãã¦ããã®ã¨ãåèªã®ã¢ã«ã¦ã³ãè¨å® (ã¦ã¼ã¶ã使ãsudoã§ããããã«ãããgithubã®å ¬ééµãauthorized_keysã«è¨ç½®ãã) ãããã§ããkernelãã©ã¡ã¼ã¿ã®ãã¥ã¼ãã³ã°ãªã©ã¯ç¹ã«ä½ããã¦ãã¾ãããã¾ãã以ä¸ã®ãã¼ã«ã便å©ãªã®ã§ Chef ã§ã¤ã³ã¹ãã¼ã«ããããã«ãã¦ããã¾ããã
ãã¨ã¯ä½æ¥ç¨ Slack 㨠github ã®ãã©ã¤ãã¼ããªãã¸ããªãç¨æã§ããã
彿¥
ã¡ã³ãã¼å ¨å¡ã®æå±ãã°ãã°ããªã®ã§ãæ¤è¨ã®çµæãã¯ã¦ãªããã®è¡¨åéãªãã£ã¹ã®ä¼è°å®¤ãåãã¾ãããLINEããã®ã«ãã§ãæ¤è¨ãã¾ããããããããåå è 夿°ã«ãªãã®ã§è½ã¡çããªãã®ã¨ãçªéã®ã½ãã¡ã¼å¸ã確ä¿ã§ããªãå ´åæ¤ åã«ä¸å®ãâ¦ã¨ãããã¨ã§ã
æºåæ´ã£ã¦ã #isucon pic.twitter.com/IRUEnLP9Hq
— fujiwara (@fujiwara) 2015, 9æ 26
åçã«åã£ã¦ãããµããã£ã¹ãã¬ã¤ã¯ On-Lap ã®ãã®ã§ãç¾è¡åã ã¨ä»¥ä¸ã®ãããªãã¤ã«ãªãã§ãããããæã¡éã³ã«ä¾¿å©ãªã®ã§ ISUCON æ¬é¸ã§ãæ´»èºãã¾ããããããã§ãã

13.3ã¤ã³ãã¢ãã¤ã«æ¶²æ¶ã¢ãã¿ã¼ On-Lap 1303H
- åºç社/ã¡ã¼ã«ã¼: GeChic Corporation
- çºå£²æ¥: 2014/12/05
- ã¡ãã£ã¢: Personal Computers
- ãã®ååãå«ãããã° (1ä»¶) ãè¦ã
ãã£ããã¨
ã¹ã³ã¢ã®æ¨ç§»ã¯ä»¥ä¸ã®ããã«ãªãã¾ããã
timestamp score 11:41:25 305 12:03:33 0 FAIL: 12:08:14 587 12:18:27 1333 < indexã2åè¶³ãã (fujiwara) 12:24:22 0 FAIL: 12:27:22 1888 < my.cnf調æ´(fujiwara) 12:31:27 1672 12:52:11 2008 < Gazelleã«å ¥ãæ¿ã (fujiwara) 13:47:38 2832 < entriesããtitleã«ã©ã ãåé¢(sugyan, fujiwara) 13:49:24 2867 13:52:20 5206 < entriesãã1000ä»¶åã£ã¦ãã®ããªãã(sugyan) 13:58:35 5500 14:03:53 9353 < relationsãã or ãåã£ã(songmu) 14:37:46 9593 15:05:11 20 FAIL: 15:08:00 10009 15:15:17 10092 15:25:29 10137 15:30:49 0 FAIL: 15:36:53 10138 16:27:23 11247 < comments_for_meãredisã®listã«(sugyan) 16:43:50 17 FAIL: 16:48:45 17 FAIL: 16:58:10 17 FAIL: 17:04:20 17 FAIL: 17:39:28 12389 < footprintãredisã®sorted setã«(songmu) 17:47:06 0 FAIL: 18:01:09 17039 < userãmysqlã§ã¯ãªãredisããèªã(sugyan)ã3åç¸æã®å±æ§èª¿ã¹ã¦ãã®ãä¸çºã«(songmu) 18:11:22 16402 18:16:07 18193 < / ã§ã³ã¡ã³ã10ä»¶æ¯åentriesãåå¾ãã¦ããã®ãwhere inã«(songmu) 18:23:54 26338 < redisããå¼ããuserãããã»ã¹ã®ã¡ã¢ãªã«cache(sugyan) 18:30:44 26153 < initializeã§aofããredisãåæå(fujiwara) 18:40:11 26694 18:42:59 27232 < åèµ·å試é¨å¾ã®æçµæåºã¹ã³ã¢
åºæ¬çãªä½æ¥ã®æµãã¨ãã¦ã¯
- èªåããã° (主㫠0.01 secé¾å¤ã§åºåããMySQLã®slow query logã¨alpã§ã®éè¨çµæ) ãã¿ãªããæ¹åãã¤ã³ããææ
- songmu, sugyanãã³ã¼ããèªãã§å¹çãæªãã¨ãããçºè¦
- 3人ã§å¯¾å¿æ¹éãæ¤è¨
- songmu, sugyan両åããããã並åã§ã³ã¼ãä¿®æ£
- ãã®é fujiwara ã¯ã¤ã³ãã©å¨ãã®ç´°ãããã¨(ããã¾ããããã¨ãªãã£ã)
- ä¿®æ£ãçµãã£ããã®ãmergeãã¦ãã³ã
ãã²ãããç¹°ãè¿ãã¦ãããã¨ããæãã§ããã éä¸ footprint ã® Redis åã®å®è£ ãé£èªãã¦è¦ããæé帯ãããã¾ããããåºæ¬çã«ã¯ææ»ããªãã§ä¸ç´ç·ã«ã¹ã³ã¢ãä¸ãã¦ãããã®ã§ããæµãã§ãããã
entriesããtitleã«ã©ã ãåé¢
entries.bodyã巨大ã§titleã表示ããããã ãã«åå¾ããã®ãéãã£ãã®ã§ãã»ãªãªã¼éãã«ã«ã©ã ãåé¢ãããã¨ãã¾ãããã¨ããã1.8GBããentriesãã¼ãã«ã®ALTERããdiskã®ã¹ã«ã¼ããããå ¨ç¶ã§ãªãã¦ãªããªãçµãããã(1MB/secãããããã§ã¦ãªãã£ã)
çµå±snapshotããSSDã¤ã³ã¹ã¿ã³ã¹ãç¨æãã¦ãã£ã¡ã§ä½æ¥ãã¦æ»ããã¨ãããã¨ããã¦ä¹ãåãã¾ããã
- diskã®snapshotãåå¾
- snapshotããSSD diskã®ã¤ã³ã¹ã¿ã³ã¹ãèµ·å *
alter table entries add title varchar(191) not null default ''; UPDATE entries SET title=SUBSTRING_INDEX(body, '\n', 1);
- ãããã¡ã©snapshotãåå¾
- Standard diskã®ã¤ã³ã¹ã¿ã³ã¹ã§èµ·å
/initializeã§ã®Redisãã¼ã¿åæå
ä¸é¨ã®ãã¼ã¿ã¯Redisã«ç§»ãå®è£ ããã¦ãã¾ãã
ãã³ãéå§æã« /initialize ã«ã¢ã¯ã»ã¹ãæ¥ã¦ãããã§åæãã¼ã¿ä»¥å¤ã®ãã¼ã¿ã¯åé¤ãããã®ã§ããããã®ã¿ã¤ãã³ã°ã§Redisã®ãã¼ã¿ãæ´åæ§ãåã£ã¦åæåããå¿ è¦ãããã¾ãã
ããã§æ®éã«MySQLãèªãã§Redisã«æ¸ãè¾¼ã¿ãããã¨30ç§ã®æéå¶éãè¶
ãã¦ãã¾ãã®ã§ãMySQLã®åæãã¼ã¿ã«å¯¾å¿ããRedisã®åæãã¼ã¿ã»ãããä½ã£ãä¸ã§ redis-cli config set appendoonly yes
ã«ãã¦aofãã¡ã¤ã«ãåãåºãã¦ãããinitalizeæã«ã¯ããã redis-cli ã§èªã¿è¾¼ãã§ä¸æ°ã«ãã¼ããã¾ããã2ç§ã§çµããã¾ãã
$redis->flushall(); system("/usr/bin/redis-cli --pipe < /home/isucon/appendonly.aof") if -e "/home/isucon/appendonly.aof";
ææ³
ã¨ã«ããåé¡ã®ããªã¥ã¼ã ã大ããã¦ãããã¨ããããããã£ã¦ããªã¢ã¼ããã³ããå¿«é©ã«æãã£ã¦ãtagomorisãããããããISUCONã ãã¨ããäºé¸ã«ããããã¨ãã£ã¦ããã®ãå®ç¾ã§ãã¦ãã¦ç´ æ´ãããåºé¡ã ã£ãã¨æãã¾ãã éå¶ã®çæ§ãæ¬å½ã«ãããã¨ããããã¾ããã
æ¬é¸ã§ã3å¹´ã¶ã3åç®ã®åªåãåã¡åããããã«é å¼µãããã¨æãã¾ãã®ã§ããããããé¡ããã¾ãï¼
*1:æ¨å¹´ã®ãã¼ã ã«ä¸æºããã£ãã¨ãã§ã¯å ¨ããªãã®ã§ãããããâ¦â¦