私が歌川です

@utgwkk が書いている

ISUCON6 に出て予選で打ちのめされてきた #isucon

あわせて読みたい

utgwkk.hateblo.jp

https://www.wass80.xyz/blog/2016/09/18/isucon6-qualify/www.wass80.xyz

yu3mars.hatenablog.com

やったこと

  • Ruby で実装
  • SQL の最適化
  • Nginx の静的ファイルキャッシュ
  • 応援

github.com

結果

19610点

感想

さてISUCON初参加でしたが、結果を見るともののみごとに打ちのめされたという感じでした。Ruby の初期実装だとベンチマークが0点で、おいおいマジかと思いましたね。

GET / が圧倒的に重いのは分かっていて、rack-lineprof を使って見ていこうという作戦は事前に考えていたのでやりましたが、プロファイルを取りながらベンチマークにかけると重すぎて例外を吐くということになかなか気づかなかったので、かなり時間を取られました。

それもなんとかしてもらって、とにかくググって便利設定ファイルをコピペしまくって、nginx で静的ファイルをキャッシュするようにしていきました。なんやかんややって、ようやく正の点数が取れました。

内部で通信していた部分を DB に変えたりして、POST がタイムアウトしなくなってから、点数が大幅に伸びでチームのテンションが上がりました。

正規表現がボトルネックになっていたのを、少しマシになるように修正してから、どうやって高速に文字列を置換していこうというのが問題になってきました。いろいろ考えて、これトライ木かあという声もありましたが、結局もとの実装を少しましにしてから止めました。

Redis とか memcached とかを使って本文をキャッシュしようという案が出ていましたが、残念ながら時間が足りず、再起動テストして最後にベンチマークをして終了。

ISUCON、なかなか見ないようなタイプのコンテストで、面白かったので、来年は本戦までにもっとノウハウをつけてから参加したいです。あと練習をしましょう。キャッシュなどがオススメです。

ところで毎年文字列処理が決め手になるんですか?

まとめ

  • キャッシュについて知ろう
  • 文字列置換について知ろう