ISUCON 夏期講習 2020 を開催しました(資料と動画あり)
Iikanjini Speed Up Contest
外形仕様を変更せずに高速化
- レスポンスタイムが小さい
- スループットが高い
- リソースの使用率が高い
パフォーマンスチューニング → 計測し、ボトルネックを見つける
一番遅いところを直さないといけない
「サービス」「チーム」「開発」のボトルネックを解消するコンテスト
#
チーム参加3 人分担においてはコミュニケーションのコストが高い
App - App - DB/Infra バランス型
App - DB - Infra インフラ重視型
- 全員の手が止まらないように作業の分担
- お互いの作業の邪魔をしない
- 間違ったらすぐ戻すことができる開発環境
#
Tips闇雲にコードを書かない
最初 30 分はコードを書かない。まずはドキュメント
#
レギュレーションを読むレギュレーションの読みあわせをしといたほうがいい
- ストレージの永続化
- ssh スニペット
- 当日マニュアルを読む!
- 再起動試験がある(インスタンスの順番はランダム)
- GitHub のプライベートレポは作っておく
#
アプリケーションを読む・仕様を理解するまずは当日公開のマニュアル・ドキュメントを読もう
ユーザーストーリーでイメージを掴む
ベンチマークの動作を確認
スコア計算を確認
#
練習#
言語言語を 1 つに決めてチーム内でバージョン(最新版を推奨)を揃えてインストールする
Go が強いと言われている。(慣れてる言語がチーム中で合えばそれを採用)
お互いの環境の差を理解しておいて config を書く
チーム全員が活用できる開発環境を
pyenv goenv docker ... docker 使うならキャッシュを活用できる Dockerfile を書く能力が必要
#
作業作業領域を決めておく
飛び道具(プロキシ)作ったりした。分担してると安心できる
開始 50 分でやることを予め決めておく。
紙に ER 図を書いて、チーム内のドキュメントを作成した Zoom で常に繋ぎっぱなし・ずっと画面共有ペアプロとかいいかも
よくある作業(ssh nginx mysql config)は手順を確立しておく
環境変数の扱い重要
#
情報共有メトリクスなどを Slack・GitHub issue にすべて共有
大きいパッチはプルリクへ(プルリクページから revert できる)
GitHub 落ちたときの代替サービス準備しといたほうがいい?
#
デプロイデプロイは shell script で 1 コマンド
デプロイ・ベンチマーク担当 1 人決めとく
渋滞しないワークフロー設計をチーム内で行っておく
ベンチが通ったらスコアをタグ付けした
#
コミットコミットは小さく
コミットログをきちんと書く
ISUCON は fail で 0 点になるので必ずロールバックできるように
#
コミュニケーションHRT
謙虚・尊敬・信頼
お互いのできること・得意分野とかの共有はしっかりと
相互理解・議論できる仲に
過去問を解くときはスコアよりもチームビルディングを意識
#
ボトルネックボトルネックの見つけ方
#
計測結果の分析ベンチマークスコアは高速化の指針にはならない。気にしない。
各言語、DB のどこにボトルネックがあるか計測結果から分析できるようにしておく
#
仕様の理解・スコア評価の理解過去問の講評と解説を読んでストーリーを理解してコードを読んでみる
重要なエンドポイントはどこか、遅くていいエンドポイントはどこか理解する
キャッシュは何秒までどれくらいしてもいいのか
高速化手法はいっぱいある。パターンを把握しておく
焦らずにドキュメント・コードを読む
#
ベンチマーク- 開始直後
- 計測系挿入後(計測は遅くなる)
- 施策投入後
FAIL したら revrt か修正する。FAIL を放置しない
直らなかったら戻す
#
GitHubプルリクの revert がページからできるのは楽
練習して慣れよう
#
過去問ISUCON9 予選おすすめ
スコアよりもチーム習熟と手順の確認を意識しよう
作問してみるのは良い練習になる
ベンチマーカーを書いてみるとボトルネックの考え方が身につく