ISUCON10参加記
ISUCON10に garasubo さんと GolDDranks さんとチーム「勉強不足の分は有り余る才能でカバーでカバーしようかなと思っております」で参加して予選通過しました。チーム名がtypoしているのですが、一度登録すると修正できない仕様なので、カバーでカバーするしかない。
今回は完全オンラインでボイスチャットも使っておらず、全てログが残っていたので、時系列でまとめてみようと思います。
前日まで
使用言語をRustにすることでチームが決まりました。ISUCON9を使って2回くらい練習しましたが、ISUCON9まではRust参考実装がないので、ひたすら移植ゲーになりました。移植ゲーの中でactix-webの使い方を覚え、ついでにnginxとalpの使い方も覚えました。練習を通して、サーバー上でRustアプリケーションをコンパイルするのではなく、ローカルでコンパイルした実行可能ファイルをrsyncでサーバーに転送するデプロイ方法が確立されました。
当日
12:20-
15:00-
16:00-
- garasuboがindexを貼る。721点。
- GolDDranksがメモリキャッシュをやり始める。
- garasuboがmysqlサーバーの負荷分散のためにchairとestateをそれぞれ別のサーバーで管理する実装を開始。
- 僕がestateを全部メモリに載せる実装を開始。
17:00-
- GolDDranksのメモリキャッシュが完成する。static な AtomicPtr があるなど勢いがある。1040点。
- 僕がrecommend でSQLを叩かずにオンメモリのestateから結果を返すようにする。1105点。
18:00-
- garasuboの2台mysql実装が完成する。1775点。
- garasuboがクエリキャッシュを有効にする。2465点。
19:00-
- 高負荷に耐えられるようになったのでランダムにメモリキャッシュが壊れるようになる。
- 僕は用事があるのでここで離脱。
20:00-
このあとgarasuboがindexを貼って3084点を出したりしたらしいですが、ベンチマークガチャを回して2684点で終了したらしいです。
感想
- シンプルな仕様でありながら面白い問題だったと思います。作問者はすごい。
- Rustの参考実装もシンプルで素直な実装になっていて、大変取り組みやすかったです。
- コンテストを突然延期したりコンテスト中は順位表やベンチマーカーが壊れていたりして競技の体をなしていなかったのは、少しもったいないと思いました。
- 参加者用のインフラは非常に安定していて、問題に集中することができました。
- 本戦もがんばります。