ISUCON7予選通過 & 技術書典3出展
ISUCON7
ISUCON7に私と@susisu2413,@amaya382の3人で参加しました.学生枠ですが,チーム名「チーム名を考えるのが苦手すぎる」として最終スコア89047で本戦に出場できることができました!ヤッター
私はアプリケーション(Node.js)担当でしたが,RDBの知見が何も無いのが分かっていたので,最初からインデックス追加やクエリの改善を諦めてMySQLからガバッとRedisに移し替える作戦で高速化を目指しました.実装間に合って良かった…
実装中は@susisu2413がESLintを導入したおかげでコードが衛生的になり,実装中にいくつかバグを見つけることができて良い体験でした.デプロイ周辺も@amaya382に任せきりになり頭が上がらない思いです🙇
感想
役割分担が適切だった
- 前回はアプリの改修を1人に任せており,1人がひたすら実装するのを2人が見守るみたいな状態になってて良くなかった.やはりアプリ2人ミドルウェア1人の構成が最適そう
事前にpixiv社内ISUCONをやってたらそっくりの問題が出題された
- 画像ファイルがDBにそのまま入ってるとことか
- @amaya382にシュッと初期DBから画像を取り出してもらい,@susisu2413がササッと画像アップロード部分の実装をしてくれました🙏
3人が同じ場所に集まるの大事
Redisのノンブロッキングな動作に悩まされた(本質と全然関係ない)
マニュアルを誰一人精読してなくて,実行環境は1台のサーバで完結しており残りの2台は予備だと勘違いしてた
- 本戦問題何もやって無くて複数台構成という発想が無かった
- アホス
- マニュアルはちゃんと読もう!!!!!!
Cache-Control
を設定するとベンチマーカがちゃんと考慮してくれることとか,静的コンテンツは304を返しても良いことに気づかなかった- マニュアルは(ry
- この辺りはとにかく勉強不足だった
sleep(1)
に手をつけてなかったGET /fetch
がポーリングされていることには気づきつつも,1秒よりも延ばすとタイムアウトでスコアが減ってしまうと思い込みそのまま放置してた- というか今見たらマニュアルにちゃんとヒント書いてたね…
何も考えずにMySQLをRedisに置き換えたけど,果たして効果はあったのか??どこがボトルネックになっているか確認して,ちゃんとDBが原因であることを確認してから取りかかるべきだった
- しかしDBは別サーバで動いていたので確認しようがない…
アプリとNginxをUNIXドメインソケットで繋ぐ等基本的な高速化手段を忘れていた
- やるべきことをリストアップすると良さそう
一般枠のスコアを見ると何もかも戦うステージが違う感じで尻込みしますが,何とか本戦でも爪跡を残せるよう頑張りたいと思います.
マニュアルはちゃんと読もう!!!!!!
技術書典3
あと全然関係ないですが,ISUCON予選2日目に開催された技術書典3で「やっていく合同誌」という合同誌を頒布していました.私はdeeplearn.jsについて記事を書いています.
ISUCONに参加して技術書典に行けなかった皆様に朗報です!!!「やっていく合同誌」は電子版で販売しております!!! COMIC ZINにも委託しているので物理本も買えます!!!ご興味ある方は是非!!!