こんにちは, @mecha_g3 です.
ISUCON8というサーバチューニングコンテストで予選に参加したので, 自分のやった事を書きます.
予選1日目の4位, 全体10位という結果で無事予選通過することができました.
リポジトリとベンチマークの結果を貼っておきます. ベンチマークレポートは最後ログを切ってしまった都合上, 最終の一つ前のベンチマークのものです.
ISUCON4, ISUCON5 で予選落ちした DiamondPrincess (@hasi_t, @mecha_g3, @pandax381) です.
ISUCON6 は本気で勝ちに行って僕は別チームに. ISUCON7 は問題作ってました.
今年はゆるふわ参加が良いな〜と言いながら, 初期 DiamondPrincess メンバでの参加になりました.
事前練習の予定が合わないのでぶっつけ本番でいくことになり, 予選通過はほぼ無理な雰囲気だったのですが, うっかり予選通過したら考えよう!OpenRestyつかってNginxLuaで遊びたい!とか話してました.
社内のもう1チームが練習しているチャットで Pixiv 社内ISUCON2016 のCentOS版イメージが作成されていたので共有してもらいました.
急にやる気が出てきたのでそのイメージを使って開発環境を整え, 昔作ったプロファイリング系のツールの動かし方を確認し, 軽くチューニングする練習をしたり, スタートダッシュシート(開始直後TODOリスト)を作りました.
開始直前に会社の会議室に集合しコンテスト開始.
以下, 僕のやったことを時系列で
Puppeteerでポータルに対してエンキューとスコア取得を行うスクリプトを書きました. コマンドでエンキューやスコア取得ができるようになりました.
開発環境上で動かすのに苦労して2時間も使ってしまいました.
h2o速そうだけど全く使ったことがなかったので nginx を使うことにしました. これは @hasi_t にお任せしていました.
パーミッションの問題で一部のレスポンスが返せずハマってしまい, 16時までベンチが通りませんでした.
@hasi_tにより予約/キャンセルAPI全体にMutexでロックを取るロックな実装がなされていました.
他チームはトランザクション絡みでランダムなfailが起こっていたり, スコアが安定しないという話でしたが, これのおかげかうちのチームは変なfailはありませんでした.
myprofilerがmariaDBで動かなかったのでMySQLを使うことにしました.
最初MySQLが起動せず困ったのですが, @pandax381 が my.cnf がmariaDBのものを参照していた事が原因とすぐ特定してくれて助かりました.
ベンチマークが通っていない間から作り始め, 最終的に User, Sheet, Reservation, Event, ReservedTimes, ReservedUserID のオンメモリストアができました. Sheet, Reservation, Event あたりはメモリに載せただけで使ってないです. 関数を作って呼び出すの忘れるみたいなことを何度もしてしまいました.
16:00過ぎに nginx 後初めてベンチが通り, 6000点台でした. そこから @hasi_t とペアプロしながらオンメモリキャッシュを適用していきました. 改善を入れるたびにぐんぐんスコアが伸びていきました.
17:30あたりで再起動試験をしてみたらdbに接続できずにアプリが立ち上がって来ない問題が起きましたが, @pandax381 が一瞬で原因を見つけてくれてシュッと直してくれました.
次 35,000点 超えたら終わりにましょう, と言いながらログを切ったり再起動したりしてベンチかけると 42,181点 が出たのでここで終わりにしました.
レポート系のAPIのチューニングが手付かずに終わってしまったので, 予選通過できるか不安なスコアでした.
今年はゆるふわ参加とか言っていましたが, いざチューニングし始めると楽しいISUCONを思い出してきて夢中になって, 結果的に予選突破してしまいました.
全くチーム練習していなかった割には 3人とも活躍できました. お互いの得意分野が大体分かっているのと, 準備してきたレポートツールなどが優秀でチューニングポイントを迷わなかったのが勝因だと思います.
本戦の席を奪ったからには, ちゃんと練習して挑みたいと思います!
昨年作問を担当したので運営側の大変さはとてもわかるのですが, このクオリティの問題と安定したインフラを準備してくるの, すごすぎると思いました.
ポータルサイトも超カッコよくなっていて, 昨年導入した負荷レベルの概念とかベンチマーカーからのメッセージとかが継承されていて嬉しくなりました. ベンチマーカー作るの本当に大変なんですよね...
競技中はボリューム大きすぎ, 難易度高過ぎと思いましたが, 終わってみるとボリュームと難易度のバランスの良い良問でした. 本戦で裏話が聞けるのが今から楽しみです.
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。
合わせて読みたい
KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。