ISUCON13に出場しました
こんにちは、最近幼少期〜学生時代の趣味が再燃しているmickeyです。昔ハマってた趣味ってやっぱり面白いですね。
さて、去る2023年の11月末に、DWS社内でチームを組みISUCON13に出場しました。少々時間が経過してしまいましたが、今回はその大会の振り返りを行っていきたいと思います!
ISUCONとは
ISUCONとは「Iikanjini(いい感じに) SpeedUp Contest」の略で、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです。過去の実績も所属している会社も全く関係なく、結果が全てのガチンコバトルとなっています。当社も旧MMM時代の数年前(8〜9年前?)まで社内ISUCONを開催したりして盛り上がっていた時期があったようです。
私自身はといえば、入社してから存在を知りました。そして「なんだか面白そうだな」というノリで残り2人(mackey、kurochan)のメンバーを集め、参加を決めました(社内で呼びかけるとすぐに承諾してくれるメンバーがいるのもDWSの良いところです)。
通常のISUCONであれば、予選→本選の流れなのですが、今回は本選のみの一発勝負でした。なので、必然的に出場チームの募集は登録時間開始後約1分で募集終了という事態に... 私も15分位前からPCに張り付き、なんとかチーム登録を完了させ、無事本選出場権を獲得しました。
そこからは週に1度チームで集まり過去問を解いたりしながら練習を重ね、当日を迎えました。
当日の作戦
個人で役割を分けて分業することも当然考えましたが、去年も出場したメンバーによると「個人で分担を分けたが、みんなで考えればすぐ解決できたであろう箇所が煮詰まってしまっていた」ということがあったらしいことと、私がまだ未経験入社1年目のビギナーだということもあり、「モブプロで一つずつ解決していこう」ということになりました。結果的に三人寄れば文殊の知恵作戦で行く運びとなりました。
当日の日程・流れ
11月25日(土)、待ちに待ったISUCON当日となりました。
9:30 ~
チームメンバーがslackのハドルに集まりほどなくして、問題解説がスタートしました。まさかYoutubeライブの不調がフラグになっているとは思わず、運営さんの素晴らしい伏線回収に感動しました。どうやら今回は題材が配信サイトのパフォーマンスチューニングのようでした。難易度が高そうだな、と直感的に感じました。
10:00 ~
いよいよ、大会スタートです。
まずは、環境構築の作業を行いました。
- SSH鍵の登録やコードのgit管理
- 計測基盤の導入
私がドライバーだったこともあり、この時点で約1時間半ほどかかってしまいました。申し訳なさを感じつつも、なんとか環境構築を完了させました。
アプリ自体の理解はmackeyやkurochanが行い、どうやら今回はDNS水責め攻撃があるらしい、とかそれの解説記事はこれっぽい、などと話し合っていました。
11:30 ~
ここでひとまずベンチマークを回してみます。ベンチマークを無事に回すことも一苦労だったため、単純にベンチマークが成功したときは喜びを感じました。初期スコアは3000点前後でした。ここからtopやslowquery logを見て、明らかに遅いクエリに対してINDEXをはり、スコアが微増しました(3000→4000後半)。
その他マニュアルなどを見ていて、どうやらアイコン画像のhash値周りの処理の修正が必要そうだということに気づき、この辺りを対処しようと決断しました。少し概要を理解をしたところでちょうどお昼の時間になったため、各自休憩&昼食タイムをとります。
13:00 ~
休憩後、本格的にアイコン画像周りの改善を進めます。ひたすら試行錯誤を繰り返していました。が、意外と難しいです。エラーが出て、それを解決しても別のエラーが出て、という状態が延々と続きました。
15:00 ~
エラーが解決しない、ベンチマークを回しても0点が続出という、半分楽しく半分地獄のような時間がひたすら流れ、あれやこれやを試していましたが一向に解決策の糸口が掴めません。この時点でおそらくこの問題に5時間は費やしていたと思います。全員が「そろそろ大会が終わってしまう、どうしようか」という状態になっていました。ここで例のDNS水責めの件に移ろうかと思いましたが、3人とも初見であったため、逐一この対処法が合っているかどうかもわからず、残り時間も相まってDNS水責めは諦めようという決断になりました。
17:30 ~
「最後せめて0点じゃない状態で終わりたいね」という結論になり、コードをアイコン画像問題を修正する前の状態に戻し、ログを止めた上でベンチマークを回し5000点前後の点数が出たところで終了時間となりました。
こうして、厳しくも楽しいISUCON13本選が終了しました。
実は社内でもう1チーム出場しており、終了後我々と同じく「今回は非常に難しかった」という感想を共有しました。
大会を終えてみて
- 色々な人の参加ブログを見ていると、全く知らない知識が常識として語られていたり、もはや次元が違う人(良い意味で)がいたり、様々な人の参加ブログを見られたことが、結果として自分にとって非常に良い刺激になりました。
- 普段、私はクラウドサービスを利用してサービスを構築しています。その過程で、DNSの設定などは「Route53が適切に管理してくれる」といったレベルの理解に留まることが多いです。しかし、今回のISUCONに参加し、これらの技術についてより詳細に理解を深めることを決意しました。
結果として、初参加でしたが様々なことが非常に勉強になりました。実は今現在でもたまにISUCON13の反省会をやっています。何回やっても学ぶことが多いです(その分悔しさも大きいですが)。
次回に向けて
次回が無事開催され、ネット登録0次予選を無事(?)通過できたら、以下のことを意識したいです。
- サーバー分割をすること。実は練習でも本番でも一度もサーバーを分けたことがないため、アプリとDBの割り当てを考え、ちゃんと分けるとどれだけパフォーマンスが改善するのかを体感してみたいです。
- 環境構築周りの高速化、ツールの見直し。優勝チームが使用していたツールが非常に優れていそうであったため、試しに使ってみたいと思っています。もし良ければそれを使って次回は頑張りたいです。
- とりあえず1万点を超えること。自分の課題が明確になり、今後のスキルアップの道筋が見えましたので、日々忘れずに鍛錬したいと思います!
ここまで読んでくださったみなさん、ありがとうございました。