ISUCON8予選に参加した

IISUCON8の予選に参加しました。

ISUCONとは

いい感じスピードアップコンテスト。 webサービスが与えられるので頑張って高速化します。 詳しくは公式サイトを読んでください。

isucon.net

今回のテーマはチケット予約サイト。

チーム

役割分担は、@nonamea774がインフラ担当、@_primenumberがアプリを見る担当でした。

会場

今回は株式会社ミクシィ様に会場を提供していただきました。 快適インターネット回線はもちろんのこと、モニター1台の貸与もあり、快適に作業が出来ました。 ありがとうございます。

mixi.connpass.com

今回はメンバーの1人がリモート参加だったので、競技時間中はSlackのプライベートチャンネルと通話機能で情報共有を行いました。

レポジトリ

rubyを使いました。

github.com

やったこと

(前日まで)

  • 変更をmitamaeでデプロイするようにする
  • netdata導入
  • ssh公開鍵登録
  • mysqldump用スクリプト設置
  • nginx用設定

(当日)

  • インスタンス情報をmitamae、sshconfigに設定
  • netdata用のポートフォワードを設定
  • h2oをやめてnginxを使う
  • pumaをやめてunicornを使う
    メモリをバカ食いしている問題の解決を目指したが、特に効果なし
  • app2台、db1台構成にする
  • sigdumpを入れようとして失敗する
  • nginxでstatic配信
  • get_eventのN+1を解消
    ここで5000点くらい
  • get_eventsのN+1を解消
  • なぜかget_eventで使うデータにnilが混入したので対処
  • get_eventsのトランザクション処理をなくす
    1万点くらい
  • 有効打がなくなる
  • 終了1時間前の再起動テスト
  • 終了20分前の得点ガチャ

結果

59位 17022点でした。

感想

  • 予選の案内メールの文面から何となく感じていた通り、今回の予選も複数台構成でした。
    今回ここではまることはなかったように感じます。
  • メモリが常に逼迫していましたが、最後まで原因を特定することが出来なかったのが悔しいです。
  • ベンチマークはほぼ待ち時間なしで投げることが出来たので非常に快適でした。
  • あまりチームに貢献できなかった気がするので、もっと素振りをして来年リベンジしたいです。
  • チームメンバーの二人には何から何までお世話になりました。ありがとうございました。
  • 運営の皆様、楽しい(悔しい)時間をありがとうございました。