ISUCONに初めて参加した話 〜事前準備編〜
はじめに
ISUCON10にチーム unselected children
として参加しました。
結果は予選敗退となってしまいましたが、個人的に反省点、学びの多く、準備期間も含め、良い時間だったと思います。
今年のISUCON参加にあたっての準備や当日を振り返ろうと思います。
参加までの経緯
会社に入社して3年目、ふと自分って他社と比べてどれくらいの実力なのかなと考える機会が多くなったように思います。
そのタイミングでISUCON10のアナウンスがあり、「面白そう」、「他のエンジニアとの力比べの良い機会かも」と思い、同期2名に声をかけて参加を決めました。
予選1ヶ月前
大体1ヶ月くらい前からゆるゆる始めました。
とはいえ初めて参加するイベント、右も左も分からないので、チームビルディング(みたいな何か)、情報収集を行い、どんな戦略で戦っていくかをチームで一旦考えました。
チームビルディング(みたいな何か)
Discordで通話し、Growiを使って議事をまとめてました。
話したこととしては下記です。
- ISUCONの目標
- 100万の使い道とか考えてました、理由は先を考えた方がワクワクすると思ったからです笑
- チーム名
- 一番時間使った気がしなくもないです。最終的に同期の昔のブログの名前から取りました(デジモン好きだし)
- いつ集まって練習するかの確認
- 当日まで1ヶ月ほどしかないので、予め練習予定を立てておきました。
- 練習の仕方として、何度か模擬戦を回し、KPTにて振り返ってみて、次の模擬戦にTRYを実践する方針と定めました。
情報収集
模擬戦やっていくとなったものの、当日のフローも準備しておくべきことも分からなかったのが現状でした。
また僕らのチームは全員がWebアプリケーションメインのため、インフラ、DBに関してのチューニングスキルが足りていないことも認識していました。
そこで僕たちは、すぐには手を動かさず、過去の参加者のエントリーブログなどを読むことからはじめました。
得られたこととしては3つ - 競技開始後1時間をどう使うかが大事であるということ - いろんなチームの使っている便利なツールを知れたこと - 何より、事前にどれだけ準備をするのが大事かということ
どんな戦略で戦っていくかを考える
情報収集をしたのち、僕たちはチームでどう競技時間8時間を使っていくかのベースを考えました。
決めた上で手順化できる部分を手順化する、事前準備によって、当日改修にかける時間を増やせると思ったためです。
こんな感じで各メンバーの事前準備、当日の役割の割当てなどをざっくり行って、あとは練習していこーみたいな流れになりました。
予選1ヶ月前 ~ 残り1週間、模擬戦を通して見えてきた課題
個人練習もあまりやっている時間はないと思ったので、EC2でインスタンスを実際に複数台立てて、本番と同等の環境として過去問をみんなで解くようにしました。(過去問のリポジトリが公開されてるの、ありがたやー)
実際模擬戦を実施して得たもの、課題はそれぞれ下記に書いておきます。
得たもの
- 事前にGitHubのプライベートリポジトリを用意しておき、事前にやることをISSUEにしておくことで、漏れを防げる。
- DBとAPPの切り分け、APPの二台構成、その他DB、インフラ周りの簡単な設定方法。
- LiveShareによる共同開発、個人の開発環境いったん要らないねという結論に
- newrelicの使い方、ぐう便利でした。
見えてきた課題
- 圧倒的アプリ側の改修時間の足りなさ
- DB、インフラでできることは僕らのチームは限られてしまうと考え、基本みんなアプリ側の改修を優先度高く行うようにチーム方針を変更した。
- 実力不足
- 並列化や排他処理など、あまりこれまでやらなかったことを求められる場合に手が止まってしまっていた
- マニュアルの読みこみの不足、コードを読むのに時間をかけてしまう
残り一週間になっても模擬戦のスコアはあまり上がらず、正直しんどかったのでチームで話し合い、残り1週間の練習の仕方を変えた。 - 同じ過去問内容でいったん時間を考えずどこまで上げられるかを試す(目標はその過去問の予選突破スコア) - 8時間の練習内でやりきれなかったこともあるので、いったん進めてみることをやってみた。 - やり方がわかれば、あとは手順かなり、考え方は身につくと思った
そんなふうに進め、前日には無事目標となるスコアを出すことができた。
今回はいったんここで切ります。
当日の振り返りは近いうちに。