ISUCON9 予選に参加した.
ISUCON9 予選に参加した. ISUCON とは,「いい感じにスピードアップコンテスト (Iikanjini Speed Up CONtest) 」 というコンテストで,与えられた Web アプリケーションの処理を高速化するコンテストである.
予選中の最高スコアは 13000~14000 と良かったけれど再起動後のアプリケーション起動がうまくいかず,運営による追試をパスしなかったため予選敗退した.
事前にチームでやったこと
- 使用する言語を Go に決めていて, Go のパフォーマンス計測ツールである pprof の使い方を学ぶため, ISUCON直前 pprof特訓会に参加した
- AlibabaCloud ECS(Elastic Computing Service)でインスタンスを作る練習
- ISUCON7 のインスタンスを作ってみる (過去問練習の予定だったが AlibabaCloud アカウントの準備等に時間がかかりインスタンスを作ったところで終了した)
- ISUCON8 の過去問練習 (先述した pprof を投入する練習としてよく機能した)
- SSH や hosts などの,ミドルウェアから下のほぼ定型の変更を加えるコードの用意
- ChatOps ツール / 計測ツール などなどの設定なども含む
- ChatOps ツールはチームメイトが作ったもの? (詳細を把握していない)
- kataribe, netdata, phpMyAdmin をメインで使った
- ChatOps ツール / 計測ツール などなどの設定なども含む
- 当日使う git リポジトリの用意
- 開発環境の統一
- VSCode / goimports などの設定
- 当日集まる場所 (インターネット回線と電源があって座れる場所) の確保
当日にチームでやった,アプリの改善以外のこと
- 起床
- 集合
- 遅刻
- 昼ごはんの調達
- 昼ごはんを食べに行ったり買いに行ったりする暇はない
- 物理的な開発環境の構築
- 電源・ディスプレイ・ネットワーク接続など
- コンテスト参加
- お疲れさま夕食会
- 解散
アプリについて
まず,高速化する対象の Web アプリケーションの概要を簡単に言うと, isucari という椅子売買サービスだった.ISUCON9 予選の出題者はメルカリなので,だいたいそのままありそうな感じだった. おそらく後日 ISUCON9 公式がリポジトリを公開するはず.
アプリに加えた変更(僕が認識している範囲)
- pprof を有効にする
- アプリケーション起動時から変更されない設定ファイル・商品のカテゴリマスタ情報をオンメモリキャッシュする
- ページングごとの商品一覧取得の SQL がすごく JOIN される
- この変更の説明はまだ理解していないがとても効いている
- ユーザー情報の一部 (ID, アカウント名, 出品数?)をキャッシュ (
UserSimple
をキャッシュする) - 支払情報・発送情報の作成を非同期化
- パスワードハッシュ処理を軽量化
- このあたりで,CPU/DB ともに余裕が出てきたのでアプリケーションに対するベンチマークのレベルを上げる
- isucari サービスではキャンペーン開催中という設定を用いてアクセスするユーザーを増やせるという問題設定がある
感想・反省点・学び
pprof 特訓会・土曜日にやった過去問・日曜日の予選当日参加,と非常に楽しく充実した週末を過ごすことができた.チームメイトと運営に感謝.