blogGo2018-09-25ISUCON8予選に「西アジア代表」として参加してきました(チーム名です。実在の西アジアとは一切関係ありません)結果から言うと惨敗でした。(BestScoreは16000ほど)西アジア代表としての責務を果たせなかったことが悔やまれます。チームメンバー、言語チーム構成はアプリ2名、インフラ1名。開始と同時にポータルにアクセスし、即Enqueue。初期実装はPerlで900。Go実装に切り替えてもう一度Enqueue。tkyにプロビジョニングをお任せして、その間にレギュレーションの確認とアプリ全体の雰囲気を見る作業に入りました。プロビジョニング終了後SSHログインしてインスタンスの雰囲気を掴みます。CPU数、メモリ、起動プロセスを見ていくと、H2Oが起動しているのを見つけました。ここでnginxに乗り換えるかどうかの判断がありましたが、alpで計測したかったのと、今回の問題は複数台構成を考慮する必要があったため、チームが慣れているnginxのほうが良いだろうと乗り換えることに。alpがすぐに用意できそうもなかったので、とりあえずpprofで計測。改善に取り掛かることに。典型的なN+1問題でした。組み立てるようにします。この組み立て作業が案外難しくバグつぶしに1時間ほど取られ、最終的にこの変更がマージされたのは13:30頃になりました。するようになっていましたが、再現性が低かったのと、軽く調査したところ何処に問題があるのか分からなかった。することになります...このエラーについては感想戦で調査し、これが原因なのでは?というものを見つけたので一番下に書いておきます。全取得している処理があったのでそこの改善に取り掛かりました。参照にしか使用されず、マスターデータのように扱われていたためオンメモリ化で行けるやろとバシッと決めました。改修に取り掛かります。この2つが入り順調に点数を伸ばします。14000この時点では中々順調でした。この流れで伸ばしていけば予選突破行けるのでは?という雰囲気がチームにあったと思います。ちなみに7520の頃より高い頻度でFailするようになっていました。/api/users/:id次のボトルネックに移ります。こいつは中々に強力な見た目をしていて実装の把握に手間取りました。?と勘ぐってしまいます。