do7be.exports

エッセンシャルガチ草トメィトゥ

ISUCON5予選で最高スコア1万弱を出しました

isucon.net

Iikanji ni Speed Up Contest、通称「ISUCON」に出場してきました。

今回が初めての参加になります。

都内某所コワーキングスペース(弊社オフィス)にて、社内でチームを組んで挑みました。

言語はPHPを選択しました。Node.jsは僕しか触れなかったので。とはいえ、Node.jsは直前で中止になっていたのでPHPを選択しておいて正解でした…。

チームメンバーの@petoが書いた記事はこちらです。

pe10.hatenablog.com

担当

3人いたのでそれぞれ

  • アプリケーション
  • WEBサーバ
  • DB

という分担をし、僕はアプリケーションを担当しました。

僕がやったことはこんな感じ。

  • GCEインスタンスの構築
  • 鍵交換
  • Git及びGitHub設定
  • 方針決め
  • 無駄に実行数が多いSQLの排除
  • COUNTなどのSQLの最適化
  • 無駄なSELECT *の排除

チームとしては

  • MysqlのSlow LogからプロファイリングしIndexを貼った
  • Mysql設定チューニング
  • Nginxチューニング

こんな感じでしょうか。

結果

ベンチマークの結果を逆時系列で出しました。ところどころFAILが出ているのは、「タマキ」と呼ばれるなぞのバグのせいかと。どのチームも苦しめられたみたいですw

Score History
timestamp   score   
17:40:52    5268    
17:37:37    5824    
17:35:33    20  FAIL: 
17:30:09    4316    
17:12:11    7032    
17:04:05    4192    
16:52:57    9831    
16:46:35    9786    
16:37:40    9034    
16:28:24    9785    
16:19:57    9421    
16:10:29    9340    
16:04:27    6301    
15:58:56    6231    
15:54:48    0   FAIL: 
15:52:23    6018    
15:44:16    5918    
15:39:55    5212    
15:32:07    4675    
15:19:51    3318    
15:11:39    6606    
15:00:24    6586    
14:46:04    6639    
14:40:05    1279    
14:31:33    1935    
14:21:02    2166    
14:17:09    0   FAIL: 
14:04:18    812 
13:56:11    1230    
13:49:03    1229    
13:41:38    1259    
13:33:47    20  FAIL: 
13:30:13    1517    
13:23:44    20  FAIL: 
13:10:08    1430    
13:01:00    992 
12:53:32    1064    
12:33:47    910 
12:16:10    896 
12:07:42    838 
11:59:58    743 
11:41:07    722 
11:37:21    0   FAIL: 
11:31:58    697 
10:43:24    68  
10:34:45    0   FAIL: 

最高スコアはなんと9831!最高スコアだけで見れば全271チーム中の上位50チームには入れてるんじゃないかなあと思います。

ISUCON5 本選出場者決定のお知らせ : ISUCON公式Blog

が、見ての通り途中で何度かスコアが大きく落ちています。

実は再起動のたびにスコアが半分ほどになってしまったのです。

原因を探っていたのですが、どうしてもわからず、結果として低いスコアになってしまいました…

おそらくですが、innodb_buffer_poolをディスク上に書き込んでおらず、再起動のたびにメモリから飛んでしまっていたためかと…。

終わってから気付き、非常に残念です…。

感想

実は社内で週2でISUCON会という勉強会をやっていました。若手エンジニアの集まりで、過去のISUCON問題を練習台として模索していくような会でした。そのおかげもあって当日いろんなことができたのかと。

ISUCON3,4と比べ、今回はNginxよりもMysqlとアプリケーションに比重が置かれているなと感じました。アプリケーションのコード量も比べ物にならないほどでしたし、テーブル数もこれまでの数倍はありました。そのおかげでアプリケーション担当の自分は忙しかったです…あと3時間はほしい…。

WEB業界に入ってまだ半年ほどですが、最終結果はよくなかったにせよ、最高スコアでここまで入れたのは驚きました。やはり勉強会のおかげもあるかと思いますが、ちょっと自信がつきました。

勉強会も普段やらないチューニングという分野で楽しかったですし、予選も疲れましたが楽しかったです。来年もまたやりたいなあ。ぜひNodeで!