ISUCON10に参加してきた。
ISUCON参加は2年ぶり2回目。
前回は2人チームで参加したが、今回は3人チームで参加した。
やったこと
- 予選マニュアルやレギュレーションの内容確認
- SSH接続の確認
- githubに登録している鍵で接続可能だった。今回は踏み台サーバーが用意されていた。
- プロセスの確認
- APIのエンドポイントやUIを確認
- DB確認
- デプロイ整備
- アプリケーションのデプロイ、schemaの管理をmake一発できるように。
- alp導入
- MySQLの一般クエリログ、スロークエリログの調整、各種パラメータの調整
- Nginxの設定調整
- 初回ベンチマーカー実行
作業
- クエリのチューニング
- botアクセスのフィルタリング(ブロック)
- MySQL5.7→8へのアップデート
- これが罠だった.. アプデするだけで駄目で、根本対応が必要。
- 緯度、経度がそれぞれdouble precisionで保存されていたが、これをgiometryやpointに変更して、空間Indexを効かせるように調整する必要があった。気づいたときには時すでにお寿司だった...
- 合わせてN+1クエリを改善する必要もあったが間に合わなかった...
- 後日ブログを色々見ていると、アプリ側の計算ロジックを最適化することで計算量を減らす競プロ的なアプローチを講じているチームもあってなるほどと思った。
- APとDBサーバーの2台構成にした
- サーバーは3台あったがオペミスで1台駄目にしてしまった..かなしみ
- DBのほうがCPU100%近くに張り付いていたので、ここを大きく改善しようと粘っていたところで終盤、時間切れ。
- テーブルが2つしかなかったので、位置情報を持つテーブルともう一方のテーブルでDBサーバーを2つに分けるという策を試すべきだったなぁと終了後気づいた。残存2台でもAPP+DB、DBの構成にしておけば少し点数変わっただろうか・・
結果
予選敗退。前回はfailで0点だったが、今回は点数を残せたので僅かでも成長しただろうか。
序盤のオペレーションにだいぶ慣れを感じたり、(半年ちょい前くらいからチームでISUCON練習会をしていた)ボトルネックと格闘するところ(解消ができていないが・・)でもちょっとは成長を感じたが、まだまだやれることとやるべきことをやりきれていないので修行が必要・・
チームでKPTをしたら来年に向けた修行を開始する予定なのでまた来年もよろしくお願いします・・!
運営の皆様、ありがとうございました!!