ISUCON10の予選にチーム「iwamot solo」として参加しました。チーム名の通りソロ参加で、最終スコアは1,635でした。順位はまだ分かりませんが、昨年初参加したISUCON9では参考スコアベースで98位だったので、それより上だといいなと思っています。
(2020-09-14追記:参考スコアベースで66位でした。自分としては善戦だったと思います)
言語はRubyを選びました。本当は昨年同様PHPにするつもりだったのですが、エラーでうまく動かせませんでした。時間があれば、くわしく調査したかったところです。
使えるサーバは3台でした。1台目はNginxとUnicorn、2台目はMySQL、3台目はUnicornと振り分けました。昨年はアプリケーションコードの改善だけでほぼ終わってしまったので、少しは進歩できたかなと思っています。
その他、実施したタスクは下記の通りです。
- NewRelicの導入
- 各種インデックスの作成
- camelize_keys_for_estateの排除
- ループ外で実行可能な処理のループ外への移動
- 冗長なwhere句の整理
- SELECT FOR UPDATEの排除
- ログ出力の停止(Nginx、Sinatra)
- Sinatraのリロード停止
- 「stock > 0」の「stock != 0」への変更
- MySQL、Nginx、Unicornのパラメータ調整
(2020-09-14追記:GitHubリポジトリをpublicにしました。ソロ参戦なので適当な感じですし、アプリケーションコードしか含まれていませんが、どなたかの参考になれば幸いです)
こうまとめてみると、まだまだやれることはあったと思います。が、競技時間内ではこれで一杯一杯でした。
限られた時間内でのチューニングという経験はなかなかできないので、来年以降もスケジュールが合えば参加するつもりです。運営のみなさま、ありがとうございます。