はじめに
ISUCONとは、「お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル」です。 3人でチームを組んで参加し、レギュレーションの中であれば自由にアプリケーションに手を加え、出題者が用意したベンチマークでもっとも優れたスコアをたたき出したチームが優勝となります。
要するにあるお題のアプリケーション・サービスが渡され、それをいかに早く・速くするか、というコンテスト。
今回の問題の概要
ログイン制のSNSサービスがテーマだった。
- ユーザ同士が友達となる
- 自分の日記が公開できる
- 友達の日記が読める
- 友達からの日記へのコメントが読める
今回はISUCON4の時の問題に比べてとにかく画面数とテーブル数が多かった。
(ちなみに前回のISUCON4の時はテーブル2つ、今回は7つ)
制限時間内もあるのでどこをチューニングしていくかの当たりをつけていくのが大事かと思われる。
チーム
会社の先輩2人とチームを組んで参加をした。
私が1番下っ端だったので雑用や相談人形になることが主な役割だった。
1番上の先輩がインフラ・ミドルウェアまわり、私と1つ上の先輩でアプリケーションまわりを担当した。
言語は3人とも触れているRuby
にした。
やったこと
- アプリケーションのソースコードを読み、挙動の理解
-
MySQL
のテーブルを眺めてデータの構成の把握 -
GCP
上にSSH
した先のISUCON
ユーザのログインシェルをbash
に変更(これをやらないとタブ補完もヒストリも効かずにひたすら辛かった) - スロークエリを見てクエリの改善(なお大した成果は得られなかった模様)
- 冗長なソースの改善、N+1やLIMIT1000のクエリ(なお大した成果はry)
- アプリ担当の先輩のソースレビュー(アプリ2人で擬似プルリク駆動開発)
- お弁当の買い出し
- 当日のサポートチャット(
idobata
)のチェック・報告
とまぁ大したことはやってなく、本当に雑用という感じ
アプリケーションの改修の方も「ここだ!」と思った箇所を改修したがむしろスコアが下がりすぐにリバート。
結果
初期スコア | 最終スコア |
---|---|
65 | 1864 |
他チームに比べて初期スコアが低すぎるような…まぁ初日はベンチマークにバグがあったようだし気にしない。
当初の目標が「初期スコアの2倍・3倍」だったのでその点に関しては大幅に達成できた。
とは言えこの体たらく…どうやったら5桁もスコアいくんだ…。
感想
インフラ・ミドルウェアまわりの一切を任せてしまった(よく言えば役割分担がしっかりできていた)のでそっちまわりはさっぱり分からず終わってしまった。
そちら側の改修で大幅に点数が上がり、アプリケーション側の改修では微々たる程度しか上げることができなかった。
後から知ったことなのだが、ソースの修正をしてベンチマークを走らせる前にrubyのリスタートをしないとソースが反映されないらしく、もしかしたら修正が反映されていなかった可能性が終わり際に浮上し青ざめたことはここだけの話。
とはいえ反映されていても微々たるものだっただろうな…。
おわりに
今回ISUCON初参戦だったが、競技自体がとても面白かった。
自分の不出来さを痛感する意味で参戦した意義はあった。
というクソザコエンジニアの参戦記録でした!