応用情報技術者 2024年 秋期 午前2 問12
問題文
Webアプリケーションサーバの信頼性に関する記述のうち、適切なものはどれか。
選択肢
ア:コールドスタンバイ構成で稼働しているサーバに障害が発生した場合、サービスは中断しないが、トランザクションは継続できない。
イ:コールドスタンバイ構成で稼働しているサーバに障害が発生した場合、サービスは中断するが、トランザクションは継続できる。
ウ:セッションを共有しないクラスタ構成で1台のサーバに障害が発生した場合、サービスは継続できないが、トランザクションは継続できる。
エ:セッションを共有するクラスタ構成で1台のサーバに障害が発生した場合、サービス及びトランザクションは継続できる。(正解)
🔒 解説は解答すると表示されます
セッション共有と冗長構成【午前2解説】
正解の理由
この問題で正しいのは、クラスタでセッションを共有しておけば、サーバ障害時に別ノードへ引き継いで処理を継続できる、という点を述べた選択肢、すなわち エ です。説明の前提として、ここで問題が指している「トランザクション」は、Webアプリケーション上でユーザの一連の操作や状態(セッション)に紐づく処理の継続性を意味することを明確にします(※データベースのACID的なトランザクションとは文脈が異なります)。
セッション共有が行われているクラスタ構成(例:セッションレプリケーション、共有セッションストア)は、あるノードが落ちても別ノードが同じセッション状態を参照/復元できるため、サービス(ユーザから見た継続性)およびセッションに依存する処理(ここでのトランザクション)を継続できます。
セッション共有が行われているクラスタ構成(例:セッションレプリケーション、共有セッションストア)は、あるノードが落ちても別ノードが同じセッション状態を参照/復元できるため、サービス(ユーザから見た継続性)およびセッションに依存する処理(ここでのトランザクション)を継続できます。
解法ステップ
- 「コールドスタンバイ」「クラスタ」「セッション共有」がそれぞれ何を意味するかを整理する。
- コールドスタンバイ:待機機は稼働していない/サービス供給しておらず、障害時に起動して切り替える方式(切替に時間がかかる)。
- クラスタ:複数ノードで負荷分散/冗長化する構成。
- セッション共有:ノード間でセッション状態を共有(レプリケーションまたは共有ストア)。
- 問の「トランザクション」がどの文脈の意味かを確認する(ここではセッションに紐づく処理)。DBトランザクション等とは区別する。
- 各選択肢を、上の定義に照らして検証する。
- コールドスタンバイは通常サービス中断が発生するため「サービスは中断しない」は誤り。
- セッションを共有しないクラスタでは、障害ノードのセッション情報が失われればそのセッションの継続はできない。
- セッション共有クラスタは、ノード障害時にセッション状態を復元できるため、サービスとセッション依存処理の継続が可能である。
選択肢別の誤答解説
-
ア: 「サービスは中断しないが、トランザクションは継続できない」
誤り。コールドスタンバイは待機機が稼働しておらず、障害発生時にサービスは一時的に中断するのが一般的。よって「サービスは中断しない」は成立しない。 -
イ: 「サービスは中断するが、トランザクションは継続できる」
誤り。サービスが中断している間は、ユーザから見た処理(セッションに紐づくトランザクション含む)は継続不能。コールドスタンバイではサービス中断が起き、継続できるとは言えない。 -
ウ: 「セッションを共有しないクラスタで1台障害なら、サービスは継続できないがトランザクションは継続できる」
誤り。セッション非共有のクラスタでは、障害で当該セッションの状態が失われればそのセッションの処理は継続できない。一方、クラスタ全体としては他ノードが稼働してサービスを提供し続ける(=全体の可用性は保たれる)場合があるが、設問は「1台のサーバに障害が発生した場合」の影響について述べており、「そのセッションに対する継続性」は失われるため、選択肢の主張は正しくない。 -
エ: 「セッションを共有するクラスタで1台障害ならサービス及びトランザクションは継続できる」
正解。セッション共有(セッションレプリケーションや共有ストア)により、別ノードが同じセッション状態を利用して処理を引き継げるため、ユーザ視点でのサービス継続とセッションに依存する処理の継続が可能となる。したがって エ が正しい。
よくある誤解
- 「トランザクション=常にDBのACID的な意味でのトランザクションだ」と捉える誤解。今回の設問文脈では「セッションに紐づく一連の処理の継続」を指すことが多く、文脈を切り分ける必要があります。
- 「セッション共有があれば無条件にロスなしで継続できる」と考える誤解。実装(レプリケーションの頻度、同期/非同期の方式、同期遅延)次第では一部のインメモリな一時状態や進行中の処理が失われることがあります。
- 「コールドスタンバイはリアルタイムで切替できる」との誤解。コールドは起動や同期に時間がかかるため、即時切替は期待できません。ホットスタンバイやアクティブ-アクティブ構成とは異なります。
補足コラム
- セッション共有の手法の例
- セッションレプリケーション:ノード間でメモリ上のセッションを複製(ネットワーク負荷、同期遅延に注意)。
- 共有セッションストア:RedisやMemcachedなどの外部ストレージにセッションを保存(スケーラブルで切替が容易)。
- ステートレス設計:セッション情報をクライアント側に保持(JWT等)してサーバをステートレスにすることで、ノード障害の影響を減らす。
- スタンバイの種類(短い比較)
- コールド:待機機は停止中。切替に時間がかかる。
- ウォーム:待機機は起動済みだが同期が遅延していることがある。
- ホット:待機機も常時稼働で同期がとれており、迅速に切替可能。
- 運用での注意点:セッション共有を導入しても、同期方式や障害検知/切替の仕組み(ロードバランサのヘルスチェックやセッション固定(セッションスティッキー)の扱い)を適切に設計・試験することが重要です。
FAQ
Q1. 「DBのトランザクションもセッション共有で継続できますか?」
A1. 異なる概念です。DBトランザクション(ACID)はデータベース側の処理単位であり、セッション共有はアプリケーション層での状態共有です。DBトランザクションはデータベースのレプリケーションや分散トランザクションなど別の仕組みで保護します。
A1. 異なる概念です。DBトランザクション(ACID)はデータベース側の処理単位であり、セッション共有はアプリケーション層での状態共有です。DBトランザクションはデータベースのレプリケーションや分散トランザクションなど別の仕組みで保護します。
Q2. 「セッション共有がないと全ユーザのサービスが止まりますか?」
A2. いいえ。多くのクラスタでは他ノードが代替してサービスを継続しますが、障害のあったノードに紐づくセッション(そのユーザの状態)は失われるため、そのユーザの継続処理はできません。
A2. いいえ。多くのクラスタでは他ノードが代替してサービスを継続しますが、障害のあったノードに紐づくセッション(そのユーザの状態)は失われるため、そのユーザの継続処理はできません。
Q3. 「ゼロダウンタイムにするにはどうすればよいですか?」
A3. アクティブ-アクティブ構成、ホットスタンバイ、セッションを共有する設計(共有ストアやレプリケーション)、そして適切なフェイルオーバ手順と負荷分散設定の組合せが必要です。完全ゼロダウンは設計・運用コストが高くなる点に注意してください。
A3. アクティブ-アクティブ構成、ホットスタンバイ、セッションを共有する設計(共有ストアやレプリケーション)、そして適切なフェイルオーバ手順と負荷分散設定の組合せが必要です。完全ゼロダウンは設計・運用コストが高くなる点に注意してください。
関連キーワード: セッション共有、フェイルオーバ、コールドスタンバイ、ホットスタンバイ、セッションレプリケーション、共有セッションストア、可用性、冗長構成

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

