ISUCON 10 本選に「チーム中目黒乗り過ごし」で参加して、結果はFailでした
結果はこちら
予選に引き続き、hanabokuro氏、mtokioka氏と参加して、結果はFailで失格となりました。スコア的には8位といったところでしょうか。
白金動物園による問題はISUCONのベンチマーカーで、これまで「スケールアップ」「スケールアウト」しておきましょうで済ませていたものが辛い(楽しい)課題になっておりました。 運営のみなさま、スポンサーのみなさま本当にありがとうございます。
クヤシカー
— 中目黒乗り過ごしたい (@kazeburo) 2020年10月5日
準備
チーム紹介のスライドつくりました
100万円は残りませんでした。
また今回用に、モバイルディスプレイを書いました。
USB 1本で使えるので楽です。
当日
今日は電車乗らないので、中目黒で乗り過ごす心配ナシ
— 中目黒乗り過ごしたい (@kazeburo) 2020年10月2日
予選は六本木のオフィスでやったので、中目黒で乗り過ごしてしまう可能性がありましたが、本選は横浜駅近くの貸し会議室をかりました。電車にのらないので乗り過ごす心配なし。チーム名とは。。
構成と最終スコア
言語は引き続き、Goでやりました。 3台のサーバのスペックがすべて違うのは途中から気付きました。
id | spec (cpu/mem) | role |
---|---|---|
1 | 2core/1GB | web/benchmarker |
2 | 2core/2GB | envoy |
2 | 4core/1GB | MySQL |
成功した中で最も高かったスコアは、32,312 でした。
Failしまくっているのがわかるグラフ
序盤
ぱっと見でどこから取り組めばいいのかわからない感じの中、MySQLの負荷が高かったようだったので、pt-query-diest で調べたのが最初。 長大なクエリは気になったけど、interpolateParams の有効化が最初の変更
interporateParams · kazeburo/isucon10-final@48804ed · GitHub
このあと、取り組むところをわかりやすくするために、もう少し負荷をかけてみようということで、TeamCapacityを10=>50=>100と増やしたりしていた。
benchmarkerのpollingのクエリが多いこと、ベンチマークが早く動き出せば、スコアも高くなりそうということで、benchmarkerにhttpサーバを追加し、appから命令をおくってやるようにしたのが12:30過ぎ
use channel to pass pending job by hanabokuro · Pull Request #12 · kazeburo/isucon10-final · GitHub
スコアは 2万弱まで上がる。
中盤
取り除けそうなトランザクションとして ListNotifications のトランザクションを外したのは13時過ぎ
list-noti by kazeburo · Pull Request #18 · kazeburo/isucon10-final · GitHub
これが大きな間違いだったわけだが。
小さい改善とリバートを繰り返し、TeamCapacityを変更しながら、フェイルをいっぱいしすつ、16時過ぎにスコアは3万程度に。
後半
web-pushの実装をいれるも、この時間帯になると
「リーダーボード上の最終 ID 検証に失敗しました」「あるべき通知を受信していないことが検知されました」でずっとFail。
他のチームからの質問の回答をヒントに、makeLeaderboardPB の長いクエリに order by id asc をつけて「リーダーボード上の最終 ID 検証に失敗しました」は出にくくなったところで、再起動試験をして、TeamCapacityを100にして、終了
まとめ
18時前のベンチマークでは通っていましたが、検証では「あるべき通知を受信していないことが検知されました」が連続して発生し、結果はFail。悔しいところとなりました。
感想戦環境で確認していると、どうやら、ListNotificationsのトランザクションを外してしまったがいけなかったようで、トランザクションを戻すと、エラーが出にくくなり(負荷をあげるとでる)、4万点から5万点ぐらいのスコアがでるようになりました。
ベンチマーカーの整合性チェックが厳しい~と思いつつ、みんな条件は同じなので、上位のチームは本当に素晴らしい!!すごい!!!
今回の上位がすべて学生チームとなりましたが、まだまだシニア枠として頑張る所存です。
予選に続いて、生中継がありましたので、奥さん、息子と娘が家で応援してくれておりました。ありがとう〜 チーム名がちょこちょこ画面にでていたはずなので、よかった(?)かな