ISUCON11参加記録

 見出しの通り、8/21日にISUCON11にチームメンバーと3名で参加してきたのでそこで思ったことだとかを記録に残していきたいと思います。

予習

 ISUCONに参加するのは今回が初めてだったので、予習としてISUCON9の予選問題の環境構築などをしました。できればボトルネックを改善して、スコアを挙げるところまでした方が良かったのですが、AWSで公開されているイメージを使用して環境設定を行った後、ソースコードをgitに挙げるところまでして力尽きました。

 チームメンバーとも別日に環境構築と解析に使用するツールのセットアップの確認などしたのですが一日でできるのはそこまででした。(もっと時間とるべきだった)

結果

 結果としては最終スコアが0で本選通過なりませんでした。最大スコアはDBにインデックスを適用するなどして4000程度でした。

 僕個人が行ったこととしては、解析によって発見したボトルネックを改善しようとしていましたが、ベンチマークのアプリケーション互換性チェックが通らず競技時間内に終えることが出来ませんでした。アプリケーションの実装をしっかりと把握しきれていなかったりだとか、デバックに必要な情報を出力しようにも、いつもはログなどあまり考えず標準出力に出てきたものをみてデバックしていたので、今回の環境ではデバックに必要な情報などをどこから得るのかわからず混乱してました。

 競技時間は7時ごろまで延長されてましたが、その日コロナワクチン打った関係で左腕がかなりしんどかったので6時半ごろに切り上げました。

反省点

 今回の経験を踏まえての反省点を列挙していきます

ログの出し方わからない件

 ログをどう出すかとかがほとんど理解できていなかった。そのせいでどこが間違っているのかなどのあたりを付けるのがとても難しかった。ISUCONのポータルに出てくるベンチマークの結果ログはどこからきているのかとか協議中はわかってなくて?となっていた。(今ならわかる、アプリケーションを実行しているサーバにリクエスト投げてるサーバのログでした。練習の環境構築に使用してたイメージがアプリケーションとベンチマークが同じインスタンス上にあったので混乱してたのでは)解析に使用するツールのログとかを自由に出力できるようになりたい。

 Goでデバック用のコードと切り替える機能があったような気がするけどまだ理解してない、勉強する。

アプリケーションの実装はよく理解しよう

 正直アプリケーションの実装をちゃんと理解していなかった気がする。今回のDBのとあるテーブルではカラムにidとjin_isu_uuid?みたいに二つidみたいなのが用意されていて、それぞれがどんな役割を担っているのか最後までわかってなかった。理解できていれば互換性チェックで引っかかるようなコードが発生する確率は低くなっていたと思う。アプリケーションを一通り手で動かしてすべてのAPIを実行させるぐらいしてもよかったと思う。

すべてチームメンバーに共有する(あたりまえ)

 チーム内での情報共有がうまくいかなかった(主に僕のせい)

必要な情報は共有する

 gitでbranch切り替えてベンチマーク行ったのは僕なのに、そのときの手順だとかを残していなかった。ベンチマーク時の手順を統一していなかったために、僕がまた自分の実装のベンチマークを走らせようとしたときに切り替えができず困った。

ディスコードでメンバーのメモの意味を理解していない。

 情報を共有する側は他人がそれを見て理解できるように、極力わかりやすくするべきだし、共有される側はわからなかったらわからないと言わないとメモ以上の情報を得ることはできない。あとrandomチャンネルが汚くなりすぎたので、チャンネルを増やして整理すべきと感じた(というか必要な情報をrandomチャンネルに投げるべきじゃなかった)

ツールとか自分でも使えるようにしたい

 今回は解析をメンバーにまかせっきりだったので自分でもツールなど使えるようにしときたい。

今回使ったツールやコマンド

名前 用途 セットアップ 使い方
pt-query-digest クエリの解析に使用する わからん わからん
discocat 標準出力→discord botできるGo製のツール できる わかる
alp LTSV(Labeled Tab-serapated Values)形式のログファイルを集計する(らしい) わからん わからん
net-data リアルタイムなリソースモニタリング わからん わからん

次回に向けて

  • 一人で参加しようかなと考えていたりいなかったり(AWSのクーポンもらえるのはチームリーダーだけ)
  • makefileナンモワカラン(今回はツールのセットアップに使ってた)