isuconに初参加してきました
土曜日に職場の@handlenameと@nobu_ohtaと組んで参戦してきました。
結果は惨敗。でもすごく楽しかった。
いざ開始
いざ始まってみると、本当に乱暴にソースコードだけ投げられるんですね。
特に説明も無しで始まる異様な空気を感じて、「これがisuconかぁ」とバリバリ初心者の心境でした。
各々が動き出す
まずは、みんなでReadmeをチラ見しつつ、アプリケーションを立ち上げざっとページを確認。
その後、handlename先輩はEC2のサーバに入ってgitリポジトリ作ってくれたり、nginx入れてくれたりとか色々してくれていた。
nobu_ohta先輩はアプリ担当ということで、ソースを眺めながらindexはってたりした。
当の僕は、さっそく空気になりそうだったのでとりあえずローカル環境に構築するためにシェルスクリプトとかを作っていました。
それだけでもう12時前になっていたので、事前に聞いていたとおり8時間なんてあっという間だと痛感しました。
目の前の2人を静観しながら、rubyのソースを読んでいるなう #isucon
— たにひろ (@w650) October 5, 2013
キャッシュ戦略を練る
お昼ぐらいになって、キャッシュ戦略を相談して、でも実装はできないから全部任せるという暴挙に。
戦略だけ考えて実装しないのすごく楽しい。 #isucon
— たにひろ (@w650) October 5, 2013
でも実装してみると(実装したのはnobu_ohta)、まぁ@fujiwaraさんの罠にハマるハマる。
- マイページは丸々キャッシュしちゃっていいねー
- CSRFトークンがあるから無理だった
- 詳細ページもページャーの部分含めてキャッシュしちゃえばいいじゃん
- ログインしているユーザー名とかもキャッシュしちゃってた
結局markdownにしている箇所を投稿時だけにするようにキャッシュをするだけになってしまい、キャッシュ戦略の甘さが無駄に時間を浪費させてしまいました。
そろそろ仕事をする
とはいえ、そろそろ仕事をしなければと思い、毎回COUNTされていた総投稿数をRedisでキャッシュするようにかえた。
4行ぐらいソース書いた #isucon
— たにひろ (@w650) October 5, 2013
あと、newerとolderの処理のクエリをちょっといじったぐらい。
一番の仕事は、"/"が指定されていたlinkタグを発見したこと。
handlenameが、「なぜかリクエストが2回飛んでいる」ってところではまっていたのだけれども、罠を発見できて一安心。
@fujiwaraさん怖いなーとgkbrしてました。
そんなこんなで
あっという間に8時間は過ぎてしまいタイムアップ。
結局いわゆる普通のチューニングしかできずに、スコアも5000いったりいかなかったりで惨敗でした。(30000というスコアが夢に思えました。)
反省点としては
- Readmeをしっかりと読まずにworkloadオプションを見落としたこと
- アプリケーションの仕様をしっかりと把握しないままキャッシュ戦略を練ってしまったこと
この2つが大きいなーと。
インフラ周りの知識が強くないからこそ、そこにもうちょっと時間をかけて検証できるようにアプリケーション側のチューニングでいかに無駄な時間を無くすかが重要だなと思いました。(終わってみて、もっといろいろ実験できたなーと反省)
でも、初めてのisuconすごく楽しかったです。運営の皆さんありがとうございました!
本戦出場の皆さん頑張ってください!
ほかチームのエントリや公式の解説などを肴にしてお酒を飲みたいと思えたので出てよかった。 #isucon
— たにひろ (@w650) October 6, 2013