ISUCON12開催決定!予選本選ともにオンライン開催!&参加チームとメンバーリスト #isucon : ISUCON公式Blog
というわけで、去る 2022/7/23(土)に行われた ISUCON12予選の記録です。
@mettoboshi, @gennei, @hanhan1978 のチーム「UFT」で挑みました!
最終結果
ISUCON12 オンライン予選 全てのチームのスコア(参考値) : ISUCON公式Blog
6745点 149位という結果でした。いやぁ、失格にならずにスコアは出せました。
予選突破はなりませんでしたが、初参加が2名のチームで、ここまで健闘できたのは良かったです。
チーム構成
- @gennei アプリケーション担当
- @mettoboshi アプリケーション副担当
- @hanhan1978 インフラ担当
当日のログ
10:00 競技開始
10:20 各サーバーへの最低限の
bash_profile
設定等を終わらせて、ソースコードをリポジトリにプッシュ。時間不明 alp, pt-query-digest, htop やらをインストールして、計測と解析をかんたんに実施できるシェルなどを準備完了。
時間不明 mysql のテーブルに、ある程度のインデックスを追加したことで、MySQL の CPU 負荷が優位に下がったことを確認。
12:56 PHP のコンテナ内に、xhprof やら opcache やら apcu やらを追加して、何度でも環境再構築出来るような状態を整えた。
13:39 MySQL サーバーを分離して WEB + DB の2台構成に変更。
14:09 MySQL の設定を変更。この時点で MySQL は常に鼻歌歌ってるくらいの負荷に落ち着いた。
15:00 PHP-FPM のワーカー数を 50 くらいまで上げた。(これは、かなり効果あった)
16:00 preloading の設定 (想定していたが、この時点では効果なし)
17:00 再起動試験に向けて、開発用に入れていたツール類の削除を開始
17:10 xhprof を見るために開けていた SecurityGroup の Port 8080 を削除
17:40 各サーバーの Reboot 試験を実施
感想
今までの練習で、サーバーに直接インストールされた PHP をいじる想定で準備してきたため Docker 環境だったことに少し戸惑ってしまいました。自分は Docker にも慣れているはずなのに、少しアワアワしてしまった。12:56 はかかりすぎて、遅くとも 11:30 までには終わらせておきたかった。
その後は、チームメイトの実装相談を聞きつつ、サーバーのメトリクスを見て、構成変更やミドルウェアの設定変更を実施していった。悔やまれるのは、SQLite のデータを MySQL 化することは、私が引き取ってもよい案件だったということでした。考えてみれば、アプリケーション修正ではなく、作業分割出来るオペレーション作業でした。 @gennei をもっとアプリケーションの理解に専念させるためにも、別個に対応できる部分は、もっと自分が支援すべきだったと思いました。
もちろん、それをやったからと行って、initialize の 30秒間にデータをロードできるようにまで出来たか?と言われると疑問は残りますが、自分のリソースが一番余裕があったので、そこを有効活用すべきだったなと、今になると思います。
ISUCON のたびに反省しきりの私ではあるのですが、今回については結構満足しています。
- 計測する
- ボトルネックを見つける
- 対応する
この基本の流れをチームで上手に行えていました。事前に3回の合同練習をおこなったおかげで、チームワークも良かったです。時間の制約がなければ正しい対応を行えていたであろうチームになれたことは、素晴らしかったと思っています。
いやでも、悔しいね!!!(笑) SQLite をインフラ側からでも、なんとかねじ伏せる方法はなかったものか?と悶々としています。tmpfs を使うと一挙にアプリケーションが CPU でサチるようになったので、ここをなんとかしたかった!しかし、自分の引き出しには、すぐにこれを解決する方法は入ってなかったでした。
というわけで、しばらくは他の人の感想ブログや、予選突破ブログは読まずに、この宿題を自分の力でやってみようと思います。
@gennei, @mettoboshi ありがとうございました!来年リベンジしましょう!