チームひろし ISUCON13奮闘記 (35,904点 47位)
結果
最終スコア 35,904点 で、全体で 47位 でした!
予選があったら本選に出場できてない!くやしい!
順位はこちら
弊チームのリポジトリはこちら
チームメンバーのブログはこちら
「チームひろし」
会社のエンジニア2人と3人チームで出場しました。全員初参加でした。
チームスライドにもあるように、ずっとケンカをしていました。
うそです。
和気あいあいとケンカしていました!
やったこと
pprotein がすごい便利だった
すんごい便利でした!
まずはインデックスを貼っていった
pprotein が slp で分析してくれたスロークエリを見ながら、チームみんなで色々と貼っていきました。
10,000点くらいまでは雑にインデックスを貼っていくだけで上がった記憶です。
原因は分かってないんですが、 index out of range
で slp が何回かpanicしたときは焦った!
getReactionsHandler
のN+1問題をつぶした
pprotein が出してくれた pprof のフレームグラフを見ると getReactionsHandler
のフレームが大きかったので改善に着手しました。
何種類かあった fillXxxResponse
という関数でN+1問題がこれでもかと発生していたので、頑張ってGoを書きました。
同じく大きかった getLivecommentsHandler
はチームメンバーが潰してくれました。
割とスコアが上がった記憶!
icon の hash をオンメモリキャッシュした
同じく pprof のフレームグラフを見ていると、いたるところで呼ばれている sha256.Sum256
のフレームが割と大きかったので改善に着手しました。
計算されたHash値を sync.Map
を使ってオンメモリにキャッシュし、 icon が変更されたときと initialize
時にパージするようにしました。
素振りしていたことが出来てよかった!
getIconHandler
で 304 Not Modified を返した
次に pprof に出てきたのは getIconHandler
だったので改善に着手しました。
アプリケーションマニュアル に 304 を返せる条件が書いてあったので、それを参考にGoを書きました。
ボトルネックがどんどん移り変わってたのしい!
くやしいポイント
わりと練習した
AWSに4,000円払うくらいは練習しました。
割と練習したつもりだったのに!
3台目が使えなかった
チームメンバーがAppとDBを分けて2台使うように変更してくれて、スコアがぐんと伸びた記憶です。
でも3台目をうまく使うことができませんでした。
練習ではサーバ全台を使えてたのに!
moderateHandler
の改善でスコアを上げられなかった
最後のほうに pprof に大きめのフレームで出てきた moderateHandler
の改善に着手しました。
すんごい変なSQLが書かれてて読むの大変でしたが、なんとかキレイなクエリへ変更することができました。
が、最終的にはスコアがまったく変わりませんでした。
ボトルネックは変わってたのにスコアが変わらなかった!
ラスト2時間はスコアを上げられなかった
これが一番くやしいかもしれない。
ラスト1時間時点では23位くらいにいたのに!
くやしくないポイント
DNSはわからん
これはわからんすぎて逆にくやしくない!
まとめ
練習で出来たことが本番で出来ないとくやしい。
来年は優勝するぞ!
株式会社SODAの開発組織がお届けするZenn Publicationです。 是非Entrance Bookもご覧ください! → recruit.soda-inc.jp/engineer
Discussion