ISUCON7に id:kazeburo さんと id:gfx さんと、チーム「スギャブロエックス」で出場して、2日目の上位3チーム枠の2位で予選通過しました。
スコアの遷移は以下の通り、最終スコアは 522,461。
時刻 | スコア |
---|---|
2017-10-22T13:06:44 | 6012 |
2017-10-22T13:16:24 | 5108 |
2017-10-22T13:35:01 | 4721 |
2017-10-22T13:49:24 | 6870 |
2017-10-22T14:36:24 | 4951 |
2017-10-22T14:41:01 | 6749 |
2017-10-22T15:03:44 | 6164 |
2017-10-22T15:24:50 | 15095 |
2017-10-22T15:29:00 | 20526 |
2017-10-22T15:37:00 | 17957 |
2017-10-22T15:46:22 | 30512 |
2017-10-22T15:50:50 | 31042 |
2017-10-22T16:21:24 | 28323 |
2017-10-22T16:57:17 | 17656 |
2017-10-22T16:58:22 | 15725 |
2017-10-22T17:00:50 | 21895 |
2017-10-22T17:02:13 | 23369 |
2017-10-22T17:07:48 | 19385 |
2017-10-22T17:11:06 | 26365 |
2017-10-22T17:24:37 | 51942 |
2017-10-22T17:36:39 | 36799 |
2017-10-22T17:40:00 | 32550 |
2017-10-22T17:42:49 | 85787 |
2017-10-22T17:52:07 | 56550 |
2017-10-22T18:04:06 | 114636 |
2017-10-22T18:06:07 | 144735 |
2017-10-22T18:16:51 | 115281 |
2017-10-22T18:22:16 | 139258 |
2017-10-22T18:31:50 | 108422 |
2017-10-22T18:40:40 | 110545 |
2017-10-22T18:46:12 | 207937 |
2017-10-22T18:52:31 | 224172 |
2017-10-22T18:57:17 | 294244 |
2017-10-22T19:02:48 | 185747 |
2017-10-22T19:04:11 | 197431 |
2017-10-22T19:13:12 | 211655 |
2017-10-22T19:17:02 | 180887 |
2017-10-22T19:19:31 | 324890 |
2017-10-22T19:21:20 | 365210 |
2017-10-22T19:22:34 | 257398 |
2017-10-22T19:29:15 | 313264 |
2017-10-22T19:34:51 | 268841 |
2017-10-22T19:37:42 | 506162 |
2017-10-22T19:39:13 | 465960 |
2017-10-22T19:43:36 | 398467 |
2017-10-22T19:45:31 | 360072 |
2017-10-22T19:46:58 | 312146 |
2017-10-22T19:48:54 | 506943 |
2017-10-22T19:54:15 | 373185 |
2017-10-22T20:00:29 | 255289 |
2017-10-22T20:09:05 | 349379 |
2017-10-22T20:10:42 | 223452 |
2017-10-22T20:20:09 | 304453 |
2017-10-22T20:22:14 | 213811 |
2017-10-22T20:23:30 | 195622 |
2017-10-22T20:25:16 | 235779 |
2017-10-22T20:27:38 | 309148 |
2017-10-22T20:32:19 | 393837 |
2017-10-22T20:33:33 | 212309 |
2017-10-22T20:35:04 | 405354 |
2017-10-22T20:36:55 | 236184 |
2017-10-22T20:38:30 | 264824 |
2017-10-22T20:40:06 | 522461 |
チームで使ったコードの履歴はこちら。
GitHub - gfx/isucon7-qualify: SugyaburoX repo for ISUCON7 (2017) qualify
前日まで
チームは決めて Slack上でやりとりはしていたものの、直接顔を合わせての打ち合わせ的なものは1度もせず。 まぁ開始時間が遅くなっていたおかげで早めに集まって始まるまでの時間があったので良かった。
言語はどれを使おうか、ってのはまぁ悩んで。 元々みんなPerl界隈の人だったはずだけど最近は… って感じで 僕も自分が一体どの言語が得意なのか分からない状態だったので gfxに任せて Node.js で行くことに。
当日
kazeburoさんのMercari社さんで場所と昼食を提供していただけることになったので(ありがとうございました!!!)、六本木に集合。
最初はだいたい決めてた通りに役割分担する感じで kazeburoさんがサーバ周りもろもろセッティングして gfxがコードを読んでアプリケーションを把握して 僕がローカルでアプリケーション動かすのを試してみたり
やったこと
お題はチャットアプリケーション
まずはとにかくユーザのアイコン画像がDBに入っていて毎回アプリケーションから返してるのはないよね、ってことでWebDAVで一箇所に静的ファイルとして保存して返すようにしよう、と。 初期データのものをWebDAVにツッコむだけのスクリプトを書こうとしたのだけど、Nodeの非同期httpリクエストを扱いながら繰り返し処理をする、ていうのが上手く書けず… 結局2人に見てもらって引き取ってもらう という役立たずっぷり orz
そのへんとか N+1的なクエリをgfxが直したり でスコアは上がったものの 他のチームは桁違いに高い数字を出しており… どうしたらそんな点数でるの?? て感じで17時半くらいの時点では敗色濃厚な雰囲気。。
kazeburoさんが1台あたりの帯域を使い切っていることに気付いてベンチマーカの向き先を増やしたりCache-Controlヘッダを上手いことやったりして一気に2〜3万から7〜8万にアップ。 ここからだんだんまたアプリケーションやDBのボトルネックが見えるようになってきたので再び遅いクエリを解消していくなどの作業。
各チャンネルの未読数を全チャンネルに対するCOUNTクエリ発行してるのを解消しよう、と既読数テーブルを作って 全メッセージ数 - 既読数 で未読数を出すように変更。22万くらいから29万くらいに上がった、唯一バリューが出せたところ
あとは全メッセージ数もchannelテーブルで管理するようにとか色々変更を入れていったらだいたい30万以上は出るようになったのだけど とにかくベンチマークのブレが大きくてコード変えてなくても実行するたびにスコアが10万点くらい上下したりして ボトルネックの発見もその解消の検証もしづらい。 まず効果がありそう、なところだけやって、最後の数十分は何度も試して高いスコアが出るまで祈って繰り返す、という感じだった。 20:40で良いスコアが出たのでそこでストップ。
反省
Node.jsの非同期処理まわりが書き慣れてなさすぎてロクにコードを書けなくて足を引っ張ってしまった。 ホントにkazeburoさんとgfxのおかげで通過できました!!!という感じだったので 本選ではもっと役に立てるよう頑張りたいと思います。
出題・準備と、運営の皆様 とっても大変だったと思いますがありがとうございました! また来月よろしくお願いします!!!!!