ISUCON6本選で惨敗したのでISUCON7で優勝するための記録
本選の方針
来年までに改善したいこと
-
Docker を使って最高のパフォーマンスがでる環境を構築する
- ISUCON は毎回環境が違うので,Docker を利用することで事前準備ができるようにしたい
- nginx は /var/run/nginx.pid をはじめハードコードされたパスを読みに行くために分離がしづらいという問題があるがそれが改善されることを期待したい
- 単純に Docker を使用するだけではカーネルの設定が引き継がれない問題があったりしてパフォーマンスがでない例があるのでちゃんと調査しながら構築したい
-
完全にチーム内で分離できる環境の構築をやめ,簡単に環境を切り替えられる仕組みを作る
- ISUCON6 では,チーム内で相互に影響がないような環境をポートを分けながら 1 つのサーバ内で構築していたけども,これの構築に数時間かかっていて大きなロスになっているのでこれをやめる
- 共同作業に影響が出ることが考えられるが,簡単に切り替えるような環境を構築すれば十分なものになると考えられる
- バックエンドサーバーが大きく変更されることがないという前提の上で,C++ 部分とバックエンド部分が独立して切り替わる構成にしても良いかもしれない
-
事前に外部のサーバーを用意する
- 優勝チームは事前に外部のサーバーを用意して便利に使っていたらしいので参考にしたい
- 開発サーバーは大抵貧弱なのでコア数の多いマシンで開発し生成されたバイナリーを転送する形式にして,C++ のコンパイル時間を短くしたい
- ベンチマークログの記録が手動だったので,集中管理できると確かに便利かもしれない
-
ストリーム通信に対応する
- 今回の本選はここに大きなボトルネックがなかったらしく無視ができたが,次回以降はボトルネックになりうるので対応したい
- ストリーム通信はフロントエンドでのプロファイリングができないので,バックエンドで使った時間を記録する仕組みを構築する
-
C++ サーバー内での別 URL の呼び出し
- プロファイリングの都合で欲しいという要望があった
- 呼び出しの並列化という意味で良いかもしれない
来年も続けたいこと
-
C++ 独自サーバーで戦う
- C++ で実装すると同じことをした人たちのグループの中ではトップになれることが予選でわかったので,来年以降も続けたい
- ハンドラーを登録する形式だと同じファイルを編集する必要がなくなるので継続利用したい
- バックエンド側で特定の文字列を生成し,それを C++ で置換する仕組みはバックエンドの言語をちゃんと理解せずとも使えて便利なので継続利用したい
-
/etc/hosts を最初に書き換える
- 最初に Google Docs に設定をはって全員で共有した
- 以降は http://isucon1/ のようなアクセスができ IP アドレスを調べる手間が省けているように感じた
その他改善すると良さそうなこと
-
C++ から GO 言語を直接呼び出せるようにする
- 今のところ問題にあたったことはないけども,複雑な処理(事前に想定していないハッシュ処理等)が与えられた時に GO 言語勢に遅れを取らずコピペで対応できるようにしたい
-
Redis, PostgreSQL, SQLite 等のライブラリを用意する
- これらの技術が使われていなかったのは偶然なので事前準備したい
大会に関する感想
ISUCON本選会場なう。LINEオフィスで撮ったおのぼりさんなきうぇ先生のお写真をご査収ください。 pic.twitter.com/lJh8BBXXtt
— イモスのまほう (@imos) October 22, 2016