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


はじめに

9/16に開催されたISUCON8予選の2日目に @Konboi & @tkuchiki と毎年恒例のチーム「流れ弾」として参加してきました。

結果は19位とあと一歩のところで予選敗退となりました。

チームメンバーのブログ

準備

  • 前週に3人で集まってISUCON7の予選問題を復習
  • 復習といいつつ、昨年の記憶が飛びすぎていて初めて挑戦したかのような気持ちで進めていました(手を動かしているうちに少しずつ記憶を取り戻しました)
  • 毎年の習慣でbitbucketでソースコード管理をしていたのですが、「慣れてるGithubにしたい」とKonboiが話していて、そういえば自分がGithubのDeveloper Planを契約しているのを思い出してGithubに移行
  • ローカル環境を作ろうとしたもののうまく動かせず、本番での動作確認が必要になり余計なミスを生む結果に
  • 練習の後は各自で個別で復習したりツールを使ってみたりを実施
  • sqldef 便利

当日

自分とKonboiがアプリメイン、tkuchikiがインフラメインのいつもの役割分担で進めました。

全体の流れはKonboiがまとめてくれているので自分がやってたことを書きます。

  • レギュレーションを読んで、Konboiとアプリを動かしながらコードを読む
  • 初期ベンチを回してalpで集計
  • /api/user/:idページが重かったのでそこの修正から始めることに
  • 練習でローカル環境の必要性を感じていたので、Konboiが事前に用意してくれていたdocker-composeを元にローカル環境構築を進める
    • 本番がMariaDB5.5になっているのを確認し忘れていて、dockerはMySQL5.7で動かそうとしていたためGROUP BYでエラーが発生
    • sql_modeのONLY_FULL_GROUP_BYを無効化して動かすようにしました
    • 本番サーバの方もMySQL5.7を使うようにtkuchikiに変更を依頼
  • /api/user/:idをローカルで修正
    • ループの中でgetEventという重い処理を呼んでいたので、事前にJOINしてevent情報を取得するように修正
    • view側でpriceの値を見てなかったのでとりあえず0を返すように(ミス1)
    • ORDER BY IFNULL(r.canceled_at, r.reserved_at) DESC を初めて見て ORDER BY r.canceled_at DESC, r.reserved_at DESC に変更(ミス2)
  • 手元のコードをデプロイできるようにtkuchikiに準備してもらう
  • 修正コードをデプロイしたらfail
    • 横着せずにAPIのレスポンスが正しく返るように修正
    • IFNULLは単純に分けることができないと気づき元に戻す
    • /api/userのrecent reservations部分を修正し、1700点に
  • Konboiが対応してくれたトップページの実装を参考に/api/userのrecent events部分を修正
    • こちらもgetEventを呼ばずにJOINしてevent情報を取得するように修正
    • 3800点に
  • Konboiが/api/eventの修正を進めてくれている間にtkuchikiとgetEventのクエリ改善に着手
    • tkuchikiのローカル環境が間に合ってなかったので、2人でペアプロしながらローカルで修正を進める
    • 試行錯誤していたものの、その後、Konboiが進めてくれていた修正内容を取り込めば改善できそうなことが判明しここの修正はなしに
  • その後、tkuchikiに複数台構成化を進めてもらいつつ、自分はKonboiとアプリ改善の続き
    • 点数は上がっているもののfailすることが多くなって時間が過ぎていく
    • 結局原因をつかめず、最後はお祈りベンチを実行して終了

ローカル環境をすばやく作れたのはよかったけど、アプリケーション改善はKonboiに頼りっぱなしで自分は地味な改善くらいしかできていなかったのが反省点。

goを使うのがisuconの時のみになってしまっているのと、RailsのActiveRecordに頼りすぎていてSQLを直接書く機会がほとんどなくなってしまっているのはマズイなと改めて思いました。

来年は二人の足手まといにならないように引き続き精進します。

さいごに

運営の皆様、今年も素敵なイベントをありがとうございました!
そして、チームメンバーの二人もいつもありがとう!