(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024068011
(43)【公開日】2024-05-17
(54)【発明の名称】情報処理プログラム、情報処理方法、および情報処理装置
(51)【国際特許分類】
G06F 11/07 20060101AFI20240510BHJP
【FI】
G06F11/07 160
G06F11/07 193
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2022178492
(22)【出願日】2022-11-07
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100104190
【弁理士】
【氏名又は名称】酒井 昭徳
(72)【発明者】
【氏名】芹川 祥太
(72)【発明者】
【氏名】下川 健一郎
(72)【発明者】
【氏名】近藤 沙綾子
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042JJ29
5B042KK17
5B042MA08
5B042MA14
5B042MC27
(57)【要約】
【課題】障害からの復旧を早期に検出すること。
【解決手段】情報処理装置101は、通信先102の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより通信先102の通信復旧を検出する。情報処理装置101は、通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、リクエストを通信先102に送信する。リクエストは、受信した通信先102への実リクエスト、または、ダミーリクエストである。情報処理装置101は、リクエスト成功数が閾値に達する前に、リクエストに失敗した場合、リクエスト成功数に基づいて、第2の待ち時間を決定する。情報処理装置101は、第2の待ち時間待機した後、期間ごとに、送信上限数を超えないように、リクエストを通信先102に送信する。情報処理装置101は、リクエスト成功数が閾値に達したことに応じて、通信先102の障害からの復旧を検出する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【請求項2】
前記送信上限数は、前記ダミーリクエストの送信上限数を含み、
前記期間よりも前の期間に受信した前記通信先への実リクエスト数に応じて、前記ダミーリクエストの送信上限数を決定する、処理を前記コンピュータに実行させることを特徴とする請求項1に記載の情報処理プログラム。
【請求項3】
前記ポーリングは、pingによるポーリングである、ことを特徴とする請求項1に記載の情報処理プログラム。
【請求項4】
前記通信先の通信復旧を検出する処理は、
前記通信先の障害を検出した場合、前記第1の待ち時間待機した後に、前記通信先に第1の時間間隔でpingを送信し、
前記pingに成功した場合、前記通信先に第2の時間間隔でダミーリクエストを送信し、
前記ダミーリクエストに成功した場合、前記通信先の通信復旧を検出する、
ことを特徴とする請求項3に記載の情報処理プログラム。
【請求項5】
前記通信先の障害を検出した回数のうち、前記通信先の通信復旧を検出した際に、前記pingおよび前記ダミーリクエストがともに1回目に成功した回数の割合に基づいて、前記第1の待ち時間を更新する、
処理を前記コンピュータに実行させることを特徴とする請求項4に記載の情報処理プログラム。
【請求項6】
前記第2の待ち時間を決定する処理は、
前記リクエストの成功数が多いほど、時間長が短くなるように、前記第2の待ち時間を決定する、ことを特徴とする請求項1~5のいずれか一つに記載の情報処理プログラム。
【請求項7】
通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【請求項8】
通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【0002】
近年、システムの大規模化やサービスのマイクロ化に伴い、サービスの関係性が複雑化している。このようなシステムでは、一部のサービスでトラブルが起きると、それに関係するサービスに被害が波及し、システム全体のダウンを引き起こす可能性がある。このため、あるサービスで障害が発生したときに、その障害の伝播を遮断する技術が求められる。また、システムの稼働率を高めるため、トラブル解決後は遮断した状態を直ちに元の状態に戻すことが望ましい。
【0003】
先行技術としては、外部サービスに対してリクエストを送信し、外部サービスに障害が発生しているか否かを検知し、検知された外部サービスの状態に基づきサービスが利用可能か否かを判断し、判断結果に応じて、外部サービスの状態を通知するものがある。また、リンクを維持するためのダミーデータの転送中にエラーを検出したとき、デバイスリセットを行ってエラーに対する回復処理を行うとともに、エラー監視期間を設けてエラーの発生の有無を監視する技術がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2021-051612号公報
【特許文献2】特開2007-304884号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来技術では、システム内のあるサービスで障害が発生したときに、サービスの障害からの復旧を認識するのに時間がかかり、システムを元の状態に戻すのに時間がかかる場合がある。
【0006】
一つの側面では、本発明は、障害からの復旧を早期に検出することを目的とする。
【課題を解決するための手段】
【0007】
1つの実施態様では、通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、情報処理プログラムが提供される。
【発明の効果】
【0008】
本発明の一側面によれば、障害からの復旧を早期に検出することができるという効果を奏する。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
【
図2】
図2は、情報処理システム200のシステム構成例を示す説明図である。
【
図3】
図3は、処理装置Miのハードウェア構成例を示すブロック図である。
【
図4】
図4は、定数テーブル220の記憶内容の一例を示す説明図である。
【
図5】
図5は、処理装置Miの機能的構成例を示すブロック図である。
【
図6】
図6は、成否情報記録テーブル600の記憶内容の一例を示す説明図である。
【
図7】
図7は、送信上限数の決定例を示す説明図である。
【
図8A】
図8Aは、タイマー時間Tp1の第1の更新例を示す説明図である。
【
図8B】
図8Bは、タイマー時間Tp1の第2の更新例を示す説明図である。
【
図9】
図9は、処理装置Miにおける状態遷移例を示す説明図である。
【
図10】
図10は、情報処理システム200の動作例を示す説明図(その1)である。
【
図11】
図11は、情報処理システム200の動作例を示す説明図(その2)である。
【
図12】
図12は、情報処理システム200の動作例を示す説明図(その3)である。
【
図13】
図13は、処理装置MiのCloseにおける情報処理手順の一例を示すフローチャートである。
【
図14】
図14は、処理装置MiのPollingにおける情報処理手順の一例を示すフローチャートである。
【
図15】
図15は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャート(その1)である。
【
図16】
図16は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャート(その2)である。
【
図17】
図17は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャート(その3)である。
【
図18】
図18は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャート(その4)である。
【
図19】
図19は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャート(その5)である。
【
図20】
図20は、処理装置MiのWaitingにおける情報処理手順の一例を示すフローチャートである。
【
図21】
図21は、処理装置MiのPollingにおける他の情報処理手順の一例を示すフローチャート(その1)である。
【
図22】
図22は、処理装置MiのPollingにおける他の情報処理手順の一例を示すフローチャート(その2)である。
【
図23】
図23は、処理装置MiのPollingにおける他の情報処理手順の一例を示すフローチャート(その3)である。
【発明を実施するための形態】
【0010】
以下に図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
【0011】
(実施の形態)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。
図1において、情報処理装置101は、通信先102の障害からの復旧を検出するコンピュータである。通信先102は、例えば、サービスを提供する装置である。サービスは、コンピュータを利用して提供される情報処理であり、例えば、マイクロサービスである。マイクロサービスは、1つのサービスを分割した機能それぞれを実現するソフトウェアである。
【0012】
マイクロサービス化されたシステムでは、何らかのトラブルにより一部のサービスを提供できなくなると、それに関係するサービスに被害が波及し、システム全体のダウンを引き起こす可能性がある。このため、あるサービスで障害が発生したときには、その障害の伝播を遮断することが求められる。
【0013】
このようなシステムにおいて、障害の伝搬を遮断する従来技術としては、例えば、サーキットブレーカーがある。サーキットブレーカーは、サービス(例えば、通信先102)へのリクエストの失敗回数が一定数を超えたときに、サービスの障害を検知し、サービスへのリクエストを一時的に遮断する。サーキットブレーカーは、一時的に遮断した後は、送られてくるサービスへのリクエストの一部を試し、その成功回数によって、サービスの復旧を認識する。
【0014】
具体的には、サーキットブレーカーでは、Close、OpenおよびHalf-Openの3つの状態を遷移することで、サービスの復旧を認識する。Closeは、サービスが正常な状態を示す。Closeでは、サーキットブレーカーは、全てのリクエストを通信先(サービス)に送信する。サーキットブレーカーは、エラーレスポンスが一定数を超えた場合、Openに遷移する。
【0015】
Openでは、サーキットブレーカーは、全てのリクエストを遮断し、エラーを返す。サーキットブレーカーは、一定(タイマー)時間経過後、Half-Openに遷移する。Half-Openでは、サーキットブレーカーは、一部のリクエスト(例えば、50%のリクエスト)について、試験的に通信先へ送信し、その他のリクエストは遮断して、エラーを返す。
【0016】
サーキットブレーカーは、試したリクエストでエラーが発生した場合、Openに遷移する。一方、サーキットブレーカーは、リクエストが連続して成功した回数が一定数を超えた場合、Closeに遷移する。再度Closeに遷移したことで、通信が再開されるため、サービスの復旧を検知したといえる。
【0017】
しかしながら、サーキットブレーカーでは、Half-Openにおいて、リクエストが連続して成功した回数が一定数を超えるまでは、サービスの復旧を検知することができない。このため、サーキットブレーカーでは、実際のリクエストが少ない場合、サービスが復旧済みの状態であっても、サービスの障害からの復旧を検知するのに時間がかかる。
【0018】
また、システムの稼働率を高めるためには、トラブル解決後は遮断した状態を直ちに元の状態に戻すことが求められる。しかしながら、サーキットブレーカーでは、サービスの障害からの復旧を検知するのに時間がかかって、システムの復旧時間が長期化し、トラブル解決後は直ちに元の状態に戻したいという要求を満たすことができない場合がある。
【0019】
さらに、サーキットブレーカーでは、Half-Openにおいて、試したリクエストでエラーが発生した場合、Openに遷移し、タイマー時間が経過するまで、全てのリクエストを遮断することになる。このため、障害からの復旧処理が進んでいる状態であっても、障害が発生した直後と同じタイマー時間が経過するまで、Half-Openに遷移できず、サービスの障害からの復旧を検知するのに時間がかかる。
【0020】
そこで、本実施の形態では、通信先102の障害からの復旧を早期に検出可能にして、システムの復旧時間の短縮化を図る情報処理方法について説明する。以下、情報処理装置101の処理例(下記(1)~(5)の処理に相当)について説明する。
【0021】
(1)情報処理装置101は、通信先102の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより通信先102の通信復旧を検出する。ポーリングは、通信先102の状態を監視するための処理である。ポーリングは、例えば、pingによるポーリングである。
【0022】
pingによるポーリングは、特定の文字列(ping)を通信先に定期的に送信することで、通信可能かどうかを監視する処理である。pingによるポーリングは、例えば、SNMP(Simple Network Management Protocol)ポーリングに比べて、通信先にかかる負荷が少ない。
【0023】
通信先102の障害は、例えば、通信先102に対するリクエストがエラーとなった回数が所定数を超えた場合に検出される。通信先102に対するリクエストは、例えば、情報処理装置101がサービスの要求元から受信する。第1の待ち時間は、任意に設定可能である。サービスの要求元は、例えば、情報処理装置101とは異なる他のコンピュータで動作するアプリケーションである。また、サービスの要求元は、情報処理装置101で動作するアプリケーションであってもよい。
【0024】
ここで、通信先102において障害が発生した場合、障害からの復旧のためにハードリセットが行われることがある。ハードリセット中は、通信先102との通信が不能となる。ハードリセットが完了してOS(Operating System)が起動すると、通信先102との通信が可能となる。
【0025】
一方、OSが起動してもアプリケーションが正常に起動していなければ、リクエストがエラーとなる。アプリケーションが正常に起動して、アプリケーションとのやり取りができるようになると、リクエストが正常に処理されるようになる。このように、通信先102の障害は、徐々に復旧していく場合がある。
【0026】
ここでは、情報処理装置101は、通信先102に対して実際のリクエストを送信する前に、ポーリングにより通信先102の通信復旧を検出する。
【0027】
(2)情報処理装置101は、通信先102の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した通信先102への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先102に送信する。ここで、実リクエストは、通信先102への実際のリクエストである。実リクエストは、例えば、サービスの要求元から送信される。
【0028】
ダミーリクエストは、実リクエストのかわりとなるものである。ダミーリクエストは、例えば、Get要求により実現される。Get要求は、指定した情報を取得するためのリクエストである。所定の時間間隔は、任意に設定可能である。例えば、所定の時間間隔は、10程度の時間間隔に設定される。ただし、各時間間隔は、等間隔でなくてもよく、多少のずれがあってもよい。
【0029】
また、送信上限数は、通信先102に送信する単位時間当たりのリクエストの上限値に相当する。送信上限数は、任意に設定可能であり、例えば、正常時に単位時間当たりに要求元から送られてくる実リクエスト数の平均値をもとに設定される。
【0030】
例えば、所定の時間間隔を「10秒」とする。また、10秒当たりの送信上限数を「5」とする。この場合、情報処理装置101は、例えば、通信先102の通信復旧を検出した場合、10秒間隔で区切った期間ごとに、送信上限数「5」を超えないように、受信した通信先102への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを、通信先102に送信してもよい。この際、情報処理装置101は、各期間において、受信した通信先102への実リクエスト、または、ダミーリクエストのいずれかのリクエストを、2秒(=10秒/5)間隔で通信先102に送信してもよい。
【0031】
より詳細に説明すると、例えば、情報処理装置101は、リクエストを送信するタイミングで、受信した通信先102への実リクエストがあれば、受信した実リクエストを通信先102に送信する。一方、受信した通信先102への実リクエストがないときは、情報処理装置101は、ダミーリクエストを通信先102に送信する。
【0032】
なお、受信した通信先102への実リクエストを送信するとは、例えば、受信した実リクエストそのものを通信先102に送信することであってもよく、また、受信した実リクエストに応じたリクエストを生成して通信先102に送信することであってもよい。
【0033】
(3)情報処理装置101は、送信したリクエストの成功数が閾値に達する前に、送信したリクエストに失敗した場合、リクエストの成功数に基づいて、第2の待ち時間を決定する。ここで、リクエストの成功数は、例えば、リクエストが連続して成功した回数である。
【0034】
閾値は、任意に設定可能である。例えば、閾値は、リクエストの成功数が閾値に達すると、通信先102が障害から復旧したと判断できる値に設定される。例えば、通信先102が復旧途中の不安定な状態の場合、一部のリクエストを処理しきれない場合がある。このような場合、リクエストの成功数が閾値に達する前に、リクエストに失敗する。
【0035】
具体的には、例えば、情報処理装置101は、リクエストの成功数(リクエストに失敗した時点の成功数)が多いほど、時間長が短くなるように、第2の待ち時間を決定する。この際、情報処理装置101は、例えば、第1の待ち時間よりも時間長が短くなるように、第2の待ち時間を決定してもよい。
【0036】
(4)情報処理装置101は、決定した第2の待ち時間待機した後、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した通信先102への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先102に送信する。例えば、情報処理装置101は、第2の待ち時間待機した後、上記(2)と同様の送信処理を再開する。
【0037】
(5)情報処理装置101は、送信したリクエストの成功数が閾値に達したことに応じて、通信先102の障害からの復旧を検出する。ここで、障害から復旧した状態とは、例えば、サービスが正常な状態を示し、要求元からの全ての実リクエストを通信先102に通す状態である。
【0038】
このように、情報処理装置101によれば、通信先102の障害発生時に、通信先102にかかる負荷を抑えつつ、障害からの復旧を早期に検出することができる。これにより、情報処理装置101は、通信先102を含むシステムの復旧時間を短縮して、トラブル解決後は直ちに元の状態に戻したいという要求を満たすことができる。
【0039】
具体的には、例えば、情報処理装置101は、通信先102の障害発生時に、通常のリクエストに比べて負荷の少ないリクエストを試して、通信先が通信可能な状態まで復旧(回復)したことを確認することができる。この際、情報処理装置101は、通信先102の障害を検出した直後は、復旧処理があまり進んでいない可能性が高いため、通信先102に負荷をかけないように第1の待ち時間待機することができる。これにより、情報処理装置101は、例えば、通信先102で障害が発生した直後に、通常のリクエストを投げて、通信先の復旧処理を阻害するといった事態を回避することができる。
【0040】
また、情報処理装置101は、通信可能な状態まで復旧した通信先102に対して、受信した実リクエストまたはダミーリクエストを試して、障害からの復旧を確認することができる。この際、情報処理装置101は、受信する実リクエスト数が少ない場合であっても、ダミーリクエストで補完することで、通信先102の障害からの復旧の検出を早めることができる。これにより、情報処理装置101は、実際に通信先102が復旧してから、その復旧を検出するまでのタイムラグを小さくすることができる。
【0041】
(情報処理システム200のシステム構成例)
つぎに、
図1に示した情報処理装置101を含む情報処理システム200のシステム構成例について説明する。ここでは、
図1に示した情報処理装置101を、情報処理システム200内の処理装置に適用した場合を例に挙げて説明する。情報処理システム200は、例えば、マイクロサービスアーキテクチャを利用してウェブサービスを提供するコンピュータシステムに適用される。
【0042】
図2は、情報処理システム200のシステム構成例を示す説明図である。
図2において、情報処理システム200は、処理装置M1~Mm(m:2以上の自然数)と、利用者端末201と、管理者端末202と、を含む。情報処理システム200において、処理装置M1~Mm、利用者端末201および管理者端末202は、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)などである。
【0043】
以下の説明では、処理装置M1~Mmのうちの任意の処理装置を「処理装置Mi」と表記する場合がある(i=1,2,…,m)。
【0044】
ここで、処理装置Miは、通信先の障害からの復旧を検出するコンピュータである。例えば、処理装置Miは、マイクロサービスを実行可能である。通信先は、例えば、処理装置M1~Mmのうち自装置とは異なる他の処理装置Mj(j≠i、j=1,2,…,m)である。通信先の障害とは、サービス(マイクロサービス)を適切に提供できない状態である。
【0045】
通信先の障害は、例えば、ハードウェアの故障、ソフトウェアの異常、通信の輻輳などにより生じる。また、処理装置Miは、定数テーブル220を有する。定数テーブル220の記憶内容については、
図4を用いて後述する。処理装置Miは、例えば、物理サーバであってもよく、また、物理サーバ上で動作する仮想マシンであってもよい。
【0046】
利用者端末201は、情報処理システム200のユーザが使用するコンピュータである。ユーザは、例えば、情報処理システム200により提供されるウェブサービスを利用する。利用者端末201は、例えば、PC(Personal Computer)、タブレットPCなどである。
【0047】
管理者端末202は、情報処理システム200の管理者が使用するコンピュータである。管理者は、例えば、定数テーブル220を作成したり、各処理装置M1~Mmにマイクロサービスを配備したりする。管理者端末202は、例えば、PC、タブレットPCなどである。
【0048】
なお、
図2の例では、利用者端末201および管理者端末202をそれぞれ1台のみ表示したが、これに限らない。例えば、情報処理システム200には、複数の利用者端末201および複数の管理者端末202が含まれていてもよい。また、処理装置Miは、利用者端末201や管理者端末202により実現されてもよい。
【0049】
(処理装置Miのハードウェア構成例)
つぎに、処理装置Miのハードウェア構成例について説明する。
【0050】
図3は、処理装置Miのハードウェア構成例を示すブロック図である。
図3において、処理装置Miは、CPU(Central Processing Unit)301と、メモリ302と、ディスクドライブ303と、ディスク304と、通信I/F(Interface)305と、可搬型記録媒体I/F306と、可搬型記録媒体307と、を有する。また、各構成部は、バス300によってそれぞれ接続される。
【0051】
ここで、CPU301は、処理装置Miの全体の制御を司る。CPU301は、複数のコアを有していてもよい。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMがOSのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
【0052】
ディスクドライブ303は、CPU301の制御に従ってディスク304に対するデータのリード/ライトを制御する。ディスク304は、ディスクドライブ303の制御で書き込まれたデータを記憶する。ディスク304は、例えば、磁気ディスク、光ディスクなどである。
【0053】
通信I/F305は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して外部のコンピュータに接続される。そして、通信I/F305は、ネットワーク210と装置内部とのインターフェースを司り、外部のコンピュータからのデータの入出力を制御する。通信I/F305には、例えば、モデムやLANアダプタなどを採用することができる。
【0054】
可搬型記録媒体I/F306は、CPU301の制御に従って可搬型記録媒体307に対するデータのリード/ライトを制御する。可搬型記録媒体307は、可搬型記録媒体I/F306の制御で書き込まれたデータを記憶する。可搬型記録媒体307としては、例えば、CD(Compact Disc)-ROM、DVD(Digital Versatile Disk)、USB(Universal Serial Bus)メモリなどが挙げられる。
【0055】
なお、処理装置Miは、上述した構成部のほかに、例えば、入力装置、ディスプレイなどを有することにしてもよい。また、処理装置Miは、上述した構成部のうち、例えば、可搬型記録媒体I/F306、可搬型記録媒体307を有さないことにしてもよい。また、
図2に示した利用者端末201および管理者端末202についても、処理装置Miと同様のハードウェア構成により実現することができる。ただし、利用者端末201および管理者端末202は、上述した構成部のほかに、例えば、入力装置、ディスプレイなどを有する。
【0056】
(定数テーブル220の記憶内容)
つぎに、
図4を用いて、処理装置Miが有する定数テーブル220の記憶内容について説明する。定数テーブル220は、例えば、メモリ302、ディスク304などの記憶装置により実現される。
【0057】
図4は、定数テーブル220の記憶内容の一例を示す説明図である。
図4において、定数テーブル220は、各定数の値を記憶する。L
failは、Closeにおいて使用される定数である。T
p1,T
p2,T
p3,L
dummyは、Pollingにおいて使用される定数である。T
r,L
r,L
sucは、Recovery-Checkにおいて使用される定数である。Rは、Waitingにおいて使用される定数である。
【0058】
Close、Polling、Recovery-CheckおよびWaitingは、処理装置Miが有する状態である。Close、Polling、Recovery-CheckおよびWaitingについては、例えば、
図9を用いて後述する。
【0059】
(処理装置Miの機能的構成例)
図5は、処理装置Miの機能的構成例を示すブロック図である。
図5において、処理装置Miは、障害検出部501と、ポーリング部502と、復旧検出部503と、待機部504と、を含む。障害検出部501~待機部504は制御部となる機能であり、具体的には、例えば、
図3に示したメモリ302、ディスク304、可搬型記録媒体307などの記憶装置に記憶されたプログラムをCPU301に実行させることにより、または、通信I/F305により、その機能を実現する。各機能部の処理結果は、例えば、メモリ302、ディスク304などの記憶装置に記憶される。
【0060】
障害検出部501は、通信先の障害を検出する。ここで、通信先は、例えば、
図2に示した処理装置M1~Mmのうち自装置とは異なる他の処理装置Mjである。障害とは、例えば、ハードウェアの故障、ソフトウェアの異常、通信の輻輳などにより、サービス(マイクロサービス)を適切に提供できない状態である。
【0061】
具体的には、例えば、障害検出部501は、通信先に対する実リクエストの失敗数が閾値L
failに達した場合に、通信先の障害を検出する。閾値L
failは、任意に設定可能であり、例えば、
図4に示した定数テーブル220から特定される。
図4の例では、閾値L
failは、「L
fail=10」である。
【0062】
より詳細に説明すると、例えば、障害検出部501は、実リクエストを受信するたびに、受信した実リクエストを通信先に送信する。実リクエストは、通信先に対する実際のリクエストである。実リクエストは、例えば、処理装置M1~Mmのうち自装置とは異なる他の処理装置Mk(k≠i、k=1,2,…,m)や利用者端末201から送信される。また、実リクエストは、自装置で動作するアプリケーションから送信されてもよい。
【0063】
以下の説明では、受信した全ての実リクエストを通信先に送信する状態を「Close」と表記する場合がある。
【0064】
ここで、障害検出部501は、送信した実リクエストに対して、エラーレスポンスを受信したり、タイムアウトしたりした場合、送信した実リクエストに失敗したと判断する。障害検出部501は、実リクエストに失敗した場合、実リクエストの失敗数をインクリメントする。そして、障害検出部501は、実リクエストの失敗数が閾値Lfailに達した場合に、通信先の障害を検出する。
【0065】
処理装置Miは、通信先の障害を検出した場合、CloseからPollingに遷移する。
【0066】
ポーリング部502は、通信先の障害が検出された場合、タイマー時間T
p1(第1の待ち時間)待機した後、ポーリングにより通信先の通信復旧を検出する。タイマー時間T
p1は、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、タイマー時間T
p1は、「T
p1=50[秒]」である。
【0067】
ポーリングは、例えば、pingによるポーリングである。具体的には、例えば、ポーリング部502は、通信先の障害が検出された場合、タイマー時間T
p1待機した後、通信先に時間間隔T
p2(第1の時間間隔)でpingを送信する。時間間隔T
p2は、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、時間間隔T
p2は、「T
p2=30[秒]」である。
【0068】
ここで、pingに成功した場合、ポーリング部502は、通信先の通信復旧を検出してもよい。通信復旧とは、通信先が通信可能な状態に復旧したことであり、例えば、通信先のハードリセットが完了してOSが起動した状態をいう。例えば、ポーリング部502は、送信したpingに対する正常な応答を受信した場合に、pingに成功したと判断する。一方、ポーリング部502は、送信したpingに対する正常な応答を受信できなかった場合(例えば、タイムアウト)、pingに失敗したと判断する。
【0069】
これにより、ポーリング部502は、障害が発生した通信先が通信可能な状態まで復旧(回復)したことを認識することができる。
【0070】
また、ポーリング部502は、pingに成功した場合、通信先に時間間隔Tp3(第2の時間間隔)でダミーリクエストを送信してもよい。ダミーリクエストは、例えば、Get要求により実現される。そして、ポーリング部502は、ダミーリクエストに成功した場合に、通信先の通信復旧を検出してもよい。この通信復旧は、通信先においてアプリケーションが起動され、アプリケーションとの通信が可能となったことを示す。
【0071】
例えば、ポーリング部502は、送信したダミーリクエストに対する正常なレスポンスを受信した場合に、ダミーリクエストに成功したと判断する。一方、ポーリング部502は、送信したダミーリクエストに対して、エラーレスポンスを受信したり、タイムアウトしたりした場合、ダミーリクエストに失敗したと判断する。
【0072】
これにより、ポーリング部502は、OSI(Open Systems Interconnection)7階層参照モデルの低層の通信から順に要求(ping、ダミーリクエスト)を送信して応答を確認することで、通信先の復旧状態を段階的に判断することができる。
【0073】
なお、ポーリング部502は、通信先に対するダミーリクエストの失敗数が閾値L
dummyに達した場合、pingの送信に戻ってもよい。閾値L
dummyは、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、閾値L
dummyは、「L
dummy=5」である。
【0074】
また、ポーリング部502は、例えば、通信先の通信復旧を検出した際に、pingが1回目に成功したか否かを示す情報を記録してもよい。また、ポーリング部502は、通信先の通信復旧を検出した際に、ダミーリクエストが1回目に成功したか否かを示す情報を記録してもよい。
【0075】
ping、ダミーリクエストが1回目に成功したか否かを示す情報は、例えば、
図6に示すような成否情報記録テーブル600に記憶される。成否情報記録テーブル600は、例えば、メモリ302、ディスク304などの記憶装置により実現される。
【0076】
図6は、成否情報記録テーブル600の記憶内容の一例を示す説明図である。
図6において、成否情報記録テーブル600は、回数、ping成否およびダミーリクエスト成否のフィールドを有し、各フィールドに情報を設定することで、成否情報(例えば、成否情報600-1,600-2)をレコードとして記憶する。
【0077】
ここで、回数は、通信先の障害が検出された回数を示す。ping成否は、pingが1回目に成功したか否かを示す。ここでは、ping成否が「1」の場合、pingが1回目に成功したことを示す。ping成否が「0」の場合、pingが1回目に成功しなかったことを示す。
【0078】
ダミーリクエスト成否は、ダミーリクエストが1回目に成功したか否かを示す。ここでは、ダミーリクエスト成否が「1」の場合、ダミーリクエストが1回目に成功したことを示す。ダミーリクエスト成否が「0」の場合、ダミーリクエストが1回目に成功しなかったことを示す。
【0079】
例えば、成否情報600-1は、1回目の通信先の障害が検出されたとき、通信先の通信復旧を検出するにあたり、pingは1回目に成功しなかったが、ダミーリクエストは1回目に成功したことを示す。成否情報600-2は、2回目の通信先の障害が検出されたとき、通信先の通信復旧を検出するにあたり、pingおよびダミーリクエストがともに1回目に成功したことを示す。
【0080】
また、ポーリング部502は、通信先の障害が検出された後、通信先の通信復旧が検出されるまでの間に、通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返す。具体的には、例えば、ポーリング部502は、受信した実リクエストに対して、通信先で障害が発生したためサービスを提供できない旨のエラーレスポンスを送信してもよい。
【0081】
処理装置Miは、通信先の通信復旧を検出した場合、PollingからRecovery-Checkに遷移する。
【0082】
復旧検出部503は、通信先の通信復旧が検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信する。
【0083】
例えば、所定の時間間隔を「一定時間Tr」とする。この場合、復旧検出部503は、一定時間Trで区切った期間tごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信する。
【0084】
ここで、一定時間T
rは、任意に設定可能である。一定時間T
rは、例えば、定数テーブル220から特定される。
図4の例では、一定時間T
rは、「T
r=10[秒]」である。送信上限数L
rは、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、送信上限数L
rは、「L
r=5」である。送信上限数L
rは、単位時間(一定時間T
r)あたりのリクエストの上限値に相当する。
【0085】
送信上限数Lrは、例えば、正常時に一定時間Tr当たりに送られてくる実リクエスト数の平均値をもとに設定される。送信上限数Lrは、例えば、ダミーリクエストの送信上限数D(t)を含む。ダミーリクエストの送信上限数D(t)は、例えば、期間tよりも間の期間(例えば、直前の期間(t-1))に受信した通信先への実リクエスト数に応じて決定される。
【0086】
より詳細に説明すると、例えば、送信上限数Lrは、実リクエストの送信上限数Ln(t)と、ダミーリクエストの送信上限数D(t)とを含む。実リクエストの送信上限数Ln(t)は、期間tにおける実リクエストの送信上限数である。ダミーリクエストの送信上限数D(t)は、期間tにおけるダミーリクエストの送信上限数である。
【0087】
そして、復旧検出部503は、期間tの直前の期間(t-1)に受信した通信先への実リクエスト数に応じて、期間tにおけるダミーリクエストの送信上限数D(t)決定する。また、復旧検出部503は、決定したダミーリクエストの送信上限数D(t)から、期間tにおける実リクエストの送信上限数Ln(t)を決定する。
【0088】
なお、期間tにおける送信上限数L
r(L
n(t),D(t))の決定例については、
図7を用いて後述する。
【0089】
また、復旧検出部503は、期間tにおいて、送信上限数Lrを超えないようにリクエスト(実リクエストまたはダミーリクエスト)を送信するにあたり、リクエストの送信間隔が等間隔となるように、各リクエストの送信タイミングを制御してもよい。これにより、復旧検出部503は、通信先の負荷の急激な上昇を抑えることができる。
【0090】
また、復旧検出部503は、受信した通信先への実リクエストのうち、送信上限数Lr(例えば、Ln(t))を超えるために送信しない実リクエストに対してエラー応答を返す。
【0091】
また、復旧検出部503は、送信したリクエストの成功数が閾値L
sucに達したことに応じて、通信先の障害からの復旧を検出する。ここで、閾値L
sucは、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、閾値L
sucは、「L
suc=10」である。
【0092】
閾値Lsucは、リクエストの成功数が閾値Lsucに達すると、通信先が障害から復旧したと判断できる値に設定される。リクエストの成功数は、送信したリクエストが連続して成功した回数である。以下の説明では、リクエストの成功数を「リクエスト成功数Csuc」と表記する場合がある。
【0093】
また、復旧検出部503は、リクエスト成功数Csucが閾値Lsucに達する前に、送信したリクエストのいずれかに失敗した場合、リクエスト成功数Csucに基づいて、タイマー時間TW(第2の待ち時間)を決定する。
【0094】
具体的には、例えば、復旧検出部503は、リクエスト成功数Csucが多いほど、時間長が短くなるように、タイマー時間TWを決定する。この際、復旧検出部503は、タイマー時間Tp1(第1の待ち時間)よりも時間長が短くなるように、タイマー時間TWを決定してもよい。
【0095】
より詳細に説明すると、例えば、復旧検出部503は、下記式(1)を用いて、閾値L
sucに対するリクエスト成功数C
sucの割合が高いほど、時間長が短くなるように、タイマー時間T
Wを決定してもよい。Rは、最大の待機時間である。Rは、任意に設定可能であり、例えば、定数テーブル220から特定される。
図4の例では、Rは、「R=60[秒]」である。
【0096】
TW=(1-Csuc/Lsuc)×R ・・・(1)
【0097】
一例として、リクエスト成功数Csucを「Csuc=4」とし、閾値Lsucを「Lsuc=10」とし、Rを「R=60[秒]」する。この場合、タイマー時間TWは、上記式(1)から、「TW=36[秒](=(1-4/10)×60」)となる。なお、上記式(1)では、例えば、Rをタイマー時間Tp1(第1の待ち時間)と同じ時間とすることで、タイマー時間Tp1よりも時間長が短くなるように、タイマー時間TWを決定することができる。
【0098】
処理装置Miは、通信先の障害からの復旧を検出した場合、Recovery-CheckからCloseに遷移する。一方、処理装置Miは、リクエスト成功数Csucが閾値Lsucに達する前に、送信したリクエストのいずれかに失敗した場合、Recovery-CheckからWaitingに遷移する。
【0099】
ただし、処理装置Miは、通信先の通信復旧を検出した後、通信先に最初に送信したリクエストに失敗した場合、Recovery-CheckからPollingに遷移してもよい。この場合、ポーリング部502は、タイマー時間Tp1待機した後、ポーリングにより通信先の通信復旧を検出してもよい。
【0100】
これにより、処理装置Miは、通信先が通常のリクエストを処理できる程度までは復旧していないと判断することができる。この場合、処理装置Miは、Recovery-CheckからPollingに戻ることができる。
【0101】
待機部504は、決定されたタイマー時間TW(第2の待ち時間)待機する(Waiting)。待機部504は、タイマー時間TWの待機中に、通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返す。
【0102】
処理装置Miは、タイマー時間TW(第2の待ち時間)待機した場合、WaitingからRecovery-Checkに遷移する。
【0103】
また、復旧検出部503は、タイマー時間TW(第2の待ち時間)待機した後、所定の時間間隔で区切った期間ごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信する。
【0104】
具体的には、例えば、復旧検出部503は、タイマー時間TW待機した後、一定時間Trで区切った期間tごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信する。
【0105】
なお、処理装置Miは、タイマー時間TW(第2の待ち時間)待機した後、通信先に最初に送信したリクエストに失敗した場合、Recovery-CheckからPollingに遷移してもよい。この場合、ポーリング部502は、タイマー時間Tp1待機した後、ポーリングにより通信先の通信復旧を検出してもよい。
【0106】
(送信上限数L
r(L
n(t),D(t))の決定例)
つぎに、
図7を用いて、送信上限数L
r(L
n(t),D(t))の決定例について説明する。
【0107】
Recovery-Checkでは、処理装置Miは、通信先に対して、一定の頻度を上限にリクエストを送ることで、通信先にかかる負荷を抑えつつ復旧を検出する。このため、処理装置Miは、実リクエスト数が少ないと予測されるときには、ダミーリクエストで補うことで、一定のリクエスト数を確保する。
【0108】
一方で、実際に送られてくる実リクエスト数を事前に正確に予測するのは難しい。そこで、隣接した期間に送られる実リクエスト数は、ある程度相関があると仮定する。この場合、ある期間における実リクエスト数は、直前の期間の実リクエスト数から予測することができる。
【0109】
ここでは、一定時間Trで区切った期間tを、『期間「t=0」、期間「t=1」、期間「t=2」、期間「t=3」、期間「t=4」、期間「t=5」、期間「t=6」、…』とする。そして、復旧検出部503は、期間tの直前の期間(t-1)に受信した通信先への実リクエスト数に基づいて、期間tにおける送信上限数Lr(Ln(t),D(t))を決定する。
【0110】
具体的には、例えば、復旧検出部503は、下記式(2)および(3)を用いて、期間tのダミーリクエストの送信上限数D(t)を算出する。ただし、Nr(t-1)は、期間(t-1)に受信した実リクエスト数である。例えば、Nr(0)は、期間「t=0」に受信した実リクエスト数に相当する。Lrは、単位時間(一定時間Tr)あたりのリクエストの上限値に相当する。
【0111】
t=0のとき、D(0)=0 ・・・(2)
t>0のとき、D(t)=max(Lr-Nr(t-1),0) ・・・(3)
【0112】
つぎに、復旧検出部503は、下記式(4)を用いて、期間tの実リクエストの送信上限数Ln(t)を算出する。
【0113】
Ln(t)=Lr-D(t) ・・・(4)
【0114】
この場合、期間tに送信する実リクエスト数Ns(t)は、下記式(5)のようになる。なお、Nr(t)>Ns(t)となる場合、溢れた実リクエストについては、通信先に送信されず、エラー応答が返される。
【0115】
Ns(t)=min(Ln(t),Nr(t)) ・・・(5)
【0116】
図7は、送信上限数の決定例を示す説明図である。
図7において、表700は、期間tごとのN
r(t)、D(t)、N
s(t)およびエラー応答を返す実リクエスト数を示す。N
s(t)は、上記式(5)のように、期間tの実リクエストの送信上限数L
n(t)をもとに算出される。ただし、送信上限数L
rを「L
r=5」とする。
【0117】
期間「t=0」では、最初の期間のため、D(0)が「0」となっている。また、Nr(0)が「2」であり、Lr以下である。このため、Ns(0)が「2」となり、エラー応答を返す実リクエスト数が「0」となっている。
【0118】
また、期間「t=1」では、Nr(0)が「2」のため、D(1)が「3」となっている。また、Nr(1)が「0」のため、Ns(1)が「0」となり、エラー応答を返す実リクエスト数が「0」となっている。
【0119】
また、期間「t=2」では、Nr(1)が「0」のため、D(2)が「5」となっている。また、Nr(2)が「1」となっているものの、D(2)が「5」のため、実リクエストを送信すると送信上限数Lrを超える。このため、実リクエストは送信されず、エラー応答を返す実リクエスト数が「1」となっている。
【0120】
また、期間「t=3」では、Nr(2)が「1」のため、D(3)が「4」となっている。また、Nr(3)が「4」となっているものの、D(3)が「4」のため、実リクエストを全て送信すると送信上限数Lrを超える。このため、一部の実リクエスト(3つの実リクエスト)は送信されず、エラー応答を返す実リクエスト数が「3」となっている。
【0121】
また、期間「t=4」では、Nr(3)が「4」のため、D(4)が「1」となっている。また、Nr(4)が「5」となっているものの、D(4)が「1」のため、実リクエストを全て送信すると送信上限数Lrを超える。このため、一部の実リクエスト(1つの実リクエスト)は送信されず、エラー応答を返す実リクエスト数が「1」となっている。
【0122】
また、期間「t=5」では、Nr(4)が「5」のため、D(5)が「0」となっている。また、Nr(5)が「7」となっているものの、実リクエストを全て送信すると送信上限数Lrを超える。このため、一部の実リクエスト(2つの実リクエスト)は送信されず、エラー応答を返す実リクエスト数が「2」となっている。
【0123】
各グラフ701~706は、各期間「t=0,1,2,3,4,5」における、送信するダミーリクエスト数、送信する実リクエスト数およびエラー応答を返す実リクエスト数を示す。各グラフ701~706によれば、受信する実リクエスト数が少ないときにはダミーリクエストで補い、受信する実リクエスト数が多いときにはダミーリクエストを減らすことで、通信先に対するリクエスト数を確保できていることが確認できる。
【0124】
(タイマー時間Tp1の更新例)
つぎに、タイマー時間Tp1(第1の待ち時間)の更新例について説明する。
【0125】
ポーリング部502は、通信先の障害が検出され、CloseからPollingの状態に遷移した際に、タイマー時間Tp1の待機を行う。この待機は、通信先がダウンしていることを検出した際に、通信先に負荷を与えないためである。
【0126】
一方で、通信先の復旧時間は、システム(サービス)ごとに異なることがある。このため、タイマー時間Tp1に共通の値を設定すると、システムによっては長すぎたり短すぎたりする可能性がある。そこで、ポーリング部502は、タイマー時間Tp1を更新することにしてもよい。
【0127】
具体的には、例えば、ポーリング部502は、通信先の障害を検出した回数のうち、通信先の通信復旧を検出した際に、pingおよびダミーリクエストがともに1回目に成功した回数の割合に基づいて、タイマー時間Tp1を更新してもよい。例えば、ポーリング部502は、この割合が高いほど、時間長が短くなるようにタイマー時間Tp1を更新する。
【0128】
より詳細に説明すると、例えば、ポーリング部502は、
図6に示した成否情報記録テーブル600を参照して、通信先の障害を検出した直近10回のうち、通信先の通信復旧を検出した際に、pingおよびダミーリクエストがともに1回目に成功した回数Sを特定する。
【0129】
そして、ポーリング部502は、下記式(6)~(8)を用いて、特定した回数Sに基づいて、タイマー時間Tp1を更新する。ただし、Tp1(new)は、更新後のタイマー時間Tp1を示す。Tp1(old)は、更新前のタイマー時間Tp1を示す。αは、1未満の定数(例えば、0.9)である。βは、1より大きい定数(例えば、1.1)である。
【0130】
Tp1(new)=Tp1(old)×α (S≧10) ・・・(6)
Tp1(new)=Tp1(old) (S=9) ・・・(7)
Tp1(new)=Tp1(old)×β (S≦8) ・・・(8)
【0131】
また、ポーリング部502は、下記式(9)~(11)を用いて、特定した回数Sに基づいて、タイマー時間Tp1を更新してもよい。ただし、γ、δは、正の定数(例えば、1[秒])である。
【0132】
Tp1(new)=Tp1(old)-γ (S≧10) ・・・(9)
Tp1(new)=Tp1(old) (S=9) ・・・(10)
Tp1(new)=Tp1(old)+δ (S≦8) ・・・(11)
【0133】
上記式(6)~(8)または上記式(9)~(11)によれば、直近10回のうち回数Sが10回の場合は時間長を短くし、回数Sが8回以下の場合は時間長を長くすることで、回復率が90%の待機時間に収束する。なお、上記式(6)~(8)または上記式(9)~(11)のいずれを用いてタイマー時間Tp1を更新するのかは、例えば、適用するシステムに応じて決定される。
【0134】
ここで、
図8Aおよび
図8Bを用いて、復旧時間が異なる2つのシステムにおけるタイマー時間T
p1の更新例について説明する。
【0135】
図8Aは、タイマー時間T
p1の第1の更新例を示す説明図である。
図8Aにおいて、グラフ810は、復旧時間に応じた回復率を示す。回復率は、pingおよびダミーリクエストがともに1回目に成功する割合を示す。
図8Aの例では、回復率が90%となる待機時間「90[s](
図8A中、符号812)」が、初期設定時間「60[s](
図8A中、符号811)」よりも大きい。この場合、タイマー時間T
p1が延長されるように更新されていく。
【0136】
図8Bは、タイマー時間T
p1の第2の更新例を示す説明図である。8Bにおいて、グラフ820は、復旧時間に応じた回復率を示す。
図8Bの例では、回復率が90%となる待機時間「40[s](
図8B中、符号822)」が、初期設定時間「60[s](
図8B中、符号821)」よりも小さい。この場合、タイマー時間T
p1が短縮されるように更新されていく。
【0137】
(処理装置Miにおける状態遷移例)
つぎに、
図9を用いて、処理装置Miにおける状態遷移例について説明する。
【0138】
図9は、処理装置Miにおける状態遷移例を示す説明図である。
図9において、状態遷移
図900は、処理装置Miにおける状態遷移を表す。処理装置Miは、Close、Polling、Recovery-CheckおよびWaitingの4つの状態を有する。
【0139】
Closeは、受信した全ての実リクエストを通し、結果を返す状態である。Closeは、初期状態に相当する。Closeからは、Pollingに遷移(矢印901)する場合がある。
【0140】
Pollingは、ping等により通信先の復旧状況を確認する状態である。Pollingでは、処理装置Miは、受信した実リクエストを全て遮断してエラーを返す。Pollingからは、Recovery-Checkに遷移(矢印902)する場合がある。
【0141】
Recovery-Checkは、受信した実リクエストやダミーリクエストを試して、通信先の障害からの復旧を確認する状態である。Recovery-Checkでは、処理装置Miは、受信した実リクエストのうち、送信しない一部の実リクエストに対してエラーを返す。
【0142】
Recovery-Checkからは、Pollingに遷移(矢印903)する場合と、Waitingに遷移(矢印904)する場合と、Closeに遷移(矢印905)する場合とがある。Waitingは、Pollingよりも通信先の復旧が近い状態という位置付けである。このため、通信先の復旧が近いといえる場合は、Recovery-Checkから、Pollingへは遷移せず、Waitingに遷移する。
【0143】
Waitingは、Recovery-Checkでのリクエストの成功数(Csuc)に応じたタイマー時間TW待機する状態である。Waitingでは、Waitingからは、Recovery-Checkに遷移(矢印906)する場合がある。
【0144】
(情報処理システム200の動作例)
つぎに、
図10~
図12を用いて、情報処理システム200の動作例について説明する。ここでは、処理装置M1を「Webサーバ」とし、処理装置M2を「APサーバ」とし、処理装置M3を「DBサーバ」とし、WebサーバM1、APサーバM2およびDBサーバM3が連携してサービスを提供する場合を想定する。また、APサーバM2の通信先であるDBサーバM3において障害が発生する場合を想定する。
【0145】
図10~
図12は、情報処理システム200の動作例を示す説明図である。
図10において、APサーバM2は、WebサーバM1からリクエストを受信する。APサーバM2へのリクエストは、利用者端末201からのリクエストに応じてWebサーバM1から送信される。
【0146】
なお、
図10~
図12中、リクエストは、実際のリクエストを示す。リクエスト(ping)は、pingを示す。リクエスト(ダミー)は、ダミーリクエスト示す。レスポンス(成功)は、リクエストに成功した場合のレスポンスを示す。レスポンス(失敗)は、リクエストに失敗した場合のレスポンスを示す。また、Close、Polling、Recovery-CheckおよびWaitingは、APサーバM2の状態を示す。
【0147】
Closeにおいて、APサーバM2は、WebサーバM1から受信した全てのリクエストをDBサーバM3に送信する。そして、APサーバM2は、送信したリクエストに対する結果(レスポンス)を、WebサーバM1に送信する。
【0148】
また、APサーバM2は、DBサーバM3に対するリクエストの失敗数が閾値Lfailに達した場合、DBサーバM3の障害を検出する。ここでは、DBサーバM3がダウンしたため、その後リクエストの失敗数が閾値Lfailに達し、DBサーバM3の障害が検出された場合を想定する。
【0149】
この場合、APサーバM2は、CloseからPollingに遷移して、タイマー時間T
p1(
図10中、符号1001に相当)待機する。APサーバM2は、タイマー時間T
p1待機した後、DBサーバM3に時間間隔T
p2でpingを送信する(
図10中、符号1002に相当)。Pollingでは、APサーバM2は、受信した全てのリクエストに対して、エラー応答を送信する。
【0150】
図11において、APサーバM2は、pingに成功した場合、DBサーバM3に時間間隔T
p3でダミーリクエストを送信する。ここでは、1回目のダミーリクエストに成功した場合を想定する(
図11中、符号1101に相当)。この場合、APサーバM2は、PollingからRecovery-Checkに遷移する。
【0151】
Recovery-Checkにおいて、APサーバM2は、一定時間T
rで区切った期間ごとに、送信上限数L
r(L
n(t),D(t))を超えないように、受信したリクエスト、または、ダミーリクエストのいずれかのリクエストをDBサーバM3に定期的に送信する(
図11中、符号1102に相当)。
【0152】
そして、APサーバM2は、リクエスト成功数Csucが閾値Lsucに達したか否かを判断する。Recovery-Checkでは、APサーバM2は、受信するDBサーバM3へのリクエスト数が少ない場合であっても、ダミーリクエストで補完することで、DBサーバM3の障害からの復旧の検出を早めることができる。
【0153】
ここでは、閾値L
sucを「L
suc=2」とする。また、
図11の例では、DBサーバM3へのリクエストが2回連続成功して、リクエスト成功数C
sucが閾値L
sucに達した場合を想定する。この場合、APサーバM2は、DBサーバM3の障害からの復旧を検出して、Recovery-CheckからCloseに遷移する。
【0154】
これにより、APサーバM2は、DBサーバM3が障害から復旧したら、障害の伝播を遮断した状態から元の状態に直ちに戻すことができる。例えば、APサーバM2は、実際にDBサーバM3が復旧してから、その復旧を検出するまでのタイムラグ1103を小さくすることができる。
【0155】
つぎに、
図12を用いて、DBサーバM3が復旧途中の不安定な状態のため、リクエスト成功数C
sucが閾値L
sucに達する前にリクエストに失敗した場合について説明する。
【0156】
図12において、APサーバM2は、pingに成功した場合、DBサーバM3に時間間隔T
p3でダミーリクエストを送信する。ここでは、1回目のダミーリクエストに成功した場合を想定する(
図12中、符号1201に相当)。この場合、APサーバM2は、PollingからRecovery-Checkに遷移する。
【0157】
Recovery-Checkにおいて、APサーバM2は、一定時間T
rで区切った期間ごとに、送信上限数L
r(L
n(t),D(t))を超えないように、受信したリクエスト、または、ダミーリクエストのいずれかのリクエストをDBサーバM3に定期的に送信する(
図12中、符号1202に相当)。
【0158】
ここでは、1回目のリクエストに成功した後、2回目のリクエストに失敗した場合を想定する(
図12中、符号1203に相当)。APサーバM2は、リクエスト成功数C
sucが閾値L
sucに達する前に、リクエストに失敗した場合、Recovery-CheckからWaitingに遷移する。また、APサーバM2は、リクエスト成功数C
sucに基づいて、タイマー時間T
Wを決定する。
【0159】
Waitingにおいて、APサーバM2は、タイマー時間T
W(
図12中、符号1204に相当)待機する。Waitingでは、APサーバM2は、受信した全てのリクエストに対して、エラー応答を送信する。そして、APサーバM2は、タイマー時間T
W待機した後、WaitingからRecovery-Checkに遷移する。
【0160】
Recovery-Checkにおいて、APサーバM2は、リクエスト成功数Csucが閾値Lsucに達した場合、DBサーバM3の障害からの復旧を検出して、Recovery-CheckからCloseに遷移する。ここでは、DBサーバM3へのリクエストが2回連続成功して、リクエスト成功数Csucが閾値Lsucに達したため、APサーバM2はCloseに遷移する。
【0161】
これにより、APサーバM2は、DBサーバM3が障害から復旧したら、障害の伝播を遮断した状態から元の状態に直ちに戻すことができる。例えば、APサーバM2は、実際にDBサーバM3が復旧してから、その復旧を検出するまでのタイムラグ1205を小さくすることができる。
【0162】
(処理装置Miの情報処理手順)
つぎに、処理装置Miの各状態(Close、Polling、Recovery-CheckおよびWaiting)における情報処理手順について説明する。まず、
図13を用いて、処理装置MiのCloseにおける情報処理手順について説明する。
【0163】
図13は、処理装置MiのCloseにおける情報処理手順の一例を示すフローチャートである。
図13のフローチャートにおいて、まず、処理装置Miは、エラー数C
failを「C
fail=0」で初期化する(ステップS1301)。エラー数C
failは、通信先に対するリクエスト(実リクエスト)の失敗数を示す。
【0164】
つぎに、処理装置Miは、通信先に対するリクエストを受信したか否かを判断する(ステップS1302)。ここで、処理装置Miは、通信先に対するリクエストを受信するのを待つ(ステップS1302:No)。そして、処理装置Miは、通信先に対するリクエストを受信した場合(ステップS1302:Yes)、受信したリクエストを通信先に送信する(ステップS1303)。
【0165】
つぎに、処理装置Miは、送信したリクエストに対してエラーレスポンスを受信したか否かを判断する(ステップS1304)。ここで、エラーレスポンスを受信していない場合(ステップS1304:No)、処理装置Miは、ステップS1302に戻る。
【0166】
一方、エラーレスポンスを受信した場合(ステップS1304:Yes)、処理装置Miは、エラー数Cfailをインクリメントする(ステップS1305)。そして、処理装置Miは、エラー数Cfailが閾値Lfailに達したか否かを判断する(ステップS1306)。
【0167】
ここで、エラー数Cfailが閾値Lfailに達していない場合(ステップS1306:No)、処理装置Miは、ステップS1302に戻る。一方、エラー数Cfailが閾値Lfailに達した場合(ステップS1306:Yes)、処理装置Miは、Pollingに遷移して(ステップS1307)、本フローチャートによる一連の処理を終了する。
【0168】
これにより、処理装置Miは、通信先の障害を検出して、CloseからPollingに状態遷移することができる。
【0169】
つぎに、
図14を用いて、処理装置MiのPollingにおける情報処理手順について説明する。
【0170】
図14は、処理装置MiのPollingにおける情報処理手順の一例を示すフローチャートである。
図14のフローチャートにおいて、まず、処理装置Miは、タイマー時間T
p1待機する(ステップS1401)。つぎに、処理装置Miは、通信先にpingを送信する(ステップS1402)。
【0171】
そして、処理装置Miは、pingが成功したか否かを判断する(ステップS1403)。ここで、pingが失敗した場合(ステップS1403:No)、処理装置Miは、一定時間Tp2待機して(ステップS1404)、ステップS1402に戻る。
【0172】
一方、pingが成功した場合(ステップS1403:Yes)、処理装置Miは、ダミーリクエストの失敗数Cdummyを「Cdummy=0」で初期化する(ステップS1405)。そして、処理装置Miは、通信先にダミーリクエストを送信する(ステップS1406)。
【0173】
そして、処理装置Miは、ダミーリクエストが成功したか否かを判断する(ステップS1407)。ここで、ダミーリクエストが失敗した場合(ステップS1407:No)、処理装置Miは、ダミーリクエストの失敗数Cdummyをインクリメントする(ステップS1408)。
【0174】
そして、処理装置Miは、ダミーリクエストの失敗数Cdummyが閾値Ldummyに達したか否かを判断する(ステップS1409)。ここで、ダミーリクエストの失敗数Cdummyが閾値Ldummyに達した場合(ステップS1409:Yes)、処理装置Miは、ステップS1402に戻る。
【0175】
一方、ダミーリクエストの失敗数Cdummyが閾値Ldummyに達していない場合(ステップS1409:No)、処理装置Miは、一定時間Tp3待機して(ステップS1410)、ステップS1406に戻る。
【0176】
また、ステップS1407において、ダミーリクエストが成功した場合(ステップS1407:Yes)、Recovery-Checkに遷移して(ステップS1411、本フローチャートによる一連の処理を終了する。
【0177】
これにより、処理装置Miは、OSI7階層参照モデルの低層の通信から順に要求(ping、ダミーリクエスト)を送信して応答を確認することで、通信先の復旧状態を段階的に判断することができる。また、処理装置Miは、ダミーリクエストが処理できる程度に通信先の復旧状態が進んだ場合に、PollingからRecovery-Checkに状態遷移することができる。
【0178】
つぎに、
図15~
図19を用いて、処理装置MiのRecovery-Checkにおける情報処理手順について説明する。
【0179】
図15~
図19は、処理装置MiのRecovery-Checkにおける情報処理手順の一例を示すフローチャートである。
図15のフローチャートにおいて、まず、処理装置Miは、リクエスト成功数C
sucを「C
suc=0」で初期化する(ステップS1501)。そして、処理装置Miは、定数テーブル220から、送信上限数L
rを取得する(ステップS1502)。
【0180】
つぎに、処理装置Miは、実リクエスト数Cactを「Cact=0」で初期化する(ステップS1503)。そして、処理装置Miは、上記式(2)および(3)を用いて、期間tのダミーリクエスト数D(t)を算出する(ステップS1504)。D(t)は、期間tにおけるダミーリクエストの送信上限数に相当する。
【0181】
つぎに、処理装置Miは、上記式(4)を用いて、期間tの実リクエスト上限数Ln(t)を算出する(ステップS1505)。Ln(t)は、期間tにおける実リクエストの送信上限数に相当する。そして、処理装置Miは、D(t)が0であるか否かを判断する(ステップS1506)。
【0182】
ここで、D(t)が0ではない場合(ステップS1506:No)、処理装置Miは、
図16に示すステップS1601に移行する。一方、D(t)が0の場合(ステップS1506:Yes)、処理装置Miは、一定時間T
r待機する(ステップS1507)。そして、処理装置Miは、待機中に通信先に対する実リクエストを受信したか否かを判断する(ステップS1508)。
【0183】
ここで、待機中に実リクエストを受信しなかった場合(ステップS1508:No)、処理装置Miは、ステップS1503に戻る。一方、待機中に通信先に実リクエストを受信した場合(ステップS1508:Yes)、処理装置Miは、
図18に示すステップS1801に移行する。なお、処理装置Miは、一定時間T
rの待機中に実リクエストを受信するたびに、
図18に示すステップS1801に移行する。
【0184】
図16のフローチャートにおいて、まず、処理装置Miは、kを「k=0」とする(ステップS1601)。つぎに、処理装置Miは、T
r/D(t)待機する(ステップS1602)。T
r/D(t)は、一定時間T
rをダミーリクエスト数D(t)で割った時間である。
【0185】
そして、処理装置Miは、待機中に通信先に対する実リクエストを受信したか否かを判断する(ステップS1603)。ここで、待機中に通信先に実リクエストを受信した場合(ステップS1603:Yes)、処理装置Miは、
図17に示すステップS1701に移行する。なお、処理装置Miは、T
r/D(t)の待機中に実リクエストを受信するたびに、
図17に示すステップS1701に移行する。
【0186】
一方、待機中に通信先に実リクエストを受信しなかった場合(ステップS1603:No)、処理装置Miは、通信先にダミーリクエストを送信する(ステップS1604)。そして、処理装置Miは、ダミーリクエストが成功したか否かを判断する(ステップS1605)。
【0187】
ここで、ダミーリクエストが失敗した場合(ステップS1605:No)、処理装置Miは、
図19に示すステップS1901に移行する。一方、ダミーリクエストが成功した場合(ステップS1605:Yes)、処理装置Miは、リクエスト成功数C
sucをインクリメントする(ステップS1606)。
【0188】
そして、処理装置Miは、リクエスト成功数Csucが閾値Lsucに達したか否かを判断する(ステップS1607)。ここで、リクエスト成功数Csucが閾値Lsucに達していない場合(ステップS1607:No)、処理装置Miは、kをインクリメントする(ステップS1608)。
【0189】
そして、処理装置Miは、kがD(t)未満であるか否かを判断する(ステップS1609)。ここで、kがD(t)未満の場合(ステップS1609:Yes)、処理装置Miは、ステップS1602に戻る。一方、kがD(t)未満ではない場合(ステップS1609:No)、処理装置Miは、
図15に示したステップS1503に移行する。
【0190】
また、ステップS1607において、リクエスト成功数Csucが閾値Lsucに達した場合(ステップS1607:Yes)、処理装置Miは、Closeに遷移して(ステップS1610、本フローチャートによる一連の処理を終了する。
【0191】
図17に示すフローチャートにおいて、まず、処理装置Miは、実リクエスト数C
actが実リクエスト上限数L
n(t)未満であるか否かを判断する(ステップS1701)。ここで、実リクエスト数C
actが実リクエスト上限数L
n(t)未満の場合(ステップS1701:Yes)、処理装置Miは、通信先に対して実リクエストを送信する(ステップS1702)。送信する実リクエストは、
図16に示したステップS1603において待機中に受信した実リクエストに応じたリクエストである。
【0192】
つぎに、処理装置Miは、実リクエスト数C
actをインクリメントする(ステップS1703)。そして、処理装置Miは、送信した実リクエストが成功したか否かを判断する(ステップS1704)。ここで、実リクエストが失敗した場合(ステップS1704:No)、処理装置Miは、
図19に示すステップS1901に移行する。
【0193】
一方、実リクエストが成功した場合(ステップS1704:Yes)、処理装置Miは、リクエスト成功数Csucをインクリメントする(ステップS1705)。そして、処理装置Miは、リクエスト成功数Csucが閾値Lsucに達したか否かを判断する(ステップS1706)。
【0194】
ここで、リクエスト成功数C
sucが閾値L
sucに達していない場合(ステップS1706:No)、処理装置Miは、
図16に示したステップS1608に移行する。一方、リクエスト成功数C
sucが閾値L
sucに達した場合(ステップS1706:Yes)、処理装置Miは、Closeに遷移して(ステップS1707)、本フローチャートによる一連の処理を終了する。
【0195】
また、ステップS1701において、実リクエスト数C
actが実リクエスト上限数L
n(t)未満ではない場合(ステップS1701:No)、処理装置Miは、受信した実リクエストに対してエラー応答を送信して(ステップS1708)、
図16に示したステップS1604に移行する。受信した実リクエストは、
図16に示したステップS1603において待機中に受信した実リクエストである。
【0196】
図18のフローチャートにおいて、まず、処理装置Miは、実リクエスト数C
actが実リクエスト上限数L
n(t)未満であるか否かを判断する(ステップS1801)。ここで、実リクエスト数C
actが実リクエスト上限数L
n(t)未満の場合(ステップS1801:Yes)、処理装置Miは、通信先に対して実リクエストを送信する(ステップS1802)。送信する実リクエストは、
図15に示したステップS1508において待機中に受信した実リクエストに応じたリクエストである。
【0197】
つぎに、処理装置Miは、実リクエスト数C
actをインクリメントする(ステップS1803)。そして、処理装置Miは、送信した実リクエストが成功したか否かを判断する(ステップS1804)。ここで、実リクエストが失敗した場合(ステップS1804:No)、処理装置Miは、
図19に示すステップS1901に移行する。
【0198】
一方、実リクエストが成功した場合(ステップS1804:Yes)、処理装置Miは、リクエスト成功数Csucをインクリメントする(ステップS1805)。そして、処理装置Miは、リクエスト成功数Csucが閾値Lsucに達したか否かを判断する(ステップS1806)。
【0199】
ここで、リクエスト成功数C
sucが閾値L
sucに達していない場合(ステップS1806:No)、処理装置Miは、一定時間T
rの待機の完了後に、
図15に示したステップS1503に移行する。一方、リクエスト成功数C
sucが閾値L
sucに達した場合(ステップS1806:Yes)、処理装置Miは、Closeに遷移して(ステップS1807)、本フローチャートによる一連の処理を終了する。
【0200】
また、ステップS1801において、実リクエスト数C
actが実リクエスト上限数L
n(t)未満ではない場合(ステップS1801:No)、処理装置Miは、受信した実リクエストに対してエラー応答を送信して(ステップS1808)、一定時間T
rの待機の完了後に、
図15に示したステップS1503に移行する。受信した実リクエストは、
図15に示したステップS1508において待機中に受信した実リクエストである。
【0201】
図19のフローチャートにおいて、まず、処理装置Miは、リクエスト成功数C
sucが0であるか否かを判断する(ステップS1901)。ここで、リクエスト成功数C
sucが0の場合(ステップS1901:Yes)、処理装置Miは、Pollingに遷移して(ステップS1902)、本フローチャートによる一連の処理を終了する。
【0202】
一方、リクエスト成功数Csucが0ではない場合(ステップS1901:No)、処理装置Miは、Waitingに遷移して(ステップS1903)、本フローチャートによる一連の処理を終了する。
【0203】
これにより、処理装置Miは、通信先の障害からの復旧を検出することができる。また、処理装置Miは、受信する実リクエスト数が少ない場合であっても、ダミーリクエストで補完することで、通信先の障害からの復旧の検出を早めることができる。また、処理装置Miは、リクエストの送信間隔が等間隔(Tr/D(t))となるように、各リクエストの送信タイミングを制御することで、通信先に対するリクエスト数を確保しつつ、通信先の負荷の急激な上昇を抑えることができる。
【0204】
つぎに、
図20を用いて、処理装置MiのWaitingにおける情報処理手順について説明する。
【0205】
図20は、処理装置MiのWaitingにおける情報処理手順の一例を示すフローチャートである。
図20のフローチャートにおいて、まず、処理装置Miは、上記式(1)を用いて、リクエスト成功数C
sucに基づいて、タイマー時間T
Wを決定する(ステップS2001)。つぎに、処理装置Miは、決定したタイマー時間T
W待機する(ステップS2002)。
【0206】
そして、処理装置Miは、タイマー時間TWの待機の完了後に、Recovery-Checkに遷移して(ステップS2003)、本フローチャートによる一連の処理を終了する。
【0207】
これにより、処理装置Miは、Recovery-Checkにおける通信先からのレスポンス結果(リクエスト成功数Csuc)に応じて変動するタイマー時間TW待機してから、Recovery-Checkに遷移することができる。
【0208】
つぎに、
図21~
図23を用いて、Pollingにおける処理装置Miの他の情報処理手順について説明する。Pollingにおける他の情報処理では、タイマー時間T
p1を更新(自動チューニング)する場合について説明する。
【0209】
図21~
図23は、処理装置MiのPollingにおける他の情報処理手順の一例を示すフローチャートである。
図21のフローチャートにおいて、まず、処理装置Miは、B
pingとB
dummyを「B
ping=B
dummy=True」で初期化する(ステップS2101)。
【0210】
Bpingは、pingが1回目で成功したか否かを示す。「Bping=True」は、pingが1回目で成功したことを示す。「Bping=False」は、pingが1回目で失敗したことを示す。また、Bdummyは、ダミーリクエストが1回目で成功したか否かを示す。「Bdummy=True」は、ダミーリクエストが1回目で成功したことを示す。「Bdummy=False」は、ダミーリクエストが1回目で失敗したことを示す。
【0211】
そして、処理装置Miは、タイマー時間Tp1待機する(ステップS2102)。つぎに、処理装置Miは、通信先にpingを送信する(ステップS2103)。そして、処理装置Miは、pingが成功したか否かを判断する(ステップS2104)。
【0212】
ここで、pingが失敗した場合(ステップS2104:No)、処理装置Miは、B
pingを「B
ping=False」とする(ステップS2105)。そして、処理装置Miは、一定時間T
p2待機して(ステップS2106)、ステップS2103に戻る。一方、pingが成功した場合(ステップS2104:Yes)、処理装置Miは、
図22に示すステップS2201に移行する。
【0213】
図22のフローチャートにおいて、まず、処理装置Miは、ダミーリクエストの失敗数C
dummyを「C
dummy=0」で初期化する(ステップS2201)。つぎに、処理装置Miは、通信先にダミーリクエストを送信する(ステップS2202)。
【0214】
そして、処理装置Miは、ダミーリクエストが成功したか否かを判断する(ステップS2203)。ここで、ダミーリクエストが失敗した場合(ステップS2203:No)、処理装置Miは、ダミーリクエストの失敗数Cdummyをインクリメントする(ステップS2204)。
【0215】
そして、処理装置Miは、ダミーリクエストの失敗数C
dummyが閾値L
dummyに達したか否かを判断する(ステップS2205)。ここで、ダミーリクエストの失敗数C
dummyが閾値L
dummyに達した場合(ステップS2205:Yes)、処理装置Miは、
図21に示したステップS2103に戻る。
【0216】
一方、ダミーリクエストの失敗数Cdummyが閾値Ldummyに達していない場合(ステップS2205:No)、処理装置Miは、Bdummyを「Bdummy=False」とする(ステップS2206)。そして、処理装置Miは、一定時間Tp3待機して(ステップS2207)、ステップS2202に戻る。
【0217】
また、ステップS2203において、ダミーリクエストが成功した場合(ステップS2203:Yes)、処理装置Miは、
図23に示すステップS2301に移行する。
【0218】
図23のフローチャートにおいて、まず、処理装置Miは、S
tを「S
t=True」とする(ステップS2301)。つぎに、処理装置Miは、「B
ping=B
dummy=True」であるか否かを判断する(ステップS2302)。
【0219】
ここで、「Bping=Bdummy=True」ではない場合(ステップS2302:No)、処理装置Miは、Stを「St=False」として(ステップS2303)、ステップS2304に移行する。一方、「Bping=Bdummy=True」の場合(ステップS2302:Yes)、処理装置Miは、Slistが定義されているか否かを判断する(ステップS2304)。
【0220】
S
listは、pingとダミーリクエストの両方が1回目で成功したかどうかの結果が過去10回分入力される配列である。pingとダミーリクエストのうち、両方が1回目で成功した場合は「True」、片方でも1回目に失敗した場合は「False」が入力される。S
list[0]に最も古いデータが入っており、添え字が大きくなるにつれて順に新しいデータが入る。S
listは、例えば、
図6に示した成否情報記録テーブル600に対応する。
【0221】
ここで、Slistが定義されていない場合(ステップS2304:No)、処理装置Miは、Slistを「Slist=[]」で初期化して(ステップS2305)、ステップS2306に移行する。一方、Slistが定義されている場合(ステップS2304:Yes)、処理装置Miは、Slistの最後にStを追加する(ステップS2306)。
【0222】
つぎに、処理装置Miは、Slistの長さが10未満であるか否かを判断する(ステップS2307)。ここで、Slistの長さが10未満の場合(ステップS2307:Yes)、処理装置Miは、ステップS2311に移行する。
【0223】
一方、Slistの長さが10未満ではない場合(ステップS2307:No)、処理装置Miは、SlistをSlistの後ろから10個のデータで上書きして「Slist=[-10:-1]」とする(ステップS2308)。そして、処理装置Miは、SlistからSを算出する(ステップS2309)。Sは、SlistのTrueの数である。
【0224】
つぎに、処理装置Miは、上記式(6)~(8)を用いて、算出したSから、タイマー時間Tp1を更新する(ステップS2310)。なお、処理装置Miは、上記式(9)~(11)を用いて、算出したSから、タイマー時間Tp1を更新してもよい。そして、処理装置Miは、Recovery-Checkに遷移して(ステップS2311)、本フローチャートによる一連の処理を終了する。
【0225】
これにより、処理装置Miは、障害が発生した通信先の復旧状態を判断した際にpingとダミーリクエストの両方が1回目で成功した割合に応じて、タイマー時間Tp1を自動チューニングすることができる。
【0226】
以上説明したように、実施の形態にかかる処理装置Miによれば、通信先の障害を検出した場合、タイマー時間Tp1(第1の待ち時間)待機した後、ポーリングにより通信先の通信復旧を検出することができる。ポーリングは、例えば、pingによるポーリングである。
【0227】
これにより、処理装置Miは、通信先の障害発生時に、通常のリクエストに比べて負荷の少ないリクエストを試して、通信先が通信可能な状態まで復旧(回復)したことを確認することができる。この際、処理装置Miは、通信先の障害を検出した直後は、復旧処理があまり進んでいない可能性が高いため、通信先に負荷をかけないようにタイマー時間Tp1待機することができる。また、処理装置Miは、pingによるポーリングを利用することで、SNMPのようなポーリングに比べて、通信先により負荷をかけずに復旧状態を確認することができる。
【0228】
また、処理装置Miによれば、通信先の通信復旧を検出した場合、一定時間Trで区切った期間tごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信することができる。ダミーリクエストは、例えば、Get要求により実現される。そして、処理装置Miによれば、リクエスト成功数Csucが閾値Lsucに達したことに応じて、通信先の障害からの復旧を検出することができる。
【0229】
これにより、処理装置Miは、通信可能な状態まで復旧した通信先に対して、受信した実際のリクエストまたはダミーリクエストを試して、障害からの復旧を確認することができる。この際、処理装置Miは、受信する実際のリクエスト数が少ない場合であっても、ダミーリクエストで補完することで、通信先の障害からの復旧の検出を早めることができる。また、処理装置Miは、ダミーリクエストをGet要求で実現することで、通信先にかかる負荷を抑えつつ、データ矛盾の発生を防ぐことができる。
【0230】
また、処理装置Miによれば、リクエスト成功数Csucが閾値Lsucに達する前に、リクエストのいずれかに失敗した場合、リクエスト成功数Csucに基づいて、タイマー時間TW(第2の待ち時間)を決定することができる。また、処理装置Miによれば、決定したタイマー時間TW待機した後、一定時間Trで区切った期間tごとに、送信上限数Lrを超えないように、受信した通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを通信先に送信することができる。そして、処理装置Miによれば、リクエスト成功数Csucが閾値Lsucに達したことに応じて、通信先の障害からの復旧を検出することができる。
【0231】
これにより、処理装置Miは、通信先が通信は復旧しているものの一部のリクエストはエラーとなるような不安定な状態の場合には、通信先に負荷をかけないように一旦待機して、受信した実際のリクエストまたはダミーリクエストの送信を再開することができる。また、処理装置Miは、リクエスト成功数Csucに応じて待機時間(タイマー時間TW)を変動させることで、通信先の復旧状況に応じて柔軟なタイマー監視を実施することができ、通信先の障害からの復旧を検出するタイミングの遅れを防ぐことができる。例えば、処理装置Miは、通信先の復旧が近いにもかかわらず長い待機時間を設定して、障害からの復旧検出が遅れるといった事態を回避することができる。
【0232】
また、処理装置Miによれば、リクエスト成功数Csucが多いほど、時間長が短くなるように、タイマー時間TWを決定することができる。この際、処理装置Miは、タイマー時間Tp1よりも時間長が短くなるように、タイマー時間TWを決定してもよい。
【0233】
これにより、処理装置Miは、リクエスト成功数Csucが多いほど、通信先の障害からの復旧が近いと判断して、待機時間(タイマー時間TW)を短くすることができる。
【0234】
また、処理装置Miによれば、期間tよりも前の期間(t-1)に受信した通信先への実リクエスト数に応じて、ダミーリクエストの送信上限数D(t)を決定することができる。具体的には、例えば、処理装置Miは、期間tの直前の期間(t-1)に受信した通信先への実リクエスト数に応じて、ダミーリクエストの送信上限数D(t)を決定する。
【0235】
これにより、処理装置Miは、通信先に対して、一定の頻度のリクエストを確保しつつ、過度な負荷をかけないような、ダミーリクエストの送信上限数D(t)を決定することができる。例えば、処理装置Miは、直近の期間(t-1)における実リクエスト数から、期間tにおいて、実リクエストをできるだけ通すような、ダミーリクエスト数(D(t))を決めることができる。
【0236】
また、処理装置Miによれば、通信先の障害が検出された場合、タイマー時間Tp1待機した後、通信先に時間間隔Tp2(第1の時間間隔)でpingを送信し、pingに成功した場合、通信先に時間間隔Tp3(第2の時間間隔)でダミーリクエストを送信することができる。そして、処理装置Miによれば、ダミーリクエストに成功した場合、通信先の通信復旧を検出することができる。
【0237】
これにより、処理装置Miは、通信先において障害からの復旧のためにハードリセットが行われ、OS、アプリケーションの順に起動するような場合に、通信先におけるハードウェア、ソフトウェアの復旧を段階的に確認することができる。例えば、PollingからRecovery-Checkへの遷移をpingだけで判断すると、通信先でアプリケーションが起動していない段階で、Recovery-Checkに遷移する可能性がある。この場合、Recovery-Checkに遷移後に、すぐにリクエストに対するエラーが発生してPollingに戻る場合、Recovery-CheckからPollingへの状態遷移が頻繁に発生して復旧時間の長期化を招くおそれがある。さらに、Recovery-Checkでは、ユーザのリクエストを通信先に通すことになるため、リクエストを通した結果エラーとなる場合がある。この場合、リクエストを通さずにエラーを返す場合に比べて、トライする分、エラー応答に時間がかかり、エラーかつ応答に時間がかかるという問題が生じる。処理装置Miは、通信先におけるハードウェア、ソフトウェアの復旧を段階的に確認することで、通信先でアプリケーションが起動していない状態でのリクエストを防いで、復旧時間の長期化やエラー応答にかかる時間の長期化を防ぐことができる。
【0238】
また、処理装置Miによれば、通信先の障害を検出した回数のうち、通信先の通信復旧を検出した際に、pingおよびダミーリクエストがともに1回目に成功した回数の割合に基づいて、タイマー時間Tp1を更新することができる。
【0239】
これにより、処理装置Miは、通信先の復旧時間がシステム(サービス)ごとに異なる場合があることを考慮して、タイマー時間Tp1を自動チューニングすることができる。例えば、処理装置Miは、pingおよびダミーリクエストがともに1回目に成功した割合が高くなるようにタイマー時間Tp1を調整することで、通信先にかかる負荷を抑えつつ、通信先の通信復旧を早期に検出可能となる。
【0240】
また、処理装置Miによれば、通信先の通信復旧を検出した後、または、タイマー時間TW(第2の待ち時間)待機した後、通信先に最初に送信したリクエストに失敗した場合、通信先の通信復旧を検出する処理(Polling)に戻ることができる。例えば、処理装置Miは、PollingからRecovery-Checkに遷移した後、あるいは、WaitingからRecovery-Checkに遷移した後、通信先に最初に送信したリクエストに失敗した場合、Pollingに遷移する。
【0241】
これにより、処理装置Miは、通信先が通常のリクエストを処理できる程度まで復旧しておらず、復旧が遠い状態であるといえる場合、Pollingに戻って、通信先の通信の復旧状態を確認する処理からやり直すことができる。
【0242】
また、処理装置Miによれば、通信先の障害が検出された後、通信先の通信復旧が検出されるまでの間に、通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返すことができる。
【0243】
これにより、処理装置Miは、復旧処理中の通信先にかかる負荷を抑えることができる。また、処理装置Miは、ユーザのリクエストを通信先に通すことなくエラーを返すことで、エラー応答に時間がかかるのを防ぐことができる。
【0244】
また、処理装置Miによれば、タイマー時間TW(第2の待ち時間)の待機中に、通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返すことができる。
【0245】
これにより、処理装置Miは、復旧処理中の通信先にかかる負荷を抑えることができる。
【0246】
また、処理装置Miによれば、受信した通信先への実リクエストのうち、送信上限数Lrを超えるために送信しない実リクエストに対してエラー応答を返すことができる。
【0247】
これにより、処理装置Miは、復旧処理中の通信先にかかる負荷を抑えることができる。
【0248】
これらのことから、処理装置Miによれば、復旧中のサービスにかかる負荷を抑えつつ、サービスの復旧をいち早く検知し、要求元へのエラー応答を回避することができる。これにより、処理装置Miは、通信先を含むシステム全体の復旧時間を短縮して、トラブル解決後は直ちに元の状態に戻したいという要求を満たすことができる。
【0249】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、DVD、USBメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【0250】
また、本実施の形態で説明した情報処理装置101(処理装置Mi)は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けICやFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。
【0251】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0252】
(付記1)通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストのいずれかに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【0253】
(付記2)前記送信上限数は、前記ダミーリクエストの送信上限数を含み、
前記期間よりも前の期間に受信した前記通信先への実リクエスト数に応じて、前記ダミーリクエストの送信上限数を決定する、ことを特徴とする付記1に記載の情報処理プログラム。
【0254】
(付記3)前記ポーリングは、pingによるポーリングである、ことを特徴とする付記1または2に記載の情報処理プログラム。
【0255】
(付記4)前記通信先の通信復旧を検出する処理は、
前記通信先の障害を検出した場合、前記第1の待ち時間待機した後に、前記通信先に第1の時間間隔でpingを送信し、
前記pingに成功した場合、前記通信先に第2の時間間隔でダミーリクエストを送信し、
前記ダミーリクエストに成功した場合、前記通信先の通信復旧を検出する、
ことを特徴とする付記3に記載の情報処理プログラム。
【0256】
(付記5)前記通信先の障害を検出した回数のうち、前記通信先の通信復旧を検出した際に、前記pingおよび前記ダミーリクエストがともに1回目に成功した回数の割合に基づいて、前記第1の待ち時間を更新する、
処理を前記コンピュータに実行させることを特徴とする付記4に記載の情報処理プログラム。
【0257】
(付記6)前記第2の待ち時間を決定する処理は、
前記リクエストの成功数が多いほど、時間長が短くなるように、前記第2の待ち時間を決定する、ことを特徴とする付記1~5のいずれか一つに記載の情報処理プログラム。
【0258】
(付記7)前記第2の待ち時間を決定する処理は、さらに、前記第1の待ち時間よりも時間長が短くなるように、前記第2の待ち時間を決定する、ことを特徴とする付記6に記載の情報処理プログラム。
【0259】
(付記8)前記通信先の通信復旧を検出した後、または、前記第2の待ち時間待機した後、前記通信先に最初に送信した前記リクエストに失敗した場合、前記通信先の通信復旧を検出する処理を前記コンピュータに再度実行させることを特徴とする付記1~7のいずれか一つに記載の情報処理プログラム。
【0260】
(付記9)前記通信先の障害が検出された後、前記通信先の通信復旧が検出されるまでの間に、前記通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返す、処理を前記コンピュータに実行させることを特徴とする付記1~8のいずれか一つに記載の情報処理プログラム。
【0261】
(付記10)前記第2の待ち時間の待機中に、前記通信先への実リクエストを受信した場合、当該実リクエストに対してエラー応答を返す、処理を前記コンピュータに実行させることを特徴とする付記1~9のいずれか一つに記載の情報処理プログラム。
【0262】
(付記11)受信した前記通信先への実リクエストのうち、前記送信上限数を超えるために送信しない実リクエストに対してエラー応答を返す、処理を前記コンピュータに実行させることを特徴とする付記1~10のいずれか一つに記載の情報処理プログラム。
【0263】
(付記12)通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
処理をコンピュータが実行することを特徴とする情報処理方法。
【0264】
(付記13)通信先の障害を検出した場合、第1の待ち時間待機した後、ポーリングにより前記通信先の通信復旧を検出し、
前記通信先の通信復旧を検出した場合、所定の時間間隔で区切った期間ごとに、送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が閾値に達する前に、前記リクエストに失敗した場合、前記リクエストの成功数に基づいて、第2の待ち時間を決定し、
決定した前記第2の待ち時間待機した後、前記期間ごとに、前記送信上限数を超えないように、受信した前記通信先への実リクエスト、または、ダミーリクエストの少なくともいずれかのリクエストを前記通信先に送信し、
送信した前記リクエストの成功数が前記閾値に達したことに応じて、前記通信先の前記障害からの復旧を検出する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【0265】
101 情報処理装置
102 通信先
200 情報処理システム
201 利用者端末
202 管理者端末
210 ネットワーク
220 定数テーブル
300 バス
301 CPU
302 メモリ
303 ディスクドライブ
304 ディスク
305 通信I/F
306 可搬型記録媒体I/F
307 可搬型記録媒体
501 障害検出部
502 ポーリング部
503 復旧検出部
504 待機部
600 成否情報記録テーブル
700 表
810,820 グラフ
900 状態遷移図