ISUCON公式Blog

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

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

ISUCON4 予選 参考解答(Redis版)

ISUCON4 予選お疲れさまでした! 予選問題の Ruby 初期実装などを担当した @sora_h です。

予選はたのしんでいただけましたでしょうか? 本記事では、ざっくりとそこそこのスコアを出す解き方を紹介しようと思います。
※@rosylillyによる、高得点を出すことを重点に置いたピーキーな解答例はこちらです

前提

  • 一人でやる
  • 一応8時間経過時点でスコアをとる
    • ただし出題者であるので問題の把握などの時間は短縮されていることに注意。
  • Ruby の実装を利用する
  • ある程度、現実味のあるチューニングが主
    • ベンチマーカーの実装を利用したりしない

また、この記事で出来た実装は GitHub に掲載しています: https://github.com/sorah/isucon4-qualifier-sorah

初期スコア

とりあえず立ち上げて動かした時のスコアは success:6030 fail:0 score:1303 でした (workload=1)

チューニング

ここからチューニングしていきます。

失敗数のカウンタを Redis にのせかえる (2 時間経過)

問題を読むとログを残す必要は一切ない事がわかるので、とりあえず mysql でログを取るのをとめて、Redis をカウンターとして利用するように変更します。

ただし、MySQL でも適切な index を張ればスコアが出せます。この辺は好みだと思われます。

  • isu4:user:<id>, isu4:ip:<ip> をカウンタとして連続失敗数を記録 (INCR)
  • isu4:last:<id>, isu4:nextlast:<id> を最終ログイン記録に利用

スコアはこの時点で "success:29430 fail:0 score:6357" (workload=1)

これはあまりスコアに影響はなかったのですが、少し後で users テーブルも redis にのせることにより、
完全に mysql をとりのぞいています。

nginx で静的ファイルを配り、app process との接続を UNIX ドメインソケットに

Read more...

ISUCON4 予選問題の解説と講評 & AMIの公開

こんにちは、ISUCON4 運営チームの @mirakui です。 @rosylilly @sora_h とともに ISUCON4 の問題作成と運営を担当しています。

さて、予選に参加していただけたみなさんは楽しんでいただけたでしょうか。今回は、予選問題の振り返りをしたいと思います。

予選問題「いすこん銀行」

今回の予選問題は、「いすこん銀行」という架空の銀行の Web サービスがテーマでした。
01

銀行とはいっても、実は銀行としての機能は一切ないハリボテで、今回用意したのは ログイン機能 のみです。ログインって機能なの? と思うかもしれませんが、実際のウェブサービスを作る上で、ログイン部分の設計は単純では済みません。

それは、近年増加している「パスワードリスト攻撃」のような、不正ログインの対策を行わなければならないからです。

「いすこん銀行」には、ログイン画面と、ログインに成功した時に表示されるマイページの2画面しかありません。
ログイン画面でユーザ名とパスワードを入力し、ログインに成功するとマイページに遷移することができますが、失敗した場合、エラーメッセージを表示してログイン画面に戻ります。

このとき「いすこん銀行」は次のような条件で不正なログインとみなし、それ以降はログイン禁止にします。

  • 一つのユーザIDに対して試みたログインで、連続3回以上パスワードを間違えた場合、それ以降そのユーザIDはログイン不可能になる
  • 同一IPアドレスから試みたログインで、連続で合計10回以上パスワードを間違えた場合、それ以降そのIPアドレスからはログイン不可能になる


  • 今回の予選問題は、とにかくシンプルな問題にすることを意識して設計されました。最初は、銀行アプリケーションなので暗証番号表を用意しようとか、他アカウントへの振込み機能を作ろうとか言っていたのですが、工数の都合シンプルさを重視して、最終的にログイン機能のみを残しました。
    Read more...

    ISUCON4 本選出場者決定のお知らせと本選出場者の利用言語比率

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

    本戦出場者

    予選第1日トップ5枠
    1. 82386 チームフリー素材 [Go]
    2. 65398 鉄球 [Ruby]
    3. 62145 山形組 [Perl]
    4. 60344 lily white [Go]
    5. 45742 ご注文はPHPですか? [Go]

    予選第2日トップ5枠
    1. 67782 fujiwara組 [Perl]
    2. 51045 .dat [Go]
    3. 49199 SHINCHOKU.ZERO [C++]
    4. 46875 椅子子 [Ruby]
    5. 42809 EH-MTI [Ruby]

    総合トップ13枠
    第1日・第2日それぞれのトップ5をのぞいた一般参加チームの中から、上位13チームを選出しました。

    1 . 42638 ナイスカロリー [PHP]
    2 . 41748 Beer Qz's [Ruby]
    3 . 41705 (40618) GoMiami [Go]
    4 . 41640 (39599) 矢澤 [PHP]
    5 . 41266 (42134) マカレラーズ [Perl]
    6 . 40418 (42120) Printemps [PHP]
    7 . 40268 (43298) MEAN普及委員会 [Go]
    8 . 39377 Oops! [PHP]
    9 . 39363 (38855) Mr. Frank & Co: A New Hope [Ruby]
    10 . 38960 (40115) 部長と副部長 [Go]
    11 . 38921 (40079) 50ms or die. [Perl]
    12 . 38802 (30180) PHPに花束を [PHP]
    13 . 37808 Team Ku's [PHP]

    ※予選1日目の参加者のみ、スコアのレギュレーションが異なるため、参考値としてカッコ内に提出時のスコアを併記しています。詳しくは下記をご覧ください。
    ISUCON4 本選出場の一部基準変更についての詳細 : ISUCON公式Blog

    学生枠
    1. 17764 (ρ_-)/超銀杏バスターズ(・ω・ o) [Ruby]
    2. 16544 (86974) BIG丼 [Ruby]
    Read more...

    ↑このページのトップヘ