ISUCON7の予選に参加しました #isucon
sfus、sgykfjsmと3人で「博多三双 明太子ラーメン」というチーム名で予選1日目に参加しました。
結果は以下のように惨敗。
- 選択した言語: golang
- 最終スコア: 95,883
- 順位: 34位
やった事をまとめておきます。
担当分け
- sfus: アプリ
- sgykfjsm: アプリとデプロイ
- matsumana: アプリとインフラ
チューニング内容とスコア
- 初期スコア: 6,604
- golang実装に切り替え
この時点でスコアは3,613
- 鍵の設置
- alpでnginxのaccesslogを分析出来るようにした
- percona-toolkitでMySQLのslow query logを分析出来るようにした
この時点で時刻は14:25
- アプリのチューニングをいくつか
- MySQLのチューニング
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
- MySQLのインデックス追加
- nginxのチューニング
- app1でnginxを稼働させ、app1とapp2にリバースプロキシするように設定
(appサーバ2台でアプリを動かす) /icons
が304になるようにnginxを設定
デフォルトのnginx.confでうまく設定が出来ず、最新の1.13.6
をソースからビルドしてインストールして設定し直してみた
(結局自分のnginx.confの書き方が悪かっただけでこの作業は意味なかった・・・)- ブラウザで動作確認すると304になるけど、ベンチのスコアが上がらないという状況になる・・・ (ToT)
- app1でnginxを稼働させ、app1とapp2にリバースプロキシするように設定
この時点で時刻は16:50。スコアは4,302
この時間帯の修正、ベンチスコアのブレが大きくてどれが効果あったか不明
- 画像をDBじゃなくてサーバのディレクトリに置くように変更
- https://github.com/matsumana/isucon7-qualifier-app/pull/8
- https://github.com/matsumana/isucon7-qualifier-app/pull/9
- https://github.com/matsumana/isucon7-qualifier-app/pull/10
- https://github.com/matsumana/isucon7-qualifier-app/pull/11
- app1とapp2の2台でアプリを稼働させているので新規登録された画像を共有する必要があると思い、NFSで画像ディレクトリを共有(仕事なら絶対やらないけど)
この時点で時刻は19:00。スコアは71,376
ようやくポータルサイトのリーダーボードのランキングの真ん中辺りに戻った
- jsonifyMessage関数でN+1クエリになっている箇所の改善
この時点で時刻は19:35。スコアは94,953
リーダーボードのランキングは8位くらいだったと思う
ようやく戦えるくらいのスコアになったけど、残り1時間半で大きなブレイクスルーを起こせずに終了。
最終スコア95,883でした (ベストスコアは97,679)
ソースと設定ファイル
以下に置いておきました
個人的な良かった点・悪かった点
良かった点
- 当日を想定した練習として、事前に3人でpixivさんの社内ISUCONを解いていた
(ISUCON何回か出場してるけど、過去問題がこんなに役に立った事は無かった)
悪かった点
- 画像を304にするためのnginx設定に時間が掛かりすぎた
- ベンチマーク対象のサーバを複数選択出来るのを気づいてなかった
nginxが結構CPU食ってたので、もう少しスコア上がったと思う
(レギュレーション・当日マニュアルはちゃんと読んだつもりだったんだけど・・・)
まとめ
また予選落ちでしたが、今年もとても楽しいイベントでした。
運営の皆さん、ありがとうございました。
出場された皆さん、お疲れ様でした。
来年も開催される事を祈っています。