ISUCON 13 に参加しました。
ISUCON 自体が初めてだったので、ISUCON 体験記も初めて書きます。
ISUCON とは
Iikanjini Speed Up Contest の略で、Web アプリケーションのパフォーマンスを競うコンテストです。
事前準備
ISUCON について右も左も分からないという状況だったので、過去問に触れてみようと思いました。
ネットでいろいろ過去問をあさっているうちに、過去問ではないのですが、面白法人カヤックさんが公開している社内 ISUCON の問題を解いている Youtube を見つけました。
社内 ISUCON のリポジトリ: https://github.com/kayac/kayac-isucon-2022
Youtube: https://www.youtube.com/watch?v=BD4kKgxC_CY&t=0s
それを見つつ、環境構築は AWS を使い慣れていないので、ローカル環境で Docker を使って構築しました。
- htop でプロセスを確認する
- slow query log を出力する
- slow query log から改善点を見つける
- インデックスを貼る
- クエリを修正する
- アプリケーションロジックを修正する
- etc...
などを動画では実践していました。時間も限られている中で可能な限り写経していったり、学びを記事にしたりしていました。実際の記事はこちらです。2 回以上練習して記事を書くぞ!と意気込んでいたのですが結局 1 つしか記事を書かなかったです。
当日
PowerDNS を使った問題でしたが、クエリチューニングをやる余地もかなりありました。
そのため、結果的に写経して得た知識がかなり役に立ちました。修正を行いスコアが改善していく作業はアドレナリンがドバドバ出てきて楽しかったです。
DNS 周りの知識は全くなかったので、チームメンバーに頼りきりでした。とても感謝です。インフラ面もチームメンバーに頼らせていただきました。このようにチームで協力しながら問題を解いていく過程もあり、とても素敵な大会だなーと思いました。
結果
入賞できませんでした。わかってはいましたが、悔しい。
初めて出た感想
恥を恐れず書きますが、実力的には全く及ばないので本来であれば本戦を経験することはできません。しかし予選がない今回だったから本戦に出ることができたと思っています。本当に良い経験になりました。
普段の業務では、パフォーマンス改善を業務として行うチームに所属していない & firestore をメインで触っていた(最近は PostgreSQL を少しずつ)ので、ISUCON の題材となる MySQL を使ったアプリケーションを扱うこと自体ほとんどないです。そのため、出場するだけで得られる知識がかなりたくさんありました。
事前準備の段階で、htop でのプロセス監視だったり、スロークエリログの出力や解析、クエリーのパフォーマンスを改善するためにインデックスや SQL 改善など、理解はしているつもりだった知識が実践を通して身についた、と自信を持って言えます。実は理解できていなかったことにも気づくことができ、今後の成長に繋げることができます。
また、アプリケーションの性質を考慮してスコアが計算されるため、アプリケーションが提供する価値を必然的に考えます。エンジニアとしての総合力を問われるコンテストで、ただ技術を知っているだけでは勝てないということを改めて感じました。
まだまだ未熟だな、と感じたのですが、こう感じることができたのは ISUCON に参加できたから、です。
これからも少しずつ前に進んでいこうー。