DC4

ISUCON8の予選を通過しました。

k02というチームでISUCON8予選に参加し、予選を通過することができました。 528組中16位でした。

isucon.net

準備

kyokomi が事前に kibela を導入してくれていたので毎年よく使うコマンドやNginx/MySQLの設定ファイル等を予め追加していました。

当日の会場とディスプレイ等はwaniji が手配してくれたおかげで横並びで作業することができ、最高の環境でした。

当日

なんとか起床に成功し、恵比寿に集合することに成功。

ひとまず全員でレギュレーションの読込み後、サービスの機能一覧を確認しました。

この時点で h2oMariaDB の存在に気がついたのですが、一旦後回しにし、アプリケーション側のチューニングに集中することに。

今回も諸事情でGo実装を選択していましたが、普段の業務では使っていないためRuby実装とGo実装を交互に読みながらソースを確認していました。

ソースリーディング中はkyokomiが出力してくれたER図がとても役に立ちました。

N+1、インデックス追加、Sheetテーブルのキャシュ等を行いましたが、DBのCPU使用率が高すぎてベンチの結果が上がらなくなったため、早々にDBを別サーバに切り出すことにしました。

このあたりからスコアが徐々に伸び始めて10000点くらいになり、10位代をうろうろしていました。

その後いくつかの変更を加えた後にDBのコネクション数を変更してみたところ、30000点を超えて暫定4位を記録しました

が、/admin/api/reports/events/:id/sales の結果に整合性がない?みたいなエラーが出るようになり、 ベンチーマークの結果がなかなか安定せず、数回に一回だけ成功するガチャ状態に陥ってしまいました。

原因が掴めずここでかなり時間を消費してしまいました...。

この間にシート予約時の場所をランダムではなく、順番に着席させてみたら怒られたりしてゲラゲラ笑ってました。

終盤間際で排他処理が正常にできていないことに気が付き、ベンチマーク結果を安定させることができました。

そのまま終了3分前くらいに、その日の最高得点が出たので終了しました。

感想