Open8

ISUCONの過去問を解いてみる

morisomoriso

動機

名前だけは聞いたことがあった ISUCON に参加してみたいなーと思って、ISUCONの情報を漁ったところ、公式から過去問が提供されていたので解いてみることにした。

morisomoriso

環境構築

課金したくなかったのでローカルに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"}
Hidden comment
morisomoriso

「ISUCON11 予選問題実践攻略法」

過去問の情報を漁る中で、こんな記事を見つけた。
https://isucon.net/archives/56082639.html

ISUCON素人すぎて右往左往しないために、まずは正攻法を身につける(真似る)。

要点
・各言語実装は systemd で管理されているため、systemd に関する知識があると良い
・計測に使えるツールは色々とある
 ・top や htop, dstat といったシステム解析ツール
 ・alp や kataribe といったアクセスログ解析ツール
 ・slow-query-log といった mysql の解析ツール
 ・Ruby の stackprof や Go の pprof といったアプリの解析ツール
・ボトルネック調査から改善までの具体的な流れ

こちらを先にやる。

morisomoriso

ソースコードと設定ファイルをGitリポジトリに詰めた後は、ローカルPCで環境構築をするみたい。
https://note.com/s2terminal/n/n11c24cc309f1
サーバーでのソース修正はIDE使えないし開発がかなり辛い。可能であれば、APIとDBはローカルで環境構築するのがいい。

morisomoriso

設定ファイルをGitリポジトリに詰めるときは、settings配下にcpしてきてハードリンクを貼る。

mkdir settings; cd settings;

mkdir -p ./path
cp /path/file ./path/file
ln -b ./path/file /path/file
morisomoriso

あと、Webアプリとして成立しているものなので、当たり前にブラウザで動作確認してみる。
https://catatsuy.medium.com/自分のチームのisuconでの戦い方-c8fe121316aa

仕様を理解する。
これも当たり前だけど、仕様(レギュレーション、マニュアル読んで)の理解がないと、ボトルネックを見つけたところで修正後の状態をイメージできない。どう修正すればいいのかわからない。

複数人で参加する場合は、コミュニケーションツールを整備しておくといいかも。