概要
チーム「InfraNinja」として橋本さん、塩野さん、そして本記事を執筆しております石田の3名でISUCON14に参加してきましたので、その記録となります。結果は130位(9,966)でした。1万点を越えるスコアもありましたが、最終的には越えることができず、残念です。
サーバーワークスからは、FMさばチーム、SQLインジェクターズも参加しているので是非、他チームのBlogもご覧ください。
チーム「InfraNinja」の個人としての振り返り記事も出ておりますので、よかったら以下の記事もあわせて参照ください。
事前準備
弊社参加者の全体の取り組みは以下の通りです。
- private-isuのオフライン/オンライン勉強会
- 朝の自由参加勉強会
- Slackでの情報共有、調整
特に我々のチームとしては、以下のことを実施しています。
- Ansibleによる基本セットアップ準備
- よく利用するコマンドや設定、コードのまとめ
- 当日アプリ用のリポジトリー作成
- NewRelicの導入準備
- 各メンバーの役割り分担決め
- 使用言語の取り決め*1
事前準備の内容は、以下のスライドがすごく参考になりました。
ISUCON 夏期講習 2020 - Speaker Deck
当日の時系列
9:50
- 我々の会場が10時開錠なので、外でYoutube Liveを見ながら待機してました
10:00 - 11:00
- CloudFormationスタックの作成からログインまではスムーズに行なうことができていました。我々サーバーワークスの得意分野ですからね!
- 10:36に初回ベンチマーク実施。982点でした
- Ansbileを利用してalpなどの基本ツールのインストール
- New Relicエージェントの設定
- NginxのログをJSONに変更
- Slow Queryの設定
11:00 - 13:00
- なぜかIndexを作成しても消えてしまう事象にれ悩まされる
- 11:38頃にDBのインデックスを有効にすることができ2812点を記録。ベンチマークが開始されるとDBの初期化が実行されている実装は始めてでしょうか?
- DevToolsで画面を確認した所、大量にアクセスが発生しておりデバッグしづらい。RetryAfterMsを変更するしてはどうかを調査
13:00 - 13:50
- 昼食
- 全員で定食を食べました。長帳場なのでエネルギー補給、休憩も重要です。
13:50 - 17:00
- 13:54 RetryAfterMsの調整、Indexの修正で5000点を越えました
- pprofを実施し調査
- 椅子のマッチングが適当な実装だったので、DBに空間インデックスを貼り、最短の距離のイスをマッチングできないか挑戦。達成できず
17:00 - 18:00
- 17:07 DBとWeb/Appサーバーを分離する。6027点まで伸びる
- 各サーバーにcurlでマッチングAPIを呼んでいるsystemd-serviceがあり、これを止めないと不整合が出ていました
- 最終結果が失格とならないように、再起動確認などを開始
- 17:19 9412点、Nginxのチューニングで一気に点数があがりました
- 17:41 11554点、今回の最高得点です
振り返り
- Keep
- 最初のセットアップにつまずく事は無く、スムーズにチームとして動くことができました。事前準備は重要です
- ツールのインストールやIndexの設定など、最低限実施する箇所は予習もあってか対応が早く進みました
- チーム内コミュニケーションは、それなりに回っていたと思います。オフィス集合の2名 + リモート1名の体制で少しやりづらくなかもと懸念していましたが、そこまでロケーションがネックになる感覚はありませんでした
- Problem
- 明確な根拠にもとづく意思決定が弱かったです。特に課題のアプリの設定まわりは数値をなんとなくで調整していました
- アプリケーションの改修がほぼできませんでした。最も近いイスをマッチングさせる実装ができていれば10万点の到達も夢ではなかったでしょうか
- アプリケーションの全体像を把握できていませんでした。とにかくスコアを上げたいが為に、やみくもにチューニングしてしまっていました
- Try
- 課題のアプリを修正できるように言語の勉強に取り組みます
- ベンチマークの実行時にコメントを残せると振り替えりに役立ちそうです。次回は残そうと思います。
最後に
準備から本戦まで、サーバーワークスのメンバーと共にISUCONに取り組めた事は良い経験でした。1万点でゴールできなかったのは残念です。来年のISUCONに向けて自己研鑽して行きますので、開催を期待しています!
また、このようなイベントを開催して頂き、運営の方には感謝しております。
*1:InfraNinja では Go を使用しました
石田順一(記事一覧)
カスタマーサクセス部