JOI 2009-2010 予選システム障害についての報告

2010年12月18日
特定非営利活動法人情報オリンピック日本委員会
理事長  守屋 悦朗

第9回日本情報オリンピック予選参加者および第10回日本情報オリンピック予選参加者の皆様

2009年12月13日に実施した第9回日本情報オリンピック予選は予選実施システムに障害が発生し,参加者の皆さまにご迷惑をおかけして,大変申し訳ありませんでした. 原因とその対策をご報告いたします. なお,ご報告が遅くなりましたことをお詫び申し上げます.

障害
・障害1
競技開始直後に多くの参加者がログインできないか, ログインしても正常に問題を表示できなかった. 14時40分頃まで, 一部の参加者は通常通り競技できたものの, 大多数の参加者はログインできないか, ログインしても正常に問題を表示できない状況が継続した.
・障害2
予選競技実施システムの挙動が安定した14時40分以降に, 一部の参加者の一部の解答がアップロードできないという現象が発生した.
経緯
  1. http サーバの秒間処理リクエスト数の上限を 200 としていたが, 競技開始直後のリクエスト数は 200 を大きく上回り, 時間が経過しても待機に回った処理数が減らなかった. そのため, 多くの参加者がログインできないか, ログインしても正常に問題ページを表示できなかった.
  2. Web サーバは正 Web サーバと副 Web サーバの2台構成であり, 正 Web サーバに障害が発生した際に副 Web サーバに切り替わるという運用であった. 競技開始直後に正サーバが前項1のような状況になったため, ロードバランサが正 Web サーバに障害が発生したと判断し, 制御を副 Web サーバに切り替えた. しかし, ロードバランサは, いったん副 Web サーバに切り替えた後でも, 正 Web サーバが復旧をすれば正 Web サーバに割り振るという設定だったため, (正 Web サーバが過負荷で反応しなくなる) ⇒ (副 Web サーバに切り替わる) ⇒ (正 Web サーバが反応する) ⇒ (正 Web サーバに切り替わる) が繰り返された.
  3. 下記2つの対応を実施.
    • 正 Web サーバを停止
    • 副 Web サーバの http サーバの秒間リクエスト処理数上限を 1000 に設定し直す
    これらの対応が完了したのは14時40分頃であった. これらの対応後はほぼ正常に稼働した(障害2は除く). ただし, 14時30分頃にメールで問題を配布しており, このためにアクセス数が減少したと推察される. そのため, 秒間リクエスト数の上限の変更がどの程度効果があったかは不明.
  4. 正 Web サーバと副 Web サーバの内容が同期されていなかったことが原因で, 14時40分以降に, 一部の参加者が一部の解答をアップロードをできないという現象が発生した. 正 Web サーバと副 Web サーバの同期をとり, その後は正常に稼動した.
原因
・障害1
JOI2009/2010予選競技のトップページには, 6つの問題に対する解答提出状況一欄が含まれている. また, 各問題のページには, その問題に対する解答提出状況一欄が含まれている. これらのページへのリクエストに応答するには, 提出状況をデータベースに問い合せる必要があり, 提出状況が含まれていないページと比較して処理に時間がかかる. 負荷テストでは, 予選競技のトップページの秒間処理リクエスト数は最大で 214.4 であったため, http サーバの秒間処理リクエスト数の上限を 200 にしたが, 実際にはそれを大きく上回るリクエストがあり, 時間が経過しても待機に回った処理数が減らなかった.
・障害2
JOI2009/2010予選競技実施システムは, ロードバランサが正 Web サーバから副 Web サーバに切り替えることがあっても, 副 Web サーバから正 Web サーバに切り替えることがないことを前提に, 正 Web サーバから副 Web サーバへの同期のみをとり, 副 Web サーバから正 Web サーバへの同期はとらないという設計であった. しかし, ロードバランサは, いったん副 Web サーバに切り替えた後でも, 正 Web サーバが反応すれば正 Web サーバに割り振るという設定であった. そのため,14時40分に副 Web サーバだけで運用を再開した時点で, 正副間で一部のデータの同期がとれていなかった. 開発・運用業者がデータセンターに適切に指示していたにもかかわらずデータセンターが設定を誤ったのか, もともとの指示が不適切だったのかは判明していない.
対策
  1. JOI2009/2010予選では, 競技開始後に MyPage を再読込みすれば MyPage に予選競技へのリンクが表示された. JOI2010/2011予選では, 競技開始前より MyPage に予選競技へのリンクおよびボタンを表示することにより, 競技開始時の MyPage の再読込みする必要をなくした. 競技開始前に予選競技ページに移動しようとすると, 「予選競技待機ページ」に移動する.
  2. JOI2010/2011予選では競技開始後15分間は,
    • 予選競技のトップページに解答状況一欄を含めない
    • 予選競技トップページから移動する各問題ページには, その問題の解答提出機能および解答状況一欄を含めない
    • 解答を提出する場合は, 解答提出機能および解答状況一欄を含まない問題ページから, 解答提出機能および解答状況一欄を含む問題ページに移動する
    • 予選競技のトップページより問題および入力データを一括ダウンロードできるようにした
    とした.
  3. JOI2009/2010予選では, 正 Web サーバ・副 Web サーバ・データベースサーバの3台構成で, 副 Web サーバは正 Web サーバのバックアップであった. JOI2010/2011予選では, Web サーバ 1・Web サーバ 2・Web サーバ 3・データベースサーバの4台構成で, Web サーバ 1 と Web サーバ 2 で機能分担を行い, Web サーバ 3 は Web サーバ 1 および Web サーバ 2 のバックアップとする.
  4. 各サーバの CPU コア数とメモリ容量を, JOI2009/2010予選の1コア1GBに対して, JOI2010/2011予選では4コア4GBとした.
  5. JOI2010/2011予選では, Web サーバへの処理の割り当てを, データセンターのローダバランサを用いず, 開発・運用会社が持ち込む機器で行うこととした. また, ここでは詳細は記述しないが, 実現方法も変更をしている.