(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024158306
(43)【公開日】2024-11-08
(54)【発明の名称】システム及びシステムの制御方法
(51)【国際特許分類】
G06F 11/20 20060101AFI20241031BHJP
【FI】
G06F11/20 623
【審査請求】未請求
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023073408
(22)【出願日】2023-04-27
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.PYTHON
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】河合 英宏
【テーマコード(参考)】
5B034
【Fターム(参考)】
5B034BB11
5B034BB15
(57)【要約】
【課題】スプリットブレインを抑止し、かつ、高い品質のサービスの継続を実現する。
【解決手段】システムは、複数の計算機から構成される基盤システム及び基盤システムと接続するクライアント装置を備える。基盤システムは、リーダノード及び二つ以上のフォロワノードを含むクラスタを構成する。クラスタは、定足数ベースのクラスタ管理アルゴリズムに基づいて管理される。クライアント装置は、リーダノード及びフォロワノードに同一内容の第1メッセージを送信し、リーダノードは、クライアント装置及びフォロワノードに第2メッセージを送信する。フォロワノードは、クライアント装置から第1メッセージを受信した場合、リーダノードに第1メッセージを転送し、リーダノードから第2メッセージを受信した場合、クライアント装置に第2メッセージを転送する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数の計算機から構成される基盤システム及び前記基盤システムと接続するクライアント装置を備えるシステムであって、
前記基盤システムは、サービスの主系として機能する一つのリーダノード及び前記サービスの待機系として機能する二つ以上のフォロワノードを含むクラスタを構成し、
前記クラスタは、定足数ベースのクラスタ管理アルゴリズムに基づいて管理され、
前記クライアント装置は、前記リーダノード及び少なくとも一つの前記フォロワノードに同一内容の第1メッセージを送信し、
前記リーダノードは、前記クライアント装置からの前記第1メッセージに対する応答として、前記クライアント装置及び少なくとも一つの前記フォロワノードに第2メッセージを送信し、
前記フォロワノードは、
前記クライアント装置から前記第1メッセージを受信した場合、前記リーダノードに前記第1メッセージを転送し、
前記リーダノードから前記第2メッセージを受信した場合、前記クライアント装置に前記第2メッセージを転送することを特徴とするシステム。
【請求項2】
請求項1に記載のシステムであって、
前記リーダノードは、
前記クライアント装置から直接受信する前記第1メッセージの受信時間、及び前記フォロワノードを介して受信する前記第1メッセージの受信時間の差分に基づいて、前記クライアント装置及び前記リーダノードの間の通信経路の通信遅延、並びに、前記クライアント装置及び前記フォロワノードの間の通信経路の通信遅延を評価し、
前記クライアント装置及び前記リーダノードの間の通信経路で通信遅延が発生している場合、前記第1メッセージの受付を停止し、前記サービスの提供を終了する、前記リーダノードの閉塞処理を実行し、
前記クライアント装置及び前記フォロワノードの間の通信経路で通信遅延が発生している場合、前記フォロワノードとしての機能を停止させる前記フォロワノードの閉塞処理を実行することを特徴とするシステム。
【請求項3】
請求項1に記載のシステムであって、
前記リーダノードは、
前記第1メッセージの受信状態を監視し、
前記監視の結果に基づいて、前記クライアント装置から直接前記第1メッセージを受信できているか否かを判定し、
前記クライアント装置から直接前記第1メッセージを受信できていない場合、前記第1メッセージの受付を停止し、前記サービスの提供を終了する、前記リーダノードの閉塞処理を実行することを特徴とするシステム。
【請求項4】
請求項1に記載のシステムであって、
前記リーダノードは、
前記第1メッセージの受信状態を監視し、
前記監視の結果に基づいて、前記フォロワノードが前記第1メッセージを受信できているか否かを判定し、
前記フォロワノードが前記第1メッセージを受信できていない場合、前記フォロワノードとしての機能を停止させる前記フォロワノードの閉塞処理を実行することを特徴とするシステム。
【請求項5】
複数の計算機から構成される基盤システム及び前記基盤システムと接続するクライアント装置を備えるシステムの制御方法であって、
前記基盤システムは、サービスの主系として機能する一つのリーダノード及び前記サービスの待機系として機能する二つ以上のフォロワノードを含むクラスタを構成し、
前記クラスタは、定足数ベースのクラスタ管理アルゴリズムに基づいて管理され、
前記システムの制御方法は、
前記クライアント装置が、前記リーダノード及び少なくとも一つの前記フォロワノードに同一内容の第1メッセージを送信するステップと、
前記フォロワノードが、前記クライアント装置から前記第1メッセージを受信した場合、前記リーダノードに前記第1メッセージを転送するステップと、
前記リーダノードが、前記クライアント装置からの前記第1メッセージに対する応答として、前記クライアント装置及び少なくとも一つの前記フォロワノードに第2メッセージを送信するステップと、
前記フォロワノードが、前記リーダノードから前記第2メッセージを受信した場合、前記クライアント装置に前記第2メッセージを転送するステップと、を含むことを特徴とするシステムの制御方法。
【請求項6】
請求項5に記載のシステムの制御方法であって、
前記リーダノードが、前記クライアント装置から直接受信する前記第1メッセージの受信時間、及び前記フォロワノードを介して受信する前記第1メッセージの受信時間の差分に基づいて、前記クライアント装置及び前記リーダノードの間の通信経路の通信遅延、並びに、前記クライアント装置及び前記フォロワノードの間の通信経路の通信遅延を評価するステップと、
前記クライアント装置及び前記リーダノードの間の通信経路で通信遅延が発生している場合、前記リーダノードが、前記第1メッセージの受付を停止し、前記サービスの提供を終了する、前記リーダノードの閉塞処理を実行するステップと、
前記クライアント装置及び前記フォロワノードの間の通信経路で通信遅延が発生している場合、前記リーダノードが、前記フォロワノードとしての機能を停止させる前記フォロワノードの閉塞処理を実行するステップと、を含むことを特徴とするシステムの制御方法。
【請求項7】
請求項5に記載のシステムの制御方法であって、
前記リーダノードが、前記第1メッセージの受信状態を監視するステップと、
前記リーダノードが、前記監視の結果に基づいて、前記クライアント装置から直接前記第1メッセージを受信できているか否かを判定するステップと、
前記クライアント装置から直接前記第1メッセージを受信できていない場合、前記リーダノードが、前記第1メッセージの受付を停止し、前記サービスの提供を終了する、前記リーダノードの閉塞処理を実行するステップと、を含むことを特徴とするシステムの制御方法。
【請求項8】
請求項5に記載のシステムの制御方法であって、
前記リーダノードが、前記第1メッセージの受信状態を監視するステップと、
前記リーダノードが、前記監視の結果に基づいて、前記フォロワノードが前記第1メッセージを受信できているか否かを判定するステップと、
前記フォロワノードが前記第1メッセージを受信できていない場合、前記リーダノードが、前記フォロワノードとしての機能を停止させる前記フォロワノードの閉塞処理を実行するステップと、を含むことを特徴とするシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、高い可用性を実現するシステムに関する。
【背景技術】
【0002】
可用性を確保する方法としてクラスタ構成が使用される。クラスタ構成では、一つのノードが主系として稼働し、他のノードが待機系となっている。主系のノードに障害が発生した場合、いずれかの待機系のノードが主系としてサービスを継続する。
【0003】
クラスタ構成では、スプリットブレインが問題となる。スプリットブレインを防止する方法として、例えば、特許文献1に記載の方法が知られている。
【0004】
特許文献1には「第1施設に設置されたコンピュータは、複数の第2施設それぞれに1システムずつ設置された複数の外部システムのいずれとも直接の通信が不通の場合、自システムが孤立状態であると判定する。コンピュータは、複数の外部システムのうち、最終生存確認時刻から所定時間以上経過している第1外部システムについて、停止状態であると判定する。またコンピュータは、複数の外部システムのうち、直接通信が可能な第2外部システムについて、生存状態であると判定する。そしてコンピュータは、最終生存確認時刻から所定時間以上経過しておらず、直接の通信が不通の第3外部システムがある場合、所定の条件に基づいて、自システムと第3外部システムとのうちの一方を停止状態にし、他方を生存状態にすると判定する。」ことが記載されている。
【0005】
特許文献1に記載の技術を用いれば、システムは他のシステムの状態を把握することができるため、スプリットブレインを抑止することができる。
【先行技術文献】
【特許文献】
【0006】
【発明の概要】
【発明が解決しようとする課題】
【0007】
クライアント装置は、ネットワークを介してシステムと通信することによって、サービスを利用する。主系として稼働するノードとクライアント装置との間の通信に障害が発生した場合、サービスを正しく提供できなくなる。この場合、主系を切り替える必要がある。しかし、特許文献1に記載の技術では前述の課題に対応できない。また、前述の通信経路上でパケットロストや通信遅延が発生した場合、クライアント装置は期待する時間内に応答を受信できない。これは通信の定時性を期待する制御システムにおいて問題となる。
【0008】
本発明は、スプリットブレインを抑止し、かつ、高い品質のサービスの継続を実現するシステムを提供する。
【課題を解決するための手段】
【0009】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、複数の計算機から構成される基盤システム及び前記基盤システムと接続するクライアント装置を備えるシステムであって、前記基盤システムは、サービスの主系として機能する一つのリーダノード及び前記サービスの待機系として機能する二つ以上のフォロワノードを含むクラスタを構成し、前記クラスタは、定足数ベースのクラスタ管理アルゴリズムに基づいて管理され、前記クライアント装置は、前記リーダノード及び少なくとも一つの前記フォロワノードに同一内容の第1メッセージを送信し、前記リーダノードは、前記クライアント装置からの前記第1メッセージに対する応答として、前記クライアント装置及び少なくとも一つの前記フォロワノードに第2メッセージを送信し、前記フォロワノードは、前記クライアント装置から前記第1メッセージを受信した場合、前記リーダノードに前記第1メッセージを転送し、前記リーダノードから前記第2メッセージを受信した場合、前記クライアント装置に前記第2メッセージを転送する。
【発明の効果】
【0010】
本発明によれば、スプリットブレインを抑止し、かつ、高い品質のサービスの継続を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0011】
【
図1】実施例1のシステムの構成の一例を示す図である。
【
図2】実施例1の計算機のハードウェアの構成の一例を示す図である。
【
図3】実施例1のセッション管理情報のデータ構造の一例を示す図である。
【
図4】実施例1のメッセージ管理情報のデータ構造の一例を示す図である。
【
図5】実施例1の経路管理情報のデータ構造の一例を示す図である。
【
図6】実施例1のクラスタ管理情報のデータ構造の一例を示す図である。
【
図7】実施例1のメッセージ管理情報のデータ構造の一例を示す図である。
【
図8】実施例1のクライアント装置が実行するメッセージ送信処理の一例を説明するフローチャートである。
【
図9A】実施例1のノードが実行するメッセージ受信処理の一例を説明するフローチャートである。
【
図9B】実施例1のノードが実行するメッセージ受信処理の一例を説明するフローチャートである。
【
図10】実施例1のノードが実行するメッセージ管理情報の更新処理の一例を説明するフローチャートである。
【
図11A】実施例1のノードが実行する経路管理情報の更新処理の一例を説明するフローチャートである。
【
図11B】実施例1のノードが実行する経路管理情報の更新処理の一例を説明するフローチャートである。
【
図12】実施例1のクライアント装置が実行するメッセージ受信処理の一例を説明するフローチャートである。
【
図13】実施例2のメッセージ管理情報のデータ構造の一例を示す図である。
【
図14】実施例2のノードが実行するメッセージ管理情報の更新処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0012】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0013】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0014】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【0015】
図面等において示す各構成の位置、大きさ、形状、及び範囲等は、発明の理解を容易にするため、実際の位置、大きさ、形状、及び範囲等を表していない場合がある。したがって、本発明では、図面等に開示された位置、大きさ、形状、及び範囲等に限定されない。
【実施例0016】
図1は、実施例1のシステムの構成の一例を示す図である。
図2は、実施例1の計算機のハードウェアの構成の一例を示す図である。
【0017】
システムは、基盤システム100及びクライアント装置101から構成される。基盤システム100及びクライアント装置101は、LAN(Local Area Network)等のネットワーク102を介して接続される。ネットワーク102の接続方式は有線及び無線のいずれでもよい。
【0018】
基盤システム100は、サービスを提供するためのリソースを提供するシステムであり、複数の計算機200から構成される。計算機200は、例えば、プロセッサ201、主記憶装置202、副記憶装置203、及びネットワークインタフェース204を有する。
【0019】
以下の説明では、機能部を主語に処理を説明する場合、プロセッサ201が当該機能部を実現するプログラムを実行していることを示す。
【0020】
なお、基盤システム100は、ネットワークスイッチ及びストレージシステムを含んでもよい。
【0021】
基盤システム100には、サービスを提供する複数のノード110が存在する。可用性を確保するために、複数のノード110を用いてクラスタが構成される。クラスタに含まれるノード110の数は3以上であるものとする。なお、共通の障害点を持たないようにするために、異なる拠点のノード110を用いてクラスタを構成することが望ましい。
【0022】
クラスタは、スプリットブレインを抑止するために、RAFT等の定足数ベースのクラスタ管理アルゴリズムに基づいて管理される。クラスタでは、一つのノード110がリーダ(主系)として機能し、他のノード110はフォロワ(待機系)として機能する。
【0023】
ノード110は、サービスを提供するアプリケーションが稼働するインスタンスであり、計算機200でもよいし、仮想計算機又はコンテナでもよい。ノード110は、アプリケーション実行部120及び通信管理部121を有し、また、セッション管理情報123、メッセージ管理情報124、及び経路管理情報125を保持する。
【0024】
アプリケーション実行部120は、サービスを提供するアプリケーションを実行する。通信管理部121は、通信の制御を行う。通信管理部121は、プロキシ部130、クラスタ管理部131、多重化通信部132、及び通信異常検知部133を含む。
【0025】
プロキシ部130は、通信の中継を行う。クラスタ管理部131は、定足数ベースのクラスタ管理アルゴリズムに基づいてクラスタを管理する。例えば、クラスタ管理部131は、ノード110の生存監視及びノード110の縮退処理を実行する。多重化通信部132は、ノード110及びクライアント装置101間の通信を多重化する。通信異常検知部133は、通信の異常を検知する。
【0026】
なお、ノード110が有する各機能部については、複数の機能部を一つの機能部にまとめてもよいし、一つの機能部を機能毎に複数の機能部に分けてもよい。
【0027】
セッション管理情報123は、ノード110及びクライアント装置101間の通信のセッションを管理するための情報である。メッセージ管理情報124は、クライアント装置101が送信したメッセージの受信状態を管理するための情報である。経路管理情報125は、ノード110とクライアント装置101との間の通信経路の状態を管理するための情報である。
【0028】
クライアント装置101は、サービスを利用する装置である。クライアント装置101は、図示しない、プロセッサ、主記憶装置、副記憶装置、ネットワークインタフェース、入力装置、及び出力装置を有する。
【0029】
クライアント装置101は、アプリケーション実行部140及び通信管理部141を有し、また、クラスタ管理情報142及びメッセージ管理情報143を保持する。
【0030】
アプリケーション実行部140は、サービスを利用するためのアプリケーションを実行する。通信管理部141は、通信の制御を行う。具体的には、通信管理部141は、通信の中継及び通信の多重化を行う。
【0031】
クラスタ管理情報142は、クラスタの構成を管理するための情報である。メッセージ管理情報143は、ノード110が送信したメッセージの受信状態を管理するための情報である。
【0032】
なお、アプリケーション実行部140及び通信管理部141は、仮想計算機又はコンテナを用いて実現してもよい。
【0033】
図3は、実施例1のセッション管理情報123のデータ構造の一例を示す図である。
【0034】
セッション管理情報123は、セッションID301、DS(Downstream)宛先情報302、及びSS(Sidestream)宛先情報303を含むエントリを格納する。一つのセッションに対して一つのエントリが存在する。なお、エントリに含まれるフィールドは一例であってこれに限定されない。
【0035】
セッションID301は、セッションのIDを格納するフィールドである。DS宛先情報302は、メッセージ送信元のクライアント装置101の宛先情報を格納するフィールドである。DS宛先情報302には、例えば、IPアドレス及びポート番号等が格納される。SS宛先情報303は、メッセージの送信元のノード110の宛先情報を格納するフィールドである。SS宛先情報303には、例えば、IPアドレス及びポート番号等が格納される。
【0036】
クライアント装置101から受信したメッセージ、及びリーダノード110がフォロワノード110経由で受信したクライアント装置101からのメッセージにはセッションIDを含む。このセッションIDが初めて見るIDだった場合、当該セッションIDを持つエントリをセッション管理情報123に追加する。また、受信したメッセージがクライアント装置101から送信されたものだった場合、同じセッションIDを持つエントリのDS宛先情報に当該クライアント装置101の宛先情報を記録する。フォロワ経由で受信した場合、同じセッションIDを持つエントリのSS宛先情報に当該フォロワノードの宛先情報を記録する。
【0037】
図4は、実施例1のメッセージ管理情報124のデータ構造の一例を示す図である。
【0038】
メッセージ管理情報124は、セッションID401、通番402、直接受信403、及び間接受信404を含むエントリを格納する。セッションID及び通番の組みに対して一つのエントリが存在する。
【0039】
セッションID401は、セッションのIDを格納するフィールドである。通番402は、メッセージに付与される通番を格納するフィールドである。通番はセッション内でメッセージを識別するために用いられる。
【0040】
直接受信403は、他のノード110を経由することなくクライアント装置101から直接メッセージを受信したか否かを示すフラグを格納するフィールドである。初期値として「0」が設定され、直接受信した場合「1」が格納される。間接受信404は、他のノード110を経由してメッセージを受信したか否かを示すフラグを格納するフィールドである。初期値として「0」が設定され、間接受信した場合「1」が格納される。
【0041】
図5は、実施例1の経路管理情報125のデータ構造の一例を示す図である。
【0042】
経路管理情報125は、経路501、受信時刻502、及びカウンタ503を含むエントリを格納する。クライアント装置101がメッセージを送信するノード110に対して一つのエントリが存在する。
【0043】
経路501は、クライアント装置101及びノード110の間の通信経路の識別情報を格納する。「直接」は経路管理情報125を保持するノード110とクライアント装置101との間の通信経路を表す。「間接」は他のノード110を経由した、経路管理情報125を保持するノード110とクライアント装置101との間の通信経路を表す。
【0044】
受信時刻502は、当該経路において最後に受信したメッセージの受信時刻を格納するフィールドである。カウンタ503は、ノード110が通信経路を介して送信されるメッセージを受信していない回数を格納するフィールドである。カウンタ503には初期値として「0」が設定される。
【0045】
図6は、実施例1のクラスタ管理情報142のデータ構造の一例を示す図である。
【0046】
クラスタ管理情報142は、クラスタ名601、宛先情報602、及びタイプ603を格納するフィールドである。クラスタ及びノードの組みに対して一つのエントリが存在する。
【0047】
クラスタ名601は、クラスタの識別情報を格納するフィールドである。宛先情報602は、クラスタに含まれるノード110の宛先情報を格納するフィールドである。宛先情報602には、例えば、IPアドレス及びポート番号等が格納される。タイプ603は、クラスタにおけるノード110のタイプを格納するフィールドである。
【0048】
本実施例では、リーダノード110と、少なくとも一つのフォロワノード110とにメッセージが送信されるようにクラスタ管理情報142が設定される。
【0049】
クラスタ管理情報142は、予め手動で設定してもよいし、基盤システム100の利用開始時に基盤システム100から取得してもよい。また、基盤システム100は、クラスタの構成が変更された場合、任意のタイミングで更新されたクラスタ管理情報142を送信する。
【0050】
図7は、実施例1のメッセージ管理情報143のデータ構造の一例を示す図である。
【0051】
メッセージ管理情報143は、セッションID701及び通番702を含むエントリを格納する。セッションID及び通番の組みに対して一つのエントリが存在する。
【0052】
セッションID701及び通番702は、セッションID401及び通番402と同一のフィールドである。
【0053】
図8は、実施例1のクライアント装置101が実行するメッセージ送信処理の一例を説明するフローチャートである。
【0054】
クライアント装置101の通信管理部141は、アプリケーション実行部140からノード110へのメッセージの送信リクエストの受信を監視する(ステップS101)。
【0055】
送信リクエストを受信した場合、通信管理部141は、クラスタ管理情報142を参照して送信先のノード110を特定する(ステップS102)。
【0056】
具体的には、通信管理部141は、送信リクエストに含まれるアプリケーションの名称を取得し、クラスタ名601にアプリケーションの名称が格納されるエントリを検索する。
【0057】
通信管理部141は、リーダノード110及び少なくとも一つのフォロワノード110に同一のメッセージを送信する(ステップS103)。その後、通信管理部141は、送信リクエストの受信の監視を継続する。
【0058】
このとき、メッセージにはセッションID及び通番が含まれる。通番は、通信管理部141によって決定される。セッションIDはクライアント装置101上のアプリケーションと、ノード110上のアプリケーションの間の一連の送受信を区別するものであり、一連の送受信を開始する際に、固有の値を割り当てる。ここでいう一連の送受信とは、例えばTCP通信におけるセッションの確立から切断までに相当する。セッションIDとしては、例えば送信元IPアドレスとポート番号の組み合わせなどを用い、唯一性を保証することができる。通番はセッションIDごと、かつ送受信の方向ごとに管理される通し番号であり、当該セッションIDにて新たなメッセージを送信する都度、1ずつ加算していく。
【0059】
図9A及び
図9Bは、実施例1のノード110が実行するメッセージ受信処理の一例を説明するフローチャートである。
【0060】
ノード110の通信管理部121は、メッセージの受信を監視する(ステップS201)。
【0061】
メッセージを受信した場合、通信管理部121は、メッセージに含まれる送信元の情報に基づいて、受信したメッセージはクライアント装置101から送信されたメッセージであるか否かを判定する(ステップS202)。
【0062】
受信したメッセージはクライアント装置101から送信されたメッセージである場合、通信管理部121は、クラスタ管理部131に問合せを行うことによって、自身がリーダノード110であるか否かを判定する(ステップS203)。
【0063】
自身がリーダノード110ではない場合、通信管理部121は、クラスタ管理部131に問合せを行ってリーダノード110を特定し、リーダノード110にメッセージを転送する(ステップS204)。その後、通信管理部121は、メッセージの受信の監視を継続する。
【0064】
自身がリーダノード110である場合、通信管理部121は、メッセージ管理情報124の更新処理を実行し(ステップS205)、また、経路管理情報125の更新処理を実行する(ステップS206)。メッセージ管理情報124の更新処理の詳細は
図10を用いて説明する。経路管理情報125の更新処理の詳細は
図11A及び
図11Bを用いて説明する。
【0065】
通信管理部121は、メッセージ管理情報124を参照して、同一メッセージを受信済みであるか否かを判定する(ステップS207)。
【0066】
具体的には、通信管理部121は、セッションID401及び通番402の組合せが、受信したメッセージに含まれるセッションID及び通番の組合せと一致するエントリが存在するか否かを判定する。前述の条件を満たすエントリが存在する場合、通信管理部121は、同一メッセージを受信済みであると判定する。
【0067】
同一メッセージを受信済みである場合、通信管理部121は、当該メッセージを破棄し、メッセージの受信の監視を継続する。
【0068】
同一メッセージを受信していない場合、通信管理部121は、アプリケーション実行部120にメッセージを転送する(ステップS208)。その後、通信管理部121はメッセージの受信の監視を継続する。
【0069】
ステップS202において、受信したメッセージはクライアント装置101から送信されたメッセージではないと判定された場合、すなわち、受信したメッセージはアプリケーション実行部120、又はリーダノード110から送信されたメッセージであると判定された場合、通信管理部121は、クラスタ管理部131に問合せを行うことによって、自身がリーダノード110であるか否かを判定する(ステップS209)。
【0070】
自身がリーダノード110である場合、通信管理部121は、セッション管理情報123を参照して、送信先のクライアント装置101及びフォロワノード110を特定し、クライアント装置101にメッセージを送信し、また、フォロワノード110にメッセージを転送する(ステップS210)。その後、通信管理部121はメッセージの受信の監視を継続する。このとき、通信管理部121はメッセージに通番を付与する。
【0071】
自身がリーダノード110ではない場合、通信管理部121は、セッション管理情報123を参照して、送信先のクライアント装置101を特定し、クライアント装置101にメッセージを送信する(ステップS211)。その後、通信管理部121はメッセージの受信の監視を継続する。
【0072】
図10は、実施例1のノード110が実行するメッセージ管理情報124の更新処理の一例を説明するフローチャートである。
【0073】
通信管理部121は、メッセージ管理情報124を参照して、同一メッセージを受信済みであるか否かを判定する(ステップS301)。ステップS301の処理はステップS207の処理と同一である。
【0074】
同一メッセージを受信済みである場合、通信管理部121は、該当エントリを更新し(ステップS302)、メッセージ管理情報124の更新処理を終了する。
【0075】
具体的には、クライアント装置101から直接メッセージを受信した場合、通信管理部121は、該当エントリの直接受信403を「1」に更新し、他のノード110を経由してメッセージを受信した場合、該当エントリの間接受信404を「1」に更新する。
【0076】
同一メッセージを受信していない場合、通信管理部121は、メッセージ管理情報124にエントリを追加し(ステップS303)、メッセージ管理情報124の更新処理を終了する。
【0077】
具体的には、通信管理部121は、メッセージ管理情報124にエントリを追加し、メッセージに含まれるセッションID及び通番を、追加されたエントリのセッションID401及び通番402に設定する。通信管理部121は、クライアント装置101から直接メッセージを受信した場合、追加されたエントリの直接受信403に「1」を設定し、他のノード110を経由してメッセージを受信した場合、追加されたエントリの間接受信404に「1」を設定する。
【0078】
なお、通信管理部121は、直接受信403及び間接受信404が「1」であるエントリを任意のタイミングで削除してもよい。これば、メッセージを正常に受信したことが確認できたため、管理が不要となるためである。
【0079】
図11A及び
図11Bは、実施例1のノード110が実行する経路管理情報125の更新処理の一例を説明するフローチャートである。
【0080】
通信管理部121は、経路管理情報125の該当エントリの最終受信時刻を現在時刻に更新する(ステップS401)。
【0081】
具体的には、通信管理部121は、メッセージの送信元を特定し、経路501に送信元が格納されるエントリを検索する。通信管理部121は、検索されたエントリの受信時刻502に現在時刻を格納する。
【0082】
通信管理部121は、通信経路が「直接」であるか否かを判定する(ステップS402)。
【0083】
通信経路が「直接」でない場合、通信管理部121は、該当する「間接」エントリのカウンタ503をクリアする(ステップS403)。具体的には、カウンタ503の値が「0」に変更される。
【0084】
通信管理部121は、「直接」のエントリのカウンタ503の値を1インクリメントする(ステップS404)。
【0085】
通信管理部121は、リーダノード110及びクライアント装置101の間の通信経路において、全てのクライアント装置101に共通する部位(例えばリーダノード110近傍のルータ)で通信障害が発生しているか否かを判定する(ステップS405)。
【0086】
具体的には、通信管理部121は、条件(1)及び条件(2)を満たすか否かを判定する。なお、第1閾値及び第2閾値は任意の値を設定できる。
【0087】
(1)該当「間接」エントリの受信時刻Tiから「直接」のエントリの受信時刻Tdを減算した値(Ti-Td)が第1閾値以上である。
(2)「直接」のエントリのカウンタ503の値が第2閾値以上である。
【0088】
条件(1)及び条件(2)を満たす場合、一定期間、フォロワノード110のみからクライアント装置101が送信したメッセージを受信していることを示す。すなわち、リーダノード110はクライアント装置101からメッセージを受信できていないことを示す。そのため、条件(1)及び条件(2)を満たす場合、通信管理部121は、リーダノード110と、全てのクライアント装置101の間の共通する通信経路で通信障害が発生していると判定する。
【0089】
リーダノード110及びクライアント装置101の間の通信経路で通信障害が発生していない場合、通信管理部121は経路管理情報125の更新処理を終了する。
【0090】
リーダノード110及びクライアント装置101の間の通信経路で通信障害が発生している場合、通信管理部121は、リーダノード110の縮退処理を実行し(ステップS406)、その後、経路管理情報125を終了する。これによって、リーダノード110はクラスタから切り離され、定足数ベースのクラスタ管理アルゴリズムに基づいて新たなリーダノード110が決定される。
【0091】
ステップS402において、通信経路が「直接」であると判定された場合、通信管理部121は、「直接」のエントリのカウンタ503をクリアする(ステップS407)。具体的には、カウンタ503の値が「0」に更新される。
【0092】
通信管理部121は、全ての「間接」のエントリのカウンタ503の値を1インクリメントする(ステップS408)。
【0093】
通信管理部121は、クライアント装置101との間の通信経路で通信障害が発生しているフォロワノード110があるか否かを判定する(ステップS409)。
【0094】
具体的には、通信管理部121は、各「間接」の経路について条件(3)及び条件(4)を満たすか否かを判定する。なお、第3閾値及び第4閾値は任意の値を設定できる。また、通信経路毎に異なる第3閾値及び第4閾値を設定できる。
【0095】
(3)「間接」のエントリの受信時刻Tiから「直接」のエントリの受信時刻Tdを減算した値(Ti-Td)が第3閾値以上である。
(4)「間接」のエントリのカウンタ503の値が第4閾値以上である。
【0096】
条件(3)及び条件(4)を満たす場合、一定期間、クライアント装置101のみからクライアント装置101が送信したメッセージを受信していることを示す。すなわち、フォロワノード110はクライアント装置101からメッセージを受信できていないことを示す。そのため、条件(3)及び条件(4)を満たす場合、通信管理部121は、フォロワノード110及びクライアント装置101の間の通信経路で通信障害が発生していると判定する。なお、リーダノード110とフォロワノード110間の通信経路は、前述したようにRAFT等の定足数ベースの生存監視により、その健全性が保証されている。すなわち、リーダノード110とフォロワノード110間の通信経路に障害があった場合、別途RAFT等により障害が検知され、該当ノードはクラスタから切り離され、別の健全なノード110により代替される。よって、ここでリーダノード110がフォロワノード110経由のメッセージ受信が無かった場合、それはリーダノード110とフォロワノード110間ではなく、フォロワノード110とクライアント装置101との間の通信経路に問題があったと見做すことができる。
【0097】
クライアント装置101との間の通信経路で通信障害が発生しているフォロワノード110がない場合、通信管理部121は経路管理情報125の更新処理を終了する。
【0098】
クライアント装置101との間の通信経路で通信障害が発生しているフォロワノード110がある場合、通信管理部121は、当該フォロワノード110の縮退処理を実行し(ステップS410)、その後、経路管理情報125を終了する。これによって、フォロワノード110はクラスタから切り離される。
【0099】
なお、リーダノード110の通信管理部121は、アプリケーション実行部120の生存監視を行い、アプリケーション実行部120の障害発生を検知した場合、リーダノード110の縮退処理を実行してもよい。アプリケーション実行部120の生存監視は、生存確認用のリクエストに対する応答の監視及びウォッチドッグタイマを用いた監視等が考えられる。
【0100】
図12は、実施例1のクライアント装置101が実行するメッセージ受信処理の一例を説明するフローチャートである。
【0101】
クライアント装置101の通信管理部141は、メッセージの受信を監視する(ステップS501)。
【0102】
メッセージを受信した場合、通信管理部141は、メッセージ管理情報143を更新する(ステップS502)。
【0103】
具体的には、通信管理部141は、セッションID701及び通番702の組合せが、受信したメッセージに含まれるセッションID及び通番の組合せと一致するエントリが存在するか否かを判定する。前述の条件を満たすエントリが存在しない場合、通信管理部121は、メッセージ管理情報143にエントリを追加する。前述の条件を満たすエントリが存在する場合、通信管理部121は、メッセージ管理情報143から当該エントリを削除する。
【0104】
通信管理部141は、メッセージ管理情報143を参照して、同一メッセージを受信済みであるか否かを判定する(ステップS503)。ステップS502の処理結果に基づいて判定が行われる。
【0105】
同一メッセージを受信済みである場合、通信管理部141は、当該メッセージを破棄し、メッセージの受信の監視を継続する。
【0106】
同一メッセージを受信していない場合、通信管理部141は、アプリケーション実行部140に転送する(ステップS504)。その後、通信管理部141はメッセージの受信の監視を継続する。
【0107】
実施例1のシステムでは、クライアント装置101は、リーダノード110及びフォロワノード110に同一メッセージを送信し、フォロワノード110はリーダノード110にメッセージを転送する。また、リーダノード110は、直接クライアント装置101にメッセージを送信し、また、フォロワノード110を経由してメッセージを送信する。フォロワノード110は、リーダノード110から受信したメッセージをクライアント装置101に転送する。これによって、リーダノード110とクライアント装置101間、又はフォロワノード110とクライアント装置101間の通信経路の一方で通信障害やパケットロスが発生したとしても、クライアント装置101とリーダノード110は特段の遅延なくメッセージを送受信できるため、応答性の高いサービスを継続することができる。
【0108】
また、リーダノード110は、メッセージの受信状態に基づいて、ノード110及びクライアント装置101の間の通信経路の通信障害を検知し、リーダノード110の切り替え及びフォロワノード110の切り離しを迅速に行うことができる。
【0109】
本発明は、システムの構成及びネットワークの構成に依存しないため、様々なシステムに適用することができる。また、本発明は、専用の機器を用いる必要が無いため、導入コストを抑えることができる。
メッセージ管理情報124は、セッションID401、通番402、及びタイムスタンプ451を含むエントリを格納する。セッションID及び通番の組みに対して一つのエントリが存在する。
実施例2では、フォロワノード110は、リーダノード110にメッセージを転送する場合、フォロワノード110がメッセージを受信した時刻を当該メッセージに含めて転送する。
通信管理部121は、メッセージ管理情報124を参照して、同一メッセージを受信済みであるか否かを判定する(ステップS301)。ステップS301の処理はステップS207の処理と同一である。
具体的には、クライアント装置101から直接メッセージを受信した場合、通信管理部121は、該当エントリのタイムスタンプ451の直接のフィールドに、通信管理部121がメッセージを受信した時刻を格納する。フォロワノード110を経由してメッセージを受信した場合、通信管理部121は、該当エントリのタイムスタンプ451のフォロワノード110のフィールドに、メッセージに含まれる受信時刻を格納する。
具体的には、通信管理部121は、メッセージ管理情報124にエントリを追加し、メッセージに含まれるセッションID及び通番を、追加されたエントリのセッションID401及び通番402に設定する。通信管理部121は、クライアント装置101から直接メッセージを受信した場合、追加されたエントリのタイムスタンプ451の直接のフィールドに通信管理部121がメッセージを受信した時刻を設定する。フォロワノード110を経由してメッセージを受信した場合、通信管理部121は、追加されたエントリのタイムスタンプ451のフォロワノード110のフィールドにメッセージに含まれる受信時刻を設定する。
ステップS351の処理又はステップS352の処理の実行後、通信管理部121は、同一メッセージをクライアント装置101及びフォロワノード110の双方から受信したか否かを判定する(ステップS353)。
なお、メッセージの受信について待ち時間を設定し、クライアント装置101及びフォロワノード110のいずれかからメッセージを受信した後、待ち時間を経過した場合、通信管理部121は、タイムアウトと判定し、最初のメッセージの受信時刻に所定時間を加算した時刻を、受信していない経路のフィールドに設定する。
同一メッセージをクライアント装置101及びフォロワノード110の双方から受信していない場合、通信管理部121はメッセージ管理情報124の更新処理を終了する。
同一メッセージをクライアント装置101及びフォロワノード110の双方から受信した場合、通信管理部121は、直接及び間接のペアについて、式(1)に示すΔTdと、式(2)に示すΔTiを算出する(ステップS354)。
通信管理部121は、ΔTd及びΔTiの移動平均を算出する(ステップS355)。例えば、30秒間の移動平均が算出される。なお、移動平均の算出には、クライアント装置101及びフォロワノード110の双方からメッセージを受信したセッションのエントリのΔTd及びΔTiを用いる。
例えば、ΔTdの移動平均が閾値より大きい場合、通信管理部121は、リーダノード110及びクライアント装置101の間の通信経路に通信遅延が発生していると判定する。ΔTdの移動平均が閾値より大きい場合、通信管理部121は、フォロワノード110及びクライアント装置101の間の通信経路に通信遅延が発生していると判定する。
通信遅延が発生している通信経路が存在する場合、通信管理部121は、当該通信経路を使用するノード110の縮退処理を実行し(ステップS357)、その後、メッセージ管理情報124の更新処理を終了する。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Python、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。