hypermkt blog

ISUCON7予選にチーム「Rising Sun」で参加しました

October 24, 2017

はじめに

インフラ担当 @asuforce , アプリケーション担当の @purple_jwl と自分の3人で参加しました。結果は「246位 8,037」と惨敗でしたが、@asuforce と @purple_jwl と一緒に参加できてとても楽しかったです。本当に悔しいので来年に向けて振り返ります。

自分が対応したこと

ローカル開発環境の構築

DockerでNginx + PHP-FPM + MySQLの雛形を用意しておいたので、アプリケーションコード、静的ファイル、スキーマファイルを配置するだけで簡単にローカル開発環境の準備が出来たのは良かったでした。去年は全くDockerの右も左も分からず、インフラエンジニアに任せっきりでしたが、自分一人で対応することが出来ました。

ですが、色んな人のブログや話を聞くと、ビルドインサーバーでも充分だったと思いました。また、直接本番サーバーでコード修正をする方も多くいたそうで、時間制限を考えるとそれもありでしたね。

画像のDB保存

ボトルネックは画像のDB保存だということは、Slow Queryやalpの調査結果から明白だったので、これは対応必須と早い段階で相談しました。過去に画像のDB保存の自信で実装し、それをNginx経由での動的画像変換に置き換えた経験があったので、それを導入すれば高速化できると思いましたが、考えが甘すぎました。 Nginx側は @asuforceに対応してもらい、DBから画像の抜き出しとアプリケーションコード調整は自分が対応しリリースしましたが、点数が全く変わらず呆然・・・。

振り返り

残念ながら今回のISUCONでは対応した施策があまりなく書くことも多くないので、KPTによる振り返りを書きたいと思います。

Keep 良かったこと

  • 予選開始前に時系列で作業分担を決めたこと

  • 模擬戦をしたこと。これにより課題が見えて本格的な準備を始めた

  • デプロイ、最初にやる、最後にやる、チューニングに関するドキュメントが整備された

  • 簡易ER図とR/W状況を書いた。これによりテーブル状態がチームに共有できた

  • @purple_jwl がアプリケーション状態を最初に把握して、機能をホワイトボードに列挙してくれた

  • alp, pt-digest-query, xdebugの基本的な使い方を学習した

  • 40分位前に再起動検証をしたこと

Problem 改善したいこと

  • 予選マニュアルをしっかり読まなかったこと

  • 課題解決に関連するコードしか読まなかったこと。コードの全体確認しなかった。

  • インフラ周りを @asuforce に任せっきりだった

  • Nginx + PHP-FPM力が低くて手助けできなかった

  • 何回か一緒に調査したら問題に気づけたこともあった

  • 画像配信修正に時間がかかりすぎてアプリケーションコードを読む時間がとれなかった

  • サーバー台数がなぜ3台あったのか理由を深く考えなかった

  • 単純な画像配信の課題ではなかったことに気づけなかった

  • 3台のサーバーの活かし方すら考えていなかった

Try 次に試すこと

  • メンバー全員でゆっくり予選マニュアルを読む

  • アプリケーションコード全体をしっかり読むこと

  • Nginx + PHP+FPMの基礎を学ぶ

  • 複数台サーバー構成に合わせた設定方法を学ぶ

  • 全ての過去問で満点をとれるくらい復習する。そうしないと次回も高得点は狙えない

  • 中盤の段階でMTGをし現状を確認をする

  • 誰かが問題にハマったら、2人以上で解決に取り組む。他者の目が入ることですぐに解決できることが多い。

終わりに

ISUCONに2回参加して感じることは、当たり前の技術は基礎として当たり前のように使えなくてはいけないと思いました。問題毎に課題の本質があり、それに対して適切なアプローチを打てるかがポイントとなります。最低限の知識として、Nginx + PHP-FPMの設定を書けるようにし、柔軟に対応できるようにしたいです。また、過去の問題にも取り組み、引き出しの数も増やしていきたいです。


都内で働くWebアプリケーションエンジニア。主にサーバーサイド。最近はRuby/Railsでコードを書くのが楽しい。