継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ISUCON8予選2日目に『チームますらぼ』で参加してきた!

タダです。

会社の同僚の @hassaku_63 さんと、ISUCON8に『チームますらぼ』として参加してきました!

ISUCON8予選 (日曜日) 当日マニュアル · GitHub

@hassaku_63 さんはアプリ、僕はインフラで担当。結果は、予選敗退、、、スコア的に1150くらいでした。。人権はなかったです。。 ISUCON後、鳥貴族で振り返りをしたので、その備忘録として記事書いてみます。

振り返り

良かったこと

  • アプリとインフラで担当を分けたことで、当然ですがお互いの作業に集中できたのは良かった
    • お互いのやっていることを共有するスペースを作って、作業進捗も共有した
  • お題で3台のサーバーを与えられて2台使ったが、Web/AppとDB構成への移行がスムーズだった
  • 過去問を定期的に解いて、ISUCONの感覚を養えた
  • ISUCONの後にすぐ振り返りを時系列で自分たちがやってきたことで振り返った

改善したいこと

  • 本番を想定して、リハーサルやってみる
  • 自分たちの得意なフィールドで戦う
    • 集計用のツールが今回使い切れずに終わってしまった
    • h2oからnginxに切り替えたり、MariaDBからMySQLに切り替えたりの判断を迅速にしたかった
  • 作業計画がなく、場当たり的な対応になってしまった
    • 計測ツールが使えないことに対して、時間をかけすぎてしまったので、対処方法と優先度の判断を午前中にすべきだった
    • 結果的には最高優先度のタスクだった
      • 着手が遅れた&最終的に自前の貧弱ツールを使うしかなかった *「知ってるかどうか」のタスクは即聞く。ファイルのありか、設定方法、あとは特定の作業を行ったかどうか(状況把握)、とか
    • 今何やってるか、今から何の作業を開始するか、宣言する
  • 「/login」 のタイムアウトに対する見切りが遅かった
    • ロックするクエリが他にいたので、それの影響を疑うことができた。実際のログイン処理もパッと見でそんな問題なさそうなことがわかっていたので、「別の処理」の被害を受けたのでは、と推測することができたはず
  • 各サーバーのリソース状況を確認したので、それを共有すべきだった

時間の関係でできなかったこと

時間の関係で手をつけられなかったものとして、以下のものがあります。

  • get_event の改善
  • とあるイベント ✕ 全シート のループが非効率なので、シートのクエリを1本にまとめる
  • /adminのレポート生成
  • FOR UPDATE でロックしているので、ロック時間を最小にするようなリファクタリングする。
  • h2oからnginx切り替え
  • redisの設定とキャッシュ戦略を決める(redisを入れただけで終わってしまったため)
  • h2oの以下の設定周り
    • mrubyとの組み合わせ
    • proxy設定を行って、アプリのルートのパフォーマンス対応
      • Webのキャッシュ設定
      • 処理が重いものを負荷分散させる(csvレポートを生成する処理とか)

ISUCON8のリポジトリを公開してくださっている方もいるのでこの辺トライしていきたいです。

github.com

まとめ

今回、担当割り、過去問の準備をしてきたものの、やり切れたかと問われるとまだまだできることがあったし、悔しさが残った形でした。

一番の敗因は、時間の使い方と、タスクの計画です。

本来、時間をかけないところに時間をかけすぎて、本質的に優先すべきことに時間を割けませんでした。また、タスクの対応も場当たりな対応になってしまっていたのも問題ですね。

悔しかったので来年も開催されるのであれば、また参加してみたいです!