ravelll の日記

よしなに

ISUCON9 予選に参加してきました #isucon

チーム泥酔チャンスとして同僚の @manicmaniac, @mpls104 と共に参加してきました。ISUCON 予選に参加するのは ISUCON7 ぶりで、ポジションは当時から変わってインフラ担当。

やったこと(〜前日)

  • リハーサル環境の構築
  • デプロイスクリプトの準備
  • 設定をまとめた nginx.conf, my.cnf の準備
    • メルカリ社が出題担当なら nginx(OpenResty) + MySQL かな、そうに違いない!そうであってくれ頼む〜という心境でした(h2o や PostgreSQL に疎い)
  • puma, nginx, MySQL の設定・インストールの素振り
  • ログ解析の素振り
    • kataribe, mysqldumpslow, pt-query-digest

やったこと(当日)

アプリケーションのコードはほとんど変更せずに終わってしまった。

  • インスタンス作成
  • コードを commit
  • ミドルウェア周り色々
    • 設定のバックアップ、ダンプ、設定変更、ログ解析など
  • /users/transactions.json の改善
    • SQL の複雑さを ruby に押し付ける + INDEX 貼る感じで改善を試みるも失敗、断念
  • /buy の自商品購入時に 403 を返す処理をトランザクション外で行う
    • SELECT FOR UPDATE 回避の意図だったけどよく分からんしとりあえずやる〜?くらいの感じだった

写真は当日のホワイトボードの様子。書き殴られている。

f:id:ravelll:20190908181816j:plain
書き殴り

結果

4010点でした。
このスコアには開始3時間くらいで到達した(ログを見ると12:47:47)のだけど、5時間そこから伸ばせず終わってしまった…

f:id:ravelll:20190908220829p:plain
この時点で5位だった

POST /buy で 403 が増え続け、何が理由なの〜とみんなで数時間唸っていました。ちゃんと復習せねば。

反省

  • とにかく準備に余裕がなかった
    • 8月半ばまでメンバー募集してたり体調悪かったりスケジュールが詰まってたりした。余裕のあるスケジュール大事
  • ドキュメント読みつつアプリケーションをじっくり触る時間を取ればよかった
    • ISUCON7 のときも言った気がする…
  • puma のログをちゃんと出しつつやればよかった
    • 事前に素振りできてなくて、なあなあで出さないまま続けてしまった
  • アプリケーションのコードを一通り眺めて怪しい要素をリストすれば良かった
    • 終わってから "そういや bump って何?" となってダメだった
    • ボトルネックとなっている処理の周辺しか眺めなかった
  • 明確に役割分担をしておくべきだったかも
    • A さんは X についての知見をためておき当日は手を動かしてもらうこと、というのを合意して学習を効率化すべきだったかも
      • 一部調査が被った
    • インフラの設定を複数人がカジュアルにいじって知らないうちに死んでた、ということが何度かあった

今回は事前準備が全然できなくて "みんなで楽しめればそれで優勝" くらいの気持ちだったのだけど、いざ成果を出せずに終わるとやっぱり悔しい。前回はウオオオとなる瞬間が一度はあったのだけど、今回はそういった機会が本当に一度もなくヌル〜ッと終わってしまったのもやや悲しかった…とはいえ歯が立たなかったということはそれだけ学ぶべきことが多かったということなので、後日ちゃんと振り返りして糧にしたいですね。

そして次回があるならばもっと余裕を持って臨めるといいな。次回のメンバーを早速募集します。当方ピアノ兼 Ruby