ISUCON10予選に参加しました
昨年と一昨年に引き続き、今年も同じメンバーでISUCONに参加しました!
って前回の記事だし…。ブログ放置しすぎた。
その後転職した話はnoteに書いたので、よろしければ。
それはそれとして、結果はというと・・・先程発表になったけど敗退でした(´;ω;`) 順位はまだ不明。
MAXスコアは 1,396。
最後の方は3人それぞれが一発逆転を狙っていろんな施策をしてみたものの、結果うまくいかずでした。
ブログを書くまでがISUCONなので、準備したことと当日の様子などを書いてきます。
準備したこと
Go言語の習得
これは準備というより、普通に趣味で書いたり業務で利用してたので、だいぶ使いこなせるようになってました。
とはいえ、まだ調べながらの場面も多かったから、またleetcodeとかatcoderの競技プログラミングもやり始めようかな。
去年の資料の見直し
Kibelaに残してた去年の資料を一通り見直したぐらい?
スクリプト系の調整
うちのチームには自動化とか環境構築系が得意なメンバーがいてくれたので、去年と同じように環境をいじれるように調整してました。 実際どんな構成かというと、
├── Makefile ← デプロイやツール類の操作、設定ファイルの反映などすべてMakefile経由で ├── bin ← goのビルド結果ファイルを置くとこ ├── etc ← 各種OSとミドルウェアの設定ファイル ├── scripts ← アプリやミドルウェア、プロファイリングツールを操作する系 ├── src ← アプリの実装 └── www ← 静的コンテンツ
のような感じ。
当日の流れ
去年は会社に集まってやってましたが、今年はコロナ禍ということもあり、全員リモートでの参加でした。
10:00 〜 12:20
10時開始予定でしたが、いろいろトラブルがあったようで、開始は12時20分からでした。 運営のみなさま、大変だったかと思います。ありがとうございました…
その間に、思いつきでプロファイリングの結果などをSlackに簡単に通知できるようにしてました。 これは最後まで便利でした!オススメー。
curl -F file=@<ファイル名> -F channels=<送信先チャンネルID> -H "Authorization: Bearer <アクセストークン>" https://slack.com/api/files.upload
12:20 〜14:30
- ガイドラインの熟読
- システム構成の把握
- 初期スコア確認
- もろもろをGit管理
- モニタリング実施/ボトルネック検出
- netdata
- pt-query-digest
- kataribe
- ローカルからリモートを操作するスクリプト準備
- アプリのデプロイ
- MySQL設定変更
- Nginx設定変更
14:30 〜 15:30
このあたりでスコアは630ぐらい。
15:30 〜 17:00
- インデックスをいろいろ追加
- DBで処理してた一部クエリをアプリ側に移動
- アプリのログレベルをDEBUGからERRORに
- 不要なループ処理削除
このあたりは伸び悩んでて700ちょい。
17:00 〜 19:00
- DBを別サーバへ分離
- 他インデックス見直したりいろいろ
- なぞって検索の一部処理をアプリ側に移動
ここでやっと1000超えて、MAXは1396に。
とはいえ、このままじゃ決勝進出は厳しいので、あとは思いついた一発逆転施策を各自チャレンジ! が、結果どれもうまくいかず・・・でした。
まとめ
GEOMETRY型を使って空間インデックスにするとか、アイデアは良かったものもあったんですが、時間的に厳しくてやりきれなかったのが残念です・・・。
というわけで私たちのISUCONは今年も終わりました。
振り返ってみると、去年に比べて手を出せた箇所が少なかったのが反省点です。 もっと時間を大事に、効率よく動けないとだめだなぁ。
過去2回に比べると、結構悔いの残る戦いだった気がします。くぅー。
とはいえ楽しかったのは楽しかったです! 運営の皆様、本当にお疲れさまでした!! 本選も無事終わることをお祈りしております。