ISUCON6本選で惨敗したのでISUCON7で優勝するための記録

2016年10月公開

ISUCON6本選で惨敗したのでISUCON7で優勝するための記録

チーム名「Anago」で @iwiwi, @zuisou, @imos の 3 人で ISUCON6 本選に参加しました.最終結果は初期スコアを倍にできたものの,ボトルネックを改善したはずなのにスコアが改善されない現象に終始悩まされ惨敗でした.その原因はベンチマーク環境が提供されないと何とも言えないので,この記事は来年に活かしたいことの記録です.来年は是非優勝させて頂きたいと思います.

本選の方針

ISUCON6 予選を C++ で参加して予選通過した話と同様に,nineserver をそのまま使いました.最終的なサーバーの構成は,参考実装の上に nginx と C++ サーバーが乗っかった形でした.自分以外の 2 人が SVG を C++ で生成する等の高速化を行い,自分はサーバーチューニング・並列化に集中しました.結果はあまり伸びませんでしたが,懇親会での話を聞く限り方針自体は悪くなかったように思います.ベンチマーク環境が公開されたら調査をしたいと思っています.

来年までに改善したいこと

  • Docker を使って最高のパフォーマンスがでる環境を構築する
    • ISUCON は毎回環境が違うので,Docker を利用することで事前準備ができるようにしたい
    • nginx は /var/run/nginx.pid をはじめハードコードされたパスを読みに行くために分離がしづらいという問題があるがそれが改善されることを期待したい
    • 単純に Docker を使用するだけではカーネルの設定が引き継がれない問題があったりしてパフォーマンスがでない例があるのでちゃんと調査しながら構築したい
  • 完全にチーム内で分離できる環境の構築をやめ,簡単に環境を切り替えられる仕組みを作る
    • ISUCON6 では,チーム内で相互に影響がないような環境をポートを分けながら 1 つのサーバ内で構築していたけども,これの構築に数時間かかっていて大きなロスになっているのでこれをやめる
    • 共同作業に影響が出ることが考えられるが,簡単に切り替えるような環境を構築すれば十分なものになると考えられる
    • バックエンドサーバーが大きく変更されることがないという前提の上で,C++ 部分とバックエンド部分が独立して切り替わる構成にしても良いかもしれない
  • 事前に外部のサーバーを用意する
  • ストリーム通信に対応する
    • 今回の本選はここに大きなボトルネックがなかったらしく無視ができたが,次回以降はボトルネックになりうるので対応したい
    • ストリーム通信はフロントエンドでのプロファイリングができないので,バックエンドで使った時間を記録する仕組みを構築する
  • C++ サーバー内での別 URL の呼び出し
    • プロファイリングの都合で欲しいという要望があった
    • 呼び出しの並列化という意味で良いかもしれない

来年も続けたいこと

  • C++ 独自サーバーで戦う
    • C++ で実装すると同じことをした人たちのグループの中ではトップになれることが予選でわかったので,来年以降も続けたい
    • ハンドラーを登録する形式だと同じファイルを編集する必要がなくなるので継続利用したい
    • バックエンド側で特定の文字列を生成し,それを C++ で置換する仕組みはバックエンドの言語をちゃんと理解せずとも使えて便利なので継続利用したい
  • /etc/hosts を最初に書き換える
    • 最初に Google Docs に設定をはって全員で共有した
    • 以降は http://isucon1/ のようなアクセスができ IP アドレスを調べる手間が省けているように感じた

その他改善すると良さそうなこと

  • C++ から GO 言語を直接呼び出せるようにする
    • 今のところ問題にあたったことはないけども,複雑な処理(事前に想定していないハッシュ処理等)が与えられた時に GO 言語勢に遅れを取らずコピペで対応できるようにしたい
  • Redis, PostgreSQL, SQLite 等のライブラリを用意する
    • これらの技術が使われていなかったのは偶然なので事前準備したい

大会に関する感想

大会のバッジがすごく良く出来ていて感動しました.懇親会のごはんのチョイス,寿司・ピザ・ケンタッキーという誰がどう考えても間違いなく美味しい感じで最高でした.コンテストの方も,最初こそ Azure の制限に引っかかって起動できない問題がありましたが,他はスムーズに進行しておりとても感謝しております.是非来年は優勝させていただき,再来年に出題をしたいと思っています.