Unyablog.

のにれんのブログ

ISUCON12 本選に出場した (:old_noto_innocent: Team)

ISUCON 12 本選に出場した。結果は 167492 点で 7 位(結果修正後)。そこそこかな?

isucon.net

アプリケーション周りは utgw の記事を見ると分かりやすいです

blog.utgw.net

予選の記事は↓。ブログ賞受賞とのことで、個人スポンサーグッズをもらえるらしい。ありがとうございます!ありがとうございます!

nonylene.hatenablog.jp

やったこと

  • いつものサーバー周り
  • Elastic Stack 関係いろいろ

    • nginx のパスをいい感じに aggreate して表示しようとしたが、競技中は無理だったので諦めた
      • (nginx のログをパースする) ingest pipeline が Elasticseach で処理されるのに気づいておらず、ひたすら Filebeat 側の処理を追加していた
    • Filebeat が Elasticsearch に送らなくなったので全てを再構築した
      • 結局 Filebeat 周りの設定ミスだったりファイルをうまくつかんでいなかったりが原因だった
    • 感想戦では MySQL 周りをブラッシュアップ nonylene.hatenablog.jp
  • バグ探しやレビュー

    • nginx のパス aggregate を諦めた後はサーバー側でやることがなくなったのでアプリを見ていた
    • utgw の記事で言及されている通り、確率的に落ちる不具合が終盤で発生していた
      • はじめは uid が int32 の範囲を超えたときに起きるベンチマーカー or アプリケーションのバグかと疑っていたが、結論としては DB を分割したことに起因して invalid な session が指定された時の挙動が 403 -> 401 に 2/3 の確率で変化したことが原因だった
      • Cloud Trace を眺めることで、エラーとなっているリクエストがだいたいどこまで動いているのかを把握できたことで、競技中のバグ発見につながったと思う。入れててよかったトレーシング
      • そして爆速修正してくれたチームメイトに感謝

感想

今回は5台あったのでどうなることやらと思ったが、結果的にはいつもの構成とそこまで変わらなかった。考慮する変数が多いのはサーバー担当としてはやりがいがあった。

予選でうまくいった Elastic Stack は、新しく nginx のパスの aggregate を行おうとして失敗したり、 MySQL のクエリが大きすぎてうまくハンドリングできないなど、いくつか課題があった。試行時間も割りと使ってしまったし、その時間があれば上位に行けたかもしれない。次回に向けてブラッシュアップしていきたい。

最近はほとんどアプリを見れていなかったけど、今回は割りとコードを読んでレビューしたり挙動確認したりできた。チームの最終スコアにもつながったのでよかった。

ただ様々な賞に一つも引っかからなかったのはくやしい!次回も頑張りましょう。

今年も ISUCON 楽しかったです。やはり本選は予選で得た反省や知見をすぐ試せるといった点でもいいですね。個人的にも興味のある新しい技術を触るいい機会になりました。チームメイトや運営のみなさん、ありがとうございました!