2014年11月9日日曜日

ISUCON4 本戦に参加してきました

先日 ISUCON4 の予選参加の件をメモしてましたが、技術的なことについてメモしてませんでした。すみません。
でも、どんなことやったかあまり覚えてないので予選の方は書かないかもしれません。

無事予選を突破することが出来、本戦に参加する資格を得ましたので、本日参戦してきました。
予選と同じメンバーで、Oops!というチーム名で参加してました。

もちろん目標は賞金狙いだったのですが、結果から言うと惨敗でした。
他のチームに負けたと言うより、運営に負けたという感じがしています。
1位2位とそれ以下という感じで、スタートラインに立てなかったようです。


最終スコア

最終的な公式スコアはそのうち isucon.net の方で公開されると思いますが、競技時間内に提出できたスコアは、最終 8,461 で最大が8,548でした。

めも

  • 07:30 起床。第一関門の起床コンテストの壁突破。
  • 08:00 出発。
  • 09:00 渋谷着。予選の時と同じくヒカリエ近くのかつやでカツ丼を食べる。
  • 09:30 ヒカリエ到着。
  • 10:00 開場。カフェスペース奥のちょっと長めの机をゲット。
  • 10:30 諸々準備が終わり、競技開始まで待ちぼうけ。
  • 10:50 サーバのIPアドレス、パスワードが書かれた封筒を貰う。
  • 11:00 競技説明。
  • 11:19 
    • 初期スコア計測。
    • 予選はPHPを選択したが、本戦では Go を選択。
    • この時点で 8,059 。
    • ただし、ローカル環境でのベンチで、公式のスコアとは違う。
    • iperf でノード間の帯域を調べてみたら 33Gbps とか出ていたので、ネットワークは余裕っしょという感じになる
  • 11:20 - 12:30 
    • 何回かベンチを走らせ、ログを集計したりした。
    • プログラムを眺めて修正すべき箇所のあたりをつけた
  • 12:30 - 13:20
    • 何をやってたんだか不明。
  • 13:20
    • 公式のスコアを計測。
    • 7,665
  • 13:20 - 15:40
    • nginx の設定とかを秘伝のたれに差し替え。
      • この辺は @2matzzz がやったはず
    • その間に動画の配信を nginx からにするようにプログラム書き換えた。
      • 元々は動画自体がRedisに突っ込まれていた
      • アップされた動画の SHA1 を求めて、Redisにハッシュを登録
      • 動画自体はファイルに書込。書き込んだファイルは nginx で公開。
      • 広告の JSON 内の URL を書き換えて、動画のURLを変更。
        • /assets/xxxx.mp4 みたいなURLにした。
    • ローカル環境スコアが20,391
  • 15:40 - 16:10
    • 3台のマシンでファイルを共有できるように NFS を構成してくれたので、そっちに動画を描き込むように修正。
    • その他 nginx を調整。
    • 動画ファイルの共有のためにRedisに登録された動画を ngx_redis を使い取り出せないかとやってみたけど、効果がなかったため止めた。
    • ローカル環境スコアが23,613
  • 17:00
    • 公式スコアを計測
    • 6,779
    • スコアが下がってしまい焦る。
  • 17:00 - 18:30
    • 今まで1台のみでベンチマークしていたが、ノードB,Cの2台構成で試したところ、レポートのあたりでFAILED
    • ログをノード間で共有してなかった
    • Redisに突っ込んだりしてみたけど、最終的にNFSに書き込むようにした。
    • スコアは2台でも変わらなかった
  • 18:30 - 18:50
    • やってることはストップして、環境の整理
    • 再起動とかを行う。
    • ログの出力を止めたりし、最終の公式スコアを測定。
  • 18:50
    • finish.txt とかを確認
    • 終了モード。

反省点

  • クライアントからのリクエストはちゃんと調べましょう。
    • 普通の環境だとブラウザにキャッシュさせるとかは普通にやるけれど、ISUCONではそのあたりをまったく考慮していなかった。
    • 過去のISUCONの問題で予習していくうちに、ISUCONの枠に囚われてしまった感がある。
  • ローカルのベンチマーク環境とリモートのベンチマーク環境の違いをよく考えよう
    • なぜリモートのベンチマークだとスコアが下がるのかをよく考えていなかった
  • 落ち着こう
    • 一つのこと(今回はGo言語のプログラムの修正)に集中しすぎた
    • チームメンバーとのコミュニケーションをもっととれば良かった
  • Gentooとかコンパイルオプションとかそういうことの前にやることはたくさんある。
    • Gentooを使うのは最終手段とすべき。
松鵜先生のチームに勝てたのは嬉しかったが五十歩百歩という感じであまり喜べないですね。

最後に、楽しいイベントを開催してくれた運営の皆様ありがとうございました。
きっとまた来年も参加させていただきます。