ISUCON公式Blog

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

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

ローカル環境でISUCON9予選の問題を動かす

ローカル環境でISUCON9予選のアプリケーションとベンチマーカーはGoとMySQLとDockerがあれば、Macなどローカル環境で動かすことができます。

ソースコードの取得

まず、ソースコード一式をもってきます
$ go get -d github.com/isucon/isucon9-qualify
$ cd $GOPATH/src/github.com/isucon/isucon9-qualify


初期データの作成

ベンチマーカー、アプリケーション両方が使う初期データの生成をします。
$ cd initial-data
$ make

makeを実行するとDocker コンテナの中で初期データの作成を行い、
initial-data/result
に結果が出力され、
webapp/sql
以下へのコピーも行われます。
パスワードの生成があるため、時間がかかります。

画像データの展開

初期データの画像とベンチマーカーが使う画像をダウンロードする必要があります。
ファイルは github releaseからダウンロードできます。1.5GB程度のファイルが2つとなりますので、回線状況のよいところでのダウンロードをおすすめします。

https://github.com/isucon/isucon9-qualify/releases

初期画像データダウンロード
$ cd webapp/public
GitHub releases から initial.zip をダウンロード
$ unzip initial.zip
$ rm -rf upload
$ mv v3_initial_data upload

ベンチマーク用画像データダウンロード
$ cd initial-data
GitHub releases から bench1.zip をダウンロード
$ unzip bench1.zip
$ rm -rf images
$ mv v3_bench1 images


データベースの作成と初期化

isucariデータベースとユーザの作成をします。
$ cd webapp/sql
$ cat 00_create_database.sql | mysql 

mysqlのポート、ユーザとパスワードは環境に合わせて指定してください。
初期化はinit.shを実行します。
$ cd webapp/sql
$ ./init.sh

環境変数によってMySQLのホストやポート番号を変更できます。詳しくはinit.shの中をご覧ください。
Read more...

ISUCON9 レギュレーション違反の対応について [追記あり]

9/12 22:00 自己申請による失格について再度検討を行った結果を追記しました
9/12 18:00 平文での格納について一部表現を変更しました
9/11 21:38 本選出場の取り消し無効にする対応を追記しました
9/11 17:30 bcrypt についての一部表現を訂正しました
9/11 17:09 経緯についての追記を行いました

ISUCON9 予選においてレギュレーション違反があり、本選出場者の繰り上がり対応を行いました。

経緯としては、マニュアルの制約事項にあった「パスワードを平文で保存すること禁止する」が該当しました。パスワードの保存の規定については、ISUCONの競技の性質上すべてをチェックすることは難しく、参加者の申告に基づき判断をしております。そのため、競技終了後すぐに判断することは出来ずこのタイミングとなりました。

[9/11 17:30 追記]
運営の対応についていくつかのポイントで説明責任があると考え、追記いたします。

◾️ 問題作成の経緯について
課題アプリケーションのパスワード保存にbcryptを採用した経緯ですが、参考実装を提供する各言語で実装があり、saltの付与やストレッチングが可能であり安全なアルゴリズムとして広く利用されていると判断し、採用しました。

ベンチマークの試行中において、キャンペーン機能による大量の購入リクエストを行うため、ログインが多く発生するようになっています。その結果として課題アプリケーションに問題作成者自ら取り組んだところでも、bcryptによるCPU使用率が目立つことは認識しておりました。

bcryptによる負荷の対処方法として、サーバを追加、軽量なハッシュ関数での代替、あるいは平文での保持を開発チームにおいて想定しましたが、現実の問題として、パスワードなどの情報流出などの事件が発生しており、安全性の高くないアルゴリズムの利用、平文での格納は一般的に推奨されない実装方法だという認識を同時に持ちました。
※9/12 18:00 一部表現を変更しました

ISUCONの課題アプリケーションとして、bcrypt の負荷を解決し高いスコアを出す方法がサーバの追加の一つだけであることは避けたく、bcryptの変更禁止ではなく軽量なハッシュ関数での代替を可能とする、「平文での格納を認めない」という文言をマニュアルに追加しました。例え、bcryptの維持であってもそれを検証することは難しく、参加者からの申告をもって失格の判定を行えば十分であろうと想定しておりました。
Read more...

ISUCON9 予選問題の解説と講評

予選の問題作成を担当したメルカリのkazeburoです。

ISUCON9の予選に参加していただいた皆さま、ありがとうございました。
お楽しみいただけましたでしょうか。

また、主催の941さんをはじめとするLINEの皆様、ポータルの作成と運用をやっていただいたさくらインターネットの皆様、問題作成と事前回答に協力にいただいた皆さま、サーバ環境を提供していただいたアリババクラウドの皆さま、本当にありがとうございました。

問題の公開

今回の予選問題のソースコード、データ、およびプロビジョニングに使用した設定ファイルなどは以下のリポジトリで公開しております。アプリケーション、ベンチマーカーを起動する手順もありますので、手元で挑戦することもできるかと思います。

https://github.com/isucon/isucon9-qualify

蛇足ですが、本リポジトリのコミット数は1,700以上、PRも400件以上あり、これまでのisuconのコードの中でも規模の大きなものとなっています。

課題アプリケーション

今回課題となったアプリケーションは、椅子を売りたい人/買いたい人をつなげるフリマアプリ「ISUCARI」です。
a1

参加者より「弊社の椅子が勝手に売られている!」などの声も上がった商品画像は、941さんより提供していただきました。

新着商品タイムライン、カテゴリ・ユーザごと商品一覧、取引をしている商品一覧や商品詳細といったページがあり、購入や売れた商品の配送に関わる機能もあります。ソースコード中の webapp/docs/APPLICATION_SPEC.md にアプリケーションの使い方を簡単にまとめてあります。予選に参加したけど見ていない方、これから問題にチャレンジする方も参考にしてもらえると良いかと思います。

アプリケーションの参考実装のソースコードとは別に、2つの外部サービスである「決済サービスAPI」「配送サービスAPI」があり、購入や配送の際にアプリケーションからこれらのAPIと通信を行います。
Read more...

ISUCON9 オンライン予選 関連エントリまとめ

・10/3 18:00 更新終了

オンライン予選にご参加いただいた皆さん、ありがとうございました!
こちらでは感想エントリや何をしたかに言及されたエントリをまとめていきます。見つけた順ですが後で何かしらのルールで並び替えます。もしここに載っていないものがある場合は ISUCON9 オンライン予選のブログ書いたよ!フォームで教えていただけると助かります。重複はこちらでチェックしますのでドシドシお願いします。

ブログを書くまでがISUCON予選です!

予選のTweetはこちらでまとめています
▼ISUCON9 オンライン予選 Tweet まとめ #isucon - Togetter

運営
・ISUCON9予選の出題と外部サービス・ベンチマーカーについて - catatsuy - Medium
・mercari.goで「ISUCONのベンチマーカーとGo」というタイトルの発表をしました - catatsuy - Medium
・ISUCON9予選でフロントエンド周りの実装を担当した話 - はらへり日記
Read more...

ISUCON9 本選問題の事前回答をお手伝いいただける方を募集!

9/13 20:30 追記:無事にお手伝いいただける方が集まりました。ご協力いただきありがとうございました。

---
惜しくもISUCON9で予選敗退された皆様へお知らせです。9月25日(水)の午後12時から19時くらいで、オンラインにてご参加いただきます。午後にオンラインで「ISUCON9 本選の事前テスト回答」を開催し、協力を募る予定でおります。当日は本選問題の難易度やボリュームの確認も行いたいので、該当時間中は集中して回答をお願いいたします。

ご参加いただけそうな場合、以下をご確認いただき全て問題なければ応募フォームからお申し込みください。なお、謝礼は出ない予定ですが本選当日に運営が見るポータルサイト閲覧権限を付与する予定です。
  • 過去にISUCONに参加した方に限定します
  • 事前回答時の参考実装はGoを予定しています
  • 2人または3人チームで参加してください
  • ISUCON9 オンライン予選時と違うメンバー構成でもOKです
  • 3組程度の募集とします
  • 応募が多数となった場合は過去のISUCON参加時の成績を参考に、運営側で選考させていただく予定です
  • 9月25日(水)の午後12時から19時まで他の予定が入らないようご調整ください
  • 本選当日、会場にお越しいただけません


  • 応募締切は 9月13日(金) 20:00まで。お手伝いいただくか否かは締切後すぐにご連絡いたします。宜しくお願いします!

    応募はこちらからお願いいたします。
    ▼ISUCON9 本選問題 事前回答協力フォーム

    ↑このページのトップヘ