re:annkara

日々学んだことを書き留めておく。

ISUCON9 振り返り

go言語を初めて一月ほどのコンビで初のISUCONに参加してきました。
自分がインフラ周りを担当して、もう一人がアプリ担当という役割分担でしたが最終的に342位でフィニッシュでした。

やったこと

  • サーバの複数台構成
    nginx&web(1台) + MySQL(1台) の2台構成という中途半場な形ではあるものの、複数台構成を手間取らず実装できたのは良かった。
    本当は、nginx(1台) + web(1台) + MySQL(1台) というそれぞれ専用サーバとして稼働させることを試してみたのだけど、403 {"error":"IP address is not allowed"}というエラーが発生し、時間をかけても解消できなかったので、2台構成に戻してしまった。
    discord の感想戦見てると、同じような現象が発生している人もいたんだけど、あれは何がいけなかったんだろう。。。

  • netdata/alp の導入
    サーバメトリクスの収集として、ぶっつけで netdata をインストールしてリソースの可視化を行っていた。
    また、nginx のログフォーマットを TSLV に変えて、alp で解析できるようにしていた。
    このおかげで最初はDBサーバのCPUリソースがかなり消費されているなというのが把握できたし、エンドポイント毎の応答時間なども把握できた。
    ただ把握できただけで、アプリケーションの修正に繋げられなかったのが悔やまれる。。。

  • nginx の設定変更 gzip 圧縮の有効化や、HTTP2の設定を入れてみた。
    正直効果あったかといわれると、たぶんない気がするし、HTTP2の設定を有効にすると画像ファイルの取得に404が返ってきてしまったので速攻で戻した。

やりたかったこと

  • デプロイフローの整理
    ビルド&デプロイをすべて手動でやってしまってたので、無駄な時間が発生していたと思う。
    ここらへんは完全に準備不足。

  • マニュアルの理解
    アプリケーションの特性だったり、スコアの算出方法だったりをちゃんと把握すべきだったと思う。
    キャンペーンの仕組みや、外部APIの存在などさっと把握したくらいだったので、それがスコアにどのように影響するかちゃんと理解しておくべきだった。

  • アプリケーションの修正
    N+1 問題の解消は最低限しておきたかった。
    この辺は経験値が不足している。

  • DBにインデックス貼る
    /initialize にアクセスのたびに、DBの初期化が走っていたので、スクリプトを直してインデックスを貼るなどをちゃんとしておきたかった。。。

まとめ

反省する点は他にもたくさんあるけど、とにかく参加して良かったし、非常に楽しかったです。
ISUCON での悔しさは、ISUCONでしか返せないので、来年はレベルアップしてリベンジしてやりたいと思います。