ISUCON 8 出たそして負けた

ソレイユ (星宮いちご,霧矢あおい,紫吹蘭) (osyoyu, koba789, everysick) で ISUCON 8 に出た。

当日成果の出たアクションは霧矢あおいの中身である koba789 がまとめてくれているので、そっち参照。これは俺のエモ。 diary.hatenablog.jp

ソレイユ

この3人で出るのは4度目であり、今までの ISUCON の半分を戦ってきたことになる。ISUCON 5, 6 では散々なもので、誰もまともに SQL を書けず、グローバル変数$cache を置いてみたり(POST が来たら全消し)、終了15分前に「で、UbuntuRuby ってどうやってデプロイすんだっけ?」みたいな会話を交わしたりもした。

風向きが変わったのは昨年度の ISUCON 7 からで、突如チームとして機能するようになり、ペアプロをして事故なくコードを書き換えたり、アプリとインフラで作業を分担したりできるようになった。

これはなんとなく Git 使ってなんとなくマージ事故を起こして死ぬ、みたいなことをなくすようにしたのと、koba789 が退学就職し、業務で日々長大な分析 SQL を書くようになって、クエリのチューニングを一手に引き受けてくれるようになったことが大きいように感じている。

今回は osyoyu がインフラを引き受け、koba789 が SQL 書いて、everysick がバリバリ分析していく、という形だったと思う。コードは俺以外の2人がガンガン書いてて、俺は勝手に nginx や MySQL の設定をいじりながら、ペアプロと称して分かった顔をしながら眺める役をやっていた。3人で実装してもうまくマージできないことは既知の事実なので、これは結構良いやり方だと勝手に思っている。

27000

我々のスコアは結局 30000 の大台を超えられず、一番ハネた瞬間で 27000 前後止まりとなった。

今回は過去に参加した ISUCON と異なり、大きなやらかしがなかったという風に感じていて、そうなると何が足りないの? スピード以外なにもないよね、という話をした。実際今回は 17:35 頃になっても reservations 周りをロックフリーにするべく koba789 が奮闘していたが、間に合わず、終了10分後ぐらいに解を思いついていた様子だった。

この時間を稼ぎ出すことができればもっと上に行けると今は思っている。今年は必要なツールを全台に一発で Ansible で撒けるように用意しておいたが、まだ高速化の余地があったと(今年のインフラ担当としては)感じている。

(余談: apt 生まれ Ubuntu 育ちの我々としては、CentOS で ISUCON を戦うのは高地でサッカーをするようなもので、本番で消耗しないように Ansible Playbook を用意しておいたのだが、本番で時間を稼ぎ出すのに思い切り効いてしまったというのが実態。ちなみに Playbook を用意する過程で CentOS には慣れた)

Ruby, Go, MySQL 8

MariaDB の my.cnf でハマるのも避けたくて、今年も MySQL 8 を導入して今年も失敗した。昨年も 8.0 にチャレンジして無事環境を破壊したが、今年も無事 validate_password を踏み抜いて死亡した。結局 MySQL 5.7 に差し替えるまでの間、迷惑かけてみんなごめんな。

ところで、我々のチームは全員 Ruby のレベルはそれなりに高いはずで、小回りを効かせることもできるということで Ruby を選択し続けている(Go に浮気しかけた年も結局 Ruby に転向している)。しかし Go の初期実装のスコアの高さを見るとどうしても隣の芝が青く見えてくるのも事実で、スコアの団子を抜けるには Go 選んでもいいんじゃないかと思ったり思わなかったりもする。どうなんだろうね。全員 Go 書けるようになったわけだし。

総評

精進あるのみ