ISUCON12予選に参加して惨敗しました

ISUCON12予選に参加してきました

前々からISUCONの存在は知っていていつかは参加してみたいと思っており、今年出版されたISUCON本を読んでみてやっぱり面白そうと感じたのでISUCON12に初参加してきました。ちなみに1人参加です。

gihyo.jp

結果

初めに結果を言うと7222点で136位でした。1人初参加にしては頑張ったと自分に言い聞かせました。

ISUCON12 オンライン予選 全てのチームのスコア(参考値) : ISUCON公式Blog

事前練習/準備

ISUCON本を読んで各種勘所を学びつつ、いくつかの過去問を素振りして練習しました。さくらインターネット様からさくらのクラウドのクーポンを貰えたので過去問の実行環境として使っていました。ありがとうございました。練習の中で作成したデプロイスクリプトやメモはGitHubで公開しています。

github.com

予選当日

当日の作業内容はGitHubに残していきました。使用言語はGoです。

github.com

当日は集中するためにコワーキングスペースに行きました。

やったこと

まずはマニュアルを読みつつ、コードをGitHubにあげたり、解析ツール等のインストールを行なっていきました。が、いくつか想定外のことが起きました。

  • アプリケーションがdocker-composeで提供されていたため、用意していたデプロイスクプトが動かなかった。ここはあまり時間をかけずに修正できた。
  • nginxのアクセスログ解析をsshコマンド経由でalpを実行して行なっていたが、なぜかいくつかのパスの情報が抜けて表示されてしまっていた。原因が分からずしかたなくsshしてalpを直接実行して確認した。
  • ファイルに吐かれた各種ログ(APログも)をnew relicのインフラストラクチャエージェントで収集してダッシュボードから確認しようとしましたが、なぜかログが送られず。原因が分からずしかたなくログファイルを直接確認した。

諸々初期設定が終わった後に以下のチューニングをしました。

  • MySQLのvisit_historyテーブルにINDEXを追加。ただinitialize時にMySQLのテーブルは初期化されてなかったので、MySQLに直接接続してコマンドを実行
  • APのデバッグモードを解除
  • MySQLを2台目のインスタンスに移行
  • SQLiteのplayer_scoreテーブルへのINSERT処理をbulk insertに修正

チューニングに関しては以上しかできませんでした、、

敗因

対応力と実装力の無さかなと思います。結局最後まで題材となったISUPORTSの振る舞いをほぼ理解できなかったり、ボトルネックAPIは分かったけどどう修正すれば良いのかが分からず手が止まってしまいました。

次回に向けて

解説記事を見て、チューニング箇所の見つけ方やチューニング方法の手段をインプットしていきたいと思います。あとやっぱり1人参加はなにかと辛いので一緒に参加してくれる仲間を見つけたい、、