petitviolet_blog

@petitviolet blog

ISUCON8予選に参加して敗退した #isucon

2018/09/15(土)に開催されたisucon8予選に参加した。

isucon.net

去年と同じメンバー3人で出た。

petitviolet.hatenablog.com

結果はタイトル通り敗退で、再起動試験でどんなスコアだったかはわからないが、自分たちで確認できたスコアは26,000点台だったのでまあ無理だったでしょうという感じ。

やったこと

Golangを選択した。
最近まともに書いてないので文法も怪しいレベルだったけど他の言語よりはやりやすいかと思っての選択。

スコアを伸ばせたのは

  • N+1解決
  • DBにindexはる

っていうありきたりなやつ。
あと小ネタとしてh2oのログをalpで食えるようなLTSVにしたり。

N+1解決、getEventsのところ直したんだけど、何箇所か直したあたりでベンチマークがfailしだしてそっから頭打ちになった。
爆速になるやろ!って思ってベンチ回したらfailしかしなくなってバグfixにめっちゃ時間かかってしまったのが敗因な気がしている。
結局、がっつりコード書いて改善したやつをコミット出来なかったのは非常に悔しい。 ここは普段からGo書いてないつけが回ってきた感じ。

あと3台構成を全くいかせず、1台のWeb + DBサーバでさばいていたのでそこを分散できればよかったんだろうな、と思いつつ帯域とかベンチマークのバリデーション厳しいのもあって正直どうやればいい感じに出来たか最高のアイデアは出てない。
MySQLをAerospikeクラスタ組んでリプレイスするか〜とか言ってたけどやってない。 この辺なにか一つ改善が形になればスコアはもうちょい上がっただろうなという感じ。

そしてMySQLがどうやって起動されてるかわからなかった...。
systemctlでもないし何だったんだろうか。未だにわかってない。MySQL自前で入れ直して対応してたんだけどみんなどうしたんだ。

あとこれはただの感想で、Golang、せっかくコンパイルするのにランタイムエラー置きまくるので厳しい気持ちになった。さくっとコンパイル通るのは気軽でいいんだけどメモリアクセス違反とかくらい見つけて欲しいなって思った。
普段Scalaばっかり使っててコンパイラに甘やかされてるのでかなり大変だった。

去年からの差分

事前準備全くしなくて去年ぶりのisuconって感じだったけど、同じメンバーだったのもあって導入はわりとすんなり。 去年の反省を生かして役割分担したり時間決めて現状整理する時間取ったりしたのは良かった。 特に先輩がdatadogいれて監視できるようになったのはめっちゃ良かった。
去年はnetdata入れてモニタリングしてたけど慣れてないのもあってイマイチ使いこなせなかったし。
あとはシステムレイヤーでの大きな改善が去年も出来なかったし今年も出来なかった。
キャッシュレイヤいれるとかDB変えるとか。
改善が小粒になってしまってるので来年参加するならもうちょっと攻めたい。

最後に

今年は開始時間遅れなかったしほぼ困ることが何もなくて運営の方々最高だった。
一瞬ポータルが重かったくらい。

非常に楽しかったです、ありがとうございました!