Dabits

サーバサイドから運営まで何でもやるエンジニア系DJ

ISUCON7予選 参加振り返り

鉄はアツいうちに打て!ということで個人的振り返りを書き出してみます。

予選までの背景

  • 会社メンバーでISUCON参加しよう!ということになり社内で参加者を募集し始める
  • 9人ほど集まったので3チームつくりつつ、弊社CTOがCEOに「こんなことやりますよ!」と報告を入れる
  • CEO「良いね!全面バックアップするよ!」とのことで、練習時のサーバ費やオフィス間移動の交通費などのサポートが充実する
  • 参加メンバー全員の本気度(背水の陣感)が増し、 "社内制度":http://www.a-tm.co.jp/news/corporate-3553/ を活用して毎週過去問題で模擬戦を実施する
    • ※グループ全体のMTGでも参加の旨が共有される (触発されて別子会社のメンバーも参加する)
    • ※会う度に「頑張ってね!」と応援されるようになる
  • 週末も夜通し夢中になって1人ISUCONを参加するメンバー多数, slackが大いに盛り上がる
  • 当日は名古屋オフィスを拠点としてメンバーが集まり、予選に挑む

予選結果

予選中にやったこと

覚えている限りを。 他は @kopug , @mziyut が記事書いてくれるはず...!

うまくいったやつ
  • DBに乗っかっている画像のファイル書き出し

    • 初期に乗ってる画像はinitializeに書き出しスクリプトを書いてpublic/icons以下へ->その後コメントアウト
    • アップロード時はそのままpublic/iconsに保存されるように
    • 複数台への画像ファイル共有は愚直にnfsで。
  • slow queryになっている箇所にindexを貼る

    • messageのchannel_idだけだったはず
  • havereadをmemcachedに載せ替える

  • slimのバージョンアップしたりrouting cache有効にしたりtemplate cache有効にしたり

  • users, messageをしこたまmemcachedにキャッシュさせる

  • select - を必要なカラムのみに絞る

  • サーバ構成を下記の通りにする

    • 1台目 : rp+dbサーバ nginx + mysql + nfs
    • 2台目 : appサーバ nginx + php-fpm
    • 2台目 : appサーバ nginx + php-fpm
  • 各種ミドルウェアのチューニングをやる

うまくいかなかったやつ
  • /fecthにあったsleepのチューニング, カンが外れて逆に短くするようにしたがスコアが落ちた

  • apcuの導入, memcachedよりレスポンス早いが複数台前提の動作が必要だったので断念した

  • newrelicでの計測, 今回の予選ではアプリケーションの問題は過去問とほぼ同じでありnewrelicが無くても解決できた

    • インストールしただけ時間を食った
  • これまでの大会はサーバ1台だけだったので全部設定ぶっこんで別サーバに展開するスクリプトを書いていたが、当日は複数台だったので断念した

参加に関してのKPT

Keep
  • 過去問を使った模擬戦だいぢ!アプリ層は進研ゼミメソッド的に「あ!これやったやつだ!」状態が多発した

    • 特に直前にpixivとyahooのisuconをやったのが良かった
  • 過去参加者の記事も非常にだいぢ!凄く参考になった

  • メンバーの特性を活かした役割分担が非常に良かった

    • インフラ1名/アプリ1名/何でも屋1名
    • 問題解決の比率でメンバーのタスクウェイトがいい感じに調整できるチームだった
  • アプリケーションソース保全&Gitlab管理が進行をめっちゃ捗らせた

    • 開始後すぐgit init -> git push
    • 開始直後のデータはfirstブランチに入れ、トラブったときはcheckoutして初期の挙動を確認してみる
    • 各メンバー用branchを切り、各々開発。ローカルで開発しつつ最終検証は本番環境にcheckout, 問題なければmasterにマージ
    • スコアが出たらscore/010000の用にスコア別でtagを切る, 途中立ち戻るときはtagを切ったところに戻る
Probrem
  • 過去に解いた問題のロジックを過信してコピペしたら思わぬバグを踏んで終了直前まで苦戦した

    • 終了40分前の時点で最高スコア20,000程, ようやく不具合を解消して96,000程へ
    • ファイル書き出しの際に画像ファイル名が必ず同じ名前になってしまう初歩的なミス...!
  • 思い込みで点を伸ばせなかったところが多かった

    • 上記のミス(こんなところに不具合は残っていないだろう, インフラのせいだ...!)
    • ベンチ実行できるのは1台のサーバだけだと思っていた(チェックボックスで複数選択できるのはバグかな?)
    • などなど他にもあったとおもう
  • 予選本番の雰囲気にもっていかれた

    • いつもと違う雰囲気, 失敗できない気持ち
  • チームワークが悪い方向に向かい続けた

    • いつもは開始直後にチームMTGに30minほど割く->突然開始の焦りでMTGの会話も一部だけ
    • いつもは役割別に良い仕事をし続けれる->当日はみんなそれぞれ詰まるし人の解決を置き去り
Try
  • 本番でも「いつも通り」を出せるようにする

    • 方法は色んな人に聞いてみる
    • 個人的に一番調子良かった時はonアルコールの時だったから、当日もそうすればよかった
  • ギスギスしそうになっても会話を諦めない

  • 詰まったら一旦キーボードから手を離す, リフレッシュする

    • 執着と思い込みが問題をややこしくさせる
  • チームメンバーと定期的に会話するタイムを設ける

    • チームだから一人でやりすぎない
    • 思い込みを防いだり問題解決のスピードを上げるために何度も会話する

持ち帰れたもの

  • これまであまり会話が無かったメンバーとよく会話するようになった!

    • 「決勝に出場する」というグループ全体の共通目標を持つことで、会社間問わず会話するネタが生まれた
    • 業務であまり関わりのなかったメンバーとチームになることで、決勝のために頻繁に会話するようになった
      • 業務上の会話も増え、問題解決が捗った
  • 模擬戦の回数を重ねるにつれ、みなの問題解決スキルが飛躍的に上がった!

    • 得た知識を早速業務に反映した->一部サーバのPHP7+php-fpm+nginx化
  • 参加したメンバーの、早速業務に活かしたい雰囲気がスゴイ!

    • ICUSONでお題に出たシステムのうち、良いと思ったものを自社内システムに適用したかったりだとか
    • 社内勉強会でのお題目にICUSONを取り入れたかったりとか
      • 自社のサービスをISUCONの題材に見立て、どのチームが一番改善できるか、とか
    • 地方ISUCON(東海ISUCON)開催したいよね!という会話が飛び交ったりとか

所感

  • スコアは満足した結果にならなかった、自分がチームの輪を乱しつつ不具合を産んだだけに個々数年の人生中では一番悔しい

    • とはいえ自分の弱みが如実に出てきてとてもよく理解できた
  • 参加して後悔した?->いやいや絶対よかった!

    • 得た技術的知見も多いし、人と話す機会も増えたし、なにより模擬戦中・予選通して楽しかった!
    • 高校時代の部活を思い出させる雰囲気で、社会人に慣れてきた自分にとってとても刺激になった!
    • 開催終了後の参加者チャット部屋が、日本中のスゲー技術者揃いで反省会やってて、そんな会話に参加できる機会めった無いなと思った!
  • 来週も参加したい?->絶対したい!

    • 社内や東海でISUCONを当たり前に何度も開催できるようにしたい!
    • その上でもう一回来年のISUCONも楽しみにしています。今度は絶対勝ちに行きます。

あとがき

  • ISUCON参加に伴い、全面バックアップ頂いた会社、応援してくださった方々非常に感謝しております。ありがとうございます。
  • このような素晴らしい機会をくださった運営のスタッフをはじめ、問題作成、サーバ提供をしてくださった方々、企業様ありがとうございました。

    • 特に今回は運営isuconが始まるくらい初期セットアップが大変だったと思います。
    • "予選開始遅延要因を解説した記事":http://isucon.net/archives/50960409.html がとても学びになりました
  • 東海圏で地方ISUCON開催したり、あるいは社内でISUCON開催したりしつつ、一緒に楽しくやっていく仲間を探しています!

  • 私はいま "エイチーム":http://www.a-tm.co.jp/recruit/ におりますので、興味がありましたらぜひサイトをご覧ください!