ISUCON13 に参加した感想

この記事は何

isucon.net

初めて ISCUON に参加した人間の参加感想記事です。 本当に感想しか書いていないので大きな学びになるようなことはないと思いますが、もし未参加の人がこれを読んで「ISUCON 参加しようかな」思ってくれたら嬉しいです。

感想

楽しいけど難しかったわ。

一応前提を共有しておくと、僕含めてジュニア3人で参加しました。 全員そこまでパフォーマンスチューニングやインフラなどの知識に明るくない中で、勉強がてら参加しようというようなモチベーションでした。 そのため、めちゃくちゃ準備や事前の勉強に力を入れていたわけでも明確に作業分担やランキング上位を狙っていたわけでもありません。

ただ、何の目標も設定しないのは寂しいので、目標とするスコアとして50,000点を設定していました。 このスコアを1番最初に通過したチームは賞をもらえることがアナウンスされており、ある種1つの通過点として良い指標かなと思ったためです。

最終的に我々のチームのスコアは16,000点で、この目標には到達できませんでした。悲しい。 もうマジで全然に時間が足りなくてウケてしまった。 事前講習に「当日知らないことを調べながら直している時間はない」と聞いたいたけど、マジでそうだった。

閑話休題

今回の ISUCON13 は予選はなく本戦のみという話だったんですが、これは嘘で結構しっかり予選がありました。

それは参加登録です。

ISUCON13 は参加可能なチーム上限が700程度と決まっています。 そして、3回ほどに分けて参加登録枠が解放されるんですが、マジで解放されて1分とかで解放枠が全て埋まる大接戦でした。ヤバすぎる。 あまりにリクエストがきすぎてサーバーが落ちたりもしており、めちゃくちゃです。

幸いチームメンバーが優秀な1getプレイヤー(?)だったため何とかなりましたが、かなりヒリつく戦いでしたね。 もし次回以降参加する場合は本当にこの参加登録合戦が熾烈なのでお気をつけください。

ようやく参加登録を終えたあとは、事前講習の動画を見たり、過去問を解いてみたりと軽くチームメンバーで事前準備はしました。 まあ、ただ僕含めて Web に関する基礎的な知識や経験がそこまで豊富ではないメンバーだったので当日出たとこ勝負で分かんないとこは調べながらでええかのスタンスでした。

そして迎えた当日。

僕はサーバーの構成や nginx などのミドルウェア周りを見て、クエリのチューニングやメトリクス導入などは他のメンバーに任せていました。 MySQL のクエリチューニングとか簡単なキャッシュ入れるぐらいならどうやればいいかイメージが付いていたので、あえてそこはやらずに自分が知らない領域を触る & 他のメンバーにもあまり慣れていないあろう領域を触ってもらう意図がありました。

実際僕もメンバーも色々手探りの中で苦戦していたので、この振り分け自体は良かったのではないかなと思っています。 ただ、勉強目的とはいえやはり知らないことを当日手探りしながらやっている時間は無いので、もしちゃんとスコアを伸ばすのであれば予習をしておきましょう。

当日の反省としてはいくつかありますが以下のようなものがありそう。

  • あらかじめどの順番で何をやるかを決めておいた方が良い。
  • 最初から手元で API サーバーを起動して動作検証できるようにすべきだった。毎回サーバー上にデプロイして動作確認してたけどシンタックスエラーとかぐらいは手元で確認できた方が楽だったな。
  • サーバー構成の変更をもっと早く最初にすべきだった。

ここらへんは、知識不足とか抜きにしてもうちょい上手くやれたなという部分ですね。 他は普通に知識不足だから勉強しなさ〜い!という感じ。

あとは、今回 DNS を自前で運用しているとかいう面白構成で何すればいいか分からんとかもありました。 DNS の簡単な仕組みとか DNS 水責め攻撃とかは聞いたことあったけど PowerDNS が何やってるかとか全然知らんかったし、どうするとパフォーマンス改善するかとかは全然検討がつかなかったですね。 時間なくてそこまで行かなかったし。

僕はマジでランキングに興味なくて、競技時間中に他のチームのスコアを1回も見てなかったんですが結果発表で1位が45万ぐらい出してて爆笑してしまった。 そんな出るんやこのゲーム。

まとめ

最終的なまとめとしては色々と普段触らないものを触れて良かったです。 俗に言う Web アプリを構成する要素がミニマムにまとまっていて、かつパフォーマンスチューニングの知識もつき、勉強のきっかけになるので初学者こそ参加してみると学びは多いかもしれません。

次参加するときはもう少し勉強して、スコアを伸ばすことを目標に据えられるようにしたいですね。