ISUCON公式Blog

ISUCONとはさくらインターネット株式会社が運営窓口となって開催している、お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトルです

ISUCONの過去問に
チャレンジするための
シンプルな環境構築
商標「ISUCON」利用の
ガイドラインはこちら

ISUCON4 本選の参考実装言語について

本選では以下の5言語で参考実装を用意します。

  • Ruby
  • PHP
  • Perl
  • Python
  • Go

  • 予選ではこれらに加えて Node.js がありましたが、本選出場チームに Node.js を利用していたチームがいなかったことと、運営チームのスケジュールの都合上 Node.js 版の用意が難しいという事情があり、やむなく Node.js を外すことになりました。

    Node.js を外したのは本選の問題の特性によるものではなく、単純に運営チームの技術スキルとスケジュールの都合です。

    なお、Python 版についても同様に本選出場チームの利用者はありませんでしたが、こちらは用意いたします。

    申し訳ありませんが、ご理解の程よろしくお願いいたします。

    ISUCON4 本選は優勝賞金にプラスして副賞をご用意いただきました

    櫛井です。
    いよいよ本選まで2週間ほどですが、予選を勝ち抜いた皆さん心と体の準備はいかがでしょうか。

    さて、何度かお知らせしておりますが今回の ISUCON4 はISUCON4 なんと今年は5位まで賞金が出ることになりました!2位でも30万! : ISUCON公式Blogとなっていますが、ご協賛いただいている株式会社データホテル様(11月1日よりテコラス株式会社に商号変更)より、今年も副賞をご用意いただきました!

    というわけでこちらです!
    pc3_l
    ▼AR.Drone 2.0. Parrotの最新wi-fi クアドリコプター - AR.Drone.com - HDカメラ - Parrot

    で、でたー!ドローン!すごい!
    内蔵の720p HDカメラで高画質な映像をスマートフォンに直接ストリーミング&録画。AR.Droneの2.0とGPSフライトレコーダーのWi-Fi接続により50メートルまで上昇可能。
    ※優勝チームの人数分を進呈します


    いやはや、昨年はロボダンボーでしたが今年もすごいですね…。「もらって終わりではなく、プログラミングを含めた組み立てが出来るものを提供したいので」というデータホテルさん(11月からテコラスさん)の熱い思いをひしひしと感じました。


    というわけで本選出場の皆さん、当日は万全の体調でお越しください。渋谷ヒカリエ会場にてお待ちしております。(当日の流れなどは改めて代表者へメールしておきます)

    ISUCON4 予選 参考解答(オンメモリ版)

    参加者の皆さん、 ISUCON4 予選、お疲れ様でした。
    ISUCON4 運営チームの @rosylilly です。
    すでに予選問題の解説記事もあがっていますが、この記事では、ベンチマーカー実装者が予選参加者となるべく同じ状況で、出来る限り高得点を出すことを重点に置いたピーキーな解答例について解説します。
    ※ 別解となる、この記事ほどピーキーではない @sorah による解答記事はこちらです。

    また、実装されたソースコードは GitHub にて公開しています。

    前提

    1. 実装時間は皆さんとおなじ8時間程度を想定しています
    2. この実装はすべて僕一人で行います
      • 架空の想定として、運営チーム(@mirakui, @sorah, @rosylilly)で予選に参加している状況としています
      • @mirakui と @sorah がまったく別の実装を行っている設定です(去年の予選と同じ状況)
    3. 僕は出題者であり、ベンチマーカー実装者
      • 問題を把握する時間などはほぼスキップできる
      • すでにどういう解法にするかある程度検討がついている

    手始めに(2分)

    僕の手元で EC2 インスタンスを立ち上げて真っ先にやることは

    1. sudo service nginx stop
    2. sudo service mysqld stop
    3. sudo chkconfig nginx off
    4. sudo chkconfig mysqld off

    で Nginx と MySQL を停止させます。

    Nginx 及び MySQL を停止させるのは、この2つに一切依存しない実装をする、と最初から決めているためです。この2つはおそらく並行作業中の @mirakui と @sorah が触っているはずなので、僕の時間内にうまくいくかどうかわからないギャンブル実装に合わせていれた変更による手戻りや、設定のコンフリクトなど、想定されうる諸問題を最初から発生させないように、僕の実装からは完全に除外するためにサービスの停止を行います。

    実装方針

    まずは、実装方針を固めます。実装方針はおおまかに3点。以下のように定めました。

    1. 他のミドルウェアに依存しない
      • Redis であれ、 Memcached であれ、2人が使っていそうなので依存しません
      • これはベンチマーク対象をスイッチした時に事故を起こさないための措置です
        • 最終的な AMI 作成時に事故を起こすと失格になってしまいかねません
    2. Go 言語で実装するが、参考実装のフォークは行わず、フルスクラッチで書く
      • Martini が入っていて便利そうなのはいいのですが、最終的にどこがボトルネックになるのかわからない以上、型による制約が多く、人の手の入った状況から書き換え難い Go ではベース実装が足かせになると踏んでの判断です
    Read more...

    ↑このページのトップヘ