Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

ISUCON3 予選のAMIでスコア 65000点以上を出す方法 #isucon

ISUCON3 の予選AMIが公開されてから、ごにょごにょとHackした結果、スコアで65000まで出す事ができました。(一回だけ66000でけどたぶんインスタンスガチャ)

ISUCON 本戦出場者決定のお知らせ」をみると予選の時のトップのスコアが3.3万(自分たちは1.5万ぐらい)、その後の解説記事「ざっくりと #isucon 2013年予選問題の解き方教えます」だと、5.6万という話でしたので、その数字よりも良いスコアを出すことができました。

んで、本選終わったのでそのソースコード公開しました。

https://github.com/kazeburo/isucon3qualifier-myhack

構成はnginx + perlです。主なポイントは

  • セッションに直接ユーザIDを埋める
  • / と /recent は静的にHTMLを書き出して、nginxのssiを使ってセッション情報を埋める。
  • 初期化時とmemoのPOST時に、memcachedにJSONでキャッシュする
  • /memo はluaでmemcachedにアクセスして組み立てる
  • 改造Starlet使って、nginxからunix domain socketでproxy

といったあたり。ベンチマークはworkload 2よりも大きくすると遅くなります

$ sudo isucon3 benchmark --init /home/isucon/webapp/perl/conf/init.sh --workload 2
2013/11/11 14:49:42 <<<DEBUG build>>>
2013/11/11 14:49:42 benchmark mode
2013/11/11 14:49:42 initialize data...
2013/11/11 14:49:57 run /home/isucon/webapp/perl/conf/init.sh timeout 60 sec...
2013/11/11 14:50:32 done
2013/11/11 14:50:32 sleeping 5 sec...
2013/11/11 14:50:37 run benchmark workload: 2
2013/11/11 14:51:38 done benchmark
Result:   SUCCESS 
RawScore: 65508.9
Fails:    0
Score:    65508.9

最後まで @methane さんの70kには届かなかったのが残念