ISUCON公式Blog

WINNER'S PRIZE \1,000,000



   

こんにちは、櫛井です。

優勝賞金ドドンと100万円! 第三回 ISUCON 開催のお知らせ にてお知らせいたしましたが、今年は本選に学生枠を設けます。

予選に先立ち、学生限定イベントとして「ISUCON 夏期講習」を実施いたします。ご参加いただく皆さんには実際に過去問をチャレンジしていただきながら、第一回・第二回のISUCONにて出題プログラムを作成した弊社エンジニアよりスコアアップのコツを解説いたします。是非ご参加ください。


ISUCONとは

お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルには多くのインフラエンジニアが集います。 11月に本選の開催を予定している第三回目ISUCONでは学生枠を新たに設置し、より多くの皆さんに参加していただこうと考えています。9月に行われる予選に先立ち、学生の皆さんを限定対象とした予習イベントを開催いたします。


イベント内容

  • インフラエンジニアの仕事内容をご紹介
  • ISUCONの説明
  • 過去問題に参加者全員でチャレンジ
     (スコアアップのコツを解説)
といった内容を予定しています。

参加者の方には、あらかじめご自分のPCにISUCONにチャレンジ出来る環境(過去問題をインストールする方法を事前にお知らせいたします)を作っていただき、当日ご持参いただくのを必須とさせていただきます。

イベント終了後、LINE株式会社のスタッフを含め懇親会を開催いたします。是非お越しください。


開催概要

【日程】2013年8月1日(木)
【時間】13:30開場 14:00開始 18:00 終了予定(終わり次第、懇親会を予定)
【場所】LINE株式会社
〒150-8510 東京都渋谷区渋谷2-21-1 渋谷ヒカリエ 27階

【定員】40名
【参加費】懇親会を含め無料
【締切】7月19日(金)18:00まで
【必須の経験・スキル】
  • 基本的なプログラミング経験のある方
    (Perl/Ruby/Python/PHP/Javaのいずれかでのプログラミングが可能であること)
  • RDBMS(MySQL)を使用したプログラミング経験のある方
  • LinuxやMac OSX等のUNIX系OSで基本的な操作が行える方
  • 理系・文系問わずWebエンジニアに興味のある方
  • 学部生・院生共に学年不問
  • LinuxまたはMac OSXのノートPCをご持参ください



申し込み方法

参加希望の方は応募フォームからご応募ください。
「ISUCON」 学生限定イベント参加申し込みフォーム
※人数に限りがございますので、応募者多数の場合は抽選とさせていただきます


ご応募、お待ちしております。
Read more...

こんにちは、櫛井です。
過去、二度に渡って開催いたしました ISUCON が再び開催です!

isuconlogo_2


ISUCONとは

お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルです。

というやつです!
今回もLINE株式会社にてイベントの企画・運営・会場・賞金提供などを行いますが、株式会社データホテルには今回もサーバ提供を、過去二度のディフェンディングチャンピオン「面白法人カヤック」の皆さんにはアプリ提供をご協力いただく事となりました。というわけで、今回はLINE株式会社、株式会社データホテル、面白法人カヤックの三社共催という形となります。

過去二回の様子はこちらをご覧ください
第二回 2012年11月03日(土)開催
livedoor Techブログ : #isucon2 リアルタイムフォトレポート 更新終了
第一回 2011年8月27日(土) 開催
livedoor Techブログ : 写真と動画で振り返る #isucon オフィシャルレポート

そして、前回の優勝賞金30万円も「相当すごいぜ」という盛り上がりでしたが、なんとなんと今回の優勝賞金は、大台ドーン!100万円です!がんばりました!皆様、ふるってご参加ください。



開催概要

今年も2〜3名1チームでの参加制としますが、より多くの方にISUCONへご参加いただきたいので予選を設定させていただきます。9月にオンライン上での予選、11月に LINE株式会社 渋谷ヒカリエにて本選実施という予定です。

本選への出場枠ですが、
・オンライン予選 TOP20チーム
・学生枠 3チーム
・共催枠 2チーム(LINE選抜チーム、カヤック選抜チーム)
の合計25チームを予定しています。

学生枠はチームメンバーが全員学生であること(休学中でもOK)を条件とさせていただきますが、オンライン予選にはご参加いただく必要がありますのでご注意ください。

本選会場は第二回会場となったLINE株式会社ヒカリエオフィスのカフェとなります。前回は少し狭かったので同フロアの別会場も提供予定です。なお、本選参加は当日渋谷ヒカリエにお越しいただける方のみとします。オンラインでの参加は不可とします。

また、予選と本選でチームメンバーの交代は出来ません。予選を3名で参加、本選を2名で参加するといった形はOKです。


よくありそうな質問

順次追加しますので、質問などは Twitter @941 までお願いします。DMでのやりとりがよければフォローいたしますのでMentionを飛ばしてください。

Q.予選は渋谷まで行く必要ありますか?
A.オンライン上で完結しますのでお越しいただく必要はありません

Q.1社あたり何チームまでとか制限ありますか?
A.ありません

Q.前回のチャンピオンと対決したいのですが
A.今回は出題側なので残念ながら参加されません

Q.予選はどんな問題ですか?本選はどんな問題ですか?
A.予選については随時お知らせします。過去問はこちらをどうぞ。
 livedoor Techブログ : 自家製 #isucon2 のつくりかた
 livedoor Techブログ : 自家製 #isucon のつくりかた
 本選の問題は当日まで秘密です。


予選の告知は改めて行いますので、参加しようかと思っている方はチームメンバー予定の方にお声がけし準備をしておいてください!
Read more...

2012/11/06 15:05にTech Blogにて公開された過去エントリです。
livedoor Techブログ : 自家製 #isucon2 のつくりかた

--
こんにちは、tagomorisです。ISUCON2 というイベントで主にレギュレーションを考えたりベンチマークツールを作ったりしていました。普段はNHN Japan ウェブサービス本部というところで働いています。
先日ISUCON2は幸いにも大好評のうちに終了しましたが、このお題および関係する話題をぜひ多くの人にも知っていただきたい! というかこのまま捨てるとかちょっともったいない! ということもあり、作業対象のアプリケーションコード、およびベンチマークツール一式を公開しています。
このエントリでは、これを用いて一式を動作させ、ご家庭でもISUCON2を再現できるよう、いくつかの手順をご説明していきます。ぜひみなさんも楽しいISUCON2ライフを満喫してください。


ざいりょう


今回は初期データはすべてWebアプリケーションのコードから投入されるため、このソースコード一式があればすべて本番時と同じように動作します。

ベンチマーク設定が本番時と同じ設定になっているため、たとえばノートPC1台ですべて動作させようと思うとかなり重いでしょう。その場合にはベンチマーク設定を変更します(後述)。

したごしらえ

ISUCON2環境を作成するPCですが、以下のものが動作する環境が必要です。カッコ内のバージョンはISUCON2本番環境で選択したものです。
  • ベンチマークツール
    • Node.js 0.8.x (0.8.12)

    • MySQL 5.x (5.5)

    • http_load

  • 対象アプリケーション(言語についてはどれかひとつ)
    • MySQL 5.x (5.5)

    • Perl 5.x (5.16.1)

    • Ruby 1.9.x (1.9.3)

    • Python 2.7 (2.7.3)

    • Node.js 0.8.x (0.8.12)

    • PHP 5.3- (5.3)

    • Java 6

各言語のインストールについては perlbrew, rbenv (or rvm), nodebrew (or nvm) などを用いるのが便利だと思います。手元で既にインストールされている場合はそれを使ってください。Perlについては System Perl が 5.8 の場合は、perlbrewを使って新しいものを入れることをお薦めします。
またリバースプロキシを用意する場合、ISUCON2では Apache 2.2 がデフォルトで用意されていましたので、それにあわせて用意してください。
お手元で試すぶんにはOSを縛らなくて良いと思います(ISUCON2ではCentOS 5.8でした)が、http_load を動作させる必要がありますので Linux や Mac OSX などがよいでしょう。Mac OSXの場合にはXcodeのインストールが必要です。
MySQLはそれぞれインストールを行ってください。Linuxの場合はおそらくディストリビューション側でパッケージが提供されているでしょうから、それを使ってもよいでしょう。Oracleのダウンロードサイトで提供されているものを使ってもよいと思います。

ISUCON2本番時のデフォルト設定がリポジトリ中の webapp/config/database/my.cnf にあります。ISUCON2本番時のサーバスペックに近い環境で試す場合にはこれを使ってもよいかもしれません。PC1台だけで試すならパッケージのデフォルト設定などでもとりあえず良いでしょう。


つくりかた

なにはともあれ、ソースコードを取得します。適当なディレクトリを選んで git clone しましょう。isucon2ディレクトリの中に展開されます。
$ git clone git://github.com/tagomoris/isucon2.git
$ cd isucon2

Webアプリケーションを動作させるため、まずMySQLでスキーマの設定を行います。
$ mysql -u root < webapp/config/database/isucon2.sql

Perlでアプリケーションを動作させるには以下のようにします。cpanmコマンドで多少時間がかかります。
$ cd webapp/perl
$ ./cpanm -n -Lextlib --installdeps .
$ perl -Mlib=extlib/lib/perl5 extlib/bin/plackup -s Starman -E production --preload-app app.psgi

これを起動した時点で http://localhost:5000/ にブラウザからアクセスし、以下のような画面が出ればアプリケーションの準備はもう完了です。

isucon2howto_1_app_init


http://localhost:5000/admin にアクセスすると「データ初期化」というボタンがあります。これを押してから再度 http://localhost:5000/ に戻るといくつかチケットが買える状態になっていますので、試してみましょう。エラーもなくチケット購入が完了し、購入した番号のシートが横の購入履歴などに反映されていればOKです。
他の言語でもほぼ似たような手順でアプリケーションが起動可能です。言語ごとのディレクトリに README があるのでそちらを確認してみてください。特に難しいところは無いと思います。
リバースプロキシを設定する場合にはApacheで mod_proxy (やmod_proxy_balancer)を使用する設定を記述します。これは簡単に試すなら行わなくてもよいでしょう。

今回は詳細を割愛しますが、前回のISUCON環境のつくりかた などにも説明がありますので、実施する場合は参考にしてください。
ベンチマークの準備としては http_load のビルドが必要です。パッチをあてたものが tools/http_load_isucon2 にありますので、これを用います。
$ cd tools/http_load_isucon2
$ make

またベンチマークツールに必要なモジュールのインストールを行います。
$ cd tools
$ npm install

これで簡単なベンチマークが動作します。開発時に手元で試すためのコマンドを用意してありますから、それを使うのがよいでしょう。以下のコマンドで localhost:5000 に対して簡単なベンチマーク(本番ISUCON2の縮小版的なもの)が走ります。
$ cd tools
$ ./test.sh 127.0.0.1 5000

完了したら標準出力にJSONで結果情報が出力されてきます。"err" に何も出てなければ基本的には通っていると思ってよいですが、"error" や "timeout" (HTTPステータスがエラーのレスポンス、もしくはレスポンスがタイムアウトした数)が多過ぎる場合はダメかもしれません。

だいたい以下のような結果になると思います。(これは自分の MacBook Air 上で実行したものです。見易いように整形しました。また"buyer"は複数表示されるはずですが、省略しています。)
{ "name": "starter",
"err": null,
"result": { "result": "success" }
}
{ "name": "checker",
"err": null,
"result": {
"get": { "success": 9, "timeout": 0, "error": {} },
"buy": { "success": 1, "soldout": 0, "timeout": 0, "error": {} },
"first_soldout": null
}
}
{ "name": "httpload",
"result": { "status": { "200": 255 },
"fetches": 255
}
}
{ "name": "buyer",
"err": null,
"result": {
"get": { "success": 30, "timeout": 0, "error": {} },
"buy": { "success": 10, "soldout": 0, "timeout": 0, "error": {} },
"first_soldout": null
}
}

ここでの "buyer" および "checker" の "buy" の "success" 数を合計したものが時間内に売れたチケットの数ですね。基本的にはISUCON2ではこれを競うことになります。これが8192に達した場合には "first_soldout" に表示される数値(の最も小さいもの)が完売所要時間のため、これを小さくするのが目標です。


もりつけ

さてこれだとスコアがわかりませんし、結果の把握や管理もちょっと大変です。なのでベンチマーク管理用のツールを起動しましょう。
ベンチマークツールは tools にある manager.js および agent.js を使用します。これらの設定ファイルはそれぞれ config.json と agent.json ですが、デフォルトでは localhost:5001 と localhost:5002 でそれぞれ起動するようになっているので、1台だけで試す場合にはこのまま使うのがよいでしょう。
まず manager が参照する結果保存用のデータベースおよびテーブルをMySQLに作成し、それからmanagerを起動します。
$ mysql -u root < sql/isumaster.sql
$ node manager.js

起動後、ブラウザで http://localhost:5001/ を見ると次のような画面が見られるはずです。

isucon2howto_2_manager_init

これがISUCON2でも使われた管理画面ですが、このままだとエージェントが起動していないためベンチマークが実行できません。エージェントを以下のコマンドで起動します。
$ node agent.js

そうすると数秒で管理画面が以下のように変わるでしょう(右下に注目!)。こうなるとベンチマークを実際に走らせるエージェントが準備できていますので、あとは実行するのみです。

isucon2howto_3_manager_agents

なおベンチマーク実行前に管理画面でログインが必要です。config.json の "users" にログイン用のユーザ名とパスワードリストがありますので "manager" ユーザを使うとよいでしょう。デフォルト設定では "local" チームを選択すれば localhost:5000 に対してベンチマークが走るので、先程立ち上げたアプリケーションのスコアが確認できます。

isucon2howto_4_result

やってみたらFAILEDになりました……。高い並列数に対応できず、接続に失敗したHTTPリクエストが多数あったようですね。原因がわかれば、あとは改善あるのみ!


かくしあじ

なお上述の各プロセスは普通に起動すると端末をブロックしますから、本格的に時間をかけてとりくむなら supervisord などを使用して常時バックグラウンド起動する環境を作ると良いでしょう。
マシンを複数台使える場合にはアプリケーション起動用とベンチマーク実行用に分けるといいと思います。分散構成をとるには以下のようにします。
  • アプリケーション側
    • リバースプロキシサーバ(1台)、アプリケーションサーバ(1台もしくは複数台)、データベースサーバ(1台)

    • アプリケーションに対する接続先データベースの指定は webapp/config/common.${env}.json で行われているので、これを変更しましょう

  • ベンチマーク側
    • manager(1台、MySQLもここに)、agent (1台もしくは複数台)

    • agent.json にmanagerのIPアドレスおよびポートを指定して起動します

またPC1台のみ、あるいは比較的非力なサーバマシンのみで実行する場合、ISUCON2本番のベンチマーク設定ではちょっと負荷が高過ぎるかもしれません。ベンチマークツールからの接続エラーなどがどうしても頻発する場合、 manager.js の先頭にベンチマークの各部分における並列数・起動プロセス数が書いてありますから、これを減らして manager を再起動してみましょう。

できあがり

これで環境は完成です。思う存分にあなたのISUCON2をお楽しみください! 高得点をゲットできたらblogなどに書いていただけると我々もとても嬉しいです。
NHN JapanではISUCON2と楽しく激しく格闘できるエンジニアを募集しています!
Read more...

↑このページのトップヘ