ISUCON8 で予選を突破したのでまとめる
ディメンジョナルハイソサイエティぬれねずみというチーム名で ISUCON8 に出場しました。言語は Perl を選択しました。 結果は 40,867点で、13位 / 528組。
技術的なことについては、すでにチームメンバーの2人が書いてくれているので、自分からは主にそれ以外のことについてまとめます。チームメンバーのブログは以下:
メンバー構成
同じ会社の同僚3人で出ました。
- id:hitode909
- アプリケーションエンジニア
- Perl めっちゃ書ける、普段から業務でバリバリ使ってそう
- 出場は3回目
- id:shiba_yu36
- アプリケーションエンジニア
- Perl めっちゃ書ける
- 初出場
- id:takuya-a
みんな普段は Web サービスの開発とかをやっています。全員アプリケーションエンジニア(サーバサイドもクライアントサイドも書く)で、オペレーションが専門のエンジニアはいませんでした。 自分はあとの二人と一緒に仕事をしたことはなくて、勉強会を一緒にやったりしたくらい。
予選の申込み締切直前にたまたま Slack にいて、偶然暇だったら出ましょう、って言って組みました。 当日の予定が空けられるか怪しくて、みんな出れる確率 5% くらいだねって話していたけど、意外と条件が整って全員出られました。
ジェネレータでチーム名を決めたら「ディメンジョナルハイソサイエティぬれねずみ」っていう名前になったけど、ディメンジョナルもハイソサイエティも表記揺れがあって入力が難しいので失敗でした。
事前にやった準備
- 予選1週間前の昼休みに話し合った
- id:shiba_yu36 が事前に素振りしたり、やることをまとめたりしてくれていた
- 各種スクリプトを整備してリポジトリに置いたりしてくれた
- デプロイスクリプトは去年 id:hitode909 が作ったものを id:shiba_yu36 が整備
- 当日やるオペレーションを Wiki にまとめてくれた
- 各種スクリプトを整備してリポジトリに置いたりしてくれた
事前にやってよかったこと
- やることリストの整備
- id:shiba_yu36 がメインでまとめてくれたリストが役に立った(参考)
- リスト化しておくことで安心感が生まれ、落ち着きにつながった気がする
- rsync デプロイスクリプトを整備
- 手元で修正したものを本番環境ですぐに試せ、高速にトライアンドエラーできた
git push
したものを各サーバーに pull させる方式だとタイムラグがある
- 今回はベンチマーカーもすぐに回る環境だったので、うまくはまった
- 手元で修正したものを本番環境ですぐに試せ、高速にトライアンドエラーできた
予選当日にやったこと
- コードやテーブルを眺めつつ作戦を考える
- ペアプロ
- ベンチ中は全台ぶんの dstat/htop/アクセスログ/スローログ/アプリケーションログを眺める
dstat
で全体的なリソースの状況をみるhtop
で各 vCPU の利用率、メモリ、スワップ、負荷の高いプロセスをみる- とにかく CPU とメモリが厳しいことが一瞬でわかった
alp
でアクセスログを集計- どのエンドポイントが遅いのかの絞り込みに役立った
pt-query-digest
でスローログを見る- 今回は MySQL がテーマだったので大活躍した
journalctl -f | grep -v sshd
でアプリケーションなどのログを眺める- 今回は CentOS だったので
journalctl
- 今回は CentOS だったので
- まずはサーバを役割ごとに分けてワークロードを分割し、それぞれの詳細な様子をみよう、という作戦を立てられた
- MySQL だけに負荷がかかるはずのサーバで Plack が上がってきていておかしいとかがわかった
- ホワイトボードの常に見えるところにサーバの構成図を描いておいたのもよかった
今後 ISUCON に参加するときにやるとよさそうなこと
- 最初のオペレーションが一段落するタイミングで状況共有タイムを入れる
- どういうアプリケーションなのか、データ構造はどうなっているのか
- アクセスログをみる
- サマった数字だけじゃなくて、生ログを見るのも大事
- 各種ログや
htop
などのパフォーマンスモニタはずっと見えるところに出しておく- ベンチ中のシステムの挙動をいろんな側面から見られるように
- MySQL の general log をみる
- なんかいい感じに集計したい
- エンドポイントのルーティングのところにコメントを書く
- なにをするエンドポイントなのか、注目ポイントなど
- 処理系のメモリの状態を見られるようにしたい
- Perl だと難しそう
- Kibana を使ってアクセスログを見られるようにしてみたい
- いい感じの ISUCON 専用ダッシュボード作ってみたい
最後に
素晴らしい問題と環境、そして手厚いサポート体制を用意してくださった ISUCON8 運営の方々に感謝いたします。ありがとうございました。 本戦でもよろしくお願いいたします!