📘

ISUCON13 参加レポート

2023/12/18に公開

ISUCON13に参戦してきました!
最終スコアは10,983点で(おそらく)220位でした。

きっかけ

前職の同僚エンジニアnakanotに誘わたことがきっかけでした。同じく前職同僚の02を加えて3人でチームを組むことになりました。チームメンバー全員ISUCONは初参加です。

私自身、もともとISUCONに興味があったのと、業務ではECSでWebアプリの開発とかしていたので、バックエンド・インフラの両方でスキル幅が広がるかも!とか考えてました。

事前準備

  • 参加を決めたらすぐさまISUCON 夏祭り 2023に申し込み、セッションを一通りきいてISUCONの解像度を高める
  • 達人が教えるWebパフォーマンスチューニング
    〜ISUCONから学ぶ高速化の実践
    を買って読み進める
  • 9月後半にチームメンバーで初めて集合し、ISUCONの勉強会を始めた
  • 2週に1回のペースで集まり、ISUCON12の過去問にフォーカスして、解法の勉強、競技の作業フローとかTODOリスト・役割などを決めていった
  • 前前日に、「10時の初動」確認をやって本番を迎える

本番

オフラインで集まったほうが連携がしやすいよね、ということでTSUTAYAシェアラウンジ(六本木店)を利用しました。
1日滞在約5000円で、モニター貸出、スナック類・ブレッド・コーヒー・各種ドリンクなどがすべて自由に利用できます。
https://tsutaya.tsite.jp/store/lounge/detail/2000/

以下私視点のタイムラインです。
時間は厳密に記録していないので大雑把です。

競技開始前

  • 9時ごろにシェアラウンジに到着
  • 席の確保をしたりモニターの準備をしたり競技開始に備える

10時〜

  • CloudFormationのテンプレートをポータルから落としてAWSコンソールに突っ込む
  • IAMユーザーに権限を広く付与してたつもりだったが、CreateRoleがないと怒られrootユーザー(笑)でやり直す
  • alpやpt-query-digestなどの計測ツールをインストールしつつ、同時にマニュアルの確認を進める
  • DNSとか水責めとかマニュアルに書いてあるけど、よくわからんので練習通りの改善を先にやるということをメンバーと決める

12時〜

  • Ruby実装に切り替えて初ベンチを回し計測をとり、改善に取り掛かる
  • アイコン周りのキャッシュ実装を進めつつ、他メンバーのEC2操作とかのサポートをする
  • シェアラウンジのパンなどを食らう

15時〜

  • アイコン画像をバイナリからファイルシステムにjpegで保存するようにするが、デプロイしてベンチ回すと実行時エラーがでるので直す、をなんども繰り返す
  • サーバー3台あるので別の1台で試行錯誤してよいことに気づく
  • ログ仕込んでデプロイ、ベンチ、と別サーバーを使って動作確認をする
  • nginxに静的コンテンツ配信用の設定を入れるがスコアにあまり影響がしなかったので、nginxの設定を見直す

18時〜

  • アイコンを取得するパスの計測をみたところ、実装ミスもあり効果がなさそうだったので、リバートする
  • nginxやMYSQLログを止めて掃除を始める

後日、チームで振り返り

  • 初参戦0スタートだったので、計測ツールとDB周りの勉強までしか手が回らなかった
  • サーバー構成変更やオンメモリキャシュの活用などやれることはまだたくさんあることを確認できた
  • 上位チームが公開しているGithubを見て「なるほど〜頭良すぎな〜」とかした

自分の振り返りと感想

実装に時間かかりすぎててオワットル。
ローカル動作確認できないので、自信のない実装をデプロイしてベンチ回す絶望感など感じつつ、nakanot02がDB周りの改善を進めてくれたおかげでスコアは大きく上がりました。感謝。
事前の練習ではあまりスコアを上げることができなかったので、本番で10,000点を超えることができて嬉しかったしなにより楽しかったです。
今年できなかったことを来年こそはできるようになって、順位をもっと上げたいです!

Discussion