ISUCON11予選に「Railsへの執着はもはや煩悩(ry」で参加したけどダメでした

今年も@cnosukeさんと@aibouさんと「Railsへの執着はもはや煩悩の域であり、開発者一同は瞑想したほうがいいと思います。」というチームでISUCONの予選に出ました。

3人とも別の会社にいるので、去年同様に前の週にリハーサルを行ってイメージを掴みました。

去年と同じようになんとなくの役割分担として、cnosukeさんがAPIのコード変更を行い、aibouさんがDB・nginx周りのチューニングを行い、自分はデプロイとか設定のgit管理したりと雑多な対応をしていました。

なんとなくのスケジュール

昼食を食べずにぶっ続けでやっていたのでかなり疲れてしまって、あんまり当日の記憶も残っていないのですごく雑です。

時刻 やったこと メモ
09:40 集合
10:00 競技開始
10:11 webapp以下をgitに突っ込む
10:29 1号機をnginx, アプリ、3号機をmariadbにする これだけでちょっとスコアがった
10:49 いくつかmariadbにインデックスを貼った 24,648点出て暫定2位になったのでテンションが上がった
11:52 /assets 以下はnginxが直接返すようにした
11:59 秘蔵のmy.cnfを投入した 実際は 設定ファイルのパーミッションがおかしかった せいで投入できていなかった…
12:39 /api/initialize 以外は全部nginxが直接返すようにした
13:05 アプリのリファクタリングが終わった
13:23 1号機のCPUが辛いので /api/trend だけ2号機に流してみた
16:02 バルクインサートするようにアプリを書き換えた 38,324点まで上がった
16:24 アプリを書き換えたり、更にmariadbにインデックスを張ったりした この頃に最高得点の54,690点が出た
17:13 アプリを直したりmariadbにインデックスを貼ったりトラフィックを1号機と2号機で混ぜるようにしたりした 36,926点までしか出なくて伸び悩む
17:30 ポータルがメンテに入ったので マシンを再起動 してみたり、細かなアプリケーションの改善とかをしてた
18:10 ポータルがメンテ明けになったのでベンチを回してみたところ、なんと1,000点しか出なくなってしまった とても焦った
18:44 nginxの設定がおかしいことに気づいたがもう時間がなくなってしまったので、1号機にnginxとアプリ、3号機にmariadbの構成で出した。 13,982点になってしまった

競技中のトラブル

mariadbの設定が反映されていなかった件

/etc/mysql 以下をすべてgitリポジトリに突っ込んで、 /etc/mysql 自体はそのリポジトリシンボリックリンクにしていたのですが、どうやらパーミッションがおかしい(本来はroot:rootが所有しているのが、isucon:isuconになっちゃった)のが原因で、実は設定が反映されていなかったことに途中で気づいて、気づいたものの対応するのにとても時間がかかってしまいました。

結局、AMIがあったので別のインスタンスを立てて、それの /etc/mysql の構成を真似て構築し直して、gitリポジトリに追加しないようにしたところ使えるように戻りました。

nginxの設定がおかしかった件

ポータルのメンテ後くらいからスコアが1,000点しか出なくなって、なんでだろう…とずっと考えていたのですが気づけず、ISUの「状態」が1行も出ず空っぽになっているのがおかしい?と気づいて、

f:id:rkmathii:20210822224313p:plain

見てみたところ、自分が入れてしまったnginxの設定でIPアドレスを間違っていたのが原因でした。。。

f:id:rkmathii:20210822224124p:plain

リクエストを飛ばす先がないのでエラーになるかなと思ったのですが、今回のルールでは減点にならなかったので、加点もされず減点もされず、どこがおかしいのか気づくのに時間がかかってしまったのがもったいなかったです。。。


予選突破には11万点くらい必要だったので届かなかったかもしれませんが、途中でトラブってしまったのがもったいなかったです(´;ω;`)

問題はとても面白かったし、ポータルも途中不具合があったもののそれ以外は快適に使えましたし、すごく楽しかったです。

来年こそ予選突破したい…!