ISUCONの過去問を解いてみる
動機
名前だけは聞いたことがあった ISUCON に参加してみたいなーと思って、ISUCONの情報を漁ったところ、公式から過去問が提供されていたので解いてみることにした。
環境構築
課金したくなかったのでローカルにDockerで環境構築することにした。
他にもAWSでの構築方法などが提供されている。
=> https://isucon.net/archives/54946542.html
最新版はISUCON10の予選問題だった。README通り進めれば環境構築が完了!
使わせていただいたのはこのリポジトリ
=> https://github.com/isucon/isucon10-qualify
まずはスコア計測
初期のスコアは580。
# ./bench 2> /dev/null
{"pass":true,"score":580,"messages":[{"text":"POST /api/estate/nazotte: リクエストに失敗しました (タイムアウトしました)","count":4}],"reason":"OK","language":"go"}
「ISUCON11 予選問題実践攻略法」
過去問の情報を漁る中で、こんな記事を見つけた。
ISUCON素人すぎて右往左往しないために、まずは正攻法を身につける(真似る)。
要点
・各言語実装は systemd で管理されているため、systemd に関する知識があると良い
・計測に使えるツールは色々とある
・top や htop, dstat といったシステム解析ツール
・alp や kataribe といったアクセスログ解析ツール
・slow-query-log といった mysql の解析ツール
・Ruby の stackprof や Go の pprof といったアプリの解析ツール
・ボトルネック調査から改善までの具体的な流れ
こちらを先にやる。
ソースコードと設定ファイルをGitリポジトリに詰めた後は、ローカルPCで環境構築をするみたい。
サーバーでのソース修正はIDE使えないし開発がかなり辛い。可能であれば、APIとDBはローカルで環境構築するのがいい。設定ファイルをGitリポジトリに詰めるときは、settings
配下にcpしてきてハードリンクを貼る。
mkdir settings; cd settings;
mkdir -p ./path
cp /path/file ./path/file
ln -b ./path/file /path/file
あと、Webアプリとして成立しているものなので、当たり前にブラウザで動作確認してみる。
仕様を理解する。
これも当たり前だけど、仕様(レギュレーション、マニュアル読んで)の理解がないと、ボトルネックを見つけたところで修正後の状態をイメージできない。どう修正すればいいのかわからない。
複数人で参加する場合は、コミュニケーションツールを整備しておくといいかも。
ここにもISUCON攻略のヒントがありそう。