ISUCON11予選に参加した当日の様子と結果についてご報告です!
ISUCON11予選に参加した当日の様子と結果についてご報告です!
みなさんこんにちは!株式会社EMoshU・CTOの松村です。前回、ISUCON11へ参加するにあたっての記事を書きましたが、実際に参加しての結果のご報告と振り返ってみたことを書いてみました。
まずは結果ですが、スコアは34777で123位でした。予選突破に必要だったスコアは少なくとも10万点以上で、そこまではまだまだ足りませんでしたが、当日を振り返って次こそ予選を突破できるように精進していきたいと思います!
それでは、当日の様子について書いていきたいと思います。
参加メンバーは3名で、私とエンジニア・マネージャーのまさきさん、そして前職でいっしょだったginrikiさん(ハンドルネーム)の3名での出場となりました。当日は朝9:00に弊社オフィスに集合でしたが、私自身は朝が苦手で前日も夜遅くまで仕事していたので当日が不安でしたが、なんとか起きて3名無事に集合し、スタート地点に立つことができました。
まずは3名で記念撮影。(皆おっさんですw)
さっそく3人会議室に集まって準備をしました。その後、Youtubeの公式のライブ配信が始まり、椅子(ISU)のコンディンションをいつでも確認できるISUCONDITIONというアプリケーションのお題の動画の説明動画が流れたのですが、これがとてもいい感じに作り込まれていてお題の内容の把握が理解しやすかったです(運営の皆様ご苦労様です)。そして、10:00に情報が開示されたのでさっそく作業をはじめました。
まず最初に3人で分担して下記の対応を行いました。
事前にリポジトリやスクリプトを用意しておいたので、こちらの作業はすんなり終わりました。(主にginrikiさんやまさきさんのおかげです。)レギューレーションの確認でも、キャッシュに関する記載があったので、このあたりもスコアUPに必要なのかなぁとう感じでIssueにしていきました。
そして、大事な計測です。セオリー通りに一度ベンチマークを走らせて、ログをローカルのPCに落としてalpで計測しつつ、MySQLのスロークエリログも計測しました。
一通りの準備と計測結果が出た段階で、アプリケーション側を見る人(私とginrikiさん)と、インフラとデータベース周りを見る人(まさきさん)に分かれて改善作業を始めました。データベース側は重いクエリにインデックスを貼る作業をしましたが、ベンチ走らせるたびにスキーマも初期されるパターンだったので設定ファイルの方を更新して対応しました。アプリケーション側は何度も呼ばれる系のAPI(ISUからのコンディションを受け取るAPI)と、1回の処理が重い系API(ISUのトレンドやISUの一覧取得API)の3つのAPIに絞って実装を調べていきました。
ここで、昼飯の話です。ISUCONは時間との勝負でもあり、集中していると飯を食べるのも忘れて没頭してしまいます。しかし腹が減っては戦はできぬということで、なんと弊社の代表取締役の保田がマックの差し入れをもってきてくれました。(大変感謝です)
そして、買ってきてくれたのはサムライマックのセットでした。ただ、これはあるあるかもしれませんが、どうしても作業に集中していると手が伸びるのはポテトだけになってしまい、結局バーガーを貪ったのはコンテストの終わりに差し掛かった頃でした(笑)。ですが、うまかったです。
話を戻しまして、APIの調査ではISUからのコンディションを受け取るAPI(POST /api/condition/:jia_isu_uuid)にスコアアップを狙えそうなTODOの記載をginrikiさんが見つけ、ISUのトレンド(GET /api/trend)、ISUの一覧(GET /api/isu)APIにN+1問題を見つけたのでそちらの改善を進めていきました。
そして、あっという間に時間が過ぎて終わり近くになったのですが、みんながベンチマークの計測に殺到し始めたのか、ベンチマークを起動できなくなり、ポータルサイトまで落ちてしまいました。そして運営の皆様がリアルISUCON状態に(‐人‐)
最終的に1時間ほど伸びて、19:00に閉会となりました。最後の方はさすがにスコア計測できずに終わるのは忍びないので、大きな修正はせず、出力していたログを出さないようにするなど少しでもスコアがアップしそうなことをして無事終了しました。
以上が当日の様子で、結果はブログの冒頭に記載した通りです。
できたこととしては、まず寝坊せずに起きてコンテストに参加し(大事)、お題をセオリー通りに計測を行なってボトルネックを見つけスロークエリやN+1問題を改善できたことでしょうか。
逆にできなかったこととしては、レギューレーションに書いてあったキャッシュ周りの対応は結局できずじまいで、基本的な改善方法以外のことができなかったなと感じました。ちなみに私はN+1問題のところをやっていましたが、Goわからん状態になって貢献できずでした(^o^;)。1位が驚異の150万近くのスコアだったのでもっとスコアが稼げそうなところをやるべきだったかもしれません。
結果は予選落ちでしたが、3人(+差し入れ係)で試行錯誤しながら改善していくのは楽しかったですし、お題もよくできていてとても楽しい1日でした。本戦の問題が公開されたらそちらにもチャレンジしてみようと思います。そして、来年は予選を突破できるように研究していこうと思います。
最後に、今回のISUCONに一緒に参加してくれたまさきさんとginrikiさんありがとうございました!そして差し入れをくれた代表の保田、ありがとう!そして、ISUCONの運営の皆様、お疲れ様でした!(まだ本戦もあるけど)
最後に、EMoshUではメンバー一丸となってより良いサービスを世に出すために頑張っています!そんな中で一緒に働き、ISUCONのようなコンテストにも一緒に出てくれる仲間を探しています。もし興味のある方がいらっしゃいましたら、ぜひ募集要項をご確認の上、ご連絡ください。
(追伸)こちらのブログを書いているときに、ISUCON11予選の総評がでました。こちらの総評を見て振り返りに生かしたいと思います。
ISUCON11 予選問題の解説と講評 : ISUCON公式Blog
この記事では ISUCON11 予選問題であるアプリケーション「ISUCONDITION」について、問題の概要と想定した解法について解説を行います。