YAPC::Asia Tokyo 2015 「ISUCONの勝ち方」メモ
#conferenceインフラ力が上がると噂の競技ISUCONについて、ISUCON4優勝者自ら必勝法を公開。
そのうちスライドも公開して頂けるらしいが自分のために。
リンク
スピーカー: @kazeburo さん
時間配分
- 競技全体では7時間
- 最初の1時間
- まだ慌てるような時間じゃない
- 課題の理解、プロファイリング・チューニングの方向性を決める
- 最後の30分
- 再起動テストだけに使う
- 再起動の失敗はよくある
- 上記を考慮すると、実際の作業時間は5時間ほど
事前準備
- chatroom
- (private) git repository
- 当日作業のリビジョン管理
- 見えてもいいならpublic
- wiki
- すぐにペッと貼れて使える
my.cnf
などの設定ファイルを書いておく sysctl
の設定方法などもググらなくて済むように書いておく
- すぐにペッと貼れて使える
- 技術選択
- 言語は何つかおうとか
- 過去問
- 過去問大事
- ISUCON4 予選問題の解説と講評 & AMIの公開
- ISUCON予選突破の鍵は過去問を解くことなので無料で試せるようにした(Vagrant+Ansible)
- EC2だとお金かかるけど、1日数百円程度なのでYouやっちゃいなよ!みたいな感じ
チューニングの進め方
1. 課題の理解
- レギュレーションや説明をよく読む
- スコアの算出方法、失格条件は特に注意
- 実際に動いているアプリケーションを見てみる
- とりあえずベンチ動かす
- チューニングしていなくてもベンチ取る
- ちゃんと動いているかを確認する
2. プロファイリング
- ログ解析や負荷確認
- ベンチツールの挙動を把握する
- アクセス頻度の高い所を優先的にチューニングする
- 重いけどスコアに関係ない部分は無視できるかも
- analyze_apache_logsやkataribeを利用する
- mysql slow log解析
- クエリの実行回数と頻度を見る
- pt-query-digestを使う
- アプリケーションのプロファイリング
- straceでシステムコールレベルの解析
- tcpdumpで通信の解析
- サーバの負荷
- top, iftop, iotop, dstat, …
3. サーバ構成の把握
- どんなミドルウェアがいるのか
- どのポートが使われているのか
4. チューニングの方向性を決める
- CPUの気持ちになり、コンテキストスイッチを減らす
- 不要な参照・通信・プロセスをとにかく減らす
チューニングのヒント
- 重い処理を把握し、減らせないか考える
- 外部プロセス
- HTML Templateレンダリング
- Text, Image変換処理
- DB, Cacheへの接続
- B-Treeを意識しながらDBのチューニングをする
- Primary keyとSecondary keyの挙動を把握しておく
- 不要なデータのioを最小限にする
- すぐに捨てるようなデータはなるべく読み込まない
- ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版のP49あたりの話