ISUCON公式Blog

WINNER'S PRIZE \1,000,000



   

オンライン予選時、Amazon Web Service (以下AWS) アカウントを利用し主催者が指定した Amazon Machine Image (以下AMI) 起動したインスタンスを1台利用していただきました。オンライン予選時はm3.xlarge (EBS最適化なし) としました。

AMI-id は ami-b34ad3b2 です。

オンライン予選時からの変更点


予選2日目に使用した AMI を元に、以下の変更を加えたものを公開しました。

ベンチマークツールを差し替え
testモードで --workload が指定できるようになっています
benchmarkモードでAPIサーバと通信しないのでいつでも実行可能です。--init を指定する場合はtestモードではなくbenchmarkモードで実行してください
予選時には m3.xlarge インスタンス以外で実行できない制限がありましたが、解除してあります
ベンチマークツールのソースコード追加
/home/isucon/qualifier_bench にあります
ライセンスファイル追加
MITライセンスですが、サブディレクトリ内にライセンス表記がある場合はそちらが優先です


利用方法

インスタンスを起動後、ec2-user でSSHログインし、isuconユーザにsuしてください。 /home/isucon/README.md にベンチマークツールの起動方法などが書かれていますので参照してください。

注意事項

インスタンスの実行に掛かる費用は、インスタンスを起動したアカウントに請求されます。運営では一切関知しませんのでご注意ください。


Read more...

出題担当のfujiwaraです。

ISUCON3予選にご参加いただいた皆様、ありがとうございました。 本選進出者の皆様、おめでとうございます!

おかげさまで大きなトラブルもなく、無事に2日間の予選を終えることができました。楽しんでいただけたでしょうか。

出題内容

今回の予選問題は以下のようなWebアプリケーションを題材としました。

  • 要するにGithub Gistのようなもの
  • ログイン機能がある。Cookieによるセッション維持が必要
  • プライベート投稿機能がある。プライベート設定されたものはログインしているユーザにしか見えない
  • Markdown形式で投稿できる
過去のISUCON1,2での題材はユーザごとのログインという機能がなかったため、その点が大きく異なる部分ですね。

詳細については、問題作成に協力してもらった同僚 @acidlemon が解説記事を書いていますのでご参照ください


講評

予選参加者の皆さんから提出された AMI から運営がインスタンスを起動してベンチマークを行い、予選期間中に記録された最高スコアに近い値が計測されたのを確認して本選進出確定、というレギュレーションでしたので、こちらでベンチマークを実行しつつ内部を軽く見せていただきました。それを元に講評したいと思います。

アプローチとしては大きく分けて三つあったようです。

  1. アプリケーションを再実装しオンメモリにデータを保持して高速に処理する実装を作り上げる
  2. フロント(nginx, varnishなど)でキャッシュを積極的に行い性能を出す
  3. アプリケーションを着実に改善していくことで性能を出す
スコアが20,000以上の上位チームの中では、「山形組」「ぜかまし」が1.のアプローチ、それ以外が2.のアプローチのようでした。

1.のアプローチについては、今回の初期データが200MB、数万件程度でメモリに十分保持できるサイズだったこともあり、非常に高速に動作させられるようですね。 アプリケーションの変更点が大きくなるため、時間内に作り上げるのはなかなか困難だと思いますがそれをやりきって速度を出した2チームでした。

2.のアプローチですが、フロントでキャッシュするといっても、今回の設問はログイン中ユーザに配信するページにはそれぞれのユーザ名が書き込まれているなど、キャッシュすることがなかなか難しい作りです。

ただし /recent/* という投稿された一覧画面のみ、非ログイン状態のクライアントが大量にアクセスしてくる作りになっています。(一部、ログインセッションを持ったクライアントもアクセスします)

しかもこの非ログイン状態のクライアントはページ内容のチェックが若干甘く、そのためキャッシュをある程度長く保持していてもfailにならずにスコアが上がる、という特性がありました。

ここは実は出題意図にはなく、たまたまHTMLをチェックするコードの実装が足りなかったために、このような特性になってしまっていたのを告白します。このことは初日の競技中に気がついてしまって、かなり動揺してしまいました…

とはいえプログラムは「意図したとおりではなく書いたとおりに動く」ものですし、チェッカーが検出できないものは失点ではないので、そこを突いてスコアを上げることは正当な行為です。(初回のISUCON1の時も、サイドバーは10秒以内ならキャッシュしてもチェッカーが検出できないことを、結果的に利用して優勝スコアを出したのでした)

また、今回はページ内容に問題が検出されたとしても1発アウトではなく、合計のfail数が3までは減点なし、それ以上は fail数の自乗% (たとえば fails=6 なら 3 * 3 => -9%) で減点されるというスコアリング方式でしたので、多少のfailは厭わずキャッシュで稼ぐという戦略が有効に作用していました。

正直なところここでスコアを稼げる作りにするつもりではなかったので、出題者としては大変負けた気分ですがこれは本選への反省として生かしたいと思います!

そしてフロントのキャッシュに頼らす、実直にアプリケーションの作りを改善していってスコアを出していったチームもあります。ボトルネックとなっている問題点を潰していけばそれなりにスコアが上がるようになっていますし、事前に出題を解いてもらった感触では、正攻法で遅いところを全部潰してスコア10,000程度が予選のボーダーラインになるかなと思っていたので、まずは想定通りという感じでしょうか。

recentでスコアを稼げないようにチェッカーがもう少し厳しかった場合、おそらくフロントキャッシュ戦略をとったチームの大半がfailするはずですので、正攻法で10,000点というのは決して低いスコアではないと思います。

AMI確認中は最低5回のベンチマーク試行をしましたが、多少のfailを覚悟の上でキャッシュ戦略をとったチームはやはりスコアのばらつきが大きく、そうでないチームは安定して数%程度の誤差でスコアを出していました。ここは一発アウトでない、複数回の試行で最高スコアが出ればよいというレギュレーションを生かした戦い方ですね。


本選に向けて

予選では1台のインスタンスでベンチマークツールも同一ホストで実行されるという環境でしたが、本選は複数台構成になります。また、ベンチマークも別のマシンからおこなわれますので、今回の予選でスコアを出した手法がそのまま通じるかどうかは分かりません。

また、予選のスコアや順位は本選において特にアドバンテージはありませんので、また心機一転、楽しんでいただけたらと思います。 出題者としても意図しない挙動やスコアが出ないように頑張りますので、本選進出者の皆様よろしくおねがいいたします!

Read more...

櫛井です。

オンライン予選後、事前に告知していたレギュレーションに則り、参加者から提出された AMI を元に主催者が実行し競技時間中に計測された性能値に近い値が再現できるかを確認いたしました。その結果、本選出場者は以下となります。

本選出場者

以下、順位・予選スコア・チーム名となります。

一般枠
1. 33830 勝浦タンタンメン (予選1日目 1位)
2. 32486 ぜかまし(予選1日目 2位)
3. 32270 山形組(予選1日目 3位)
4. 30090 進撃の超大型パティスリー兄弟(予選2日目 1位)
5. 29263 オシャレ怪盗スワロウテイル(予選2日目 2位)
6. 20599 The Revenge of Mr. Frank & Co.(予選1日目 4位)
7. 19412 くらげとみかんと江戸幕府(予選1日目 5位)
8. 14379 チームたこやき(予選2日目 3位)
9. 13192 チームぽわわ2(予選2日目 4位)
10. 12595 Third Party Cookies(予選2日目 5位)
11. 11249 潰すつもりで来てください
12. 10846 坂パスタ
13. 10813 白金動物園
14. 10787 50ms or die.
15. 10784 └('-'└)
16. 9732 :ok_woman:
17. 9268 Noder
18. 9061 335
19. 8756 Miami
20. 8255 Fulab ※繰り上がり当選


共催枠
LINE選抜「チーム生ハム原木」
カヤック選抜「既婚1人 + その他2人」


学生枠
1. ( (0) / (0)) ☆祝☆
2. かまたまうどん ※繰り上がり当選
3. aky ※繰り上がり当選


以上、25チームとなります。
開催のお知らせでも書きましたが、本選は11月9日(土)に LINE株式会社の渋谷ヒカリエオフィスにて行います。本選参加は当日渋谷ヒカリエにお越しいただける方のみとし、オンラインでの参加は不可とします。また、予選と本選でチームメンバーの交代は出来ませんのでご注意ください。


一般枠から暫定本選出場予定だったチーム「緊急ファイナル」については、[FAIL] invalid Cache-Control header などが大量に発生し、ベンチマークが5回連続でスコア0でfailしたため、残念ながら失格とします。

また、学生枠で暫定本選出場予定だった「魔王」は、OS起動直後にはPerl実装がsupervisordから起動していました。--init内でPerl実装を止めてforemanを起動しているところで正常に起動しなかったようで、ベンチマークが5回連続スコア0でfailしたため残念ながら失格とします。参考までに、foremanを単独で手動起動して計測したところ 16952.5 のスコアが出ました。

もう1チーム、学生枠で暫定本選出場予定だった「休学って楽しいよね!」は、[FAIL] status 404 != 200 http://localhost/recent/207 のfailが十数回程度発生し、5回計測して最高スコアが2952でした。予選で記録されたスコアの60%に満たないため残念ながら失格とします。



本選出場チームの代表の方へは明日以降あらためてご連絡いたしますので、お待ちください。オンライン予選にご参加いただいた皆さん、まことにありがとうございました。まだ未定ではありますが、次回のご参加をお待ちしております。

ご参加いただいた皆さんの感想などはこちらにまとめています。
#isucon オンライン予選 まとめ - Togetter
ISUCONオンライン予選 関連エントリまとめ : ISUCON公式Blog
Read more...

↑このページのトップヘ