ISUCON

ISUCON11予選、予想以上に厳しい結果だった

ISUCON11の予選にチーム「iwamot solo」で参加したものの、参考順位299位という厳しい結果に終わりました。一昨年のISUCON9が参考順位98位、昨年のISUCON10が参考順位66位だったので、今回は惨敗だと感じています。

一番の敗因は、Sinatraに不慣れなためにソースコードの改善にもたついてしまったことでした。現在の勤務先では主にRubyが使われているので競技でもRubyを選んだのですが、Sinatraアプリをメンテナンスする機会はまずないんですよね。

そんなわけで、競技時間中に実施できたことは下記くらいでした。

他にも試したいことがたくさんあったのですが、前述の不慣れな部分をあれこれ調べているうちに終了時間を迎えてしまった感じです。

今回の惨敗で思ったのは、勉強や練習に時間をかけなければ予選通過は無理そうだなということでした。ISUCON以外にも時間をかけて取り組みたいことがあるので、まあぼちぼちですかね。

ISUCON10に参加した

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

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

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

プロフィール

ITエンジニア。ミッションはシステム品質を向上させること。情報処理技術者試験の現行全区分に合格済み。元AWS Japan(技術サポート)。JAPAN MENSA会員。

カテゴリ別アーカイブ
月別アーカイブ
ブログ内検索