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 にする
- 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か、とか考えていたが、そもそも重い処理だけ振り分ければよかった。
- アプリの調査に時間を使いすぎて、インフラの改善が疎かになった。インフラ担当なので、インフラの改善をもっとすべきだった。
次回に向けて
具体的な反省点が見つかったので、次回は改善して挑みたい。悔しい。