Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

ISUCON 10 本選に「チーム中目黒乗り過ごし」で参加して、結果はFailでした

結果はこちら

isucon.net

予選に引き続き、hanabokuro氏、mtokioka氏と参加して、結果はFailで失格となりました。スコア的には8位といったところでしょうか。

白金動物園による問題はISUCONのベンチマーカーで、これまで「スケールアップ」「スケールアウト」しておきましょうで済ませていたものが辛い(楽しい)課題になっておりました。 運営のみなさま、スポンサーのみなさま本当にありがとうございます。

準備

チーム紹介のスライドつくりました

f:id:kazeburo:20201005173251p:plain

100万円は残りませんでした。

また今回用に、モバイルディスプレイを書いました。

USB 1本で使えるので楽です。

当日

予選は六本木のオフィスでやったので、中目黒で乗り過ごしてしまう可能性がありましたが、本選は横浜駅近くの貸し会議室をかりました。電車にのらないので乗り過ごす心配なし。チーム名とは。。

構成と最終スコア

言語は引き続き、Goでやりました。 3台のサーバのスペックがすべて違うのは途中から気付きました。

id spec (cpu/mem) role
1 2core/1GB web/benchmarker
2 2core/2GB envoy
2 4core/1GB MySQL

成功した中で最も高かったスコアは、32,312 でした。

f:id:kazeburo:20201005172801p:plain

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万点ぐらいのスコアがでるようになりました。

f:id:kazeburo:20201005172929p:plain

ベンチマーカーの整合性チェックが厳しい~と思いつつ、みんな条件は同じなので、上位のチームは本当に素晴らしい!!すごい!!!

今回の上位がすべて学生チームとなりましたが、まだまだシニア枠として頑張る所存です。

予選に続いて、生中継がありましたので、奥さん、息子と娘が家で応援してくれておりました。ありがとう〜 チーム名がちょこちょこ画面にでていたはずなので、よかった(?)かな