HTTP(HyperText Transfer Protocol)はリクエスト/レスポンスの対で成り立つシンプルな通信手順である。クライアント・ソフトである「Webブラウザ」は,HTTPの待ち受け機能を備えた常駐ソフト「HTTPD(HTTPデーモン)」にリクエストを送信し,サーバー側の処理結果をレスポンスとして受信していた。こうした仕組みにより,Webシステムではアプリケーション(コンテンツ)をクライアントに事前配布する必要がなくなり,アプリケーションやデータをサーバー上で集中管理できるというわけだ。

 言い換えれば,Webシステムはサーバー無しでは何もできない“サーバー頼み”のシステムである。そのためWebシステムを構築する際には,サーバーの「可用性(availability:サービスを継続して提供する能力)」について,十分な検討が必要となる。

 そこで今回から,Webシステムの可用性を採り上げる。まず,可用性とは何か,どんな指標で表されるか,それらの指標とシステム要件をどう結び付けるか――など,理論面を中心に説明する。

利用者の再入力を強いることに

 可用性を十分に検討していないWebシステムでは,様々なトラブルが発生する。利用者の使い勝手(=ユーザビリティ)に悪影響が出たり,二重更新などの異常動作を引き起こしたりする。実際にどんなトラブルが生じるかを仮想事例で確認しておこう。

 ある電子商取引(EC)サイトで商品を購入しようとしているA氏。商品画面で購入したいモノを選び,決済画面に進んだ。その画面に納品先やクレジットカード番号などを入力して送信したところ,エラーになってしまう。「おかしいな」――。

 実はこのとき,Webサーバーが障害でダウンしていた。軽微な障害だったので,管理者がWebサーバーを再起動するだけで数分後にはシステムが復旧した。

 Webサーバーが障害で停止している数分間,A氏はWebブラウザの[戻る]ボタンを押しては決済情報を再送していた。システムが復旧すると,A氏の再送したリクエストをWebサーバーが受信する。ところが,Webサーバーから返送されてきたのは,決済完了画面ではなく,サイトの初期画面である商品画面だった。「また最初から情報を入力し直せというのか?」――A氏は憤慨した。

 なぜ,こんな現象が発生するのか。それは,障害でWebサーバーを再起動したときに,メモリー上のセッション・データベースに格納していたセッション情報が消滅してしまったからである(図1)。

図1●障害時にセッション情報が失われる恐れがある
図1●障害時にセッション情報が失われる恐れがある
決済画面をWebブラウザに返した後でサーバー障害が起きると,セッション情報が消滅してしまい,初期状態の商品画面を返してしまう場合がある
[画像のクリックで拡大表示]

 前回説明したとおり,Webシステムのアプリケーションは,同じWebクライアントから送信されたリクエストを見分けるために,クッキーなどに格納したセッション識別子を利用するケースが多い。アプリケーションはセッション識別子に基づいて,セッション・データベースからセッション情報を取り出し,必要な処理を実行する。

 ところが,障害によってサーバー側のセッション識別子やセッション情報が消滅してしまうと,アプリケーションは個々のリクエストがどのWebクライアントから送られたものかを見分けられなくなる。これに伴い,利用者が購入を希望していた商品がどれだったかも判別できなくなるので,アプリケーションはリクエストの受け入れを拒否し,初期画面を返送せざるを得ない。こうした処理は一般的で,A氏の利用したECサイトもこのようになっていた。

 利用者にこうした不便を強いないように,Webシステムでは,ネットワーク,ハードウエア,ミドルウエア,アプリケーションの相関関係に配慮しながら,可用性を検討することが欠かせない。

「稼働」は2種類,「停止」も2種類ある

 可用性を説明する前に,システムの状態を表す「稼働」「停止」という言葉について整理しておきたい。一般的にカットオーバー後のシステムは,稼働か停止のどちらかの状態にあるはずだが,それぞれの状態はさらに二つに分類できる(図2)。

図2●Webシステムの稼働/停止状態はそれぞれ二つに分類できる
図2●Webシステムの稼働/停止状態はそれぞれ二つに分類できる
稼働状態である「通常運転」と「縮退運転」,停止状態である「計画的停止」と「計画外停止」がある

 稼働には,「通常運転」と「縮退運転」がある。通常運転は,予定されている機能や実装をすべて使える状態であり,縮退運転はその一部が使えない状態を指す。例えばシステムに障害が発生し,必要最小限の機能だけに限定したり,スループットを下げたりしてサービスを再開する場合の稼働状態は,縮退運転だ。

 これに対して停止の場合は,意図的な停止か否かで分類される。システムの保守や運用の都合で停止させる必要があり,事前の計画や予告に基づいて意図的に停止させることを「計画的停止」と呼ぶ。事前の計画や予告無しで異常停止した場合は,「計画外停止」である。通常,「システム障害でダウンした」という場合には,計画外停止を指す。

高安 厚思(たかやす あつし) オープンストリーム テクニカルコンピテンシーユニット 主管システムズアーキテクト
銀行系シンクタンクでオブジェクト指向技術の研究に携わった後,大手SI業者でアーキテクチャ構築やプロセス研究を担当。現職ではSOA(Service Oriented Architecture)を中心とする研究開発とアーキテクチャ構築に従事している