Alligator Swamp

技術メモ

ISUCON9予選にk02で参加して惨敗しました #isucon

いつものメンバーでISUCONに参加して惨敗しました。いつもどおりインフラ面を担当。
最大スコアは3,120で、最終結果は fail でした。

事前にやったこと

  • チームで集まって打ち合わせとISUCON8予選を軽く解く
  • Prometheus + Grafana を使うことに決めたので、使用方法を調査
  • 当日やることの手順を scrapbox にまとめる (分析ツールのインストールや使用方法など)

当日やったこと

10:00-10:30

  • マニュアルを読んで気になった点をまとめる
  • テーブルのCREATE文やレコード数、レコード内容を scarpbox にメモ
  • categories が更新されないことに気づく

10:30-11:00

  • アプリケーションを触って動作確認
  • 決済が動かず悩んだが、pyament-service の url が開発用になってないことに気づく
  • QRコードを読み込み、発送完了に出来たことを喜ぶ

11:00-11:30

  • kataribe 入れた
  • hostnamectl で各サーバの名前をわかりやすくした
  • MySQL を 別サーバに移し始める

11:30-12:30

  • Alibaba Cloud のセキュリティグループをいじって 3306 ポートを許可する
  • MySQL の bind-address を 0.0.0.0 にして動き始める
  • ベンチを実行して、MySQL の slowlog と Nginx log の分析
  • DBサーバのCPUが200%近かったので、DBがボトルネックと判断

12:30-13:30

  • お昼ごはんを買いに行く
  • 作戦会議

13:30-14:30

  • デプロイしてログの分析を何度か行う
  • 合間に Prometheus の node-exporter と mysql-exporter を入れた

14:30-15:30

  • そろそろ campaign の値を変えておきたいねということで 1 にする
    • リクエスト傾向が変わり、Appサーバにボトルネックが移る
    • もっと早く試しておけばと後悔
  • Too many open files が出たので、systemd の LimitNOFILE の設定を nginx, isucari, mysql に設定
  • MySQL の max connections を増やした
  • shippment service が APIGatewayError(502) で死に始める

16:00-17:00

  • shipment service の status 遷移を見て、initial, wait_pickup, done は api 叩かなくて良いのではという話をする
  • App 二台構成にしようとして、画像の配信でエラーになったので戻す

17:00-18:10

18:10

  • おわり

反省点

  • 各種ツールのインストールが遅すぎた。スクリプト組むなり ansible 使うなりして最速で終わらせるべきだった。
  • campaign の値を変えるのが遅すぎた。単に負荷が上がるだけだと勘違いしていたのがそもそもの間違い。
  • 外部サービスのチェックが甘かった。業務だと気を使うのに、ISUCONでは何も問題なく動くと信頼しきっていた...。
  • App2台の構成にできなかった。画像の共有どうしようか、WebDavか、とか考えていたが、そもそも重い処理だけ振り分ければよかった。
  • アプリの調査に時間を使いすぎて、インフラの改善が疎かになった。インフラ担当なので、インフラの改善をもっとすべきだった。

次回に向けて

具体的な反省点が見つかったので、次回は改善して挑みたい。悔しい。