matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

ISUCON10予選に参加しました

昨年と一昨年に引き続き、今年も同じメンバーでISUCONに参加しました!

matsukaz.hatenablog.com

って前回の記事だし…。ブログ放置しすぎた。

その後転職した話はnoteに書いたので、よろしければ。

note.com

それはそれとして、結果はというと・・・先程発表になったけど敗退でした(´;ω;`) 順位はまだ不明。

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

14:30 〜 15:30

このあたりでスコアは630ぐらい。

15:30 〜 17:00

  • インデックスをいろいろ追加
  • DBで処理してた一部クエリをアプリ側に移動
  • アプリのログレベルをDEBUGからERRORに
  • 不要なループ処理削除

このあたりは伸び悩んでて700ちょい。

17:00 〜 19:00

  • DBを別サーバへ分離
  • 他インデックス見直したりいろいろ
  • なぞって検索の一部処理をアプリ側に移動

ここでやっと1000超えて、MAXは1396に。

とはいえ、このままじゃ決勝進出は厳しいので、あとは思いついた一発逆転施策を各自チャレンジ! が、結果どれもうまくいかず・・・でした。

まとめ

GEOMETRY型を使って空間インデックスにするとか、アイデアは良かったものもあったんですが、時間的に厳しくてやりきれなかったのが残念です・・・。

というわけで私たちのISUCONは今年も終わりました。

振り返ってみると、去年に比べて手を出せた箇所が少なかったのが反省点です。 もっと時間を大事に、効率よく動けないとだめだなぁ。

過去2回に比べると、結構悔いの残る戦いだった気がします。くぅー。

とはいえ楽しかったのは楽しかったです! 運営の皆様、本当にお疲れさまでした!! 本選も無事終わることをお祈りしております。