ISUCON5予選に参加した

チーム「かにかま」として、会社のインフラ同好会3人で出場した。

結果は大敗。

多分1700点ぐらいだったと思う。(上位は2万点ぐらい)

反省はたくさんあるけど、一つだけあげるなら

「まず落ち着け!!!」

「まず落ち着け!!!」

おそらく最初に設定されていた扉すら開くことができず、 あわあわしてたら終わった。

おちつけ、今やるのはそこじゃない

僕のやったことあまり覚えてないけど、 インスタンスタイプ間違えたり、ディスクサイズ間違えたりで、初期データふっ飛ばしたりインスタンスを4回作るはめになった。

僕が一番時間をかけたのがあしあとのredis化(Time.now.to_iでSorted Setにする)実装だった。

思い返すと全ユーザーのあしあとランキングになってたし、そもそもredisのconfすら書いてなくてredisが動いていたのかすらあやしい。

最終的に/initializeでデータをredisにロードしているからか重すぎてrevertするはめになった。

そもそも、あしあとは大して問題になってなくて、そのまえにrootのN+1を何とかしないと話になってなかった。

つまりはなにもできなかった。。。

復習

翌日、さっそく同じイメージで復習だ!と思って、mysqlのlogはどこで出せばいいんだろうと思ってmy.cnfをいじってたけど、 いやもうこれめんどくさいでしょと、sqlの本数が知りたいだけだと、 そう思ってたら雑なモンキーパッチを思いついて、どうしてこの発想が出なかったと自分を戒めるためにgemにした。

github.com

全部で30行もないけど……。

これでrootにアクセスしてSQLをのぞくと、まあ圧倒的に友達かどうか調べるクエリーがあって(1000個くらい)、 「最初に自分の友だち全部取ってメモリにのせればいいじゃん」とおもいついて、 rootの処理をis_friend?を使わないように数行書き換えると、 ものの数分で総SQL数が1100 -> 80くらいに減って、「こんなこともできずに終わったのか……。」という絶望感だけが残った。。。

落ち着き、経験値、実装能力、すべてが足りなさ過ぎることなど、 本当に反省の多い、また楽しい初ISUCONでした。

世の中の広さが知れて、非常に良い経験になったと思います。運営の皆様に感謝。

次回への反省として、精神を鍛えるために滝にでも打たれようかな……。