(57)【要約】【課題】分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑える。【解決手段】クライアント３−１〜３−Ｎからのメッセージを複数のノード２−１〜２−Ｎのいずれかに振り分ける負荷分散装置１は、ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、離脱開始時刻とを対応付けて記憶しているノード識別子管理テーブル１３と、メッセージから抽出したkeyとノード識別子との関係で所定の第１のルールに従って振り分け先と決定したノードが離脱中であるか否かを、テーブル１３を参照して判定し、離脱中である場合、振り分け先と決定したノードの離脱開始時刻よりも、メッセージから抽出したデータ生成時刻が前であれば、決定したノードを振り分け先として確定し、前でなければ、第１のルールに従って決定した他のノードを振り分け先として確定する振り分け処理部１２と、を備える。【選択図】図１
2019021022.tif 000002
【特許請求の範囲】
【請求項１】
クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置であって、
前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有し、
前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第１のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定する振り分け処理部、を備える、
ことを特徴とする負荷分散装置。
【請求項２】
前記複数のノードが保持するデータが冗長化されており、前記データの原本、および、前記データの１または複数の複製をそれぞれ、異なるノード間で保持する場合、
前記振り分け処理部は、
前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第２のルールに従って複製先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
離脱中である場合、前記複製先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記複製先と決定したノードを複製先として確定し、前でなければ、前記複製先と決定したノード以外のノードのうち前記第２のルールに従って決定したノードを複製先として確定する、
ことを特徴とする請求項１に記載の負荷分散装置。
【請求項３】
クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置における負荷分散方法であって、
前記負荷分散装置は、
前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有しており、
前記メッセージから抽出したkeyと、前記ノード識別子管理情報で記憶されているノード識別子との関係で所定の第１のルールに従って振り分け先となるノードを決定するステップと、
前記振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定するステップと、
離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定するステップと、を実行する、
ことを特徴とする負荷分散方法。
【請求項４】
クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置としてのコンピュータを、
前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を管理するノード識別子管理手段、
前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第１のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定する振り分け処理手段、
として機能させるための負荷分散プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷分散装置、負荷分散方法、および、負荷分散プログラムに関する。
【背景技術】
【０００２】
近年、クラウドコンピューティングの隆盛に伴い、多量なデータの処理や保持を効率的に行うことが求められている。そこで、複数のサーバを協調動作させることにより効率的な処理を実現する分散処理技術が発展している。
【０００３】
分散処理を行う際には、クラスタを構成する各サーバ（以下、「ノード」と呼ぶ場合がある）が担当するデータを決定する必要がある。このとき、クラスタ全体での処理能力を高めるために、各ノードが担当するデータ数を平均化するデータ管理方法が用いられることが多い。そのようなデータ管理方法を用いた場合、ノードが追加されたり離脱したりすると、各ノードが担当するデータが変更するため、担当するデータの移行が行われる。
【０００４】
ノードの追加や離脱に伴うデータの移行を、全データのうちごく一部に抑えるデータ管理方法としてコンシステント・ハッシュ法（以下、「ＣＨ法」と表記する）がある。ＣＨ法の詳細は、例えば、非特許文献１，２に開示されており、説明を省略する。なお、ＣＨ法には、各ノードに複数の仮想ＩＤを持たせて、各ノードが担当するデータ量を等しくする技術が知られている（例えば、非特許文献１参照）。また、ＣＨ法には、データを冗長化し、データの１または複数の複製を他のノードに記憶させることで、ノードの障害に対する信頼性を向上させる技術が知られている。
【０００５】
ＣＨ法によるデータ管理方法は、ノードの追加や離脱によるクラスタ構成の動的な変更が頻繁に起こるシステムに対して有効である。このため、トラフィック変化や管理するデータ量の変化に対してノードの追加や離脱を柔軟に行い、リソースの利用効率を向上させることができる。
【０００６】
しかし、ノードの追加や離脱に伴うデータの移行には、相応の負荷が生じることから、データ移行負荷を考慮した設計が必要になる。具体的には、クラスタ構成の動的変更を行う条件となる閾値（例：ＣＰＵ使用率、メモリ使用率）を設定する設計が必要になる。データ移行負荷を抑えた従来技術として、特許文献１，２に開示されたものがある。
【０００７】
特許文献１には、追加される新規ノードに既存データに関するメッセージを振り分けないことでデータ移行を抑制する方法が開示されている。また、特許文献２には、データ移行を、負荷を抑えながら徐々に実行する方法が開示されている。
なお、非特許文献３には、ＳＩＰのプロトコル仕様について開示されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】David Karger, “Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web”,[online], 1997, ACM, [平成29年7月4日検索], インターネット<ＵＲＬ：http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
【非特許文献２】Giuseppe DeCandia, “Dynamo: Amazon’s Highly Available Key-value Store”,[online], 2007, ACM, [平成29年7月4日検索], インターネット<ＵＲＬ：http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf >
【非特許文献３】J.Rosenberg, et.al, “SIP: Session Initiation Protocol”, RFC3261, IETF, 2002.6,[online], 2007, 平成29年7月4日検索], インターネット<ＵＲＬ：https://www.ietf.org/rfc/rfc3261.txt>
【特許文献】
【０００９】
【特許文献１】特開２０１３−０２５４９７号公報
【特許文献２】特開２０１３−０２５７２０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来、特許文献１，２のように、ノードを追加する場合については、データ移行負荷を抑える技術が知られていた。しかし、特許文献１，２および非特許文献１〜３を含め、これまでノードが離脱する際のデータ移行負荷を抑えることについては何ら考慮されていなかった。なお、ノードが離脱する際のデータ移行負荷には、離脱しないノードへデータを移行させる負荷に加え、例えば、データを冗長化して管理している場合においては、離脱したノードが保持するデータの原本や複製が消滅し、他のノードが保持する複製を原本へ昇格する負荷や、別の既存ノードに複数を改めて保持させるための処理に伴う負荷がある。
【００１１】
このような背景に鑑みて、本発明は、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることを課題とする。
【課題を解決するための手段】
【００１２】
前記した課題を解決するため、請求項１に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置であって、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有し、前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第１のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定する振り分け処理部、を備える、ことを特徴とする。
【００１３】
また、請求項３に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置における負荷分散方法であって、前記負荷分散装置は、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有しており、前記メッセージから抽出したkeyと、前記ノード識別子管理情報で記憶されているノード識別子との関係で所定の第１のルールに従って振り分け先となるノードを決定するステップと、前記振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定するステップと、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定するステップと、を実行する、ことを特徴とする。
【００１４】
また、請求項４に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置としてのコンピュータを、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を管理するノード識別子管理手段、前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第１のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを振り分け先として確定する振り分け処理手段、として機能させるための負荷分散プログラムである。
【００１５】
請求項１，３，４の発明によれば、ノードごとに、離脱中状態を用意し、離脱中のノードに対して離脱開始時刻を設定することで、ノードの離脱が開始する時刻よりも後に生成するデータは、離脱するノードに保持させずに済ませることができる。その結果、ノードの離脱に伴うデータ移行を未然に防ぐことができる。また、ノードの離脱が開始する時刻よりも前に生成するデータは、離脱するノードに保持させることで、ノードの離脱は、データの処理完了後に実行するように調整することができる。よって、処理が未完了のデータを他のノードに移行させずに済ませることができる。
したがって、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
【００１６】
また、請求項２に記載の発明は、請求項１に記載の負荷分散装置であって、前記複数のノードが保持するデータが冗長化されており、前記データの原本、および、前記データの１または複数の複製をそれぞれ、異なるノード間で保持する場合、前記振り分け処理部は、前記メッセージから抽出したkeyと前記ノード識別子との関係で所定の第２のルールに従って複製先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記複製先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出したデータ生成時刻が前であれば、前記複製先と決定したノードを複製先として確定し、前でなければ、前記複製先と決定したノード以外のノードのうち前記第１のルールに従って決定したノードを複製先として確定する、ことを特徴とする。
【００１７】
請求項２の発明によれば、データが冗長化される場合であっても、ノードが離脱する際のデータ移行負荷を抑えることができる。
【発明の効果】
【００１８】
本発明によれば、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態の負荷分散装置を含む分散システムの機能構成図である。
【図２】ノード識別子管理テーブルの構成図である。
【図３】振り分け先確定処理のフローチャートである。
【発明を実施するための形態】
【００２０】
以下、図面を参照して本発明を実施するための形態（以下、「本実施形態」という）について説明する。本実施形態の分散システムによるデータ管理方法は、ノードの追加時や離脱時の影響が少ないＣＨ法であるとして説明する。しかし、本実施形態のデータ管理方法は、ＣＨ法に限らない。また、ＣＨ法を用いたデータ管理方法では、ノードとデータとの双方にＩＤを割り当て、データのＩＤからリング状のＩＤ空間を時計回りに辿り、最初に当たったノードを、当該データを担当するノードとする（第１のルールの具体例。ただし、ノードの担当に関する第１のルールの内容は左記に限られない。）。また、データの原本を保持するノードに対し、ＩＤ空間上で右隣（時計回りに隣り）のノードがデータの複製を保持するとする（第２のルールの具体例。ただし、複製を保持するノードに関する第２のルールの内容は左記に限られない。）。
【００２１】
図１に示す本実施形態の分散システムは、負荷分散装置１と、ノード２−１〜２−Ｎとを含む。図１に示すクライアント３−１〜３−Ｎは、ネットワーク４を介して、負荷分散装置１にメッセージを送信する。ノード２−１〜２−Ｎは、コンピュータなどの物理装置、または、仮想マシンなどの論理装置である。負荷分散装置１、ノード２−１〜２−Ｎ、および、クライアント３−１〜３−Ｎはそれぞれ、入出力部、制御部、記憶部といったハードウェアを備える。これらの制御部は、例えば、記憶部に記憶されているプログラム（負荷分散プログラムを含む）を記憶部の記憶領域に展開し実行することにより相応の処理が実行される。負荷分散装置１、ノード２−１〜２−Ｎ、および、クライアント３−１〜３−Ｎは、このようなソフトウェアとハードウェアの協働を実現することができる。
【００２２】
負荷分散装置１は、クライアント３−１〜３−Ｎからのメッセージをノード２−１〜２−Ｎに振り分ける。
図１に示すように、負荷分散装置１は、ノード識別子管理部１１（ノード識別子管理手段）と、振り分け処理部１２（振り分け処理手段）と、ノード識別子管理テーブル１３（ノード識別子管理情報）とを備える。
【００２３】
（ノード識別子管理部１１、ノード識別子管理テーブル１３）
ノード識別子管理部１１は、ノード２−１〜２−Ｎを識別するノード識別子を管理する。
ノード識別子管理テーブル１３は、ノード識別子に関連付けられた情報を所定の形式で纏めたテーブルである。
【００２４】
ノード識別子は、ＣＨ法のＩＤ空間上に配置されるノード識別用のＩＤである。ノード識別子管理部１１は、クラスタへのノードの追加や離脱が発生すると、クラスタを構成するノード２−１〜２−Ｎの識別子情報、具体的には、ＣＨ法におけるＩＤ空間上のノードの情報一覧を更新し、ノード識別子管理テーブル１３として管理する。ノード識別子は、ノード識別子管理部１１が付与してもよいし、当該ノード識別子で識別されるノード以外のノードや外部システムで計算したノード識別子管理テーブル（負荷分散装置１のノード識別子管理テーブル１３と同等）を受信して登録してもよい。ノードの追加や離脱が発生した場合、追加ノードのノード識別子の付与、離脱ノードのノード識別子の削除、ノードの追加や離脱が反映されたノード識別子管理テーブルの受信、登録がなされる。結果的に、負荷分散装置１のノード識別子管理テーブル１３、および、ノード２−１〜２−Ｎのノード識別子管理テーブル２４（後記）の内容が同一となるよう同期される。
なお、ＣＨ法で仮想ＩＤを用いる場合、ノード識別子は、仮想ＩＤごとに保持される。
【００２５】
図２に示すように、ノード識別子管理テーブル１３は、ノード識別子ごとに、ＩＰアドレスと、離脱開始時刻と、離脱中フラグ（離脱中状態）とが関連付けられた情報を登録している。ノード識別子管理テーブル１３のノード識別子の欄には、例えば、当該ノード識別子で識別されるノードに割り当てられたＩＰ（Internet Protocol）アドレスをハッシュ値変換した値が格納される。ノード識別子管理テーブル１３のＩＰアドレスの欄には、当該ノード識別子で識別されるノードに割り当てられたＩＰアドレスが格納される。
【００２６】
ノード識別子管理テーブル１３の離脱開始時刻の欄には、当該ノード識別子で識別されるノードが、分散システムからの離脱を開始する時刻が格納される。図２に示す「０１：０２：０３」という離脱開始時刻は、１時２分３秒を意味する。ノード識別子管理部１１は、離脱対象となるノードが外部からのノード離脱要求を受け、当該ノード離脱要求で指定された時刻を離脱開始時刻としてノード識別子管理テーブル１３に登録する。なお、離脱開始時刻は、例えば、離脱対象のノードがノード離脱要求を受信した時刻としてもよい。
また、離脱開始時刻は、少なくとも後記する離脱中フラグが１であるときに、対応のノードに対して設定されればよい。図２に示す「−」は、離脱開始時刻が設定されていないことを示す。
【００２７】
ノード識別子管理テーブル１３の離脱中フラグの欄には、当該ノード識別子で識別されるノードが、保守観点等から離脱中であるか否かを示す値が登録される。離脱中フラグ＝１が離脱中であることを示し、離脱中フラグ＝０が離脱中でないことを示す。ノードが離脱中であるとは、当該ノードが外部からのノード離脱要求を受け取ってから、分散システムからの離脱が完了するまでの状態をいう。ノード識別子管理部１１は、ノードが離脱中であるか否かに応じて離脱中フラグの値を書き換える。ノード識別子管理部１１は、離脱が完了したノードについてのノード識別子と、ＩＰアドレスと、離脱開始時刻と、離脱中フラグとを削除する。
【００２８】
ノード識別子と同様、離脱開始時刻および離脱中フラグについても、ノード識別子管理部１１が付与してもよいし、当該ノード識別子で識別されるノード以外のノードや外部システムで計算したノード識別子管理テーブル（負荷分散装置１のノード識別子管理テーブル１３と同等）を受信して登録してもよい。
【００２９】
（振り分け処理部１２）
振り分け処理部１２（図１参照）は、クライアント３−１〜３−Ｎから受信したメッセージから、当該メッセージの処理対象となるデータのkeyを抽出（取得）する。また、振り分け処理部１２は、ノード識別子管理テーブル１３を用いてＣＨ法に従い、メッセージの振り分け先を決定する。
【００３０】
メッセージからkeyを取得する方法を、非特許文献３にてプロトコル仕様が記載されているＳＩＰを例にして説明する。メッセージのkeyは、ＳＩＰメッセージのリクエストヘッダのCall-IDとViaヘッダのbranchを組み合わせた値をハッシュ値変換したもの等を使用することができる。また、keyをINVITE受信時に計算して、ＳＩＰメッセージのToヘッダのTag等に書き込むことで、負荷分散装置１でToヘッダのTagに書き込みがあるかで、新規メッセージ（Initial INVITE）と既存メッセージ（非Initial INVITE）とを判別することも可能である。負荷分散装置１は、ＳＩＰメッセージからkeyとデータのデータ生成時刻を取得し、ＣＨ法に従ってＳＩＰメッセージを各ノード２−１〜２−Ｎに振り分ける。なお、データ生成時刻は、新規メッセージを処理する際のkey付与時にメッセージ内に埋め込まれる。
【００３１】
本実施形態では、振り分け処理部１２がメッセージの振り分け先となるノードを決定する際、振り分け先の候補となるノードが離脱中であるか否かを踏まえて適宜振り分け先を変更する。振り分け処理部１２による振り分け先確定処理の詳細は後記する。
【００３２】
負荷分散装置１は、図１に示した機能部を、例えば、ロードバランサと振り分け装置との組合せとして構成することができる。ロードバランサは、クライアント３−１〜３−Ｎからのメッセージを、例えば、ラウンドロビン法などで振り分け装置に振り分ける。振り分け装置は、ＣＨ法に従い、ノード２−１〜２−Ｎに振り分ける。
【００３３】
振り分け装置は、１つだけ備えてもよいし、複数備えてもよい。複数備えた振り分け装置は、クラスタ構成をとることができる。また、負荷分散装置１は、ロードバランサを備えず、１または複数の振り分け装置を備えた構成をとることもできる。この場合、クライアントからのメッセージは、任意の振り分け装置に送信される。
【００３４】
また、振り分け装置を複数備える構成において、トラフィック等の減少で保守的観点からノードを離脱させる場合、振り分け装置についてもノードと同様にリソースに余裕が生じており、離脱妥当と想定される。振り分け装置を離脱する場合も、ノードを離脱する場合と同様、本発明を適用することができる。つまり、例えば、振り分け装置の各々が、振り分け装置の識別子と、離脱中であるか否かを示すフラグとを管理するテーブルを有しており、振り分け装置の離脱要求があると、当該テーブルを参照し振り分け装置が離脱中であるか否かの判定が行われる。離脱中であれば、ロードバランサが離脱要求を受けた振り分け装置にメッセージを振り分けないようにする。
振り分け装置が離脱中であるか否かを判断する必要がある場合としては、例えば、ＴＣＰ（Transmission Control Protocol）を使って通信する場合がある。この場合、離脱要求の対象となる振り分け装置にＴＣＰセッションが張られている間は、当該振り分け装置のフラグを立てる（離脱中とする）。これにより、当該振り分け装置を離脱させないが、当該振り分け装置に新規のＴＣＰセッションが作られないようにすることができる。また、離脱要求の対象となる振り分け装置は、すでに張られたＴＣＰセッションが終了した後、所定のタイミングで離脱する。
【００３５】
また、振り分け装置は、ノード２−１〜２−Ｎと別体の装置として構成することもできるが、同一サーバ上に振り分け装置の機能と、ノード２−１〜２−Ｎの機能を併せ持つ構成をとることもできる。
【００３６】
ノード２−１〜２−Ｎは、例えば、セッション制御サーバとすることができるがこれに限定されない。ノード２−１〜２−Ｎは、クラスタ構成をとり、協調して動作する。また、セッションの確立に用いられる通信プロトコルは、例えば、ＳＩＰ（Session Initiation Protocol）であるとすることができるがこれに限定されない。ノード２−１〜２−Ｎの各々は、メッセージ処理を行い、クライアント３−１〜３−Ｎにサービスを提供する。
【００３７】
次に、ノード２−１〜２−Ｎの機能構成について、ノード２−１を代表例として説明する。ノード２−１の機能構成に関する説明は、ノード２−２〜２−Ｎにもあてはまる。
図１に示すように、ノード２−１は、ノード識別子管理部２１と、メッセージ処理部２２と、データ抽出部２３と、ノード識別子管理テーブル２４と、抽出データ管理テーブル２５と、データ記憶部２６とを備える。
【００３８】
ノード識別子管理部２１と、ノード識別子管理テーブル２４とはそれぞれ、負荷分散装置１のノード識別子管理部１１と、ノード識別子管理テーブル１３と同一となるため、説明は省略する。
【００３９】
（メッセージ処理部２２）
メッセージ処理部２２は、振り分け処理部１２から振り分けられたメッセージを処理し、処理結果をクライアント３−１〜３−Ｎに返すことにより、サービスを提供する。また、メッセージ処理部２２は、メッセージを処理すると、対応のデータを生成し、保持する。また、メッセージ処理部２２がデータを生成する際、他のノードにデータの複製を保持させデータの冗長化を実現することができる。データの複製を保持する「他のノード」とは、例えば、ノード識別子を昇順に並べたときの次のノードであり、ＩＤ空間の右隣のノードである。
【００４０】
（データ抽出部２３、抽出データ管理テーブル２５）
データ抽出部２３は、例えば、保守者または保守装置等の外部から保守観点のノード離脱要求（データ抽出部２３を備えるノード自身に対するノード離脱要求）を受けた場合、ノードの離脱要求を受けたタイミング（離脱中フラグを１にするタイミング）でノード２−１自身が管理しているデータを抽出する。抽出されるデータには、原本、および、他のノードで保持する原本の複製を含む。
抽出データ管理テーブル２５は、データ抽出部２３が抽出したデータを管理するテーブルである。
【００４１】
データ抽出部２３は、抽出したデータに関する抽出データ管理テーブル２５を作成する。データ抽出部２３は、データが削除されるタイミング、または、定期的に、抽出データ管理テーブル２５を最新化する。例えば、ノードの離脱要求に応じて削除される予定のデータについて、クライアント３−１〜３−Ｎから受信したすべてのメッセージの処理が完了した時点で当該データに関する情報を抽出データ管理テーブル２５から削除する。または、データが削除された後、定期的になされる時点で、当該データに関する情報を抽出データ管理テーブル２５から削除する。
ノード２−１自身が管理しているデータが原本であり、複製が存在する場合は、その複製を管理するノードのデータ抽出部２３は、複製のデータを抽出する。
【００４２】
抽出データ管理テーブル２５が空（つまり、ノードの離脱要求に応じて削除される予定のデータが削除されて無くなった）になった時点で、データ抽出部２３は、負荷分散装置１のノード識別子管理部１１、および、ノード２−１〜２−Ｎのノード識別子管理部２１に当該ノードの削除を指示し、ノード識別子管理テーブル１３，２４から削除する。なお、ノード削除指示は、上記のようにデータ抽出部２３が実行してもよいし、他のノードを経由したり、負荷分散装置１が複数の振り分け装置から構成されている場合には、他の振り分け装置を経由したり、または、外部装置を利用したりして行われてもよい。
【００４３】
（データ記憶部２６）
データ記憶部２６は、ノード２−１が保持するデータを記憶する。データ記憶部２６は、データ抽出部２３が抽出の対象とするデータを記憶している。データが冗長化され、他のノードで複製が管理される場合には、データ記憶部２６は、ノード２−１が保持する原本および複製を記憶する。
【００４４】
≪振り分け先確定処理≫
次に、負荷分散装置１の振り分け処理部１２が実行する振り分け先確定処理について説明する。振り分け先確定処理は、負荷分散装置１がクライアント３−１〜３−Ｎからメッセージを受信したときに開始する。
【００４５】
図３に示すように、まず、振り分け処理部１２は、受信したメッセージから、そのメッセージの処理対象となるデータのkeyを抽出する（ステップＳ１）。
【００４６】
次に、振り分け処理部１２は、抽出したkeyに対し、ＣＨ法によりメッセージの振り分け先を決定する（ステップＳ２）。分散処理技術のデータ管理方法によれば、振り分け先は、メッセージから抽出したkeyとノード識別子との関係で決定することができる。
【００４７】
次に、振り分け処理部１２は、ノード識別子管理テーブル１３を参照し、振り分け先に決定したノードについて、離脱中フラグ（図２）が「１」であるか否かを判定する（ステップＳ３）。「１」である場合（ステップＳ３／Ｙｅｓ）、振り分け先に決定したノードは離脱対象であることを意味する。振り分け処理部１２は、受信したメッセージから、そのメッセージの処理対象となるデータのデータ生成時刻を抽出する（ステップＳ４）。一方、離脱中フラグが「１」でない場合（ステップＳ３／Ｎｏ）、離脱中フラグは「０」である。この場合、振り分け先に決定したノードは、離脱することは無いので、メッセージの振り分け先として確定する（ステップＳ８）。
【００４８】
振り分け処理部１２は、ノード識別子管理テーブル１３を参照し、離脱対象となるノードの離脱開始時刻と、メッセージから抽出したデータ生成時刻とを比較する（ステップＳ５）。離脱対象となるノードの離脱開始時刻より、データ生成時刻が前である（古い）場合（ステップＳ５／Ｙｅｓ）、振り分け先に決定したノードを、メッセージの振り分け先として確定し（ステップＳ８）、図３の処理を終了する。
離脱対象となるノードの離脱開始時刻より、データ生成時刻が前である場合、離脱対象となるノードの離脱は、生成されるデータについて、当該ノードによる処理が完了した後に実行するように調整される。離脱対象となるノードは、データに対する処理が完了したとき、完了したことを振り分け処理部１２および他のノードに通知してもよい。
【００４９】
一方、離脱対象となるノードの離脱開始時刻より、データ生成時刻が前でない（新しい）場合（ステップＳ５／Ｎｏ）、振り分け処理部１２は、ＣＨ法により決定したものの、離脱が決定していたノードにメッセージを振り分けることはせず、他の振り分け先を探索する。
【００５０】
具体的には、振り分け処理部１２は、図３に示す処理のループによって、すべてのノードについて、メッセージの振り分け先としての適性（後記）を確認する（ステップＳ６）。もし、すべてのノードについて確認済みでなければ（ステップＳ６／Ｎｏ）、振り分け処理部１２は、ノード識別子を昇順に並べた次のノードの離脱中フラグを取得し（ステップＳ７）、次のノードについてステップＳ３の判定を再度行う。一方、すべてのノードについて確認済みであった場合（ステップＳ６／Ｙｅｓ）、振り分け先として適したノードが見つからなかったことを意味する。この場合、振り分け処理部１２は、例外的に、最初に振り分け先として決定したノードにメッセージを振り分け（ステップＳ８）、図３の処理を終了する。
【００５１】
ステップＳ６での適正の確認とは、振り分け処理部１２が、ＣＨ法により決定したノードについて、離脱対象となるノードの離脱開始時刻より、データ生成時刻が前でない場合ノード識別子を昇順に並べた次のノードのフラグを順番に確認することである、つまり、ＣＨ法のＩＤ空間上で右隣のノードの状態を確認することである。確認の結果、離脱中フラグが「０」のノード、または、離脱中フラグが「１」だが、離脱開始時刻よりデータ生成時刻が古いノードが見つかった時点で、そのノードにメッセージを振り分けることを確定する（ＣＨ法により振り分け先として決定したノード以外のノードを振り分け先として確定する）。
なお、負荷分散装置１がクライアント３−１〜３−Ｎから受信したメッセージが、例えば新規メッセージであって、データが未生成である場合も、便宜上、「ステップＳ５／Ｎｏ」に該当するとし、メッセージの振り分け先を探索する。
【００５２】
図３の振り分け先確定処理によれば、優先的に、離脱対象とならないノードを振り分け先とすることができる。
【００５３】
図３の振り分け先確定処理によって、振り分け先と確定したノードのメッセージ処理部２２は、振り分け処理部１２から振り分けられたメッセージを処理し、処理結果をクライアント３−１〜３−Ｎに返すことにより、サービスを提供する。また、メッセージ処理部２２は、同時に他のノード、例えば、ノード識別子を昇順に並べたときの次のノード（ＩＤ空間の右隣のノード）にデータの複製を行うことでデータの冗長化を実現する。複製が複数存在する場合には、メッセージ処理部２２は、さらに他のノード、例えば、ノード識別子を昇順に並べたときのさらに次のノード（ＩＤ空間の２つ右隣のノード）にデータの複製を行う。つまり、分散処理技術のデータ管理方法によれば、複製先は、メッセージから抽出したkeyとノード識別子との関係で、先述した第２のルールに従って決定することができる。
【００５４】
ただし、複製先のノードの離脱中フラグが「１」である場合、負荷分散装置１の振り分け処理部１２は、クライアント３−１〜３−Ｎから受信したメッセージからデータ生成時刻を抽出する。そして、振り分け処理部１２は、ノード識別子管理テーブル１３を参照して、抽出したデータ生成時刻と、離脱対象となっている（離脱中と判定された）複製先のノードの離脱開始時刻とを比較する。
【００５５】
データ生成時刻が、離脱対象となっている（離脱中と判定された）複製先のノードの離脱開始時刻より古い（前である）場合、振り分け処理部１２は、複製先と決定したノードを複製先として確定する。確定に応じて、振り分け処理部１２は、原本を保持するノードのメッセージ処理部２２にデータの複製を指示する。指示を受けたメッセージ処理部２２は、複製先と確定したノードにデータの複製を行い、複製先と確定したノードのデータ記憶部２６に複製のデータが記憶される。
【００５６】
一方、データ生成時刻が、離脱対象となっている複製先のノードの離脱開始時刻より新しい（前でない）場合、振り分け処理部１２は、ノード識別子を昇順に並べた次のノード（複製先と決定したノードの次のノード）のフラグを順番に確認する、つまり、ＣＨ法のＩＤ空間上で右隣のノードの状態を確認する。確認の結果、離脱中フラグが「０」のノード、または、離脱中フラグが「１」だが、離脱開始時刻よりデータ生成時刻が古いノードが見つかった時点で、振り分け処理部１２は、複製先と決定したノード以外で見つかったそのノードを複製先として確定する。確定に伴い、振り分け処理部１２は、原本を保持するノードのメッセージ処理部２２にデータの複製を指示する。指示を受けたメッセージ処理部２２は、複製先と確定したノードにデータの複製を行い、複製先と確定したノードのデータ記憶部２６に複製のデータが記憶される。
【００５７】
なお、振り分け処理部１２から振り分けられたメッセージが、例えば新規メッセージであって、データが未生成である場合も、便宜上、上記のように、振り分け処理部１２は、離脱中フラグを順番に確認して、メッセージ処理部２２がデータの複製を行う。
振り分け処理部１２は、すべてのノードを確認しても複製先が見つからなかった場合は、例外的に、最初に複製先として決定したノードを複製先として確定し、原本を保持するノードのメッセージ処理部２２にデータの複製を指示する。指示を受けたメッセージ処理部２２は、複製先と確定したノードにデータを複製し、複製先と確定したノードのデータ記憶部２６に複製のデータが記憶される。
【００５８】
なお、図３のステップＳ３にて判定される離脱中フラグの値は、ノード２−１〜２−Ｎのうち離脱対象となったノードになされるノード離脱要求の有無に応じて決まる。ノード離脱要求があった場合、離脱中フラグは「０」から「１」に切り替わる。このとき、ノード離脱要求を受けたノード２−１〜２−Ｎのデータ抽出部２３は、抽出データ管理テーブル２５を用いて、ノード２−１〜２−Ｎ自身で管理するデータを抽出し、所定のタイミング（例えば、クライアント３−１〜３−Ｎから受信したすべてのメッセージの処理が完了した時）で削除する。その後、データ抽出部２３からのノード削除指示により、該当ノードが削除される（離脱する）。
【００５９】
本実施形態によれば、ノードごとに、離脱中フラグを用意し、離脱中のノードに対して離脱開始時刻を設定することで、ノードの離脱が開始する時刻よりも後に生成するデータは、離脱するノードに保持させずに済ませることができる。その結果、ノードの離脱に伴うデータ移行を未然に防ぐことができる。また、ノードの離脱が開始する時刻よりも前に生成するデータは、離脱するノードに保持させることで、ノードの離脱は、データの処理完了後に実行するように調整することができる。よって、処理が未完了のデータを他のノードに移行させずに済ませることができる。
したがって、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
【００６０】
その結果、クラスタ構成の設計時において、ノード離脱時のデータ移行負荷の考慮が不要となり、リソースの利用効率をさらに向上させることができる。特に、データのライフタイムが短いシステムにおいては、データ移行による負荷バランス均等化の効果は低いため、本発明によるデータ移行抑止が有効である。
また、分散システムを前提とせずに開発されたアプリケーションを分散システムに対応させる場合、すべてのデータをＣＨ法によるデータ管理に移行することで開発コストが高くなる可能性がある。本発明により、ＣＨ法を利用した振り分け処理による負荷分散の効果を得つつ、ノード離脱におけるデータ移行を抑止することでアプリケーションによるデータ管理プログラムの変更を不要とすることが可能であり、開発コストの低減化に資する。
【００６１】
また、本実施形態によれば、データが冗長化される場合であっても、ノードが離脱する際のデータ移行負荷を抑えることができる。
【００６２】
以上、本発明の実施形態について説明したが、本発明は前記実施形態に限定されず、本発明の要旨を逸脱しない範囲で適宜変更可能である。例えば、離脱するノード以外のノードを振り分け先とする場合（図３のステップＳ５〜Ｓ７）、ＣＨ法のＩＤ空間上で右隣のノードの状態を確認するのではなく、未確認の他のノードから適宜確認してもよい。また、離脱するノード以外のノードを複製先とする場合、ＣＨ法のＩＤ空間上で右隣のノードの状態を確認するのではなく、未確認の他のノードから適宜確認してもよい。
【００６３】
本実施形態で説明した種々の技術を適宜組み合わせた技術を実現することもできる。
本実施形態で説明したソフトウェアをハードウェアとして実現することもでき、ハードウェアをソフトウェアとして実現することもできる。
その他、ハードウェア、ソフトウェア、フローチャートなどについて、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【００６４】
１      負荷分散装置
２−１〜２−Ｎ  ノード
３−１〜３−Ｎ  クライアント
１１    ノード識別子管理部（ノード識別子管理手段）
１２    振り分け処理部（振り分け処理手段）
１３    ノード識別子管理テーブル（ノード識別子管理情報）
２１    ノード識別子管理部
２２    メッセージ処理部
２３    データ抽出部
２４    ノード識別子管理テーブル
２５    抽出データ管理テーブル
２６    データ記憶部
【図１】
2019021022.tif 000003
【図２】
2019021022.tif 000004
【図３】
2019021022.tif 000005