JP6714547B2 - 負荷分散装置、負荷分散方法、および、負荷分散プログラム - Google Patents

負荷分散装置、負荷分散方法、および、負荷分散プログラム Download PDF

Info

Publication number
JP6714547B2
JP6714547B2 JP2017138946A JP2017138946A JP6714547B2 JP 6714547 B2 JP6714547 B2 JP 6714547B2 JP 2017138946 A JP2017138946 A JP 2017138946A JP 2017138946 A JP2017138946 A JP 2017138946A JP 6714547 B2 JP6714547 B2 JP 6714547B2
Authority
JP
Japan
Prior art keywords
node
data
determined
message
leaving
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017138946A
Other languages
English (en)
Other versions
JP2019021022A (ja
Inventor
絵里子 岩佐
絵里子 岩佐
紀貴 堀米
紀貴 堀米
光平 的場
光平 的場
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2017138946A priority Critical patent/JP6714547B2/ja
Publication of JP2019021022A publication Critical patent/JP2019021022A/ja
Application granted granted Critical
Publication of JP6714547B2 publication Critical patent/JP6714547B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、負荷分散装置、負荷分散方法、および、負荷分散プログラムに関する。
近年、クラウドコンピューティングの隆盛に伴い、多量なデータの処理や保持を効率的に行うことが求められている。そこで、複数のサーバを協調動作させることにより効率的な処理を実現する分散処理技術が発展している。
分散処理を行う際には、クラスタを構成する各サーバ(以下、「ノード」と呼ぶ場合がある)が担当するデータを決定する必要がある。このとき、クラスタ全体での処理能力を高めるために、各ノードが担当するデータ数を平均化するデータ管理方法が用いられることが多い。そのようなデータ管理方法を用いた場合、ノードが追加されたり離脱したりすると、各ノードが担当するデータが変更するため、担当するデータの移行が行われる。
ノードの追加や離脱に伴うデータの移行を、全データのうちごく一部に抑えるデータ管理方法としてコンシステント・ハッシュ法(以下、「CH法」と表記する)がある。CH法の詳細は、例えば、非特許文献1,2に開示されており、説明を省略する。なお、CH法には、各ノードに複数の仮想IDを持たせて、各ノードが担当するデータ量を等しくする技術が知られている(例えば、非特許文献1参照)。また、CH法には、データを冗長化し、データの1または複数の複製を他のノードに記憶させることで、ノードの障害に対する信頼性を向上させる技術が知られている。
CH法によるデータ管理方法は、ノードの追加や離脱によるクラスタ構成の動的な変更が頻繁に起こるシステムに対して有効である。このため、トラフィック変化や管理するデータ量の変化に対してノードの追加や離脱を柔軟に行い、リソースの利用効率を向上させることができる。
しかし、ノードの追加や離脱に伴うデータの移行には、相応の負荷が生じることから、データ移行負荷を考慮した設計が必要になる。具体的には、クラスタ構成の動的変更を行う条件となる閾値(例:CPU使用率、メモリ使用率)を設定する設計が必要になる。データ移行負荷を抑えた従来技術として、特許文献1,2に開示されたものがある。
特許文献1には、追加される新規ノードに既存データに関するメッセージを振り分けないことでデータ移行を抑制する方法が開示されている。また、特許文献2には、データ移行を、負荷を抑えながら徐々に実行する方法が開示されている。
なお、非特許文献3には、SIPのプロトコル仕様について開示されている。
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日検索], インターネット<URL: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日検索], インターネット<URL: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日検索], インターネット<URL:https://www.ietf.org/rfc/rfc3261.txt>
特開2013−025497号公報 特開2013−025720号公報
従来、特許文献1,2のように、ノードを追加する場合については、データ移行負荷を抑える技術が知られていた。しかし、特許文献1,2および非特許文献1〜3を含め、これまでノードが離脱する際のデータ移行負荷を抑えることについては何ら考慮されていなかった。なお、ノードが離脱する際のデータ移行負荷には、離脱しないノードへデータを移行させる負荷に加え、例えば、データを冗長化して管理している場合においては、離脱したノードが保持するデータの原本や複製が消滅し、他のノードが保持する複製を原本へ昇格する負荷や、別の既存ノードに複数を改めて保持させるための処理に伴う負荷がある。
このような背景に鑑みて、本発明は、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることを課題とする。
前記した課題を解決するため、請求項1に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置であって、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有し、前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第1のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定する振り分け処理部、を備える、ことを特徴とする。
また、請求項3に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置における負荷分散方法であって、前記負荷分散装置は、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有しており、前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、前記メッセージから抽出した前記keyと、前記ノード識別子管理情報で記憶されているノード識別子との関係で所定の第1のルールに従って振り分け先となるノードを決定するステップと、前記振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定するステップと、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定するステップと、を実行する、ことを特徴とする。
また、請求項4に記載の発明は、クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置としてのコンピュータを、前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を管理するノード識別子管理手段、前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第1のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定する振り分け処理手段、として機能させるための負荷分散プログラムである。
請求項1,3,4の発明によれば、ノードごとに、離脱中状態を用意し、離脱中のノードに対して離脱開始時刻を設定することで、ノードの離脱が開始する時刻よりも後に生成するデータは、離脱するノードに保持させずに済ませることができる。その結果、ノードの離脱に伴うデータ移行を未然に防ぐことができる。また、ノードの離脱が開始する時刻よりも前に生成するデータは、離脱するノードに保持させることで、ノードの離脱は、データの処理完了後に実行するように調整することができる。よって、処理が未完了のデータを他のノードに移行させずに済ませることができる。
したがって、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
また、請求項2に記載の発明は、請求項1に記載の負荷分散装置であって、前記複数のノードが保持する前記データが冗長化されており、前記データの原本、および、前記データの1または複数の複製をそれぞれ、異なるノード間で保持する場合、前記振り分け処理部は、前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第2のルールに従って複製先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、離脱中である場合、前記複製先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データ生成時刻が前であれば、前記複製先と決定したノードを複製先として確定し、前でなければ、前記複製先と決定したノード以外のノードのうち前記第のルールに従って決定したノードを複製先として確定する、ことを特徴とする。
請求項2の発明によれば、データが冗長化される場合であっても、ノードが離脱する際のデータ移行負荷を抑えることができる。
本発明によれば、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
本実施形態の負荷分散装置を含む分散システムの機能構成図である。 ノード識別子管理テーブルの構成図である。 振り分け先確定処理のフローチャートである。
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)について説明する。本実施形態の分散システムによるデータ管理方法は、ノードの追加時や離脱時の影響が少ないCH法であるとして説明する。しかし、本実施形態のデータ管理方法は、CH法に限らない。また、CH法を用いたデータ管理方法では、ノードとデータとの双方にIDを割り当て、データのIDからリング状のID空間を時計回りに辿り、最初に当たったノードを、当該データを担当するノードとする(第1のルールの具体例。ただし、ノードの担当に関する第1のルールの内容は左記に限られない。)。また、データの原本を保持するノードに対し、ID空間上で右隣(時計回りに隣り)のノードがデータの複製を保持するとする(第2のルールの具体例。ただし、複製を保持するノードに関する第2のルールの内容は左記に限られない。)。
図1に示す本実施形態の分散システムは、負荷分散装置1と、ノード2−1〜2−Nとを含む。図1に示すクライアント3−1〜3−Nは、ネットワーク4を介して、負荷分散装置1にメッセージを送信する。ノード2−1〜2−Nは、コンピュータなどの物理装置、または、仮想マシンなどの論理装置である。負荷分散装置1、ノード2−1〜2−N、および、クライアント3−1〜3−Nはそれぞれ、入出力部、制御部、記憶部といったハードウェアを備える。これらの制御部は、例えば、記憶部に記憶されているプログラム(負荷分散プログラムを含む)を記憶部の記憶領域に展開し実行することにより相応の処理が実行される。負荷分散装置1、ノード2−1〜2−N、および、クライアント3−1〜3−Nは、このようなソフトウェアとハードウェアの協働を実現することができる。
負荷分散装置1は、クライアント3−1〜3−Nからのメッセージをノード2−1〜2−Nに振り分ける。
図1に示すように、負荷分散装置1は、ノード識別子管理部11(ノード識別子管理手段)と、振り分け処理部12(振り分け処理手段)と、ノード識別子管理テーブル13(ノード識別子管理情報)とを備える。
(ノード識別子管理部11、ノード識別子管理テーブル13)
ノード識別子管理部11は、ノード2−1〜2−Nを識別するノード識別子を管理する。
ノード識別子管理テーブル13は、ノード識別子に関連付けられた情報を所定の形式で纏めたテーブルである。
ノード識別子は、CH法のID空間上に配置されるノード識別用のIDである。ノード識別子管理部11は、クラスタへのノードの追加や離脱が発生すると、クラスタを構成するノード2−1〜2−Nの識別子情報、具体的には、CH法におけるID空間上のノードの情報一覧を更新し、ノード識別子管理テーブル13として管理する。ノード識別子は、ノード識別子管理部11が付与してもよいし、当該ノード識別子で識別されるノード以外のノードや外部システムで計算したノード識別子管理テーブル(負荷分散装置1のノード識別子管理テーブル13と同等)を受信して登録してもよい。ノードの追加や離脱が発生した場合、追加ノードのノード識別子の付与、離脱ノードのノード識別子の削除、ノードの追加や離脱が反映されたノード識別子管理テーブルの受信、登録がなされる。結果的に、負荷分散装置1のノード識別子管理テーブル13、および、ノード2−1〜2−Nのノード識別子管理テーブル24(後記)の内容が同一となるよう同期される。
なお、CH法で仮想IDを用いる場合、ノード識別子は、仮想IDごとに保持される。
図2に示すように、ノード識別子管理テーブル13は、ノード識別子ごとに、IPアドレスと、離脱開始時刻と、離脱中フラグ(離脱中状態)とが関連付けられた情報を登録している。ノード識別子管理テーブル13のノード識別子の欄には、例えば、当該ノード識別子で識別されるノードに割り当てられたIP(Internet Protocol)アドレスをハッシュ値変換した値が格納される。ノード識別子管理テーブル13のIPアドレスの欄には、当該ノード識別子で識別されるノードに割り当てられたIPアドレスが格納される。
ノード識別子管理テーブル13の離脱開始時刻の欄には、当該ノード識別子で識別されるノードが、分散システムからの離脱を開始する時刻が格納される。図2に示す「01:02:03」という離脱開始時刻は、1時2分3秒を意味する。ノード識別子管理部11は、離脱対象となるノードが外部からのノード離脱要求を受け、当該ノード離脱要求で指定された時刻を離脱開始時刻としてノード識別子管理テーブル13に登録する。なお、離脱開始時刻は、例えば、離脱対象のノードがノード離脱要求を受信した時刻としてもよい。
また、離脱開始時刻は、少なくとも後記する離脱中フラグが1であるときに、対応のノードに対して設定されればよい。図2に示す「−」は、離脱開始時刻が設定されていないことを示す。
ノード識別子管理テーブル13の離脱中フラグの欄には、当該ノード識別子で識別されるノードが、保守観点等から離脱中であるか否かを示す値が登録される。離脱中フラグ=1が離脱中であることを示し、離脱中フラグ=0が離脱中でないことを示す。ノードが離脱中であるとは、当該ノードが外部からのノード離脱要求を受け取ってから、分散システムからの離脱が完了するまでの状態をいう。ノード識別子管理部11は、ノードが離脱中であるか否かに応じて離脱中フラグの値を書き換える。ノード識別子管理部11は、離脱が完了したノードについてのノード識別子と、IPアドレスと、離脱開始時刻と、離脱中フラグとを削除する。
ノード識別子と同様、離脱開始時刻および離脱中フラグについても、ノード識別子管理部11が付与してもよいし、当該ノード識別子で識別されるノード以外のノードや外部システムで計算したノード識別子管理テーブル(負荷分散装置1のノード識別子管理テーブル13と同等)を受信して登録してもよい。
(振り分け処理部12)
振り分け処理部12(図1参照)は、クライアント3−1〜3−Nから受信したメッセージから、当該メッセージの処理対象となるデータのkeyを抽出(取得)する。また、振り分け処理部12は、ノード識別子管理テーブル13を用いてCH法に従い、メッセージの振り分け先を決定する。
メッセージからkeyを取得する方法を、非特許文献3にてプロトコル仕様が記載されているSIPを例にして説明する。メッセージのkeyは、SIPメッセージのリクエストヘッダのCall-IDとViaヘッダのbranchを組み合わせた値をハッシュ値変換したもの等を使用することができる。また、keyをINVITE受信時に計算して、SIPメッセージのToヘッダのTag等に書き込むことで、負荷分散装置1でToヘッダのTagに書き込みがあるかで、新規メッセージ(Initial INVITE)と既存メッセージ(非Initial INVITE)とを判別することも可能である。負荷分散装置1は、SIPメッセージからkeyとデータのデータ生成時刻を取得し、CH法に従ってSIPメッセージを各ノード2−1〜2−Nに振り分ける。なお、データ生成時刻は、新規メッセージを処理する際のkey付与時にメッセージ内に埋め込まれる。
本実施形態では、振り分け処理部12がメッセージの振り分け先となるノードを決定する際、振り分け先の候補となるノードが離脱中であるか否かを踏まえて適宜振り分け先を変更する。振り分け処理部12による振り分け先確定処理の詳細は後記する。
負荷分散装置1は、図1に示した機能部を、例えば、ロードバランサと振り分け装置との組合せとして構成することができる。ロードバランサは、クライアント3−1〜3−Nからのメッセージを、例えば、ラウンドロビン法などで振り分け装置に振り分ける。振り分け装置は、CH法に従い、ノード2−1〜2−Nに振り分ける。
振り分け装置は、1つだけ備えてもよいし、複数備えてもよい。複数備えた振り分け装置は、クラスタ構成をとることができる。また、負荷分散装置1は、ロードバランサを備えず、1または複数の振り分け装置を備えた構成をとることもできる。この場合、クライアントからのメッセージは、任意の振り分け装置に送信される。
また、振り分け装置を複数備える構成において、トラフィック等の減少で保守的観点からノードを離脱させる場合、振り分け装置についてもノードと同様にリソースに余裕が生じており、離脱妥当と想定される。振り分け装置を離脱する場合も、ノードを離脱する場合と同様、本発明を適用することができる。つまり、例えば、振り分け装置の各々が、振り分け装置の識別子と、離脱中であるか否かを示すフラグとを管理するテーブルを有しており、振り分け装置の離脱要求があると、当該テーブルを参照し振り分け装置が離脱中であるか否かの判定が行われる。離脱中であれば、ロードバランサが離脱要求を受けた振り分け装置にメッセージを振り分けないようにする。
振り分け装置が離脱中であるか否かを判断する必要がある場合としては、例えば、TCP(Transmission Control Protocol)を使って通信する場合がある。この場合、離脱要求の対象となる振り分け装置にTCPセッションが張られている間は、当該振り分け装置のフラグを立てる(離脱中とする)。これにより、当該振り分け装置を離脱させないが、当該振り分け装置に新規のTCPセッションが作られないようにすることができる。また、離脱要求の対象となる振り分け装置は、すでに張られたTCPセッションが終了した後、所定のタイミングで離脱する。
また、振り分け装置は、ノード2−1〜2−Nと別体の装置として構成することもできるが、同一サーバ上に振り分け装置の機能と、ノード2−1〜2−Nの機能を併せ持つ構成をとることもできる。
ノード2−1〜2−Nは、例えば、セッション制御サーバとすることができるがこれに限定されない。ノード2−1〜2−Nは、クラスタ構成をとり、協調して動作する。また、セッションの確立に用いられる通信プロトコルは、例えば、SIP(Session Initiation Protocol)であるとすることができるがこれに限定されない。ノード2−1〜2−Nの各々は、メッセージ処理を行い、クライアント3−1〜3−Nにサービスを提供する。
次に、ノード2−1〜2−Nの機能構成について、ノード2−1を代表例として説明する。ノード2−1の機能構成に関する説明は、ノード2−2〜2−Nにもあてはまる。
図1に示すように、ノード2−1は、ノード識別子管理部21と、メッセージ処理部22と、データ抽出部23と、ノード識別子管理テーブル24と、抽出データ管理テーブル25と、データ記憶部26とを備える。
ノード識別子管理部21と、ノード識別子管理テーブル24とはそれぞれ、負荷分散装置1のノード識別子管理部11と、ノード識別子管理テーブル13と同一となるため、説明は省略する。
(メッセージ処理部22)
メッセージ処理部22は、振り分け処理部12から振り分けられたメッセージを処理し、処理結果をクライアント3−1〜3−Nに返すことにより、サービスを提供する。また、メッセージ処理部22は、メッセージを処理すると、対応のデータを生成し、保持する。また、メッセージ処理部22がデータを生成する際、他のノードにデータの複製を保持させデータの冗長化を実現することができる。データの複製を保持する「他のノード」とは、例えば、ノード識別子を昇順に並べたときの次のノードであり、ID空間の右隣のノードである。
(データ抽出部23、抽出データ管理テーブル25)
データ抽出部23は、例えば、保守者または保守装置等の外部から保守観点のノード離脱要求(データ抽出部23を備えるノード自身に対するノード離脱要求)を受けた場合、ノードの離脱要求を受けたタイミング(離脱中フラグを1にするタイミング)でノード2−1自身が管理しているデータを抽出する。抽出されるデータには、原本、および、他のノードで保持する原本の複製を含む。
抽出データ管理テーブル25は、データ抽出部23が抽出したデータを管理するテーブルである。
データ抽出部23は、抽出したデータに関する抽出データ管理テーブル25を作成する。データ抽出部23は、データが削除されるタイミング、または、定期的に、抽出データ管理テーブル25を最新化する。例えば、ノードの離脱要求に応じて削除される予定のデータについて、クライアント3−1〜3−Nから受信したすべてのメッセージの処理が完了した時点で当該データに関する情報を抽出データ管理テーブル25から削除する。または、データが削除された後、定期的になされる時点で、当該データに関する情報を抽出データ管理テーブル25から削除する。
ノード2−1自身が管理しているデータが原本であり、複製が存在する場合は、その複製を管理するノードのデータ抽出部23は、複製のデータを抽出する。
抽出データ管理テーブル25が空(つまり、ノードの離脱要求に応じて削除される予定のデータが削除されて無くなった)になった時点で、データ抽出部23は、負荷分散装置1のノード識別子管理部11、および、ノード2−1〜2−Nのノード識別子管理部21に当該ノードの削除を指示し、ノード識別子管理テーブル13,24から削除する。なお、ノード削除指示は、上記のようにデータ抽出部23が実行してもよいし、他のノードを経由したり、負荷分散装置1が複数の振り分け装置から構成されている場合には、他の振り分け装置を経由したり、または、外部装置を利用したりして行われてもよい。
(データ記憶部26)
データ記憶部26は、ノード2−1が保持するデータを記憶する。データ記憶部26は、データ抽出部23が抽出の対象とするデータを記憶している。データが冗長化され、他のノードで複製が管理される場合には、データ記憶部26は、ノード2−1が保持する原本および複製を記憶する。
≪振り分け先確定処理≫
次に、負荷分散装置1の振り分け処理部12が実行する振り分け先確定処理について説明する。振り分け先確定処理は、負荷分散装置1がクライアント3−1〜3−Nからメッセージを受信したときに開始する。
図3に示すように、まず、振り分け処理部12は、受信したメッセージから、そのメッセージの処理対象となるデータのkeyを抽出する(ステップS1)。
次に、振り分け処理部12は、抽出したkeyに対し、CH法によりメッセージの振り分け先を決定する(ステップS2)。分散処理技術のデータ管理方法によれば、振り分け先は、メッセージから抽出したkeyとノード識別子との関係で決定することができる。
次に、振り分け処理部12は、ノード識別子管理テーブル13を参照し、振り分け先に決定したノードについて、離脱中フラグ(図2)が「1」であるか否かを判定する(ステップS3)。「1」である場合(ステップS3/Yes)、振り分け先に決定したノードは離脱対象であることを意味する。振り分け処理部12は、受信したメッセージから、そのメッセージの処理対象となるデータのデータ生成時刻を抽出する(ステップS4)。一方、離脱中フラグが「1」でない場合(ステップS3/No)、離脱中フラグは「0」である。この場合、振り分け先に決定したノードは、離脱することは無いので、メッセージの振り分け先として確定する(ステップS8)。
振り分け処理部12は、ノード識別子管理テーブル13を参照し、離脱対象となるノードの離脱開始時刻と、メッセージから抽出したデータ生成時刻とを比較する(ステップS5)。離脱対象となるノードの離脱開始時刻より、データ生成時刻が前である(古い)場合(ステップS5/Yes)、振り分け先に決定したノードを、メッセージの振り分け先として確定し(ステップS8)、図3の処理を終了する。
離脱対象となるノードの離脱開始時刻より、データ生成時刻が前である場合、離脱対象となるノードの離脱は、生成されるデータについて、当該ノードによる処理が完了した後に実行するように調整される。離脱対象となるノードは、データに対する処理が完了したとき、完了したことを振り分け処理部12および他のノードに通知してもよい。
一方、離脱対象となるノードの離脱開始時刻より、データ生成時刻が前でない(新しい)場合(ステップS5/No)、振り分け処理部12は、CH法により決定したものの、離脱が決定していたノードにメッセージを振り分けることはせず、他の振り分け先を探索する。
具体的には、振り分け処理部12は、図3に示す処理のループによって、すべてのノードについて、メッセージの振り分け先としての適性(後記)を確認する(ステップS6)。もし、すべてのノードについて確認済みでなければ(ステップS6/No)、振り分け処理部12は、ノード識別子を昇順に並べた次のノードの離脱中フラグを取得し(ステップS7)、次のノードについてステップS3の判定を再度行う。一方、すべてのノードについて確認済みであった場合(ステップS6/Yes)、振り分け先として適したノードが見つからなかったことを意味する。この場合、振り分け処理部12は、例外的に、最初に振り分け先として決定したノードにメッセージを振り分け(ステップS8)、図3の処理を終了する。
ステップS6での適正の確認とは、振り分け処理部12が、CH法により決定したノードについて、離脱対象となるノードの離脱開始時刻より、データ生成時刻が前でない場合ノード識別子を昇順に並べた次のノードのフラグを順番に確認することである、つまり、CH法のID空間上で右隣のノードの状態を確認することである。確認の結果、離脱中フラグが「0」のノード、または、離脱中フラグが「1」だが、離脱開始時刻よりデータ生成時刻が古いノードが見つかった時点で、そのノードにメッセージを振り分けることを確定する(CH法により振り分け先として決定したノード以外のノードを振り分け先として確定する)。
なお、負荷分散装置1がクライアント3−1〜3−Nから受信したメッセージが、例えば新規メッセージであって、データが未生成である場合も、便宜上、「ステップS5/No」に該当するとし、メッセージの振り分け先を探索する。
図3の振り分け先確定処理によれば、優先的に、離脱対象とならないノードを振り分け先とすることができる。
図3の振り分け先確定処理によって、振り分け先と確定したノードのメッセージ処理部22は、振り分け処理部12から振り分けられたメッセージを処理し、処理結果をクライアント3−1〜3−Nに返すことにより、サービスを提供する。また、メッセージ処理部22は、同時に他のノード、例えば、ノード識別子を昇順に並べたときの次のノード(ID空間の右隣のノード)にデータの複製を行うことでデータの冗長化を実現する。複製が複数存在する場合には、メッセージ処理部22は、さらに他のノード、例えば、ノード識別子を昇順に並べたときのさらに次のノード(ID空間の2つ右隣のノード)にデータの複製を行う。つまり、分散処理技術のデータ管理方法によれば、複製先は、メッセージから抽出したkeyとノード識別子との関係で、先述した第2のルールに従って決定することができる。
ただし、複製先のノードの離脱中フラグが「1」である場合、負荷分散装置1の振り分け処理部12は、クライアント3−1〜3−Nから受信したメッセージからデータ生成時刻を抽出する。そして、振り分け処理部12は、ノード識別子管理テーブル13を参照して、抽出したデータ生成時刻と、離脱対象となっている(離脱中と判定された)複製先のノードの離脱開始時刻とを比較する。
データ生成時刻が、離脱対象となっている(離脱中と判定された)複製先のノードの離脱開始時刻より古い(前である)場合、振り分け処理部12は、複製先と決定したノードを複製先として確定する。確定に応じて、振り分け処理部12は、原本を保持するノードのメッセージ処理部22にデータの複製を指示する。指示を受けたメッセージ処理部22は、複製先と確定したノードにデータの複製を行い、複製先と確定したノードのデータ記憶部26に複製のデータが記憶される。
一方、データ生成時刻が、離脱対象となっている複製先のノードの離脱開始時刻より新しい(前でない)場合、振り分け処理部12は、ノード識別子を昇順に並べた次のノード(複製先と決定したノードの次のノード)のフラグを順番に確認する、つまり、CH法のID空間上で右隣のノードの状態を確認する。確認の結果、離脱中フラグが「0」のノード、または、離脱中フラグが「1」だが、離脱開始時刻よりデータ生成時刻が古いノードが見つかった時点で、振り分け処理部12は、複製先と決定したノード以外で見つかったそのノードを複製先として確定する。確定に伴い、振り分け処理部12は、原本を保持するノードのメッセージ処理部22にデータの複製を指示する。指示を受けたメッセージ処理部22は、複製先と確定したノードにデータの複製を行い、複製先と確定したノードのデータ記憶部26に複製のデータが記憶される。
なお、振り分け処理部12から振り分けられたメッセージが、例えば新規メッセージであって、データが未生成である場合も、便宜上、上記のように、振り分け処理部12は、離脱中フラグを順番に確認して、メッセージ処理部22がデータの複製を行う。
振り分け処理部12は、すべてのノードを確認しても複製先が見つからなかった場合は、例外的に、最初に複製先として決定したノードを複製先として確定し、原本を保持するノードのメッセージ処理部22にデータの複製を指示する。指示を受けたメッセージ処理部22は、複製先と確定したノードにデータを複製し、複製先と確定したノードのデータ記憶部26に複製のデータが記憶される。
なお、図3のステップS3にて判定される離脱中フラグの値は、ノード2−1〜2−Nのうち離脱対象となったノードになされるノード離脱要求の有無に応じて決まる。ノード離脱要求があった場合、離脱中フラグは「0」から「1」に切り替わる。このとき、ノード離脱要求を受けたノード2−1〜2−Nのデータ抽出部23は、抽出データ管理テーブル25を用いて、ノード2−1〜2−N自身で管理するデータを抽出し、所定のタイミング(例えば、クライアント3−1〜3−Nから受信したすべてのメッセージの処理が完了した時)で削除する。その後、データ抽出部23からのノード削除指示により、該当ノードが削除される(離脱する)。
本実施形態によれば、ノードごとに、離脱中フラグを用意し、離脱中のノードに対して離脱開始時刻を設定することで、ノードの離脱が開始する時刻よりも後に生成するデータは、離脱するノードに保持させずに済ませることができる。その結果、ノードの離脱に伴うデータ移行を未然に防ぐことができる。また、ノードの離脱が開始する時刻よりも前に生成するデータは、離脱するノードに保持させることで、ノードの離脱は、データの処理完了後に実行するように調整することができる。よって、処理が未完了のデータを他のノードに移行させずに済ませることができる。
したがって、分散システムにおいて、ノードが離脱する際のデータ移行負荷を抑えることができる。
その結果、クラスタ構成の設計時において、ノード離脱時のデータ移行負荷の考慮が不要となり、リソースの利用効率をさらに向上させることができる。特に、データのライフタイムが短いシステムにおいては、データ移行による負荷バランス均等化の効果は低いため、本発明によるデータ移行抑止が有効である。
また、分散システムを前提とせずに開発されたアプリケーションを分散システムに対応させる場合、すべてのデータをCH法によるデータ管理に移行することで開発コストが高くなる可能性がある。本発明により、CH法を利用した振り分け処理による負荷分散の効果を得つつ、ノード離脱におけるデータ移行を抑止することでアプリケーションによるデータ管理プログラムの変更を不要とすることが可能であり、開発コストの低減化に資する。
また、本実施形態によれば、データが冗長化される場合であっても、ノードが離脱する際のデータ移行負荷を抑えることができる。
以上、本発明の実施形態について説明したが、本発明は前記実施形態に限定されず、本発明の要旨を逸脱しない範囲で適宜変更可能である。例えば、離脱するノード以外のノードを振り分け先とする場合(図3のステップS5〜S7)、CH法のID空間上で右隣のノードの状態を確認するのではなく、未確認の他のノードから適宜確認してもよい。また、離脱するノード以外のノードを複製先とする場合、CH法のID空間上で右隣のノードの状態を確認するのではなく、未確認の他のノードから適宜確認してもよい。
本実施形態で説明した種々の技術を適宜組み合わせた技術を実現することもできる。
本実施形態で説明したソフトウェアをハードウェアとして実現することもでき、ハードウェアをソフトウェアとして実現することもできる。
その他、ハードウェア、ソフトウェア、フローチャートなどについて、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
1 負荷分散装置
2−1〜2−N ノード
3−1〜3−N クライアント
11 ノード識別子管理部(ノード識別子管理手段)
12 振り分け処理部(振り分け処理手段)
13 ノード識別子管理テーブル(ノード識別子管理情報)
21 ノード識別子管理部
22 メッセージ処理部
23 データ抽出部
24 ノード識別子管理テーブル
25 抽出データ管理テーブル
26 データ記憶部

Claims (4)

  1. クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置であって、
    前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有し、
    前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、
    前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第1のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
    離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定する振り分け処理部、を備える、
    ことを特徴とする負荷分散装置。
  2. 前記複数のノードが保持する前記データが冗長化されており、前記データの原本、および、前記データの1または複数の複製をそれぞれ、異なるノード間で保持する場合、
    前記振り分け処理部は、
    前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第2のルールに従って複製先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
    離脱中である場合、前記複製先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データ生成時刻が前であれば、前記複製先と決定したノードを複製先として確定し、前でなければ、前記複製先と決定したノード以外のノードのうち前記第2のルールに従って決定したノードを複製先として確定する、
    ことを特徴とする請求項1に記載の負荷分散装置。
  3. クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置における負荷分散方法であって、
    前記負荷分散装置は、
    前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を有しており、
    前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、
    前記メッセージから抽出した前記keyと、前記ノード識別子管理情報で記憶されているノード識別子との関係で所定の第1のルールに従って振り分け先となるノードを決定するステップと、
    前記振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定するステップと、
    離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定するステップと、を実行する、
    ことを特徴とする負荷分散方法。
  4. クライアントからのメッセージを複数のノードのいずれかに振り分ける負荷分散装置としてのコンピュータを、
    前記ノードごとに、ノード識別子と、当該ノードが離脱中であるか否かを示す離脱中状態と、当該ノードが離脱するときの離脱開始時刻とを対応付けて記憶しているノード識別子管理情報を管理するノード識別子管理手段、
    前記メッセージには、当該メッセージの処理対象であり前記ノードに保持されるデータを指定する情報であるkeyを含んでおり、
    前記メッセージから抽出した前記keyと前記ノード識別子との関係で所定の第1のルールに従って振り分け先と決定したノードが離脱中であるか否かを、前記ノード識別子管理情報を参照して判定し、
    離脱中である場合、前記振り分け先と決定したノードの前記離脱開始時刻よりも、前記メッセージから抽出した前記データのデータ生成時刻が前であれば、前記振り分け先と決定したノードを振り分け先として確定し、前でなければ、前記振り分け先と決定したノード以外のノードのうち前記第1のルールに従って決定したノードを振り分け先として確定する振り分け処理手段、
    として機能させるための負荷分散プログラム。
JP2017138946A 2017-07-18 2017-07-18 負荷分散装置、負荷分散方法、および、負荷分散プログラム Active JP6714547B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017138946A JP6714547B2 (ja) 2017-07-18 2017-07-18 負荷分散装置、負荷分散方法、および、負荷分散プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017138946A JP6714547B2 (ja) 2017-07-18 2017-07-18 負荷分散装置、負荷分散方法、および、負荷分散プログラム

Publications (2)

Publication Number Publication Date
JP2019021022A JP2019021022A (ja) 2019-02-07
JP6714547B2 true JP6714547B2 (ja) 2020-06-24

Family

ID=65354688

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017138946A Active JP6714547B2 (ja) 2017-07-18 2017-07-18 負荷分散装置、負荷分散方法、および、負荷分散プログラム

Country Status (1)

Country Link
JP (1) JP6714547B2 (ja)

Also Published As

Publication number Publication date
JP2019021022A (ja) 2019-02-07

Similar Documents

Publication Publication Date Title
US7779010B2 (en) Repartitioning live data
JP6225262B2 (ja) 分散データグリッドにおいてデータを同期させるためにパーティションレベルジャーナリングをサポートするためのシステムおよび方法
JP2013054521A (ja) 分散制御プログラム、分散制御方法、および情報処理装置
CN112035422B (zh) 基于ipfs的分布式实时数据同步方法、节点设备及系统
JP5969315B2 (ja) データ移行処理システムおよびデータ移行処理方法
JP6196389B2 (ja) 分散型ディザスタリカバリファイル同期サーバシステム
JP5544521B2 (ja) 状態管理方法、処理装置、および状態管理プログラム
JP6714547B2 (ja) 負荷分散装置、負荷分散方法、および、負荷分散プログラム
JP5945252B2 (ja) 分散処理システム
JP5690296B2 (ja) 負荷分散プログラムおよび負荷分散装置
JP5918802B2 (ja) ノードおよびプログラム
JP5711771B2 (ja) ノード離脱処理システム
JP5658621B2 (ja) 信号振分複製先決定システム、信号振分複製先決定方法およびプログラム
JP6093320B2 (ja) 分散処理システム
US10659330B2 (en) Channel management in scalable messaging system
JP6506156B2 (ja) ノードおよびグラビテーション抑止方法
JP2010287172A (ja) 計算機ノード、計算機システム、プロセス生成方法およびプロセス生成プログラム
JP5845298B2 (ja) ノードおよびプログラム
JP5815000B2 (ja) ノードおよびプログラム
JP2011180658A (ja) 分散ファイルシステムにおける冗長化方法
JP6473425B2 (ja) ノードおよびデータ配置方法
JP6383338B2 (ja) サーバ、データ一覧作成方法、および、データ一覧作成プログラム
JP6127005B2 (ja) クラスタシステムのサーバ装置およびプログラム
JP5299448B2 (ja) 情報通信システム、ノード装置、情報処理方法及びプログラム
CN113225362A (zh) 服务器集群系统和服务器集群系统的实现方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190627

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200318

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200324

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200520

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200602

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200605

R150 Certificate of patent or registration of utility model

Ref document number: 6714547

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150