この記事は「CBcloud Advent Calendar 2024)」の8日目の記事です。
概要
- 初出場です!!!!
- 負けました!!!!!
- 楽しかった!!!!!!
初めてです!!!
ずっとでるぞでるぞ!!!って言ってたら早N年立ちましたが、たまたま今回は申込みすることができました!やったね!
これまでISUCON出てた人たちの話は聞いてたので、素振り大事だぞ準備大事だぞって聞いたので、それも含めやるぞ!!!って気持ちでしたが、Webパフォーマンスチューニングの本買ってあとはISUCONとはなんぞやとりあえず過去問の環境作るか、ベンチマーク叩いてふーんであっというまに12/8を迎えました。ピンチです。
ちなみに、一緒のチームの @Riku__Miyagi とでました
当日
9時出社です。平日と一緒だね
やったこと
- 各種サーバへGitHub連携
- newrelic連携
- Chrome devtoolsでサービスの動きをみてみる
- slow-queryの出力設定
- slow-queryの分析
- 各テーブルへインデックスの貼り付け
- 椅子合計移動距離サマリテーブルの用意
- マッチングアルゴリズムの改修
各種サーバへGitHub連携
ぐぐってたらこのブログ(?)に出会いました。最高。感謝
この通りにやったら普通にできるので、来年はスクリプト化してやりたいなと思いました
newrelic連携
会社がnewrelic使っているので勝手に導入しました
まぁいつも通りに利用して、ベンチ回したときのメトリックスやモニタリング結果で、どのAPIが重たいかなーでみてました
Chrome devtoolsでサービスの動きをみてみる
notificationがめっちゃ叩かれているな。でおわってしまいました
slow-queryの出力設定
これまた素晴らしいPostがあったのでこれを参考にしました
各テーブルへインデックスの貼り付け
スロークエリ確認して、とりあえずインデックス貼り付けをせっせとやりました
で、計測するツールで叩きまくった結果、スコアがデフォから+1000点ぐらいになりました。よい!!
12時ぐらい
ここから先が早くも伸び悩みした話です
椅子合計移動距離サマリテーブルの用意
スロークエリ調べてたら、明らかに chair_locations
の履歴テーブルで椅子ごとの移動距離計算するクエリが重いのはわかったので、サマリテーブルつくろーってなりました
なったんですが、最初AIに丸投げしてしまい、何も考えずでてきたベースで実装した結果、なんもうまくいかなかったので、一度反省し(すでに14時)ちゃんとコード読もうって動きにしました
そうしたら、こうすればいけるなってことも見え、実装したんですが、結局2000点を少し超えるぐらいで、執着。僕達の夏(冬だけど)は終わりました
スロークエリはだいぶ片付けられたけど、苦しめられたのはベンチを回すと、最終結果数値は移動距離の結果は合うが、途中ベンチ側も移動距離を計算しているようで、オーナー側で取得している移動距離が合いませんワーニングが多発しました。これがまだよくわかっておらず、修正を頑張ったけどタイムアップで夏が(冬(ry)終わりました。なんか勘違いしているのは拭えないですが、見つけられなかったくやしい〜
マッチングアルゴリズムの改修
slow-queryの分析
のやっているなかで、椅子のマッチングアルゴリズムが結構てきとうなことに気がついて、これやればいいんじゃね?ということで相棒にお願いしたんですが、こちらもなかなかうまく結果がでず。見るところはお互いよかったと思うんですが、成果につなげることができなかった。くやしい〜〜〜
振り返り
前半AIに丸投げしすぎてコードに向き合わなかったこと(涙)
思ったより改善しなかったので、出題する内容がさすが!と思いつつ、丸投げ過ぎて時間つかちゃったなという反省があります。ある程度のあたりはちゃんと自分でみて、理解の補助してもらいつつ、自分で考える(または引き出しを増やした上で)というのは必要だなっておもいましたまる
サービス全体の仕様を理解した上で、コードの挙動を把握しようとしなかったこと
いつも仕事では全体を俯瞰しようって意識しているはずなのに、点で捉えてしまって(涙)結局全体を見ずに終わってしまいました〜〜〜〜〜
まずサービスを使ってみてーから考えてもよかったなーと考えています
ベンチ回す前に挙動を確認する環境を用意したい
サーバが3台あるので、そういうことか?とは思いましたが、動作確認をする環境はどうにかこうにか作りたいなって考えています。SQLならまだDBに繋いで確認はできますが、アプリケーションとセットで動くかどうかは事前に確認できると、わざわざベンチ回すまでの時間とらなくていいなと思っています
素振り不足
前半の設定は思った以上に進んだなーと思いつつ、ただ、全部スクリプト化してたら、時間確保できたなーって思ったのと、あとはチューニングへの引き出しが少ないので、後半コードを読んで動かしてみて〜の繰り返しだったので、もっとあたりをつけられるようにしたいなと思いました
雑感
悔しいですが、たのしかったぞーーーーーー。来年再チャレンジします。運営の皆様ありがとうございました!