id:onishi、id:wtatsuru と一緒に Third Party Cookies という名のチームを組んで予選 2 日目に参加してきました。暫定の結果はギリギリ暫定 5 位です。本戦行きたい……。
オンライン予選 二日目の結果 & 暫定版の本選出場チーム発表 : ISUCON公式Blog
回想
開始直後は wtatsuru 先生がセットアップに忙しかったので、onishi さんと僕とでコードを読み、それから集まって方針の検討をしよう、という風に話をしていたのですが、コードを見ているとぱっと見で修正したらいいと分かってるところあるよなーと思って実装していたら結局落ち着いて話しあう感じにはならず、そのまま手を動かしながら会話するという進め方になってました。(言語は Perl を使用)
onishi さんにコードのデプロイまわりをやってもらって、その結果、自然と onishi さんがデプロイ担当みたいになったので、インフラ周りは wtatsuru 先生に、計測・デプロイは onishi さんに任せて、自分は楽してコードを書いてました。
onishi さんと僕とでアプリの改修をしたわけだけれど、先に書いたように大方針を決めて臨んだわけではなかったので、それぞれ気づいたところを宣言して書いて、そのブランチでちゃんと動いてそうだったらマージする、の繰り返しでした。
自分がやったところは、
- セッションまわりの IO が無駄そうだったので減らした(その後で onishi さんがもっとうまくやってくれた)。
- メモの総数をキャッシュした。
- メモの作者名を引いてるところがクエリ発行しすぎなので、ひとつにまとめた。
- 一覧のところのクエリがよくないので、public なものだけのインデックスを作った。最初は別にテーブルを作ってやろうと思ったんだけどよく分からない理由でうまくいかなくて、memcached に入れた。
- メモの前/次をキャッシュするようにした(これは駆け込みで実装したのだけれど、あまり効果なかったかも)。
その他もろもろ、意味のないようなことも沢山やったと思う。
コードやクエリを見ただけですぐに改善できる、というところをだいたい潰したあたりから、ほかの二人が計測的なことをしてくれていて、それを聞きながら実装していました。自分は(やる)気になったところだけやっていたせいか、全体的な流れがどうだったかあまり覚えてないので、onishi さんの ISUCON3予選に参加しました - 大西ブログをあわせてご覧ください。
ギリギリで 5 位に入れましたが、やることは分かってるけれど時間が足りないというような状況ではなく、上位陣はいったいどんなことやってんだーと思いながらのフィニッシュでした。
感想
- ほぼずっと集中できて、楽しかった。こんなイベントに参加できるのはとてもありがたいです。
- 8 時間もあるんだったら余裕でご飯食べにいって休憩できるなーと思ってたけど、全然そんなことはなかった。
反省点
- 誰でもデプロイできるようにしておかないと、互いの時間が有効に使えない
- 誰でもベンチマーク取れるようにしておかないと同上。インスタンスもうひとつ作ってもよかったなと思った
- そもそも最初どんな風にコードを管理するか、とか、デプロイするか、というのを決めてなかったのがよくなかった
- データの更新が遅れてもよいというレギュレーションをうまく活用できなかった
- Yappo さんの記事が参考になった。こういうところ自信もってキッチリ実装できる必要があるなと思った。