wtatsuruの技術方面のブログ

はてなスタッフ id:wtatsuru です。日常ブログはこちら https://tatsuru.hatenablog.com/

ISUCON10予選 ヌルポインターマリアユニバースとして出てギリギリで本戦いけました

ISUCON10、ヌルポインターマリアユニバースというチームで id:polamjag id:Pasta-K と一緒に出てきました。
isucon.net
最終スコアはたぶん2335、なんとか予選突破できました。

振り返り

今回はあまり役割を決めず、時々で臨機応変に動くぞとやってました。結果的にインフラ面はだいたいやることになったし、結果につながったのはよかった。とはいえやった作業自体は簡単なものなので、もうちょっとコードを見られたはずだし、絶対的に足りない気はしてる...。

  • 最初にルールを全員で読んだ
    • これはよかった。スコア算出、ルールの問題についての認識は最後まで問題なかった
  • リポジトリに入れるのをまかせつつ、ログ出したりデプロイ準備したりしてた
    • デプロイ準備は長引いてしまった。問題についての雑談をしながら準備してしまったからで、ここはひたすら作業だとわかってたから思い切って集中してよかった気がする
  • alp の上位を見てどうしようかねーって話ながらランチタイム
    • これはよかった。椅子がドアに入るかどうかのロジック、「なんかありそうだねー」くらいで、ボトルネックじゃないから後回しにするみたいな話を力を抜いてできた
  • 昼過ぎは作業分担。search 高速化は置いといて、low_priced と nazotte の N+1 みたいな、やればいい+効果高そうなところにはじめから取り組めた。同時に複数台の仕込みも始めた。ついでにINDEXも貼った。
    • 軽そう、効果高そう、みたいなポイントから取り組めてよかった
    • INDEX やればいいしいれないと分からないみたいなやつに早めにと思ってたので、まあよかった
    • 一番効果高い search のところ、全員で会話していいアイデアがなくて、ちょっと後回しになってしまった。最後までいい解は思いつかなかったので、いいのか悪いのか。
  • N+1 を解決するのとDBホストを分けたことで2000くらいまで上がった。このへんで15分スプリントをやった
    • 15分スプリント、1つのレビューとか作業がちょうどよく終わる感じでよかった
    • 本番で順に試したことで、やれたことに対して試行錯誤の時間がちょっと長かった気がする

  • 最後の2時間、search を range じゃなくて id 使うことで高速化するのをお願いしつつ、自分は slave 複数台分散をやった。ついでに query cache と innodb_buffer_pool の増加をやった。スプリントは崩壊した。
    • それぞれハマりがちになって、口数は減った。15分は短いけど、30分くらいで状況共有できたらよかった気がする。
    • slave 分散、sqlx のインスタンスを複数用意しといて使い分けるみたいな器用なことはできなかったが、search だけ振り分けるのをインフラだけの最小工数でできてよかった。準備しかなかったので試す時間を持てなかったのと、実は SELECT ... FOR UPDATE を無視してるのがだめ
    • search の改善はめっちゃでかい必殺技なわりに、着手が遅くなったので結局入れられなかった
    • DBのチューニング、やるべきかどうか微妙だと思ってた buffer_poool と query_cache にもちょっと早めに取り組めた。意外と効果が上がって、盲点だった
  • 最後の1時間で微妙な調整とか nginx 複数台分散のトライをやった。
    • DBのCPUでサチってるので、分散したら速いだろうというのはわかってた。レプリケーションの構成とかシュッとできてすぐ試せたのがよかった(やればできるだろうと油断はしてた)
    • nginx 分散、なんかデプロイでミスってた気がして焦ったけど、なんとか入れられてよかった。レプリ遅延対策で initialize に wait 入れたのもここだった...
    • ベンチマークの結果は安定してたし、ガチャする時間もあってちょっと余裕は合った

詳しくは

リポジトリは公開してるので、詳しくはこれ見てください https://github.com/tatsuru/isucon10q
公開前に deploy key 無効にするとかまずい情報無いことは確認してますが、なんかこれまずそうみたいなの見つけた方はこっそり教えてください。

本線がんばります

Go のコード読むの遅いし、コード書く時間もあまり取れてなかった。
本番はもうちょっとインフラ面が複雑になるかも知れないけど、もうちょっと手を広げられるようにしていきたい

はてなで一緒に働きませんか?