ISUCON4の予選に出た #isucon

ISUCON4 の予選に出た。

今回は、去年のチームメンバーのid:urapico とフロントエンドエンジニアのnkns の3名体制で臨んだ。

セットアップ
  • テーブルを移動して、テレビをセカンドディスプレイとして使うセッティング


  • AWSクーポンを投入 *1
集合
  • 9:30 idobataに集合
開始
  • 10:00 スタート
  • 公開されたAMI でEC2インスタンスを起動
  • 各自ssh でログインしてもらう
  • id:urapico がソースをbitbucketにpush
  • PHPに切り替える
  • 502 BadGateway
  • 時間がもったいないということでRubyでいく宣言
  • ざっくりソースを読む
  • DBへのアクセスをどう減らすかだねっていう話をする
作戦会議
  • 役割分担を決める
  • インフラを自分がみる
  • アプリ側をurapicoとnknsに担当してもらう
PHPに変更
  • 運営のヘルプスレッドをみていたら、PHPの話がでていたので、それを参考に再度PHPで動かしてみることに
  • supervisor.conf を書き換えて、instance reboot
  • 動いた!
  • foremanが起動していて、初期実装のRubyが8080に居座っていたのが原因だった orz
改修内容
  • my.cnf を改修
  • mysql slowlog を確認
  • index を追加
  • users table にlast_logined_at, last_logined_ipを追加
  • mypageで参照される 最終ログイン時間、最終ログインIPをlogin_log を見ないように改修
  • redis, phpredis 導入
  • banned_ip, blocked_user をredisにキャッシュ
  • last_logined_ip の部分のチェックでエラーとなったため、チェックロジックを妄想
  • 一つ前のlogined_ip を持ってる必要があるとふんで改修
  • エラー除去
  • passwordのhash 計算の部分にcacheを導入
結果
  • デフォルトスコア 1300ぐらいから8000ぐらいにはアップできた
  • 惨敗
感想
  • 上位スコアには5~10倍の差を付けられていて大変厳しい現実・・
  • benchmarkツールのバグ等もありながら、運営の皆様お疲れ様です。ありがとうございます!!
  • 着実に負荷部分の実装をがりっと書き換えるもしくは飛び道具を持つということができないと厳しいなあ
  • ともあれ、チームで参加できたし、勉強になったのでよかった!

運営の皆様、ありがとうござました!

http://isucon.net/

*1:AWS様ありがとうございます!