title | date | draft | tags | ||
---|---|---|---|---|---|
ISUCON 12 に出場した #ISUCON |
2022-07-24 23:39:36 +0900 |
false |
|
ISUCON12 の予選に出場しました。
@mettoboshi, @hanhan1978 と一緒に出場しました。
そういえば ISUCON 出たことないなと思い申込できたら出場してみようと思っていた。申込みの機会が3回あるうち一番激戦区だった2回目の申込みで運良く出場権を獲得できた。1.5分で枠がなくなると思っていなかったのでびっくりした。
@mettoboshi と自分は一度も参加したことがないので、出場を決めてから時間を見つけて個人練習をしました。ちょうど『達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践:書籍案内|技術評論社』 が発売した直後だったのでこの本を読みながら private-isu を解く練習をしました。
その後3人集まっての2時間(+α)の練習を3回やりました。本番を想定してマニュアルを読む時間の意識、インストールしたツールの動かし方、変更を入れてから本番への変更の流れなどを試した。8時間通しての練習は流石にできなかったが、練習したおかげで本番ではつつがなく問題に取り組めました。
問題は以下の動画を見てもらえればわかるはず
<iframe width="560" height="315" src="https://www.youtube.com/embed/75YnJ_3289g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>- まず最初にアプリケーションがどのようなものかを理解するためにコールドリーディング
- 同時に N+1 やボトルネックになりそうな箇所をコメントでひたすら残す作業をしていた
- 見た結果 マルチテナントのデータが SQLite に入っており、これを倒さないと本戦出場は難しいのではという仮説をたてた。
- SQLite のデータを MySQL へ移行するスクリプトが用意されていたのでそれを使って MySQL への移行を進めた
- テナントごとのファイルの中身に
tenant_id
があることに気づかずテナントごとのデータベースを作ろうとして失敗した - 移行準備に時間がかかりそうでこれは途中で諦めた
- テナントごとのファイルの中身に
- SQLite -> MySQL への移行がうまくいかないのでアプリケーションコードの改修にとりかかる
- 移行失敗の焦りで普段できていることがちゃんとできずにボトルネックと関係ない箇所を直す
- SQLite の SQL の調整をしたかったが普段使い慣れていないものをいきなり触ってあたふたしてしまう
- チーム練習をしてちゃんとボトルネックから目を逸らさずに取り組むことができた
- お互いを信頼して作業を任せた結果、やるべきことに専念できた
- fail せずスコアが出て
- SQLite -> MySQL は試したことないのに一か八かでやると判断したのがよくなかった。
- 8時間でやるには自信をもっているPHPのアプリケーションコードを直したほうがよかった
- わたわたしてしまって狙ったエンドポイントの xhprof の結果が見れなかった
1ヶ月ぐらい準備をして挑んだ初めての ISUCON はチームとしてはとてもよかった。ちゃんとボトルネックと向き合って短い時間でデータを見て意思を持って決断したのはとてもよかった。個人としてはもう少し手が速く動くようにならないと8時間という時間で結果を出すことはとても難しいので日頃から素振りをしておかねば。あとは1回しくじって作業がいつも通りにできなくなったのでそこを直すのと、タイムプレッシャーに弱いのがよくわかったのでそこを直す。
来年はリベンジして予選突破ラインまでいけるようになりたいな(もちろんPHPで)。