ISUCON5の予選で爆散してきた
昨年に引き続きISUCONに参加しました
今年は id:koemu さんと id:ariarijp さんのチームでした。YAPCのタイミングだったかな?で id:koemu さんからISUCON一緒に出ましょう!と声をかけられたので、ホイホイとチームを結成しました。その後、YAPCの帰りに一緒に飲んでいた縁で知り合った ariarijp さんが一緒にチームを組んでくれることになってチームが結成された。
当日まで
あまり素振りとかできなかったのが悔やまれますが、まずは昨年参加した知見から、事前に作業方針のメモを共有しておいた。
例えば ssh の公開鍵を予めあつめておくとか、最初に手を付ける箇所の分類、チャットツールの準備などなど。
これは結果論だけど、チャットツールにSlackを選択していたのは、当日ISUCONの公式チャットツールidobataに障害が発生していて正常にアクセスできなかったので助かった。
当日
id:koemu 宅におじゃまして3人で顔を突き合わせて作業しました。当日やんごとなき事情で開始時間が1時間遅れたので、その間にトイレ行ったりして気持ちを高めていた。
〜13:00 ころまで
- koemu さんが秘伝のタレやミドルウェアのバージョンアップなど
- 自分はアプリのコードをgit化してデプロイできる環境を構築。その後、ベンチマークでDBをドロップしたりしないで毎回特定のID以降をクリーンアップしてる、というあたりを確認していた
- ariarijp さんがER図やベンチマーク実行時のログからどのような動きをしているかを確認してくれた
この時点のベンチマークでは(ランキングが正しければ)暫定1位を取ってたのは穏やかではなかった。
この時の私の様子はこちらです
うほほ
— sugamasao (@sugamasao) 2015, 9月 26
〜18:30 ころまで
ここらへんからどうもミドルウェアよりはアプリ(SQL)の問題らしいということが明確になってきて、各自問題のありそうな部分の確認、修正に着手していく。
この時、id:koemuの圧倒的コミットによって一瞬15000点くらい叩き出していて、暫定3位くらいにつける瞬間があった。
この時の私の様子はこちらです
んほーーーーーーーーーーーーーーーーーーーーーー
— sugamasao (@sugamasao) 2015, 9月 26
ただ、ベンチマーク的には問題なかったけど画面上の出力結果に問題があったので、おそらく意図しない結果だろうと判断して、この結果はお蔵入りになった(この得点に自力で到達できれば予選通過できたのだけど、、、)。
また、並行してプロファイラを仕込んだりしてボトルネックの可視化を図っていった*1。
N+1問題の解決やデータをmemcachedへ移す作業、追加のindexなどを見ていたけれど最後まで詰められず時間が来てしまった。
〜19:00
不要なログ出力のOFFなどを準備し、再起動してベンチマークが正しく動くかなどのチェックを始め、18:58くらいにギリギリ最終提出用のイメージをfixすることができた。
所感
前回のISUCONはどちらかというとミドルウェアを攻めていけた印象が強かったので、じっくりソフトウェアのチューニングを行うことにはならないだろう……などという先入観があり、プロファイラの導入など、アプリに手を入れるための施策が遅れてしまったのは大きな痛手だった(git化のついでくらいの勢いで導入すべきだった)。
あと、ローカルでアプリを動かせるような環境を作れればもうちょっと作業が効率化できたと思うのだけど*2、mysql2のビルドがうまくいかなくて諦めてしまった。ここはもうちょっと掘り下げるとか、MySQL2 0.3系を試すとか、そういう方向の手を打っていた方が良かったかもしれない。
もう一つ、今後やるならチャットツールにサーバ上のログなどの情報を手軽に通知できる仕組みを準備できると、作業時間のロスがなくて良いのかなと思った(とくに具体案はないけど、やってて手間だった)。
最後に
id:koemu さん宅におじゃまして一日作業させてくれてありがとうございました。あと、id:koemuさん、id:ariarijpさんともインフラもアプリのコードも書けて素晴らしいエンジニアで、マジ自分は空気だったのでもうちょっと頑張っていかないと厳しいとしか言えない。。。
本当に最後に
今年も自分の課題が見えた*3ので、ISUCONは本当に刺激になる良いイベントでした(めっちゃ疲れるけど!)。運営チームのみなさん、ありがとうございました👼