結果
Yokohama-Northというチーム名で、@trtraki, @bati11の二人と共に予選一日目に参加しました。
結果は最後の計測で30824点でした。
以下は当日の役割分担&感想です。
役割分担
ここ数年の固定メンバーで挑戦。今年は役割をシャッフルして、私はアプリ改修のサブ担当。
アプリ改修メイン担当 @bati11
- Go環境構築
- Profiler設定
- アプリ改修
DB、インフラ、数値計測 @trtraki
- pt-query-digestのインストール、alpのインストール
- MySQL 速度計測、クエリチェック
- Nginxのアクセスログ、alpで分析
- bench実行
- テーブル定義
アプリ改修サブ担当 @hanhan1978
- ソースコードをGitに突っ込む
- アプリケーションの特性調査
- 画面遷移
- エンドポイント定義作成
- アプリ改修
感想
とにかく、まずは素晴らしい問題をありがとうございましたという一点につきます。
今回はとにかくアプリケーションを修正しないことにはどうにもならないという点でやりがいのある問題でした。大きなボトルネックは明らかにgetEvent
なんだけど、小手先の改修でgetEvent
をコールしないような改修を進めていくと、ふと気づくんです。
APIエンドポイントのレスポンスはベンチマークの最初で精査されてしまうので、fail
地獄が待っているということ、そしてgetEvent
の呼び元ひとつひとつに改修をかけていくのは時間がかかりすぎるであろうということです。
私達がそれに気づいたのは13時頃で、軌道修正してgetEvent
のみを高速化する方針にして、18000のスコアを出せたのが16時でした。すでに残り2時間となっていたので、大きな改修をスタートするには遅すぎる状態に追い込まれていました。
getEvent
のチューニングをしていくと、今度は更新処理が詰まるようになってfailが続出してしまうので、failしない程度にgetEventのチューニングを適度に済ませるという情けない状態に陥ったのは残念な限りでした。
時間はもちろんですが、排他的な更新処理をどのようにして高速化していくのかという部分に対して、今の私達が短時間での解決策を思いつくことができなかったあたりにチームの現時点での限界が見えた気がしました。
そんな中でも、過去の経験を活かしてできるだけサーバサイドのチューニングを行うことで30000点台にまで乗せられたのは、まあまあだったかなと思います。
ともあれ、課題は見えてきたので、またさらに精進して来年のISUCON9(がもし開催されるのであれば)、また出場したいです!
以上、運営の皆様方、今年も良問ありがとうございました!