ISUCON 4 予選に参加してきた

今年も ISUCON 4 のオンライン予選に参加してきた。 @haruta_makoto 、matsuo さん、僕の「Beer Qz's」というチーム。ちなみに最近はハイボールを飲んでいる。

結果は 41748 で「総合トップ 13 枠」の 2 位だった。今年は予選突破!

気がついたら本選まであと 1 週間で、もう内容をあまり覚えていないのだが、 いつか参考になるかも知れないので何かしら書き残しておこうと思う。

事前に準備したもの

コードはいつもの通り GitHub で、コミュニケーションは Slack で取ることにした。 場所は社内の会議室を取ったのでディスプレイ、プロジェクターを用意。

役割

  • @haruta_makoto: ファシリテーター、ミドルウェア周り
  • matsuo さん: 計測、アプリケーション周り
  • @cho_co: アプリケーション周り

やったこと

準備

  • インスタンスにログインし、アプリケーションや SQL が入っているディレクトリのコピーを作成
  • アプリケーションのコードを Git リポジトリに追加
  • アクセスログのレスポンスタイムやスロークエリを出力するようにして確認

実装

Ruby ベースのアプリケーションに対して、MySQL へのアクセスを減らし Redis で処理するアプローチで取り組んだ。

  • ログイン失敗/成功回数の記録処理を Redis にやらせる
  • ユーザーのログイン日時や IP アドレスをテーブルに記録するようにした

全部 Redis でやった方がよかったのだが、踏ん切りがつかなかった。

ミドルウェア周り

  • テーブルにインデックスを貼った
  • ミドルウェアのチューニング
  • Redis をインストール。Gem は redis-rb と hiredis を使った
  • Nginx, Unicorn のワーカープロセスを調整
  • Can't assign local address, Too many open files の対応

もう普通にやっただけでは限界が見えているので何とかしないとな... という感じがある。

デプロイについて

去年は Capistrano でデプロイするようにしていたが、 今回は手動で git pull して、Unicorn の再起動はシェルスクリプトでやる方式に変えた。

本選では違う状況になるかもしれない。

終わり

AMI の確認、提出をして去年と同じ太樹苑で反省会。 去年と違うのは社内から他に 2 チーム出場していたこと。張り合いがあって良かったです。

あと、決起集会ということで弊社 CTO に魚山亭というお店で宮崎料理をご馳走してもらった。冷や汁美味い。 本選も頑張ろう。

運営チームの方々、どうもありがとうございました。 本選もよろしくお願いします。

© 2023 暇人じゃない. All rights reserved.