2014-09-29

ISUCONで予選敗退してきました (3年連続3度目)

今年も参加してきました。
今までどおり、 @gaooh, @froncool の2名と。

今回のお題は、ログインのアカウントロックですね。

  • n回連続で失敗したらそのアカウントをロックする
  • n回連続で失敗したらそのIPアドレスをロックする

みたいなの。

役割が被って残念なのは今までに経験してるので、流れでこんな感じの分担に。

  • @gaooh -> 実装
  • @froncool -> ミドルウェア
  • @iszk -> 悪知恵、ロジック

言語は、@gaooh が一番実装しやすいRubyで。

今回の悪知恵としては、

  • usersテーブルが20万件しかなくて実質 login と password しかなかったので、それをプログラム内に静的なhashとして持ってしまったこと
  • / へのアクセスが4種類(ログイン前、ログイン失敗時のエラーメッセージ3つ)なので、エラーを /?err1 みたいな感じへのリダイレクトにして、前段のキャッシュを効かせたこと
の2つでした。あんまり爆発するほどの裏口は見つからなかったですね。残念。
後者に関してはベンチマークさんの挙動がちょっとおもしろくて、 /err とかに飛ばすと「そんなURLにアクセスしてんじゃねーよ」ってfailになるんですが、 /?err とかに飛ばすと見逃してくれたんですね。なのでその挙動を利用させてもらいました。

この悪知恵を入れたのと、あとmysqlに持っていたログイン履歴のデータを必要な部分だけ最適化してmemcachedにする、と言う内容でした。

結局。

最後までレポートが合わないバグが取れずに初期スコアでの送信になりました。
参考スコアとしては、workload=8で4万くらいだった気がします。

@gaooh「ほかのブログをみると私の実装力があれば決勝いけましたねorz うぐぐ」
ということなので、惜しかった…と言うことにしておきます。

来年こそは!