koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

社内イベントに乗っかってISUCON11予選の問題に取り組んだ

これは感想記事です。

ISUCONは開催されているのを横目で眺めている程度で、触れたことはなかったけれど、多少の興味があった。社内にはISUCONが好きな人が結構いて、過去の問題に取り組んでみよう会が複数回催されている。今日もそんな会があった。

興味があるならまずは敷居の低いところから、と参加してみた次第。

結論としては↓な感じ。

楽しかった

これは純粋に楽しかった。

よくできた課題に時間制限ありで取り組むこと自体が楽しいし、同じ課題に複数名が取り組んでいる競争である点の刺激もよい。

機会と気力が合えば本番練習問わずまたやってみたいと思えた。

過去問は沢山あるから一人でやる分には思い立ったらやってもいい。その場合も時間制限は本番同様にしたほうが緊張感があっていいんだろうな。

参加の筋が悪くて色々イマイチだった

これは反省ポイントで、この記事を読んでいるISUCON未参加勢には参考になる項目かもしれない。

主に2点。

  • 1人チームで参加してしまって寂しかった
  • よく知らん参照実装を選んでしまって本質に取り組めなかった

1人チームで参加してしまって寂しかった

気楽に参加したいなぁ、と、ちょうどチームを組むには端数が生まれる参加者数*1だったので、じゃあ僕が1人チームでやりますよ。と1人で取り組んだ。

が、周りがチームでワイワイやってそう(課題に取り組む様子はチーム外に非公開なので想像)なのに、1人で黙々とやるのはなんか異様に寂しかった。

人と喋るのが極端に嫌いでないならチームで組んで参加したほうが楽しいと思う。

よく知らん参照実装を選んでしまって本質に取り組めなかった

どうせイベントごとに参加するならよく知らん要素技術に触れる機会にして一石二鳥にしよう。

と普段使わないNode.js実装を選んだのだけれど、そんなに甘い世界ではなかった。

そもそも1人で目も手も足りない中で、実装言語もよく知らんとなると、何も分からん状態になって「触れる機会」だとかの考えは甘っちょろく単に翻弄されるだけだった。

結果としてNode.jsならではのなにがしはできず、他の要素の改善に終始することになってしまった。

当然ながら慣れてる要素技術で取り組むの良さそうだった。

C#実装欲しいと思った

これは「よく知らん参照実装を選んでしまって本質に取り組めなかった」の流れなのだけど、ISUCON11予選の参照実装にはJVMと.NETが無いんだよね。

よく知ってるか? 得意か? と言われると分からんけれど、JavaC#世代の中間言語コンパイルする言語が好きなので、それらが無いのはちょっと寂しい。Web系だからその辺あまり使われていないのだろうか。

気力があれば過去問の参照実装を作ってみるようなことをしてみると面白いかもしれない。

オマケ:答え合わせ

運営が用意している回答はこの辺りにある。

isucon.net

僕の取り組みはこんな感じ。(コミットログとか)ひどいもんだ。

github.com

  • やったこと
    • インフラ面
      • 3番をDB専用に
        • DBのinno_db_poolを増やしたけれどあんまり効果なさそう
      • 1番をProxyに
      • 1,2番をAppに
        • 2コア使うように
  • アプリ面
    • 最新の状態のポインタを持つようにした
      • が登録が重くなってしまったかも
    • N+1は多少処理した
    • グラフは手が出なかった
  • やってみたいこと
    • 登録処理のRDBからの切り離し
    • グラフのチューニング
    • キャッシュ全般

キャッシュ以外はざっくりそれらしく対応していた気がするけれど、それぞれ半端な対応になっている感が強い。

20000点くらいで着地した。

*1:ISUCONは1チーム3名