Skip to content
このブログは移転しました。移転先はこちら。

ISUCON11予選に「都営三田線」で参加して予選2位で本戦出場きまりました!!

Posted on:2021年8月23日

ISUCON11 予選お疲れ様でした! 「都営三田線東急目黒線直通急行日吉行」というチームで参加し、予選 2 位で通過することができました。 チーム編成は 5 年連続同じメンバーで、0gajunizumin の 3 人チームでした。

ISUCON11_Portal ISUCON11 Portal

ISUCON11 オンライン予選 予選結果と本選出場者決定のお知らせ

ISUCON7 以来の本戦出場で、またこのメンバーで本戦出場をきめられたこともうれしいですし、予選 2 位 / 100 万点越えを達成できたのも本当にうれしいです!

やったこと

言語は Go で、middleware まわりはとくに変なことはせず nginx + MariaDB のまま設定だけいじってすすめました。 例年は Redis やオンメモリで大胆なキャッシュを試みることが多かったのですが、今年は大人な戦い方で堅実にスコアを伸ばせたのでとても満足しています。

正確に記録をとれていない面もあるのですが、箇条書きでやったことを列挙してみます。 作業 repository も公開する予定です。

すすめかた

インフラ的なパラメータ調整などは完全に 0gajun にまかせていたのですが、下回りでつまることが一度もなかったので感動しました。最終的につかわなかったのですが Redis の用意までしてもらったり、デプロイやプロファイルまわりの整備もやってもらい、アプリの改善が 120%活きる状態をつくってくれました。 例年は izumin の実装速度にものをいわせた飛び道具を仕込む戦いをしていたのですが、今回は大人にたたかおうということで堅実なアプローチを採用するよう心掛けていました。そういう堅実な手を数多くためすことができたのは、やはり izumin の手によるところが大きいです。Go への慣れという面でも頼りになりました。 このチームでまた本戦に出場できてよかったです。

手をつける場所の選定やコストのかけかたが今回はかなりうまくいった気がします。 グラフのところなんかは誰も最後まで仕様を正確には理解していなかったのですが、「ぱっと見いけそうだから雑に 25h でしぼってみる、だめだったらちゃんと理解してからやりかたを考えよう」で突撃したのがうまくはまったりしていました。25h なのは、仕様を理解していないので保守的にとってみたことの表れです。

マニュアルに書き込みを遅延してもよい、というような内容が記載されていたので、そこがキモかな、とおもっていたのですがどうだったんでしょう? 僕たちのチームは最終的には書き込みの負荷をいかに減らすか、というところが壁でした。 正直終盤の伸びは、自分でもなんでこんなに伸びたのかよくわかっていなかったりしますが、割とぎりぎりまでチューニングされていたからちょっと負荷がへるだけで大幅な伸びにつながった、と解釈することにしました。

まとめ

最近の ISUCON ではいつもアグレッシブな最適化をした結果、謎 fail が発生するようになる、というパターンで苦しんでいたのですが、今回は fail に苦しまず最後まで改善をつづけることができました。 堅実に改善していったものがハマって最後に爆上げする、というパターンははじめて経験したのですが、最高に楽しいですね!

運営のみなさま、ありがとうございました!問題もわかりやすく、ボリュームもちょうどよくて、問いていてとても気持ちよかったです! 本戦もがんばります!

おまけ

go1.17 から(フラグで有効にすれば部分的に) Generics がつかえるようになったので、実は前日まで Generics つかいたおしてみようか、という話をしていました。 意外とやりたいシーンがなく、 結局お蔵になったのですが、izumin が Go Generics で snippet を用意してくれていたので、せっかくだし載せておきます。 (「やりたいシーン 4 回くらいあったぞ!!!!! by izumin」 とのことです。)

izumin5210-sandbox/go-generics