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にしました。ソロ参戦なので適当な感じですし、アプリケーションコードしか含まれていませんが、どなたかの参考になれば幸いです)

こうまとめてみると、まだまだやれることはあったと思います。が、競技時間内ではこれで一杯一杯でした。

限られた時間内でのチューニングという経験はなかなかできないので、来年以降もスケジュールが合えば参加するつもりです。運営のみなさま、ありがとうございます。