ISUCON11に初めて出場した

この度、ISUCON11に初めて参加しました。
まだエンジニアとして業務に就いていない(プログラミングスクールで学習中)のですが、出てみたら楽しかったので忘れないうちに記録を残しておきます。

ISUCONとは?

お題となるWebサービスを、決められたレギュレーションの中で限界まで高速化を図るチューニングバトル。

チーム構成

Fukuoka.rbで知り合った[@ebiflyyyyyyyy](https://twitter. com/ebiflyyyyyyyy)さんと出場しました。
ふたりとも初出場でした。 軽く役割分担をして臨みました。

  • @aseiide(筆者)

    • Ruby, Railsの経験あり
    • アプリケーションとnginxまわりを担当
    • ベンチを回す
  • @ebiflyyyyyyyy

    • 技術屋さん
    • インフラの経験あり
    • インフラ、DBまわりを担当

結果

Rubyで臨み、最終スコアは3504ポイント、順位は408位となりました。
初期ベンチが2800ポイントだったのであまりスコアを伸ばすことができませんでした。
再起動試験に失敗して0ではなかったので一応、事前に立てていた目標はクリアできました。

スコア推移

競技終了後ポータルにアクセスできなくなることを知らなかったので残しておいたメモを参考にしています。
2859 -> 3081 -> 3400 -> 4200 -> 5922 -> 2400 -> 2800 -> 3600

MySQLのチューニングをしたおかげで一時、4200ポイント、5900ポイントまで上昇しました。

事前準備(過去問練習)

練習をしたのは大会の2週間前です。 ISUCON9が良いぞ、と教えてもらったので9を解きました。
本当に何も知らない状態だったので、レギュレーションとマニュアルをもとに環境を立ち上げるところからやっていきました。
結局、この日はドキュメントをもとにアプリケーションを立ち上げて数回ベンチマークを回すという事しかできませんでした。

この日は各自で事前にツールの入れ方や、手順をまとめておこうという事にして解散しました。

当日

  • ご時世もありましたが、お互い初出場ということもあったのでコワーキングスペースに集まってやりました。 結果的に、ペアプロ的な形で進んでいきました。

  • 10:00競技開始

  • ~11:00当日マニュアル・レギュレーションの読み合わせ音読しながら読み合わせをしました。わからない部分も結構ありました。

  • ~11:30マニュアルに沿ってEC2インスタンスの立ち上げとサーバーへのSSHを確立

  • ~11:40環境チェックを完了し、無事アプリケーションの立ち上げに成功!

  • ~12:00初期ベンチを回してみる

  • ~13:00アプリケーションマニュアルを読み合わせて、初期設定をgithubにpush

  • ~16:00アプリケーションを触ってみて機能の確認や、先人たちの知恵をググりながらnginxのログをみて設定を変えるなど

  • ~17:00 netdataが動いたのでどこに負荷がかかってるのかを確認。pumaとMySQLにボトルネックがありそうなことを発見

  • ~競技終了DBの読み込みせっていやnginxの設定を適切に変える

  • 役割が完全に分かれていたので同じサーバーにアクセスしながら作業をして終了、となりました。

おわりに・感想

冒頭にも述べましたが、楽しくISUCONを終えることができました。参加する以前は「何もできなかった」と落ち込むと想定していましたので自分でも意外です。
結局、明確なボトルネックを発見し改善するという本来の競技までたどりつけませんでした。
しかし、ちょっと修正を加えたことによるスコアの上昇や下降によって方向性が見えかけたところで終わってしまい、まだまだ勉強が足りんなと実感しているところです。

次回に活かす事

競技後、いろんな方のブログを読んでいました。「勉強不足」をもっと細かくすると以下のようになるので、来年までに勉強したいです。

  • ISUCONの定石を事前に調査し、過去問で練習する

  • Rubyのソースコードを読んで改善できそうなポイントを見つける

    • 結局、アプリケーションには何も修正を加えなかったのでソースコードを読んだうえで改善できそうなポイントを見つける力が必要そうです。