isucon10惨敗記録

f:id:htilcs1115:20210313181126p:plain 最終スコアは1100 ~ 1200のレンジだった。よく覚えてない。

チームメンバーはTaKO8Ki。チーム名はアサシン。

前日まで

6月からコードを殆ど書かない生活をしていたのでコーディングリハビリなどをやった。ツール作ったりGolangのコードを読んだりした。

チームでのisucon練習を2度ほどやった。この練習でよくやるオペレーションをまとめてMakefileに書いた。また必要なツールをinstallするスクリプトなどを用意した。

内定先の先輩に頼んでisucon練習を一緒にするなどもした。ご指導ご鞭撻本当にありがとうございました! この練習中のアドバイスがなかったら当日の動きが変わっていて、もっと惨敗していた気がする。

12:20 ~

スタート! とりあえず5 ~ 10分くらいマニュアルを熟読した。声に出しながら意識しておいたほうが良い箇所などをチームメイトと話し合いながら読んだ。

その後意気揚々とサーバーにSSHしようとする。しかしサーバー1,2にssh出来ないことが分かる。どうやら鍵の配置をミスっていたらしく我々競技者にはどうすることも出来ない問題だった。指定した秘密鍵GitHubのものではないのか?とかサーバーの問題ではなく自分らの問題だと思っていたので解決しようと頑張っていたのが少し悲しかった。

20分くらい立ったところで我々にはよくわからないからとりあえず質問しちゃおう!と考えて運営さんに質問した。回答待ちの間再びマニュアルを熟読するなどした。

12:50 ~

あ、サーバー3にはちゃんと入れる!ということにここで気づきました。 事前に用意しておいたsetupスクリプトを走らせるなどした。nginxのログフォーマット設定やmysqlのスローログ設定もやった。

よくやるオペレーションを書いたMakefileを事前に用意しておいたので今回のisucon10用に少し書き直してアプリケーションのビルドやmysqlへのログインを簡単にできるようにした。

nginxやmysqlのコンフィグファイルにシンボリックリンクをはってgit管理するなどした。

TaKO8Kiにコードを読んでもらっていたのでどこが問題になりそうか、使用ライブラリはなにか、気をつけることはあるかなどを共有してもらった。(画面共有で一緒にコード読んでいくの良かった。)

13:50 ~

ここらへんでベンチを回した。Goで468くらい。

DBが重たいことは分かっていたけど、とりあえずbotを弾くことにした。

サーバー1,2の復活の兆しがあったのでsshしてみる。入れはしたがログイン時に"bad .* file"などのエラーが大量に出る。nginxコマンドのパスが通ってなかったりlsすると強制ログアウトされたりするので再度運営さんに質問することにした。(ポータルの通知機能があることに気づいて無くて、運営さんがすぐ対応してくれたことに気づかなかった、、)

15:18

indexハリハリをした。スコアはある程度伸びたけどメモっていないので省略。

15:20

TaKO8Kiがnginxの設定を変更してbotの場合503で返すようにした。 nginxのlogを見ると10~20アクセスくらいしか503で返してなかったのでnginxの設定がうまく行っていないのかbotからのアクセスはそれほどなかったのか?と思った。

スコアとしては少し上がった気がする。(メモしてない、、、)

15:49

TaKO8Kiがchairとestateのinsertをbulk insertするようにしてくれた。 スコアはそんなに変わらなかったみたい。とりあえずスコアが下がることはなかったのでマージした。

17:20

searchEstateNazotteのN+1を修正した。スコアはある程度伸びた気がしている。

18:28

TaKO8KIがDBを別サーバーに移しても動作するようにしてくれた。どれかのサーバーでinitializeをすると他のサーバーでもinitialize処理が走るようにしてくれたので嬉しかった。

DBとwebappを分離することでスコアが少し伸びた。

18:30 ~

ここから特に有効な変更は出来なかった。DBが重たいことは分かっていてクエリの修正も我々には難しそうだったので、DBを2台のサーバーに分ける?見たいな話をしていた。

また、ChairとEstateのキャッシュはありだと思うが検索ロジックをバグ無く書くのはなかなかチャレンジングという話もした。

なのになぜかDB分割ではなくキャッシュの方を選択してしまい、その実装を始めた。

mysqlのquery cacheがOFFになっていたのでconfigをイジるなどした。しかしONに出来なかった、、、他のファイルでquery cacheを設定している箇所はなかったし、mysqlの再起動もしてみた状態でもONにならず悲しかった。

19:00 ~ 20:00

Mysqlが5.7なことに気づき8へのアップグレードを行った。しかしスコアは半分くらいになってしまった、、、

configファイルを見て設定を付け足すのなどしたけどよく分からず、結局5.7を使うことにした。

20:00 ~

予定ではここから再起動試験をする予定だったけどキャッシュの実装が終わっておらずそれを進めることにした。再起動試験は賭けに出ることにした。このままのスコアではどっちにしろ勝てないので。

20:30

キャッシュの実装は終わらず、DBの分離のことはすっかり忘れていた。ここでDB分離の実装をやるのは流石に無理となり、nginxの設定を変更してwebapp3台、DB1台の構成に変更した。

スコアの変更は無いだろうけど一応悪あがきをする。

もちろんスコアは上がらなかった。

最終スコアは1100 ~ 1200のレンジだった。よく覚えてない。

21:00~

おつや & タラレバ話をした。

DBの分割を何故しなかったのか〜という話を10回くらいしたかも。。。