#isucon2 に参加しました

@ に誘って頂いて @ と 3 人で isucon2 に参加しました。結果は惨敗でしたが、とても楽しかったです。唯一 Java で取り組んで、結局採点基準にすら届かなかったので参考にならないかもしれませんが、個人反省会ということでメモしておきます。

事前準備したこと

@ から去年の様子とか参加ブログのリンクを教えてもらい、3 人で事前打ち合わせしたり、isucon1 のアプリを Java で書き直したりしていました。今にして思うと、いろいろ甘かったと思います。

  • isucon1 を見た感じだと、ソースコード自体のチューニングというよりは DB 構造をいじるのとインフラチューニングがメイン?
  • JVM 使えば早くなるだろうから、当日 Java に書き換える。そのため、アプリケーションの雛形を作っておく。
    • JVM 使うんだからキャッシュしたいよね。でも AP サーバー 2 台あるね。どうしよう。。
  • @ はインフラ全般、@ と私(@)でアプリ側を担当する。
  • 当日の情報共有には co-meeting を使う。
  • ソースを管理するために Bitbucket を利用する。

当日

Java の実装が提供されていたので、書き直しのコストが浮くねという感じで、サーバー側で Java を動かすということと、ローカルでソースをいじれるように開発環境を構築するということを分担して進めていました。なお、私自身はほぼ Java ソースをいじっていただけなのでサーバーの作業内容はよく分かっていません。あと、時間は焦っていたこともありかなり適当です。

11 時 - 14 時 ぐらい
  • 提供されていた Java 実装を WTP で開発できるように修正。
  • サーバー側は各種ミドルウェアのインストールや再起動されても動作するように設定作業。
15 時台
  • Tomcat にデプロイしてベンチを実行 -> Failed となりチーム全体が浮き足立つ。success response: 79.7%
  • DataSource のコネクションプール数がデフォルトのままだったので 1 台辺り 400 個に増やすが効果なし。success response: 79.9%
  • nginx 側から Tomcat 側への接続数を増やすが効果なし。success response: 78.6%
  • @ が stock テーブルにインデックスを追加することで多少ましになるがやはり Failed のまま。success response: 87.1%
16 時台
  • やっとアプリケーション側に目を向けるようになり、色々遅い SQL やらロジックを見つけ、チューニングに着手する。
  • チケットの表示部分が極端に遅いので、キャッシュ出来ないかなと話しつつも、チケットの残数を SQL で取得していたので、その処理をなくすという軽微な修正を行う。
17 時台
  • サイドバー部分の SQL が重いので、order_request テーブルに表示に必要な情報を全て書き込む方向で修正しているうちに時間切れ。

反省点

実力不足の一言です。あと、普段の開発の意識から切り替える必要があったかと。あれは isucon というスポーツだと思いました。7 時間しかないので、とくにかく各プロセスを軽量化し、本当に必要な作業だけを行う必要があるし、それができるだけの実力や事前準備が必要だと思いました。

  • WTP の環境を作るのに時間を掛け過ぎた。ソースをいじってビルドできればいいだけなのに、ローカル開発環境の構築に時間を掛け過ぎた。
  • 最初に全体の分析をしようと話していたのに、結局やれずじまいだった。
  • co-meeting は選択誤った。余裕がなくてあまり見に行けなかったし、ミーティングも複数作って切り替えが面倒だった。Skype でも Google チャットでもなんでもいいので 1 スレッドでリアルタイムに push 通知がされるもので十分だったと思う(co-meeting は後で見返す分には便利だったけれど)。
  • JVM 使えば早くなるだろうと楽観視し過ぎた。当たり前なんだけどユースケースが合わなければ特にメリットでないわけで、ほんと甘かったと思う。
  • Bitbucket(git) を使ってソース管理したけど、ブランチとかまじでいらなかった。かえって混乱するだけだった。
  • やっているチームもあったが、Java にこだわるなら Tomcat 1 台にして、全てメモリ上で処理すればよかった。そもそも、データ量自体は少ないのだからメモリ的には余裕だったはず。
    • 他にもキャッシュとか方式自体は思いついても、あの時間内で実装しきれる自信はなかったので結局は実力不足を痛感した。

最後に

事前準備で直前の一週間ぐらいは睡眠時間削ったりしてましたが、当日も含めてとても楽しかったでし、勉強になりました!企画・運営のみなさま、本当にありがとうございました!!

最後にどうでもいい話なんですが、嫁さんに何に参加していたのか説明を求められ、ミニ四駆のチューニング大会みたいなものだと説明したら納得してもらえました。当日会場に車が何種類か用意されていてレギュレーションさえ守れば改造し放題みたいな感じと説明しました。我ながらいい例えが見つかったとは思いましたが、それで納得する嫁さんもどうかとは思いましたw