ISUCON公式Blog

WINNER'S PRIZE \1,000,000



   

みなさんISUCON予選おつかれさまでした。@fujiwaraとともに今回の予選の運営をしている@acidlemonです。予選問題はまず最初に@fujiwaraがPerlの初期実装を作って私が解き、おもったよりもサクサクだったので凶悪なクエリを追加して大体完成したところで、@fujiwaraがRuby, Python, Goの移植、私がNode.js、PHPの移植を行いました。

Node.js実装についてはsupervisordではなくstandaloneで動かすとtmpfile()が $HOME/tmp にテンポラリファイル作ろうとするため、コンソールから直接npm start等で起動した場合はそのようなフォルダがなくエラーとなる問題が1日目のAMIにありました。この点でハマってしまった方、申し訳ありません。

さて、講評につきましては明日以降みなさまより提出いただいたAMIを私と@fujiwaraでチェックし、順位が確定したタイミングで@fujiwaraから出る予定となっております。それに先立ち、まず私からはどのような問題だったのかの解説をしたいと思います。

予選問題の解説


今回のWebアプリは一言でいうとgithubのgistのようなWebアプリでした。大体以下の要件のWebアプリとなっています。

  • ログイン機能がある。CSRF対策がなされている
  • メモ(Markdown形式)を投稿する機能がある。投稿するときにメモを非公開にするかどうか選ぶことができる
  • トップページに最新の公開投稿100件を表示する
  • 公開投稿をページングして辿っていく機能があり、各ページ100ページずつ表示する
  • マイページに自分が投稿したメモを公開/非公開に関係なくすべてリスト表示する
  • メモの表示はMarkdownをHTMLに変換して行う。メモページからは次/前の公開メモを辿ることができる

  • また、競技を行うマシンはAWSのEC2に以下のようなAMIを準備しました。

  • OSは最新のAmazon Linux(x86-64)
  • TCP/80ポートをApache 2.4で待ち受け、すべてのアクセスをTCP/5000ポートへリバースプロキシする
  • TCP/5000は初期設定ではperl実装が起動している。起動する実装はphp以外supervisordで切り替え可能
  • PHPを使用する場合はサンプル提供しているApache用のconfファイルを有効にしてTCP/5000でPHPを動かす
  • ストレージは最新のMySQLとAmazon Linux標準のmemcachedをインストール
  • アプリの設定はPerl, Ruby, PythonのPrefork型アプリケーションサーバは10worker、Goはコントローラ部分が10並列、Nodeはclusterを使い2プロセス、PHPはApacheのデフォルト設定
  • アプリはセッションストアとしてmemcachedのようなものを使用

    各言語の初期スコアですが、大体 Go 2500 > Ruby 2000 > Python = Perl > Node.js = PHP といった感じになっています。初期のボトルネックはほぼDBとなっていましたのでアプリで処理を行う部分のスコアはほとんど同じ感じでしたが、Goが飛び抜けているのは静的ファイルを返す速度ですこし飛び抜けた感じになっています。最終スコアからすると誤差の範囲ですね。

    具体的に高速化していく解答方法については明日以降に別途エントリの場所を #isucon タグでお知らせしますが、まずは「あれは罠なの?」などと質問が飛びそうな点などについて以下で解説していきます。

    出題内容について


    Q. セッションストアにmemcachedのようなものを使っているのは罠ですか?
    A. まずどのぐらいの方が気付いたかわかりませんが、memcachedのデフォルトポートである11211ポートで起動していたのは純正のmemcachedではなくMySQL 5.6.14のInnoDB Memcached Pluginです。純正のmemcachedは11212ポートで起動していますので、セッションストアの接続先を11212ポートに変更するとMySQLの負荷が少しだけ下がったのではないかと思います。ただし、アプリが出すクエリのほうがよっぽど重かったと思います。

    また、memcachedではなくファイルに保存するという変更も可能かとおもいます。今回は1台のEC2の上にすべて乗っていますので、memcachedとファイルで差異はあまりでなかったのではないかと思います。

    Q. HTMLにCSSで / を指定したものがありましたが罠ですか?
    A. あれは多分罠ですね。@fujiwaraが「あるあるネタ」として仕込んでいました

    Q. 静的ファイルを返す部分にディレイを入れたらスコアが下がりましたが罠ですか?
    A. チェッカーも静的ファイルを取りにいきますのでディレイを入れたらチェッカーが遅くなるのでスコアが下がるでしょうね。

    Q. gzipをONにするとスコアが下がりましたが罠ですか?
    A. ベンチマークツールとアプリが同じマシンにありますので、ベンチマークツールでgzipを展開してmd5を確認しますのでそのぶんベンチマークツールのスループットは下がるのではないかと思います。

    Q. サインインしたときにDBのlast_accessカラムを更新していましたが、使っているところが見当たりません
    A. HTMLに書き出しているところはありませんので、気付いた人は削除してスコアアップできるサービスポイントです。

    Q. PHPで初期でFAILが出ます
    A. PHPは初期状態で負荷が高すぎてFAILがでてしまいます。これはセッションストアのmemcachedに接続する際に高負荷でタイムアウトとなっていることから発生しているのですが、現在のMemcachedモジュールにはセッションストアに接続する際のタイムアウトを設定できないため、やむをえずこのようになっています。なお、Memcachedモジュールのgithubにはタイムアウトを指定できるものが上がっているのですが、まだ正式リリースされてないため採用できませんでした。

    Q. Perlで謎の空 < h1> がありましたが罠ですか?
    A. Kossyにはもともと$greetingとか$site_nameという変数に文字列を入れる機能が入っていたのですが、それを潰したときに< h1>タグを削除するのを忘れていたようです。罠ではありません。

    ベンチマークツールについて


    Q.なんの言語で作ったんですか? 中身を解析しようとおもったけどバイナリでした
    A. @fujiwaraがGoで実装してネイティブバイナリにコンパイルしています。

    Q. --workloadオプションにより上がる並列数はどのぐらいですか?
    A. (N+1) * (N+1) * 2で並列数を設定していますので、1で8並列、2で18並列、3で32並列、4で50並列、5で72並列、6で98並列…と上がっていきます。あまり並列数を上げても限界がありますので、私の感覚だとworkload=2か3でちょうどいいくらい、環境によっては4でいいスコアがでるかもしれないというところでした。

    基本的にコンテンツを返すのにかかる時間が短くなればなるほど低めのworkloadのほうがよりよくベンチマークが回るといった印象です。

    Q. もしかして○○を○○するチートができませんか?
    A. いくつかチェックが甘い点が見つかっております! それにつきましては解答編でおしらせする予定です…


    その他にもなにかご質問などありましたらTwitterに #isucon タグを付けてつぶやいていただけると解答できるかもしれません。

    参加いただいたみなさん、ありがとうございました! 正式な最終結果は木曜日に発表予定となっておりますので、もうしばらくお待ちください。
    Read more...

    櫛井です。

    昨日今日と開催いたしました ISUCON オンライン予選、ご参加いただいた皆さんありがとうございました!そしてお疲れ様でした。参加総数74チーム、計210名の方々にご参加いただいたオンライン予選の結果を発表いたします。

    本選への出場枠についておさらいです。11月9日にLINE株式会社 渋谷ヒカリエオフィスにて開催される本選出場へ参加する条件は以下となっています。
    ・オンライン予選 TOP20チーム
    ・オンライン予選 学生枠 TOP3チーム
    ・共催枠 2チーム(LINE選抜チーム、カヤック選抜チーム)

    の合計25チームを予定

    では、本日の二日目の結果をふまえたオンライン予選の総合結果をお知らせします。

    ・オンライン予選 日別上位チーム
    一日目上位5チーム
     1位 : 勝浦タンタンメン
     2位 : ぜかまし
     3位 : 山形組
     4位 : The Revenge of Mr. Frank & Co.
     5位 : くらげとみかんと江戸幕府

    二日目上位5チーム
     1位 : 進撃の超大型パティスリー兄弟
     2位 : オシャレ怪盗スワロウテイル
     3位 : チームたこやき
     4位 : チームぽわわ2
     5位 : Third Party Cookies

    ・オンライン予選 学生枠 TOP3チーム
     1位 : 魔王
     2位 : ( (0) / (0)) ☆祝☆
     3位 : 休学って楽しいよね! (まてぃー「僕はちがいます!」)

    上記チームを除いた総合スコア上位10チーム
     1位 : 潰すつもりで来てください
     2位 : 坂パスタ
     3位 : 白金動物園
     4位 : 50ms or die.
     5位 : └('-'└)
     6位 : :ok_woman:
     7位 : Noder
     8位 : 335
     9位 : 緊急ファイナル
     10位 : Miami


    上記23チームと、共催枠の2チームをあわせて25チームが本選へ選出となります。

    ※レギュレーションにおいて以下を定めていますので上記内容ではない結果で本戦出場が確定する場合があります
    ただし、競技終了後に参加者から提出された AMI を元に主催者が実行した環境において、競技時間中に計測された性能値に近い値が再現できないチームは失格とすることがある。



    最終的な本選出場チームの発表は 10月10日(木)を予定しており、発表は当ブログにて行います。


    また、公式ハッシュタグ #isucon にて点数の途中経過をお知らせしていましたが、オンライン予選の総合ランキングを選抜・学生枠を含めて点数付きでTOP10を参考までに掲載いたします。

    1位 33830.4 勝浦タンタンメン
    2位 32486.8 ぜかまし
    3位 32270.7 山形組
    4位 30090.3 進撃の超大型パティスリー兄弟
    5位 29263.2 オシャレ怪盗スワロウテイル
    6位 20599.5 The Revenge of Mr. Frank & Co.
    7位 19412.5 くらげとみかんと江戸幕府
    8位 15682.2 LINE選抜「チーム生ハム原木」
    9位 14379.0 チームたこやき
    10位 13192.1 チームぽわわ2


    以上となります。予選参加者の皆さんには別途アンケートをお送りしますが、まずはお疲れさまでした!本選出場の確定は4日後を予定しておりますが、その間にでも是非ブログなどで ISUCONオンライン予選に参加した感想など書いていただければと思います。


    今後ですが
    ・問題内容の構成とポイント
    ・具体的な高速化方法
    ・オンライン予選 講評
    などを当ブログにて掲載予定です。


    予選の様子はこちらでまとめています
    #isucon オンライン予選 まとめ - Togetter
    Read more...

    櫛井です。

    まず、オンライン予選の参加状況について以下のようになっています。

    ・参加チーム
     予選一日目 36チーム
     予選二日目 38チーム

    ・参加総数
     74チーム
     210名

    うち、2人チームが12、3人チームが62となっています。
    沢山ご参加いただいてありがとうございます。

    一日目の結果の前に、本選への出場枠についておさらいです。11月9日にLINE株式会社 渋谷ヒカリエオフィスにて開催される本選出場へ参加する条件は以下となっています。
    ・オンライン予選 TOP20チーム
    ・オンライン予選 学生枠 TOP3チーム
    ・共催枠 2チーム(LINE選抜チーム、カヤック選抜チーム)
    の合計25チームを予定

    本選出場チームの選出はレギュレーションにあるように以下のルールで決められます。
    競技時間中に計測され、管理サーバに登録された性能値の最大値によって、本選出場チームが選出される。

    ・一般枠
     予選第1日の上位5チーム、予選第2日の上位5チームが本選進出
     それ以外のチームについては、予選両日を通して上位10チームが本選進出
    ・学生枠
     予選両日を通して上位 3チームが本選進出


    というわけで本日、オンライン予選一日目の結果はこちらです。太字は一日目の上位TOP5での勝ち抜け(予定)のチームとなります。

    1位 勝浦タンタンメン
    2位 ぜかまし
    3位 山形組
    4位 The Revenge of Mr. Frank & Co.
    5位 くらげとみかんと江戸幕府

    6位 坂パスタ
    7位 白金動物園
    8位 └('-'└)
    9位 Noder
    10位 335

    ※レギュレーションにおいて以下を定めていますので上記内容ではない結果で本戦出場が確定する場合があります
    ただし、競技終了後に参加者から提出された AMI を元に主催者が実行した環境において、競技時間中に計測された性能値に近い値が再現できないチームは失格とすることがある。



    公式ハッシュタグ #isucon にて途中経過をお知らせしていましたが、一日目の点数を一部紹介しておきます。
    1位 : 33830.4点
    5位 : 19412.5点
    10位 : 9061.7点


    一日目参加の皆さん、お疲れさまでした。明日はオンライン予選二日目です、10時から開始ですので二日目に参加予定の方はお忘れなきよう宜しくお願いします。


    予選の様子はこちらでまとめています
    #isucon オンライン予選 まとめ - Togetter
    Read more...

    ↑このページのトップヘ