JP2013130960A - 情報処理装置、データ制御方法およびデータ制御プログラム - Google Patents

情報処理装置、データ制御方法およびデータ制御プログラム Download PDF

Info

Publication number
JP2013130960A
JP2013130960A JP2011278804A JP2011278804A JP2013130960A JP 2013130960 A JP2013130960 A JP 2013130960A JP 2011278804 A JP2011278804 A JP 2011278804A JP 2011278804 A JP2011278804 A JP 2011278804A JP 2013130960 A JP2013130960 A JP 2013130960A
Authority
JP
Japan
Prior art keywords
message
server
identifier
queue
unit
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.)
Granted
Application number
JP2011278804A
Other languages
English (en)
Other versions
JP5845877B2 (ja
Inventor
Yasuo Koike
康夫 小池
Daisuke Shimabayashi
大祐 島林
Shinji Yamabiraki
真二 山開
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011278804A priority Critical patent/JP5845877B2/ja
Priority to US13/713,642 priority patent/US9197715B2/en
Publication of JP2013130960A publication Critical patent/JP2013130960A/ja
Application granted granted Critical
Publication of JP5845877B2 publication Critical patent/JP5845877B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)
  • Communication Control (AREA)
  • Computer And Data Communications (AREA)

Abstract

【課題】データの処理速度を高速化することを課題とする。
【解決手段】サーバは、記憶部と付与部と記憶制御部と応答部とを有する。付与部は、クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する。記憶制御部は、データの送受信処理を分散させる分散型ネットワークを形成するサーバから、付与部による付与予定の識別子が付与されるアクセス要求を処理対象とするサーバを探索する。そして、記憶制御部は、探索されたサーバを特定する情報と付与予定の識別子とを対応付けて記憶部に記憶させる。応答部は、付与部によってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて記憶部に記憶される情報を、クライアント端末に応答する。
【選択図】図1

Description

本発明は、情報処理装置、データ制御方法およびデータ制御プログラムに関する。
従来、メッセージの送信者からメッセージの受信者へメッセージを伝達する技術として、異なるプロセス間を非同期に連携させるメッセージキューが知られている。メッセージキューを利用する場合、メッセージキューの配置設計が行われて、メッセージキューにアクセスするサーバ、メッセージキューの容量などが事前に決定される。
一般的に、メッセージを送信するアプリケーションは、メッセージ受信側の状態を認識せずに送信するので、受信側が受信を行えない状態にある場合には、メッセージの格納領域が不足し、メッセージ送信が実行できない場合がある。すなわち、滞留による容量オーバーが発生する場合がある。この容量オーバーを回避する技術として、複数のサーバを仮想的な1つのメッセージキューに見せかけて、メッセージキューの物理容量を動的に拡張する技術が知られている。
また、メッセージキューは、大量のデータを扱うことが多いことから、メッセージの格納領域に対するI/O負荷により性能が劣化する場合がある。これに対して、メッセージの格納領域を複数に分割し、ラウンドロビンで格納領域を決定することで、I/O負荷を分散させる技術が利用されている。
また、データの格納領域の動的な拡張と負荷分散を行う技術として、複数のサーバにデータを分散させて管理する分散ハッシュテーブル(DHT:Distributed Hash Table)が知られている。DHTは、データに対してキーを割当て、割当てたキーによって、データを処理または格納させるサーバを決定する分散データ構造またはアルゴリズムである。なお、DHTの実装としては、コンシステント・ハッシュ(CH:Consistent Hash)が知られている。
具体的には、DHTは、各サーバについて、ハッシュ関数を用いて固定長ビット空間の担当エリアを決定する。そして、DHTは、ハッシュ関数を用いて格納対象のデータのキーを算出し、担当エリアのサーバに格納する。このようにして、DHTは、P2P(Peer to Peer)オーバレイネットワークを構成する。また、CHは、システム構成の変動に柔軟に対応できるアーキテクチャとして、拡張性を有する分散ストレージとして利用されている。
このようなDHTでは、IP(Internet Protocol)アドレスなどの宛先情報を用いて算出したハッシュ値から担当となるサーバを決定するために、CH空間を形成する各サーバのIPアドレスを管理することになる。管理手法としては、各サーバがアクセス可能な専用サーバで集中管理する方式と、各サーバ内で管理する方式とがある。近年の大規模分散システムでは、可用性の観点から、各サーバ内で管理する方式が採用されることが多い。
各サーバ内で管理する方式の場合、サーバ台数が多くなると管理する宛先情報も多くなり、また、各サーバの死活監視や宛先情報の同期処理などを行うための通信トラフィックが大量に発生する。このようなことから、1つのサーバで保持する宛先情報を削減し、目的のサーバに到達するまでに経由するサーバの台数(以下、ホップ数と呼ぶ)を減らすルーティングアルゴリズムがある。ルーティングアルゴリズムの例としては、閉じた数直線で論理空間を形成するChordやPastyなどのアルゴリズムや、N次元トーラスを用いて論理空間を形成するCANなどのアルゴリズムが知られている。Chordを用いた場合、サーバ台数(N)に関らず、O(logN)のホップ数で目的のサーバに到達する。
特表2010−501942号公報 特開平11−17769号公報
しかしながら、従来技術では、データの処理速度が十分ではない場合があるという問題がある。
例えば、オンライン証券取引のWebフロントシステムのように、数百マイクロ秒である1回の通信でも削減してレイテンシを下げることが競争力につながるシステムでは、Chordでもデータを処理する速度やデータ処理にかかる速度の安定性は十分とは言えない。また、ストリーミング処理のように、通信速度が最も遅い場合に処理を合わせるシステムでも、同様のことが言える。
具体的には、Chordは、サーバ台数に寄らず50%以上の確率で2ホップ以上となり、100台構成ならば最大5ホップの通信となり、1ミリ秒以上の通信性能差が発生する場合がある。つまり、複数のサーバに跨る処理が行われること自体、オーバヘッドが高いことに加え、下位層のトポロジに無関係にオーバレイのトポロジが作られる場合、下位層での無駄な通信を引き起こしやすい。このように、Chordなどのアルゴリズムを用いたとしても、システムによっては満足する処理速度を発揮できない場合がある。
1つの側面では、データの処理速度を高速化する情報処理装置、データ制御方法およびデータ制御プログラムを提供することを目的とする。
第1の案では、情報処理装置は、クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する付与部を有する。情報処理装置は、記憶制御部を有する。記憶制御部は、データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、前記付与部による付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索する。そして、記憶制御部は、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させる。情報処理装置は、前記付与部によってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する応答部を有する。
データの処理速度を高速化することができる。
図1は、実施例1に係るシステムの全体構成例を示す図である。 図2は、実施例1に係るシステムのCH空間を示す図である。 図3は、実施例2に係るクライアント端末の構成を示す機能ブロック図である。 図4は、実施例2に係るサーバの構成を示す機能ブロック図である。 図5は、キューディクショナリデータ格納部に格納される情報の例を示す図である。 図6は、送信用先読み格納部に格納される情報の例を示す図である。 図7は、メッセージ格納部に格納される情報の例を示す図である。 図8は、キューオープン処理の全体的な流れを説明する図である。 図9は、キューオープン処理におけるメッセージの遷移を説明する図である。 図10は、キューオープン処理の流れを示すフローチャートである。 図11は、キューオープン処理の流れを示すフローチャートである。 図12は、キューオープン処理の流れを示すフローチャートである。 図13は、キューオープン処理の流れを示すフローチャートである。 図14は、メッセージキューに対するデータ送信処理の全体的な流れを説明する図である。 図15は、データ送信処理におけるメッセージの遷移を説明する図である。 図16は、データ送信処理の流れを示すフローチャートである。 図17は、データ送信処理の流れを示すフローチャートである。 図18は、メッセージキューに対するデータ受信処理の全体的な流れを説明する図である。 図19は、データ受信処理におけるメッセージの遷移を説明する図である。 図20は、データ受信処理の流れを示すフローチャートである。 図21は、データ受信処理の流れを示すフローチャートである。 図22は、データ受信処理の流れを示すフローチャートである。 図23は、送信用先読み格納部処理の全体的な流れを説明する図である。 図24は、送信用先読み格納部処理におけるメッセージの遷移を説明する図である。 図25は、送信用先読み格納部処理の流れを示すフローチャートである。 図26は、サーバBがCH空間から離脱する場合のキューディクショナリデータの挙動を説明する図である。 図27は、サーバXがCH空間に参加する場合のキューディクショナリデータの挙動を説明する図である。 図28は、データ制御プログラムを実行するコンピュータのハードウェア構成の例を示す図である。
以下に、本願の開示する情報処理装置、データ制御方法およびデータ制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、実施例1に係るシステムの全体構成例を示す図である。図1に示すように、このシステムは、クライアント端末10、クライアント端末20、クライアント端末30、サーバA50、サーバB60がネットワーク5を介して相互に通信可能に接続される。図1に示したシステムは、Chordを用いた分散ハッシュテーブルを形成する。すなわち、システムは、複数のサーバに形成されるメッセージキューと、メッセージキューにデータを送信するクライアント端末と、メッセージキューからデータを読み出して受信するクライアント端末との間で、非同期連携を行うシステムである。
なお、ここで示した各装置の台数等はあくまで例示であり、図示したものに限定されない。また、クライアント端末とサーバとは同一の物理マシン上で動作していてもよい。つまり、図1に示したシステムは、物理マシンで構成される物理的なシステムではなく、仮想マシン等で構成される論理的なシステムであってもよい。なお、分散ハッシュテーブルを実現するアルゴリズムは、Chord以外のアルゴリズムを用いることもできる。
サーバA50やサーバB60は、クライアント端末間のデータの送受信処理を分散させる分散型ネットワークであるCH空間を形成する。図2は、実施例1に係るシステムのCH空間を示す図である。図2に示す各サーバは、例えばメッセージキューのキュー名のハッシュ値によって、CH空間上の位置が決まる。また、CH空間は、CH空間上の位置に基づいて各サーバをリンク状に接続した空間であり、時計周りにデータ等が転送される。そして、各サーバには、ハッシュ値で区切られた空間が担当する空間として割り振られている。また、各サーバは、データを転送するのに使用するルーティングテーブルを保持する。このルーティングテーブルには、例えば、時計回りで次に位置するサーバのIP(Internet Protocol)アドレス、リンク状に対向する位置に位置するサーバのIPアドレス等を記憶する。なお、ルーティングテーブルが記憶する情報は、Chordなどで一般的に用いられる情報である。
ここで、図2に示したCH空間でクライアント端末がデータを送信する一例を説明する。クライアント端末10は、メッセージキューXのキュー名を指定して、キューオープンの要求をサーバA50に送信する。サーバA50は、受信したキュー名をハッシュ値に変換し、自装置が担当でないことを特定した後に、受信した要求に自装置のIPアドレスを付加してChordのルーティング手法に準じて転送する。次にこの要求を受信したサーバは、同様の手法で自装置が担当でないことを特定した後に、要求を次にサーバに転送する。
このようにして転送されてきた要求をサーバB60が受信する。すると、サーバB60は、同様の手法で自装置が担当であることを特定する。そして、サーバB60は、要求に既に付加されているサーバA50のIPアドレスを宛先として、自装置のIPアドレスを付加した要求を送信する。この送信要求を受信したサーバA50は、受信した要求に付加されているサーバB60のIPアドレスをクライアント端末10に応答する。
クライアント端末10は、サーバA50から受信したサーバB60のIPアドレスに対してアクセスし、サーバB60との間のコネクションを確立する。このようにして、クライアント端末が指定したメッセージキューがオープンされる。その後、クライアント端末10は、コネクションが確立されたサーバB60に、メッセージキューX宛てのデータの送信要求を送信する。
サーバB60は、受信した送信要求に含まれるキュー名をハッシュ値に変換し、自装置が担当であることを特定する。その後、サーバB60は、要求順に増加または減少する識別子と指定されたキュー名とをハッシュ値に変換し、上述した同様の手法でデータの格納先となるサーバC70を特定する。サーバB60は、サーバC70からIPアドレスを受信すると、受信したIPアドレスを格納先としてクライアント端末10に送信する。そして、クライアント端末10は、サーバC70にデータを格納する。このようにして、クライアント端末10は、メッセージキューXを用いたデータの送信を行うことができる。なお、データを受信する場合には、上述したデータの送信処理と同様の処理が実行される。
図1に戻り、このような処理を実行するサーバA50は、記憶部50aと付与部50bと記憶制御部50cと応答部50dを有する。なお、CH空間の各サーバは同様の構成を有する。
付与部50bは、クライアント端末10から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する。記憶制御部50cは、データの送受信処理を分散させる分散型ネットワークを形成するサーバから、付与部50bによる付与予定の識別子が付与されるアクセス要求を処理対象とするサーバを探索する。そして、記憶制御部50cは、探索されたサーバを特定する情報と付与予定の識別子とを対応付けて記憶部50aに記憶させる。応答部50dは、付与部50bによってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて記憶部50aに記憶される情報を、クライアント端末10に応答する。
このように、CH空間を形成するサーバは、クライアント端末からの要求の有無に関わらず、次に発行される要求に対応する格納先サーバを検索し、格納先サーバの装置情報を予め蓄積することができる。このため、システム規模が大きくなるにつれて多くなるCHの内部転送のオーバヘッドを削減することができる。したがって、データの処理速度を高速化することができる。
次に、図1に示したシステムを形成する各装置の構成を説明する。なお、各クライアント端末は同様の構成を有するので、ここでは、クライアント端末10について説明する。また、各サーバも同様の構成を有するので、ここでは、サーバA50について説明する。
[クライアント端末の構成]
図3は、実施例2に係るクライアント端末の構成を示す機能ブロック図である。図3に示すように、クライアント端末10は、通信インタフェース11と、記憶部12と、制御部13とを有するコンピュータ装置である。なお、ここで示した処理部は、あくまで例示であり、これに限定されるものではない。例えば、クライアント端末10は、ディスプレイなどの表示部、マウスなどの入力部、媒体からデータを読み取る媒体読取装置等を有しいてもよい。
通信インタフェース11は、他の装置の通信を制御するネットワークインタフェースカードなどである。例えば、通信インタフェース11は、サーバA50のメッセージキューのオープンを要求したり、サーバA50にデータを送信したり、サーバA50からデータを受信したりする。また、通信インタフェース11は、サーバA50からメッセージキューの担当となるサーバのIPアドレスを受信したり、サーバA50からデータの格納先となるサーバのIPアドレスを受信したりする。
記憶部12は、制御部13が実行するプログラム、アプリケーション、ライブラリ、データ等を記憶する半導体メモリ素子やハードディスクなどの記憶装置である。制御部13は、OS(Operating System)を実行するプロセッサなどの電子回路であり、クライアント端末10の全体の制御を司る制御部である。制御部13は、アプリケーション実行部14とライブラリ実行部15とを有する。
アプリケーション実行部14は、記憶部12に記憶されるアプリケーションを実行する処理部である。アプリケーション実行部14は、アプリケーションを実行し、ライブラリ実行部15に対してデータの送信または受信を要求する。
ライブラリ実行部15は、メッセージ制御部16と通信制御部17とを有し、これらによってサーバとの通信を制御する処理部である。メッセージ制御部16は、アプリケーション実行部14の指示にしたがって、メッセージキューのオープン要求やデータ送信要求などの各種要求をCH空間のサーバに送信する。
また、メッセージ制御部16は、アプリケーションが接続を宣言したメッセージキューのキューディクショナリの宛先情報を記憶部12に記憶させる。つまり、記憶部12は、オープンされたメッセージキューの情報を記憶する。例えば、記憶部12は、オープンされたメッセージキューのキュー名と、当該メッセージキューを担当するサーバのIPアドレスとを対応付けて記憶する。メッセージ制御部16は、データの送信要求や受信要求を他のサーバに転送する場合には、このキューディクショナリの宛先情報にしたがって送受信を制御する。
通信制御部17は、通信資源の確保を実行し、サーバとの通信を制御する処理部である。例えば、通信制御部17は、オープンされたメッセージキューを担当するサーバとの間でコネクションを確立する。通信制御部17は、確立されたコネクションを用いて、サーバとの間でデータのやり取りを実行する。なお、1つのメッセージキューに対して、複数のクライアントが存在してもよい。
[サーバの構成]
図4は、実施例2に係るサーバの構成を示す機能ブロック図である。図4に示すように、サーバA50は、通信インタフェース51と、記憶部52と、制御部53とを有する。なお、ここで示した処理部は、あくまで例示であり、これに限定されるものではない。例えば、サーバA50は、ディスプレイなどの表示部、マウスなどの入力部、媒体からデータを読み取る媒体読取装置等を有しいてもよい。
通信インタフェース51は、他の装置との通信を制御するネットワークインタフェースカードなどであり、オープンしたメッセージキューを用いてデータの送受信を実行するクライアント端末との間でコネクションを確立する。例えば、通信インタフェース51は、メッセージキューのオープンを要求するオープン要求を他のサーバやクライアント端末から受信したり、オープン要求に対する応答を他のサーバから受信してクライアント端末に応答したりする。また、通信インタフェース51は、データの送信要求や受信要求をクライアント端末から受信し、当該要求に対する応答をクライアント端末に送信する。また、通信インタフェース51は、クライアント端末から格納対象のデータを受信したり、記憶部52から読み出されたデータを送信したりする。
記憶部52は、制御部53が実行するプログラムやデータを記憶する半導体メモリ素子やハードディスクなどの記憶装置である。記憶部52は、キューディクショナリデータ格納部52aと、送信用先読み格納部52bと、受信用先読み格納部52cと、メッセージ格納部52dと、受信待ちカウンタ52eとを有する。また、記憶部52は、CH空間におけるルーティングテーブルを記憶する。なお、ここで記憶されるルーティングテーブルは、Chordなどのアルゴリズムで用いられるルーティングテーブルと同様の情報を記憶する。
キューディクショナリデータ格納部52aは、メッセージキューごとに、データの送信要求や受信要求などのメッセージを識別する識別子を生成するためのカウンタと、処理済メッセージを管理するためのカウンタとを記憶する。図5は、キューディクショナリデータ格納部に格納される情報の例を示す図である。図5に示すように、キューディクショナリデータ格納部52aは、キュー名と属性とカウンタ値とを対応付けて記憶する。なお、キューディクショナリデータ格納部52aは、キュー名と属性との組み合わせでインデックスを持つ。つまり、キューディクショナリデータ格納部52aは、キュー名と属性との組み合わせをキー、カウンタ値をValueとするキーバリューストア構造である。
ここで記憶される「キュー名」は、メッセージキューに割り与えられた、メッセージキューを識別する識別子である。「属性」は、カウンタ値の属性を示し、メッセージに付与された識別子を示すメッセージ識別子用カウンタの場合には「1」が格納され、処理済のメッセージに付与されていた識別子を示す処理済メッセージ管理用カウンタの場合には「2」が格納される。「カウンタ値」は、付与された最新の識別子または処理された最新の識別子を示し、FIFO(First In First Out)制御するための整数値が格納される。
図5の場合、キューAについては、キューAに格納された最新のデータに対応する送信要求に付与された識別子が100であり、キューAから読み出された最新のデータに対応する受信要求に付与された識別子が90であることを示す。同様に、キューBについては、キューBに格納された最新のデータに対応する送信要求に付与された識別子が5であり、キューBから読み出された最新のデータに対応する受信要求に付与された識別子が5であることを示す。
図4に戻り、送信用先読み格納部52bは、メッセージキューごとに、データの送信要求に付与される予定の識別子と、当該予定の識別子に対応する宛先情報とを対応付けて記憶する。図6は、送信用先読み格納部に格納される情報の例を示す図である。図6に示すように、送信用先読み格納部52bは、「カウンタ、宛先情報、next」を1つの情報とするチェーン構造で情報を記憶する。
ここで記憶される「カウンタ」は、送信要求に付与される予定の識別子を示し、ここでは、送信用先読み格納部52bに記憶される最小のカウンタ値がチェーン構造の最初である。「宛先情報」は、具体例としてサーバのIPアドレスを示しているが、本発明はこれに限定されるものではない。例えば、DNSのように一般的な通信技術によって通信を解決するならば、ホスト名であってもよい。「next」は、次のデータを示すポインタである。図6の場合、識別子として101が付与された送信要求に含まれるデータの格納先は、IPアドレスがxxx.xxx.xxx.102であるサーバAとなることを示す。次に、識別子として102が付与された送信要求に含まれるデータの格納先は、IPアドレスがxxx.xxx.xxx.105であるサーバDとなることを示す。
受信用先読み格納部52cは、メッセージキューごとに、データの受信要求に付与される予定の識別子と、当該予定の識別子に対応する宛先情報とを対応付けて記憶する。受信用先読み格納部52cは、図6に示した送信用先読み格納部52bと同様、「カウンタ、宛先情報、next」を1つの情報とするチェーン構造で記憶する。ここで記憶される「カウンタ」は、受信要求に付与される予定の識別子を示し、ここでは、受信用先読み格納部52cに記憶される最小のカウンタ値がチェーン構造の最初である。「宛先情報」は、サーバのIPアドレスを示し、「next」は、次のデータを示すポインタである。
メッセージ格納部52dは、クライアント端末から送信されたデータを物理的に記憶する。図7は、メッセージ格納部に格納される情報の例を示す図である。図7に示すように、メッセージ格納部52dは、メッセージ識別子とデータとを対応付けて記憶する。つまり、メッセージ格納部52dは、メッセージ識別子をキー、データをValueとするキーバリューストア構造である。
ここで記憶される「メッセージ識別子」は、メッセージに割り与えられた、メッセージを識別する識別子である。「データ」は、クライアント端末から受信したデータである。図7の場合、キューAは、先頭がキューA#0001のデータA1、次がキューA#0002のデータA2とする待ち行列を形成し、キューBは、先頭がキューB#0010のデータB1である待ち行列を形成していることを示す。
受信待ちカウンタ52eは、メッセージキューを識別するキュー名ごとに、データの受信待ちとなっている順に、クライアント端末の宛先情報を記憶する。例えば、受信待ちカウンタ52eは、「キュー名=キューA」と「宛先情報=クライアント端末10のIPアドレス」との組、「キュー名=キューA」と「宛先情報=クライアント端末20のIPアドレス」との組を順に記憶する。この場合、キューAについては、クライアント端末10、クライアント端末20の順に待ち行列を形成していることを示す。
制御部53は、OSを実行するプロセッサなどの電子回路であり、Chordなどのアルゴリズムを実行するとともに、サーバA50の全体を司る処理部である。制御部53は、クラスタ制御部54と種別判定部55とオープン処理部56とメッセージ処理部57と先読み制御部58とを有し、これらによってデータ処理を実行する。ここでは、各処理部が実行する代表的な処理の一例を説明し、詳細については処理の流れで説明する。
クラスタ制御部54は、メッセージキューを構成するサーバ群の死活監視と、構成情報の同期処理を実行する。クラスタ制御部54は、CH空間を形成し、維持するための各種処理を実行する。例えば、クラスタ制御部54は、SNMP(Simple Network Management Protocol)などのプロトコルや他の監視ツールを用いて、CH空間上のサーバの死活監視を実行する。また、クラスタ制御部54は、CH空間上のサーバの生死によって、ルーティングテーブルや各先読み格納部の更新等を実行する。
種別判定部55は、他のサーバまたはクライアント端末から受信した各種要求や応答の種別を判定する処理部である。例えば、種別判定部55は、他のサーバまたはクライアント端末から受信した要求や応答などを示すメッセージのヘッダに含まれる通信種別を参照して、メッセージの種別を判定する。例えば、種別判定部55は、受信したメッセージがメッセージキューのオープンを要求するメッセージである場合には、当該メッセージをオープン処理部56に出力する。また、種別判定部55は、受信したメッセージがデータの送信や受信を要求するメッセージである場合には、当該メッセージをメッセージ処理部57に出力する。
オープン処理部56は、クライアント端末からオープン要求されたメッセージキューを解放する各処理を実行する処理部である。一例を挙げると、オープン処理部56は、担当判定処理と転送処理と応答処理とを実行する。担当判定処理は、オープン対象のメッセージキューの担当が自装置であるか否か、つまり、オープン処理の処理担当が自装置であるか否かを判定する処理である。例えば、オープン処理部56は、オープン要求に含まれるキュー名をハッシュ値に変換し、変換したハッシュ値が自装置の担当するハッシュ値の範囲内か否かを判定する。
転送処理は、オープン処理の処理担当が自装置でない場合に、Chordの手法にしたがって、オープン要求を転送する処理である。例えば、オープン処理部56は、記憶部52に記憶されるルーティングテーブルにしたがって、CH空間の時計回りで自装置の次に位置するサーバにオープン要求を転送する。このとき、オープン処理部56は、他のサーバではなくクライアント端末から直接オープン要求を受信した場合、オープン要求に宛先情報として自装置のIPアドレスを付加して転送する。
応答処理は、オープン処理の処理担当が自装置である場合に、自装置の宛先情報をクライアント端末に応答する処理である。例えば、オープン処理部56は、オープン要求がクライアント端末から直接受信したものである場合、自装置のIPアドレスをクライアント端末に直接応答する。また、オープン処理部56は、オープン要求が他のサーバから転送されてきたものである場合、オープン要求に付加されている転送元のサーバのIPアドレスに対して、自装置のIPアドレスを応答する。また、オープン処理部56は、オープン要求を担当する他のサーバからIPアドレスを受信した場合には、受信したIPアドレスをクライアント端末に応答する。
メッセージ処理部57は、データの受信要求や送信要求などのメッセージをクライアント端末から受信した場合に、受信したメッセージに関する各処理を実行する処理部である。一例を挙げると、メッセージ処理部57は、識別子付与処理、宛先判定処理、応答実行処理を実行する。
識別子付与処理は、データの送信要求や受信要求に対して、一定の規則性を有する識別子を生成して付与する処理である。例えば、メッセージ処理部57は、データの送信要求が受信された場合に、当該送信要求からキュー名を抽出する。そして、メッセージ処理部57は、抽出したキュー名と属性「1」とに対応するカウンタ値をキューディクショナリデータ格納部52aから特定する。その後、メッセージ処理部57は、特定したカウンタ値を1つインクリメントした値を識別子として、データの送信要求に付与する。
同様に、メッセージ処理部57は、データの受信要求が受信された場合に、当該受信要求からキュー名を抽出する。そして、メッセージ処理部57は、抽出したキュー名と属性「2」とに対応するカウンタ値をキューディクショナリデータ格納部52aから特定する。その後、メッセージ処理部57は、特定したカウンタ値を1つインクリメントした値を識別子として、データの送信要求に付与する。
宛先判定処理は、データの送信要求または受信要求の処理担当が自装置であるか否かを判定する処理である。例えば、メッセージ処理部57は、識別子付与処理または他のサーバによって送信要求または受信要求に付与された識別子にしたがって、自装置が処理担当であるか否かを判定する。具体的には、メッセージ処理部57は、データの送信要求または受信要求に付与された識別子と当該要求に含まれるキュー名とを組み合わせた値をハッシュ値に変換し、自装置の担当するハッシュ値の範囲内である場合に、自装置が処理担当であると判定する。
また、メッセージ処理部57は、受信された要求に付与された識別子と要求に含まれるキュー名とを組み合わせた値をハッシュに変換し、自装置の担当するハッシュ値の範囲内でない場合に、識別子が付与された送信要求をCH空間上の次のサーバに転送する。そして、メッセージ処理部57は、処理担当のサーバからIPアドレスを受信した場合に、受信したIPアドレスをクライアント端末に応答する。
メッセージ処理部57は、「識別子とキュー名」との組み合わせが、各先読み格納部に格納されている場合には、次のサーバに転送することなく、各格納部から該当する宛先情報を取得して、クライアント端末10に応答する。
先読み制御部58は、送信用先読み格納部52bと受信用先読み格納部52cとを更新する処理部である。例えば、先読み制御部58は、送信用先読み格納部52bまたは受信用先読み格納部52cに格納されるエントリの数が最大数よりも少なくなった場合に、先読み処理を開始して、新たなエントリを格納する。なお、先読み制御部58は、メッセージ処理部57によって送信用先読み格納部52bまたは受信用先読み格納部52cに格納されるエントリが読み出されると、当該エントリを削除する。
例えば、キューディクショナリデータ格納部52aに格納されるキューAに対応するメッセージ識別子生成用カウンタの値が「12」であり、送信用先読み格納部52bに格納されるキューAのカウンタが「12」、「13」、「14」の3つであるとする。また、送信用先読み格納部52bは、キュー名ごとに最大4つのエントリを格納できるものとする。この場合、先読み制御部58は、「キュー名+未格納のカウンタ値」すなわち「キューA+15」をハッシュ値「AAA」に変換する。そして、先読み制御部58は、Chordの手法にしたがって、CH空間を形成するサーバから、ハッシュ値「AAA」を担当するサーバを探索する。その後、先読み制御部58は、送信用先読み格納部52bに格納されるキューAのエントリとして、探索されたサーバのIPアドレスとカウンタ値「15」とを対応付けて格納する。
例えば、キューディクショナリデータ格納部52aに格納されるキューZに対応する処理済み管理用カウンタの値が「15」であり、受信用先読み格納部52cに格納されるキューZのカウンタが「16」、「17」、「18」の3つであるとする。また、受信用先読み格納部52cは、キュー名ごとに最大4つのエントリを格納できるものとする。この場合、先読み制御部58は、「キュー名+未格納のカウンタ値」すなわち「キューZ+19」をハッシュ値「ZZZ」に変換する。そして、先読み制御部58は、Chordの手法にしたがって、CH空間を形成するサーバから、ハッシュ値「ZZZ」を担当するサーバを探索する。その後、先読み制御部58は、受信用先読み格納部52cに格納されるキューZのエントリとして、探索されたサーバのIPアドレスとカウンタ値「19」とを対応付けて格納する。
[処理の流れ]
次に、図8から図27を用いて図1等に示したシステムにおける処理の流れを説明する。ここでは、各処理について全体的な流れ、メッセージ遷移、フローチャートを説明する。なお、システムでやり取りされるメッセージは、通信種別、キュー名ハッシュ値、転送元サーバ識別子、宛先情報、メッセージ識別子を含むヘッダ部と、メッセージ実データを含む実データ部とを有しているものとする。
[キューオープン処理]
図8から図13を用いてキューオープン処理を説明する。キューオープンとは、メッセージ・キューを利用するための接続処理のことである。図8は、キューオープン処理の全体的な流れを説明する図である。図9は、キューオープン処理におけるメッセージの遷移を説明する図である。図10から図13は、キューオープン処理の流れを示すフローチャートである。なお、ここではクライアント端末10がキューオープン処理を依頼する例について説明する。
(全体的な流れ、メッセージ遷移)
図8に示すように、クライアント端末10は、参加ゲートウェイとなる任意のサーバA50に接続し、メッセージキューのキュー名であるキューAを指定してオープン依頼を実行する。具体的には、図9に示すように、クライアント端末10は、通信種別に「接続依頼(初回)」を設定し、メッセージ実データに「キューA」を設定したメッセージをサーバA50に送信する。なお、この接続先サーバは、利用者のポリシーによって決定することができる。
サーバA50の種別判定部55は、受信したメッセージの通信種別から依頼された処理をオープン処理と判定する。続いて、オープン処理部56は、メッセージ実データに設定されるキュー名のキューAをハッシュして「xxxxxxxx」を算出し、自装置が保持するルーティングテーブルに従ってCH空間内を検索する。
オープン処理部56は、自装置が指定されたメッセージキューの担当でなければ、自身の識別子をメッセージに付加して、ChordなどのアルゴリズムにしたがってメッセージをCH空間内に転送する。
具体的には、図9に示すように、サーバAのオープン処理部56は、メッセージ実データに「キューA」が設定されたメッセージの通信種別を「接続依頼(初回)」から「接続依頼(転送)」に設定変更する。そして、オープン処理部56は、当該メッセージのキュー名ハッシュ値に、算出したハッシュ値である「xxxxxxxx」を設定し、転送元サーバ識別子に「サーバA」を設定して、次のサーバに転送する。なお、サーバAの識別子としては、ホスト名やIPアドレスを用いることができる。ここで、メッセージが何回か転送されて、メッセージキューの担当であるサーバB60に到達したとする。
その後、サーバB60の種別判定部65は、受信したメッセージの通信種別から、依頼された処理をオープン処理と判定する。続いて、オープン処理部66は、受信されたメッセージのキュー名ハッシュ値に設定される値「xxxxxxxx」に基づいて、指定されたメッセージキューの担当が自装置であると判定する。そして、オープン処理部66は、受信したメッセージの宛先情報に自装置のIPアドレス等を設定して、メッセージの転送元サーバ識別子に設定される転送元サーバに転送する。
具体的には、図9に示すように、サーバB60のオープン処理部66は、サーバA50から受信したメッセージの通信種別を「接続依頼(転送)」から「接続依頼(応答)」に設定変更したメッセージを生成する6。そして、オープン処理部66は、当該メッセージの宛先情報にIPアドレス「xxx.xxx.xxx.xxx」を設定する。その後、オープン処理部66は、当該メッセージの転送元サーバ識別子に設定された「サーバA」に対して、上述した情報を新たに設定したメッセージを転送する。
サーバA50のオープン処理部56は、サーバB60から受信したメッセージをクライアント端末10に応答する。具体的には、図9に示すように、サーバA50のオープン処理部56は、サーバB60から受信したメッセージの通信種別を「接続依頼(応答)」から「接続(転送)」に設定変更して、クライアント端末10に送信する。
クライアント端末10は、サーバA50から受信したメッセージに基づいて、指定メッセージキューを担当するサーバB60との間でコネクションを確立し、キューオープン依頼を実行する。以降、クライアント端末10は、キューAとのやり取りはサーバB60に直接通信して行う。
具体的には、図9に示すように、クライアント端末10は、サーバA50から受信したメッセージの通信種別を「接続(転送)」から「接続依頼(初回)」に設定変更する。そして、クライアント端末10は、受信したメッセージの宛先情報に設定されるIPアドレス「xxx.xxx.xxx.xxx」に対して、設定変更したメッセージを送信する。
サーバB60の種別判定部65は、受信したメッセージの通信種別から、依頼された処理をオープン処理と判定する。続いて、オープン処理部66は、受信されたメッセージのキュー名ハッシュ値に設定されて値「xxxxxxxx」に基づいて、指定されたメッセージキューの担当が自装置であると判定する。その後、オープン処理部66は、キューディクショナリデータ格納部52aに、キューAのデータが生成済みであるか否かを判定する。そして、オープン処理部66は、キューディクショナリデータがなければメッセージ識別子生成用カウンタと処理済メッセージ管理用カウンタとを新たに生成する。一方、オープン処理部66は、キューディクショナリデータがあるまたは生成された場合、メッセージを生成してクライアント端末10に応答してコネクションを確立する。
具体的には、図9に示すように、サーバB60のオープン処理部66は、クライアント端末10から受信したメッセージの通信種別を「接続(初回)」から「接続(完了)」に変更して、クライアント端末10に応答する。以降、クライアント端末10は、キューAを用いてメッセージの送受信が可能となる。
(フローチャート)
続いて、図10から図13を用いて上記した処理のフローチャートを説明する。ここでは、クライアント端末10がキューAのオープンを依頼する例で説明する。図10に示すように、クライアント端末10は、任意のサーバA50に接続する(S101)。そして、クライアント端末10は、通信種別に「接続依頼(初回)」を設定し(S102)、メッセージ実データに「キューA」を設定したメッセージを生成して(S103)、サーバA50に送信して接続依頼を実行する(S104)。
サーバA50の種別判定部55は、クライアント端末10からメッセージを受信すると(S105)、メッセージの通信種別を参照して通信種別を判定する(S106)。そして、種別判定部55が通信種別を「接続依頼(初回)」と判定すると、オープン処理部56は、メッセージのメッセージ実データに設定されたキューAをハッシュ値に変換し(S107)、自サーバが当該ハッシュ値の担当か否かを判定する(S108)。
続いて、サーバA50のオープン処理部56は、自サーバが担当であると判定した場合(S108肯定)、メッセージ実データに設定されたキューAのディクショナリデータがキューディクショナリデータ格納部52aに存在するか否かを判定する(S109)。
そして、サーバA50は、キューAのディクショナリデータが存在しない場合(S109否定)、S110とS111を実行する。すなわち、オープン処理部56は、キューAのメッセージ識別子用カウンタと処理済メッセージ管理用カウンタとをキューディクショナリデータ格納部52aに新たに生成して初期化する。その後、先読み制御部58は、先読み処理を開始する(S111)。なお、キューAのディクショナリデータがキューディクショナリデータ格納部52aに存在する場合(S109肯定)、サーバA50は、S110とS111を実行することなく、S112を実行する。
その後、サーバA50のオープン処理部56は、メッセージの宛先情報にサーバAのIPアドレスを設定してクライアント接続情報を生成し(S112)、メッセージの通信種別を「接続(完了)」に設定する(S113)。そして、オープン処理部56は、S112とS113で生成したメッセージをクライアント端末10に応答する(S114)。その後は、後述する図13の処理がクライアント端末10で実行される。
一方、S108において、サーバA50のオープン処理部56は、自サーバがオープン処理の担当でないと判定した場合(S108否定)、S115とS116とを実行して転送対象のメッセージを生成する。すなわち、オープン処理部56は、クライアント端末10から受信したメッセージのキュー名ハッシュ値にS107で得られたハッシュ値を設定するとともに、転送元サーバ識別子にサーバAを識別するホスト名等を設定する。さらに、オープン処理部56は、通信種別に「接続依頼(転送)」を設定したメッセージを生成する。
その後、オープン処理部56は、Chordの手法にしたがって、生成したメッセージすなわち接続依頼を次のサーバに転送する(S117)。この接続依頼を受信したサーバは、S106以降と同様の処理を実行する。
また、S106において、サーバB50の種別判定部55が通信種別を「接続依頼(転送)」と判定すると、オープン処理部56は、図11に示すように、受信したメッセージのキュー名ハッシュ値に設定されるハッシュ値を取得する(S201)。そして、オープン処理部56は、取得したハッシュ値が自サーバの担当するハッシュ値か否かを判定する(S202)。
続いて、サーバB50のオープン処理部56は、自サーバが担当であると判定した場合(S202肯定)、受信したメッセージの宛先情報に自サーバのIPアドレスを設定し(S203)、通信種別を「接続依頼(応答)」に変更する(S204)。その後、オープン処理部56は、受信したメッセージの転送元サーバ識別子に設定される識別子を取得し(S205)、取得した識別子に対応するサーバに、S203およびS204で生成したメッセージをChordの手法にしたがって転送する(S206)。この接続依頼を受信したサーバが、図10のS106以降の処理を実行する。
一方、サーバB50のオープン処理部56は、自サーバが担当でないと判定した場合(S202否定)、受信したメッセージをChordの手法にしたがって、次のサーバに転送する(S207)。この接続依頼を受信したサーバが、図10のS106以降の処理を実行する。
図10のS106に戻って、サーバA50の種別判定部55が通信種別を「接続依頼(応答)」と判定すると、オープン処理部56は、図12に示すように、受信したメッセージの転送元サーバ識別子に設定される識別子を取得する(S301)。
続いて、サーバA50のオープン処理部56は、取得した識別子が自サーバの識別子であると判定した場合(S302肯定)、受信したメッセージの通信種別を「接続(転送)」に変更して(S303)、クライアント端末10に応答する(S304)。その後は、後述する図13の処理がクライアント端末10で実行される。
一方、サーバA50のオープン処理部56は、取得した識別子が自サーバの識別子でないと判定した場合(S302否定)、Chordの手法にしたがって、次のサーバにメッセージを転送する(S305)。その後、この接続依頼を受信したサーバが、図10のS106以降の処理を実行する。
また、図10のS114または図12のS304で送信されたメッセージを受信したクライアント端末10は、図13の処理を実行する。図13に示すように、クライアント端末10は、サーバA50等からメッセージを受信し(S401)、受信したメッセージの通信種別を判定する(S402)。
そして、クライアント端末10は、メッセージの通信種別に「接続(完了)」が設定されている場合には、処理を終了する。また、クライアント端末10は、メッセージの通信種別に「接続(転送)」が設定されている場合には、メッセージの宛先情報に設定される情報を取得し(S403)、取得した情報を用いて、宛先となるサーバと接続する(S404)。続いて、クライアント端末10は、受信されたメッセージの通信種別に「接続依頼(初回)」に設定し(S405)、接続したサーバに対して接続依頼を実行する(S406)。
なお、メッセージの通信種別が「接続(完了)」または「接続(転送)」以外である場合には、クライアント端末10は、図16または図20に示した処理を実行する。また、サーバAは、S106において、メッセージの通信種別が「接続依頼(初回)」、「接続依頼(転送)」、「接続依頼(応答)」以外であると判定した場合、図16または図20に示した処理を実行する。
[データ送信処理]
次に、図14から図17を用いて、クライアント端末10がメッセージキューに対してデータを送信する処理を説明する。図14は、メッセージキューに対するデータ送信処理の全体的な流れを説明する図である。図15は、データ送信処理におけるメッセージの遷移を説明する図である。図16から図17は、データ送信処理の流れを示すフローチャートである。なお、ここではクライアント端末10が、サーバB60に対して、キューAへのデータ送信を実行する例について説明する。
(全体的な流れ、メッセージ遷移)
図14に示すように、クライアント端末10は、サーバB60に対して、キュー名を指定したメッセージ送信依頼を実行する。具体的には、図15に示すように、クライアント端末10は、通信種別に「メッセージ送信(初回)」を設定し、メッセージ実データに「メッセージデータ」を設定したメッセージをサーバB60に送信する。なお、メッセージデータが送信対象データである。
続いて、サーバB60のメッセージ処理部67は、キューAに対応するメッセージ識別子生成用カウンタを1つ増やし、その後のカウンタ値をキーとして送信用先読み格納部52bを検索する。そして、メッセージ処理部67は、カウンタ値に対応するIPアドレスが送信用先読み格納部52bから見つからなかった場合には、「キュー名+カウンタ」をキーとしてハッシュ値に変換する。続いて、メッセージ処理部67は、Chordの手法にしたがってルーティングを開始して、当該ハッシュ値を担当するサーバを探索する。一方、メッセージ処理部67は、カウンタ値に対応するIPアドレスが送信用先読み格納部52bから見つかった場合には、該当するデータを送信用先読み格納部52bから削除する。
そして、サーバB60のメッセージ処理部67は、データの格納先サーバの宛先情報をクライアント端末10に応答する。具体的には、図15に示すように、メッセージ処理部67は、クライアント端末10から受信したメッセージの通信種別を「メッセージ受信(転送)」に変更し、Chordの手法によって特定されたサーバC70のIPアドレス「yyy.yyy.yyy.yyy」を宛先情報に設定する。さらに、メッセージ処理部67は、当該メッセージのメッセージ識別子に、担当サーバの検索に用いた「キュー名+カウンタ」を示す「キュー名#0001」を設定する。その後、メッセージ処理部67は、このようにして生成したメッセージをクライアント端末10に応答する。なお、サーバB60自体が格納先サーバである場合には、メッセージ処理部67は、データの格納結果を応答する。
このとき、メッセージ処理部67は、受信待ちカウンタにキューAのエントリがある場合には、すでにメッセージ受信依頼をして待ち状態になっているクライアント端末が存在すると判定する。このため、メッセージ処理部67は、このタイミングで、該当クライアントに対して未処理メッセージの発生イベントを通知して、該当エントリの受信を完了させる。
そして、クライアント端末10は、受信した宛先情報を元に、該当サーバC70と通信を実行する。具体的には、図15に示すように、クライアント端末10は、サーバB60から受信したメッセージの通信種別を「メッセージ送信(格納)」に変更したメッセージを、サーバC70に送信する。
続いて、クライアント端末10からメッセージを受信したサーバC70は、キューAに対応付けてメッセージデータを格納し、その結果をクライアント端末10に応答する。具体的には、図15に示すように、サーバC70は、受信したメッセージの通信種別を「メッセージ(格納完了)」に変更するとともに、宛先情報とメッセージ実データとを初期化したメッセージをクライアント端末10に送信する。
その後、クライアント端末10は、メッセージ送信すなわちデータ格納が完了したことをサーバB60に通知する。具体的には、図15に示すように、クライアント端末10は、サーバC70から受信したメッセージの通信種別を「メッセージ送信(確定)」に変更して、サーバB60に送信する。
このとき、サーバB60は、メッセージの受信待ちがある場合、すなわち、受信待ちカウンタ52eにキューAに対応するエントリが存在する場合には、クライアント端末10から受信したメッセージを更新して、受信待ちクライアント端末に通知する。具体的には、図15に示すように、サーバB60は、クライアント端末10から受信したメッセージの通信種別を「メッセージ受信(滞留発生)」に変更し、宛先情報にサーバCのIPアドレス「yyy.yyy.yyy.yyy」を設定したメッセージを受信待ちクライアント端末に通知する。
(フローチャート)
続いて、図16と図17を用いて上記した処理のフローチャートを説明する。なお、ここでは、メッセージキューAを指定して処理が実行されるものとする。図16に示すように、クライアント端末10は、通信種別に「メッセージ送信(初回)」を設定し(S501)、メッセージ実データに「メッセージデータ」を格納して(S502)、当該メッセージをサーバB60に送信して通信を実行する(S503)。
サーバB60の種別判定部65は、クライアント端末10からメッセージを受信し(S504)、メッセージの通信種別を参照して通信種別を判定する(S505)。そして、種別判定部65が通信種別を「メッセージ送信(初回)」と判定すると、メッセージ処理部67は、キューAに対応付けてキューディクショナリデータ格納部52aに格納されるメッセージ識別子用カウンタをインクリメントする(S506)。続いて、メッセージ処理部67は、「キュー名+カウンタ値」とするメッセージ識別子を生成して、クライアント端末10から受信したメッセージのメッセージ識別子に設定する(S507)。その後、メッセージ処理部67は、生成したメッセージ識別子に含まれるカウンタ値をキーとして送信用先読み格納部52bを参照する(S508)。
そして、サーバB60のメッセージ処理部67は、メッセージ識別子に対応した宛先情報が格納されている場合(S509肯定)、送信用先読み格納部52bから該当する情報を削除して、参照ポインタを移動させる(S510)。一方、メッセージ処理部67は、メッセージ識別子に対応した宛先情報が格納されていない場合(S509否定)、「キュー名+カウンタ値」をハッシュ値に変換し、Chordの手法にしたがって、当該メッセージを格納する担当サーバを検索した後に(S511)、S512を実行する。
続いて、サーバB60のメッセージ処理部67は、宛先が自サーバすなわちデータの格納先が自サーバである場合(S512肯定)、S513を実行する。すなわち、メッセージ処理部67は、受信したメッセージのメッセージ実データに格納される「メッセージデータ」を、キュー名に対応付けてメッセージ格納部52dに格納する。その後、メッセージ処理部67は、受信したメッセージの通信種別を「メッセージ送信(完了)」に変更して(S514)、図17の処理を実行する。
一方、サーバB60のメッセージ処理部67は、宛先が自サーバすなわちデータの格納先が自サーバでない場合(S512否定)、S515を実行する。すなわち、メッセージ処理部67は、受信したメッセージの宛先情報に、Chordの手法にしたがって特定したサーバC70のIPアドレスを設定する。その後、メッセージ処理部67は、当該メッセージの通信種別を「メッセージ送信(転送)」に変更して(S516)、図17のS604以降処理を実行する。
また、S505において、種別判定部65が通信種別を「メッセージ送信(格納)」と判定すると、メッセージ処理部67は、S517を実行する。すなわち、メッセージ処理部67は、受信したメッセージのメッセージ実データに格納される「メッセージデータ」を、キュー名に対応付けてメッセージ格納部52dに格納する。その後、メッセージ処理部67は、受信したメッセージの通信種別を「メッセージ送信(格納完了)」に変更して(S518)、図17のS604以降処理を実行する。
また、S505において、種別判定部65が通信種別を「メッセージ(確定)」であると判定すると、メッセージ処理部67は、S506からS518を実行することなく、図17の処理を実行する。また、S505において、通信種別が「メッセージ送信(格納)」、「メッセージ初回」、「メッセージ(確定)」のいずれでもないと判定されると、メッセージ処理部67は、図16または図20を実行する。
続いて、図17に示すように、サーバB60のメッセージ処理部67は、キューAに対応するエントリが受信待ちカウンタ52eに格納されている場合(S601肯定)、S602を実行する。すなわち、メッセージ処理部67は、受信待ちカウンタ52eに格納される該当エントリのクライアント端末に、未処理メッセージの発生を通知する。具体的には、メッセージ処理部67は、図16で生成されたメッセージの通信種別を「メッセージ受信(滞留発生)」に変更したメッセージを該当クライアント端末に送信する。一方、メッセージ処理部67は、キューAに対応するエントリが受信待ちカウンタ52eに格納されていない場合(S601否定)、S602を実行することなく、S603を実行する。
続いて、サーバB60のメッセージ処理部67は、処理対象となっているメッセージの通信種別が「メッセージ送信(確定)」であるか否かを判定する(S603)。そして、メッセージ処理部67は、通信種別が「メッセージ送信(確定)」である場合(S603肯定)、処理を終了する。
一方、サーバB60のメッセージ処理部67は、通信種別が「メッセージ送信(確定)」でない場合(S603否定)、対象となっているメッセージすなわち図16等で生成されたメッセージ識別子、IPアドレスをクライアント端末10に応答する(S604)。
クライアント端末10は、サーバB60から応答を受信し(S605)、受信した応答であるメッセージの通信種別を判定する(S606)。そして、クライアント端末10は、メッセージの通信種別が「メッセージ送信(完了)」である場合には、処理を終了する。
一方、クライアント端末10は、メッセージの通信種別が「メッセージ送信(転送)」である場合には、メッセージの宛先情報に設定されるIPアドレスを取得する(S607)。続いて、クライアント端末10は、取得したIPアドレスに該当するサーバC60に接続する(S608)。その後、クライアント端末10は、受信したメッセージの通信種別に「メッセージ送信(格納)」を変更して(S609)、当該メッセージをサーバC60に送信して通信を実行する(S610)。
また、クライアント端末10は、メッセージの通信種別が「メッセージ送信(格納完了)」である場合には、当該メッセージの通信種別を「メッセージ送信(確定)」に変更した後(S611)、キューディレクトリサーバであるサーバB60に送信する(S612)。
なお、クライアント端末10は、メッセージの通信種別が「メッセージ送信(完了)」、「メッセージ送信(転送)」、「メッセージ送信(格納完了)」のいずれでもない場合には、図16や図20の処理を実行する。
[データ受信処理]
次に、図18から図22を用いて、クライアント端末10がメッセージキューからデータを受信する処理を説明する。図18は、メッセージキューに対するデータ受信処理の全体的な流れを説明する図である。図19は、データ受信処理におけるメッセージの遷移を説明する図である。図20から図22は、データ受信処理の流れを示すフローチャートである。なお、ここではクライアント端末10が、キュー名がキューAからデータを受信する例について説明する。
(全体的な流れ、メッセージ遷移)
図18に示すように、クライアント端末10は、サーバB60に対して、キュー名を指定したメッセージ受信依頼を実行する。具体的には、図19に示すように、クライアント端末10は、通信種別に「メッセージ受信(初回)」を設定したメッセージをサーバB60に送信する。なお、メッセージデータが送信対象データである。
続いて、サーバB60のメッセージ処理部67は、キューAに対応するメッセージ識別子生成用カウンタの値と処理済メッセージ管理用カウンタの値とを比較する。同じだった場合、メッセージ処理部67は、未処理メッセージが存在しないと判定し、クライアント情報としてキュー名とクライアント識別情報とを受信待ちカウンタ52eに格納し、一旦応答をクライアント端末10に応答する。このとき、クライアント端末10は、サーバB60から未処理メッセージ発生イベントが通知されるまで待機状態となる。なお、クライアント識別情報としては、IPアドレス、プロセスIDなどを用いることができる。
一方、メッセージ処理部67は、メッセージ識別子生成用カウンタの値が処理済メッセージ管理用カウンタの値よりも大きい場合、処理済メッセージ管理用カウンタの値をインクリメントする。そして、メッセージ処理部67は、カウンタの値をキーにして、受信用先読み格納部52cを検索する。検索でヒットしなかった場合、メッセージ処理部67は、宛先情報を取得するために、「キュー名+カウンタ値」をハッシュ値に変換し、Chordの手法にしたがって探索する。ヒットした場合、メッセージ処理部67は、該当エントリを受信用先読み格納部52cから削除する。
そして、サーバB60のメッセージ処理部67は、データの格納先サーバの宛先情報をクライアント端末10に応答する。具体的には、図19に示すように、メッセージ処理部67は、クライアント端末10から受信したメッセージの通信種別を「メッセージ受信(転送)」に変更し、Chordの手法によって特定されたサーバC70のIPアドレス「yyy.yyy.yyy.yyy」を宛先情報に設定する。さらに、メッセージ処理部67は、当該メッセージのメッセージ識別子に、担当サーバの検索に用いたキューである「キュー名+カウンタ」を示す「キュー名#0001」を設定する。その後、メッセージ処理部67は、このようにして生成したメッセージをクライアント端末10に応答する。なお、サーバB60自体が格納先サーバである場合には、メッセージ処理部67は、データの格納結果を応答する。
そして、クライアント端末10は、受信した宛先情報を元に、該当サーバC70と通信を実行する。具体的には、図19に示すように、クライアント端末10は、サーバB60から受信したメッセージの通信種別を「メッセージ送信(獲得)」に変更したメッセージを、サーバC70に送信する。
続いて、クライアント端末10からメッセージを受信したサーバC70は、キューAに対応付けてメッセージ格納部52dに格納されるデータをクライアント端末10に応答する。具体的には、図19に示すように、サーバC70は、受信したメッセージの通信種別を「メッセージ(獲得完了)」に変更して、メッセージ実データにメッセージ格納部52dから取得した「メッセージデータ」を格納する。さらに、サーバC70は、当該メッセージの宛先情報を初期化してクライアント端末10に送信する。
その後、クライアント端末10は、メッセージ受信すなわちデータ獲得が完了したことをサーバB60に通知する。具体的には、図19に示すように、クライアント端末10は、サーバC70から受信したメッセージの通信種別を「メッセージ受信(確定)」に変更して、サーバB60に送信する。
このとき、サーバB60は、メッセージの受信待ちがある場合、すなわち、受信待ちカウンタ52eにキューAに対応するエントリが存在する場合には、クライアント端末10から受信したメッセージを更新して、受信待ちクライアント端末に通知する。具体的には、図19に示すように、サーバB60は、クライアント端末10から受信したメッセージの通信種別を「メッセージ受信(滞留発生)」に変更し、宛先情報にサーバCのIPアドレス「yyy.yyy.yyy.yyy」を設定したメッセージを受信待ちクライアント端末に通知する。
(フローチャート)
続いて、図20と図21を用いて上記した処理のフローチャートを説明する。なお、ここでは、メッセージキューAを指定して処理が実行されるものとする。図20に示すように、クライアント端末10は、通信種別に「メッセージ受信(初回)」を設定し(S701)、当該メッセージをサーバB60に送信して通信を実行する(S702)。
サーバB60の種別判定部65は、クライアント端末10からメッセージを受信し(S703)、メッセージの通信種別を参照して通信種別を判定する(S704)。そして、種別判定部65が通信種別を「メッセージ受信(初回)」と判定すると、メッセージ処理部67は、キューAに対応付けられたエントリが受信待ちカウンタ52eに存在するか否かを判定する(S705)。
そして、サーバB60のメッセージ処理部67は、受信待ちカウンタ52eにエントリが存在しない場合(S705否定)、キューディクショナリデータ格納部52aを参照してS706を実行する。すなわち、メッセージ処理部67は、キューAに対応するメッセージ識別子生成用カウンタの値と処理済メッセージ管理用カウンタの値とが一致するか否かを判定する。
サーバB60のメッセージ処理部67は、値が一致しない場合すなわちメッセージ識別子生成用カウンタの値の方が大きい場合(S706否定)、処理済メッセージ管理用カウンタをインクリメントする(S707)。その後、メッセージ処理部67は、「キュー名+カウンタ値」とするメッセージ識別子を生成して、クライアント端末10から受信したメッセージのメッセージ識別子に設定する(S708)。続いて、メッセージ処理部67は、受信用先読み格納部52cからメッセージ識別子に対応するエントリを削除し、参照ポインタを移動させる(S709)。
ここで、サーバB60の先読み制御部68は、メッセージの送受信とは非同期に先読み処理を実行して、受信用先読み格納部52cにエントリを補充する(S710)。
続いて、図21に示すように、サーバB60のメッセージ処理部67は、受信用先読み格納部52cから特定した宛先が自サーバすなわちデータの格納先が自サーバである場合(S711肯定)、S712を実行する。すなわち、メッセージ処理部67は、キューAに対応付けてメッセージ格納部52dに格納されるデータを取得して、クライアント端末10から受信したメッセージのメッセージ実データに格納する。その後、メッセージ処理部67は、当該メッセージの通信種別に「メッセージ受信(完了)」を設定して(S713)、当該メッセージをクライアント端末10に応答する(S714)。なお、S714の実行後、クライアント端末10では図22の処理が実行される。
一方、サーバB60のメッセージ処理部67は、受信用先読み格納部52cから特定した宛先が自サーバでない場合(S711否定)、「キュー名+カウンタ値」をハッシュ値に変換し、Chordに手法に従ってデータ格納先となるサーバを探索してS715を実行する。すなわち、メッセージ処理部67は、クライアント端末10から受信したメッセージの宛先情報に、探索されたサーバC70のIPアドレスを設定する。さらに、メッセージ処理部67は、当該メッセージの通信種別に「メッセージ受信(転送)」を設定した後(S716)、当該メッセージをクライアント端末10に応答する(S717)。
また、図20に戻って、S705において、受信待ちカウンタ52eにエントリが存在すると判定した場合(S705肯定)、サーバB60のメッセージ処理部67は、S718を実行する。同様に、S706において、メッセージ識別子生成用カウンタの値と処理済メッセージ管理用カウンタの値とが一致すると判定した場合(S706肯定)、サーバB60のメッセージ処理部67は、S718を実行する。すなわち、メッセージ処理部67は、受信待ちカウンタ52eに、キュー名とクライアント端末の識別情報(IPアドレス、プロセスIDなど)とを対応付けた新たなエントリを追加する。その後、メッセージ処理部67は、クライアント端末10から受信したメッセージの通信種別に「メッセージ受信(待機)」を設定して(S719)、当該メッセージをクライアント端末10に応答する(S720)。その後、クライアント端末10にて図22の処理が実行される。
また、S704において種別判定部65が通信種別を「メッセージ受信(獲得)」と判定すると、サーバB60のメッセージ処理部67は、S721を実行する。すなわち、メッセージ処理部67は、キューAに対応付けてメッセージ格納部52dに格納されるデータを取得して、クライアント端末10から受信したメッセージのメッセージ実データに格納する。その後、メッセージ処理部67は、当該メッセージの通信種別に「メッセージ受信(獲得完了)」を設定して(S722)、S717以降を実行する。
また、S704において、サーバB60のメッセージ処理部67は、通信種別を「メッセージ受信(確定)」と判定した場合、図22を実行する。また、S704において、メッセージ処理部67は、通信種別を「メッセージ受信(確定)」、「メッセー受信(初回)」、「メッセージ受信(獲得)」以外と判定した場合、図17または図21を実行する。
続いて、図21に示すように、サーバB60のメッセージ処理部67は、キューAに対応するエントリが受信待ちカウンタ52eに格納されている場合(S801肯定)、S802を実行する。すなわち、メッセージ処理部67は、受信待ちカウンタ52eに格納される該当エントリのクライアント端末に未処理メッセージの発生を通知する。S802実行後、図20のS707の処理が実行される。
一方、メッセージ処理部67は、キューAに対応するエントリが受信待ちカウンタ52eに格納されていない場合(S801否定)、処理を終了する。なお、メッセージ処理部67は、図21の処理を、図20とは非同期に実行する。
続いて、図22に示すように、クライアント端末10は、サーバB60から受信したメッセージの通信種別に基づいて種別を判定する(S901とS902)。そして、クライアント端末10は、通信種別が「メッセージ受信(完了)」である場合には、処理を終了する。
一方、クライアント端末10は、通信種別が「メッセージ受信(転送)」である場合、受信したメッセージの宛先情報からIPアドレスを取得し(S903)、取得したIPアドレスに該当するサーバC70に接続する(S904)。その後、クライアント端末10は、受信したメッセージの通信種別を「メッセージ受信(獲得)」に設定した後(S905)、当該メッセージをサーバC70に送信して通信を実行する(S906)。すると、サーバC70において図20のS703以降の処理を実行される。
また、クライアント端末10は、通信種別が「メッセージ受信(待機)」である場合、サーバB60から、通信種別が「メッセージ受信(完了)」または「メッセージ受信(転送)」であるメッセージの受信待ちとなる(S907)。
また、クライアント端末10は、通信種別が「メッセージ受信(獲得完了)」である場合、受信したメッセージの通信種別を「メッセージ受信(確定)」に設定した後(S908)、当該メッセージをサーバC70に送信して通信を実行する(S909)。すると、サーバC70において図20のS703以降の処理を実行される。
また、クライアント端末10が通信種別を「メッセージ受信(転送)」、「メッセージ受信(待機)」、「メッセージ受信(獲得完了)」、「メッセージ受信(完了)」、以外と判定した場合、図17または図21の処理が実行される。
[先読みデータ更新処理]
次に、図23から図25を用いて、サーバB60が送信用先読み格納部62bに格納されるキューAの情報を更新する例について説明する。なお、各サーバは同一の処理を実行することができる。また、受信用先読み格納部62cについても、後述する処理におけるメッセージ識別子生成用カウンタを処理済メッセージ管理用カウンタに読み替えた処理を実行することで、同様に処理することができる。
(全体的な流れ、メッセージ遷移)
図23は、送信用先読み格納部処理の全体的な流れを説明する図である。図24は、送信用先読み格納部処理におけるメッセージの遷移を説明する図である。図25は、送信用先読み格納部処理の流れを示すフローチャートである。
図23に示すように、サーバB60は、メッセージ識別子生成用カウンタの値として「0020」を保持する。また、サーバB60は、送信用先読み格納部62bに記憶される「カウンタ値、宛先情報」として「0021、xxx.xxx.xxx.102」、「0022、xxx.xxx.xxx.127」、「0023、xxx.xxx.xxx.064」を保持する。
すなわち、サーバB60は、既に受信済みのデータ送信またはデータ受信処理を要求するメッセージには、カウンタ値「0020」を用いてメッセージ識別子を生成済みである。また、サーバB60は、これから受信すると予定されるメッセージのうち次に受信されるメッセージには、「0020」を1増加させた「0021」を用いてメッセージ識別子を生成し、そのメッセージの格納先が「xxx.xxx.xxx.102」であることを特定している。同様に、サーバB60は、これから受信すると予定されるメッセージのうちさらにその後に受信されるメッセージには、「0021」を1増加させた「0022」を用いてメッセージ識別子を生成し、そのメッセージの格納先が「xxx.xxx.xxx.127」であることを特定している。同様に、サーバB60は、これから受信すると予定されるメッセージのうちさらにその後に受信されるメッセージには、「0022」を1増加させた「0023」を用いてメッセージ識別子を生成し、そのメッセージの格納先が「xxx.xxx.xxx.064」であることを特定している。
このような状態において、サーバB60がカウンタ値「0024」に対応する格納先サーバを先読みする例を説明する。具体的には、サーバB60の先読み制御部68は、送信用先読み格納部62bに記憶される最大のカウンタ値を参照し、そのカウンタ値を1増加させたカウンタ値を生成する。続いて、先読み制御部68は、「キュー名(キューA)+カウンタ値(0024)」をハッシュ値「aaaaaaaa」に変換し、Chordの手法にしたがって、CH空間内で宛先情報の先読み依頼を実行する。
このとき、図24に示すように、サーバB60の先読み制御部68は、上述したメッセージにおける通信種別を「先読み(要求)」に設定し、ハッシュ値「aaaaaaaa」をキュー名ハッシュ値に設定する。さらに、先読み制御部68は、当該メッセージの転送元サーバ識別子に「サーバB」を設定して、当該メッセージをChordにしたがって次のサーバに転送する。
上記メッセージを受信した各サーバは、メッセージのキュー名ハッシュ値に設定される「aaaaaaaa」が自サーバの担当する値か否かを判定する。そして、各サーバは、自サーバが担当サーバでないと判定した場合には、当該メッセージを次のサーバに転送する。ここでは、サーバDが、担当サーバであると特定されたとする。
サーバDは、転送されてきたメッセージのキュー名ハッシュ値に設定される「aaaaaaaa」に基づいて自サーバが担当であると判定する。すると、図24に示すように、サーバDは、転送されてきたメッセージの転送元サーバ識別子が「サーバB」であることから、転送元がサーバB60であると特定する。そして、サーバDは、当該メッセージの通信種別を「先読み(応答)」に変更するとともに「宛先情報」に自サーバのIPアドレス「xxx.xxx.xxx.211」を設定した後、当該メッセージをサーバB60に応答する。
このメッセージを受信したサーバB60は、メッセージの通信種別が「先読み(応答)」であることから、自サーバが送信した先読み要求の応答であることを認識する。そして、サーバB60は、メッセージのキュー名ハッシュ値等から該当キューがキューAでありカウンタ値が「0024」であることを特定し、さらに宛先情報から「xxx.xxx.xxx.211」を抽出する。その後、図23に示すように、サーバB60は、キューAの先読みデータとして、「0024、xxx.xxx.xxx.211」を送信用先読み格納部62bに格納する。
(フローチャート)
続いて、図25を用いて上記した処理のフローチャートを説明する。図25に示すように、サーバB60の先読み制御部68は、送信用先読み格納部62bに格納されているエントリ数「n」が最大数「m」よりも小さいか否かを判定する(S1001)。なお、nとmは自然数である。
そして、サーバB60の先読み制御部68は、エントリ数「n」と最大数「m」とが同じ場合(S1001否定)、処理を終了する。
一方、サーバB60の先読み制御部68は、エントリ数「n」が最大数「m」よりも小さい場合(S1001肯定)、キューディクショナリデータ格納部52aを参照し、キューAに対応するメッセージ識別子生成用カウンタの値「p」を取得する(S1002)。
続いて、サーバB60の先読み制御部68は、「キュー名+p+n+1」のハッシュ値を算出し(S1003)、算出したハッシュ値をキュー名ハッシュ値に設定したメッセージを生成する(S1004)。さらに、先読み制御部68は、当該メッセージの転送元サーバ識別子にサーバBを設定し(S1005)、通信種別に「先読み(要求)」を設定する(S1006)。その後、先読み制御部68は、Chordの手法にしたがって転送先のサーバを特定し(S1007)、生成したメッセージを特定したサーバに転送する(S1008)。
サーバB60からメッセージを受信したサーバの種別判定部は、受信したメッセージの通信種別に基づいて、種別を判定する(S1009とS1010)。そして、サーバの種別判定部が通信種別を「先読み(要求)」と判定した場合、サーバの先読み制御部は、受信したメッセージのキュー名ハッシュ値を取得し(S1011)、自サーバが当該ハッシュ値の担当か否かを判定する(S1012)。続いて、サーバの先読み制御部は、自サーバが当該ハッシュ値の担当であると判定した場合(S1012肯定)、当該メッセージの宛先情報に自サーバのIPアドレスを設定し(S1013)、通信種別を「先読み(応答)に変更する(S1014)。その後、サーバの先読み制御部は、Chordの手法にしたがって特定される次のサーバに、当該メッセージを転送する(S1015)。このとき、サーバの先読み制御部は、転送対象のメッセージの転送元サーバ識別子によって発信元が特定できる場合には、転送元のサーバに直接送信してもよい。また、S1015実行後、このメッセージを受信したサーバが、S1009以降を実行する。
一方、サーバB60からメッセージを受信したサーバの種別判定部が、通信種別を「先読み(応答)」と判定した場合、当該サーバの先読み制御部は、メッセージの宛先情報から発信元情報を取得する(S1016)。続いて、先読み制御部は、取得した発信元情報に基づいて、自サーバが発信元であるか否かを判定する(S1017)。サーバの先読み制御部は、自サーバが発信元であると判定した場合(S1017肯定)、送信用先読み格納部62bに新たなエントリを格納する(S1018)。一方、サーバの先読み制御部は、自サーバが発信元でないと判定した場合(S1017否定)、Chordの手法にしたがって特定される次のサーバに、当該メッセージを転送する(S1019)。
なお、S1010において、通信種別が「先読み(要求)」でも「先読み(応答)」でもないと判定された場合、図16や図20等が実行される。
上述したように、実施例2に係るサーバは、メッセージに対し一意となる識別子を生成するためのカウンタと、処理済みのメッセージを管理するカウンタを保持し、FIFO制御と未処理メッセージの存在を受信クライアントに通知する処理部を有する。また、実施例2に係るサーバは、送信クライアントからの要求の有無に関わらず、次に発行されるメッセージ識別子に対応する格納先サーバを検索し、宛先情報を蓄積する処理部を有する。
また、実施例2に係るサーバは、メッセージデータに「キュー名+カウンタ」という識別子を持たせ、データ格納先のキーとする。つまり、実施例2に係るサーバは、メッセージの格納先を、キューディクショナリのカウンタを利用して予め知ることができる。実施例2に係るサーバは、これを利用し、将来のデータ格納サーバの宛先情報を予め収集しておき、クライアントからのデータ格納または参照要求に迅速に応答することできる。
また、Chordなどの手法では、一般的に、担当サーバへの到達速度と宛先情報の保守コストはトレードオフの関係にある。具体的には、各サーバで保持する宛先情報が多いほど、担当サーバへの到達速度は速くなるが、膨大な宛先情報を管理するための管理コストが増大する。一方、各サーバで保持する宛先情報が少ないほど、担当サーバへの到達速度は遅くなるが、少ない宛先情報を管理すればよく管理コストを抑えることができる。
これに対して、実施例2に係るサーバは、先読み処理を実行して、将来に受信されるメッセージの担当サーバを予め記憶しておくことができる。また、実施例2に係るサーバは、メモリ容量やコストを考慮して先読み処理を実行することができるので、管理コストを抑えることができる。この結果、実施例2に係るシステムでは、分散システムの規模が大きくなっても、言い換えるとサーバ数が増加しても、応答速度が大きく変わることなくメッセージの送受信を実行できる。
また、実施例2に係るサーバで形成されるメッセージキューは、DHTの拡張性や耐障害性の特性を継承するので、利用者は複雑な設定をせずにメッセージキューの容量を拡張できる。同様に、DHTの分散性の特性を継承するので、メッセージがシステム内のサーバに一様に分散して格納され、I/O負荷も分散することができる。
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
(キューディクショナリデータの挙動(離脱))
図26は、サーバBがCH空間から離脱する場合のキューディクショナリデータの挙動を説明する図である。図26に示すように、サーバBは、キューディクショナリデータ格納部52aに「キュー名、属性、カウンタ値」として「Que1、1、1000」と「Que1、2、950」とを記憶する。つまり、サーバBは、キュー名をキーとしたキーバリュー構造でキューディクショナリデータを保持するので、一般的なCH空間のデータ複製論理で冗長化することができる。また、1サーバが保持する他のサーバのキューディクショナリデータの数、つまり、複製数についても一般的なCH空間のデータ複製論理で冗長化する。
例えば、CH空間の各サーバは、自サーバの前後に位置するサーバのキューディクショナリデータを保持する。そして、サーバBがCH空間から離脱した場合、サーバBの後続に位置するサーバFが、サーバBが離脱したことを検出し、保持するサーバBのキューディクショナリデータを現用系に昇格させる。なお、クライアント端末10は、キューディクショナリが現用になったサーバに新たに接続することになるが、これも一般的なCHにおいてサーバ離脱後に「後継の」サーバを探索する方法に従う。そして、後継のサーバを見つけたら、該当サーバとの接続を確立する。
(キューディクショナリデータの挙動(追加))
図27は、サーバXがCH空間に参加する場合のキューディクショナリデータの挙動を説明する図である。CH空間に新たなサーバが追加された場合も、図26と同様、一般的なCH空間の複製論理にしたがって処理することができる。
例えば、サーバBは、ハッシュ値=33からハッシュ値=4までを担当しており、Que1とQue2のキューディクショナリデータを保持する。例を挙げると、サーバBは、ハッシュ値=2とするQue1のデータとして「Que1、1、1000」と「Que1、2、950」とを保持する。また、サーバBは、ハッシュ値=4とするQue2のデータとして「Que2、1、20」と「Que2、2、20」とを保持する。
このような状態において、ハッシュ値=2を担当するサーバXがCH空間に追加されたとする。この場合、サーバBは、保持するハッシュ値=2のデータ「Que1、1、1000」と「Que1、2、950」とをサーバXに送信する。このようにすることで、サーバXおよびサーバBは、自サーバが担当するキューのキューディクショナリデータを保持することができる。
(キューディクショナリデータの挙動の影響範囲)
例えば、Chordの方式では、自サーバが死活監視可能なサーバは全体の一部である。トラフィックの増大を防ぐために、開示するサーバは、使用するルーティングアルゴリズムの監視範囲に従い、構成変更を検出しない範囲では対処しないように制御してもよい。例えば、監視域外のサーバ構成が変動していた場合、接続したサーバにデータが無い、もしくはサーバ自体が存在しない可能性がある。その場合は、開示するサーバは、接続したサーバまたはキューディレクトリのあるサーバから、メッセージ識別子をもとに改めて探索を行うなどの対応を行うようにしてもよい。また、開示するサーバは、サーバ構成の変動を検出した場合は、各先読み格納部を補正する。例えば、各先読み格納部のエントリを走査し、影響箇所を補正してもよいし、エントリを全て再構築してもよい。これはメッセージの送受信依頼とは非同期に行う。
(メッセージ等の例)
実施例2等で図示したメッセージのフォーマット例はあくまで例示であり、これに限定されるものではない。また、各実施例を説明する際に使用したIPアドレス、ホスト名、キュー名などの情報は、あくまで例示であり、数値等に意味ははく、限定するものでもない。また、実施例2では、クライアント端末10がサーバA50にキューAのオープンを要求し、担当するサーバB60を介してサーバC70にデータを格納する例等について説明したが、これらの例をあくまで例示であり、処理等を限定するものではない。
(メッセージ識別子)
実施例2では、メッセージ識別子として、受信順に1ずつ増加するカウンタを利用する場合を説明したが、これに限定されるものではない。例えば、受信順に1ずつ減少するカウンタを用いることもでき、文字+単純増加するカウンタなど一定の規則性を有するカウンタ値を用いることができる。
(先読みデータ)
例えば、システム内のネットワークの帯域幅に余裕がある場合には、受信用と送信用の先読み格納部を統合して、1つの先読み格納部として共有することもできる。なお、ネットワークの帯域幅に余裕がない場合に、受信用と送信用と分けて保持することで、トラフィックを削減することもできる。また、先読み制御処理は、データの送信処理や処理とは非同期で実行してもよく、送信されたら実行するなど同期させて実行してもよい。
(格納形式)
実施例では、記憶部52が有する各格納部が、KVS形式でデータを保存する例を説明したが、これに限定されるものではない。例えば、関係データベースなどの任意のデータ構造を用いることができる。
(システム)
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、オープン処理部56とメッセージ処理部57とを統合することもできる。
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。また、CPUなどのプロセッサが、図4等で示した処理部と同様ではなく、プロセッサそのものが各処理部並びに図で説明したフローと同様の処理を実行することもできる。
(ハードウェア構成)
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。
図28は、データ制御プログラムを実行するコンピュータのハードウェア構成の例を示す図である。図28に示すように、コンピュータ100は、CPU102、入力装置103、出力装置104、通信インタフェース105、媒体読取装置106、HDD(Hard Disk Drive)107、RAM(Random Access Memory)108を有する。また、図28に示した各部は、バス101で相互に接続される。
入力装置103は、マウスやキーボードであり、出力装置104は、ディスプレイなどであり、通信インタフェース105は、NIC(Network Interface Card)などのインタフェースである。HDD107は、データ制御プログラム107aととともに、図4当に示した各情報を記憶する。記録媒体の例としてHDD107を例に挙げたが、ROM(Read Only Memory)、RAM、CD−ROM等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記録媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。
CPU102は、データ制御プログラム107aを読み出してRAM108に展開することで、図4等で説明した各機能を実行するデータ制御プロセス108aを動作させる。すなわち、データ制御プロセス108aは、図4に記載したクラスタ制御部54、種別判定部55、オープン処理部56、メッセージ処理部57を実行する。このようにコンピュータ100は、プログラムを読み出して実行することでデータ制御方法を実行する情報処理装置として動作する。
例えば、コンピュータ100は、媒体読取装置106によって記録媒体からデータ制御プログラムを読み出し、読み出されたデータ制御プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
10、20、30 クライアント端末
50 サーバA
51 通信インタフェース
52 記憶部
52a キューディクショナリデータ格納部
52b 送信用先読み格納部
52c 受信用先読み格納部
52d メッセージ格納部
52e 受信待ちカウンタ
53 制御部
54 クラスタ制御部
55 種別判定部
56 オープン処理部
57 メッセージ処理部
58 先読み制御部
60 サーバB
70 サーバC

Claims (7)

  1. クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する付与部と、
    データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、前記付与部による付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させる記憶制御部と、
    前記付与部によってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する応答部と
    を有することを特徴とする情報処理装置。
  2. 前記付与部によってアクセス要求に付与された最新の識別子を記憶する識別子記憶部をさらに有し、
    前記記憶制御部は、前記識別子記憶部に記憶される最新の識別子を増加または減少させた識別子を用いてハッシュ値を算出し、算出したハッシュ値によって特定された前記データの格納先と前記ハッシュ値の算出に用いた識別子とを対応付けて、前記記憶部に記憶させることを特徴とする請求項1に記載の情報処理装置。
  3. 前記記憶制御部は、前記識別子記憶部に記憶される最新の識別子を所定回数増加または減少させた各識別子を用いてハッシュ値を算出し、算出した各ハッシュ値によって特定された各格納先と前記各識別子とを対応付けて、前記最新の識別子を増加または減少させた順に前記記憶部に記憶させることを特徴とする請求項2に記載の情報処理装置。
  4. 前記記憶制御部は、前記応答部によって応答された前記データの格納先を前記記憶部から削除するたびに、前記識別子記憶部に記憶される最新の識別子を用いて前記データの格納先を特定し、特定したデータの格納先と識別子とを対応付けて、前記記憶部に記憶させることを特徴とする請求項2に記載の情報処理装置。
  5. 前記受信されたアクセス要求のうち、既に処理が実行された最新のアクセス要求に付与された識別子を記憶する処理済記憶部と、
    前記付与部によって識別子が付与されたアクセス要求に対応する処理を実行する場合に、付与された識別子と前記処理済記憶部に記憶される識別子とを比較し、未処理のアクセス要求が存在すると判定した場合には、前記受信されたアクセス要求に先立って、当該未処理のアクセス要求に対応する処理を実行する処理実行部とをさらに有することを特徴とする請求項1に記載の情報処理装置。
  6. コンピュータが、
    クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与し、
    データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させ、
    アクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する
    各処理を実行することを特徴とするデータ制御方法。
  7. コンピュータに、
    クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与し、
    データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させ、
    アクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する
    各処理を実行させることを特徴とするデータ制御プログラム。
JP2011278804A 2011-12-20 2011-12-20 情報処理装置、データ制御方法およびデータ制御プログラム Active JP5845877B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011278804A JP5845877B2 (ja) 2011-12-20 2011-12-20 情報処理装置、データ制御方法およびデータ制御プログラム
US13/713,642 US9197715B2 (en) 2011-12-20 2012-12-13 Information processing apparatus and data control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011278804A JP5845877B2 (ja) 2011-12-20 2011-12-20 情報処理装置、データ制御方法およびデータ制御プログラム

Publications (2)

Publication Number Publication Date
JP2013130960A true JP2013130960A (ja) 2013-07-04
JP5845877B2 JP5845877B2 (ja) 2016-01-20

Family

ID=48611372

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011278804A Active JP5845877B2 (ja) 2011-12-20 2011-12-20 情報処理装置、データ制御方法およびデータ制御プログラム

Country Status (2)

Country Link
US (1) US9197715B2 (ja)
JP (1) JP5845877B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108243237A (zh) * 2016-12-27 2018-07-03 中国移动通信集团浙江有限公司 宽带定向提速方法及设备

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104202309B (zh) * 2014-08-18 2017-12-15 深圳市江波龙电子有限公司 一种数据传输的控制方法及装置
CN106850710B (zh) * 2015-12-03 2020-02-28 杭州海康威视数字技术股份有限公司 一种数据云存储系统、客户终端、存储服务器及应用方法
US10339063B2 (en) * 2016-07-19 2019-07-02 Advanced Micro Devices, Inc. Scheduling independent and dependent operations for processing
US10701176B1 (en) * 2016-09-23 2020-06-30 Amazon Technologies, Inc. Messaging using a hash ring with host groups
US11956135B2 (en) * 2018-11-07 2024-04-09 Xerox Corporation Network measurement in an enterprise environment
CN112698965B (zh) * 2020-12-25 2021-09-21 百度在线网络技术(北京)有限公司 用于实现消息队列的系统、方法及消息调度系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008191904A (ja) * 2007-02-05 2008-08-21 Nec Corp 分散データ管理システムおよび方法
WO2008105099A1 (ja) * 2007-02-28 2008-09-04 Fujitsu Limited アプリケーション連携制御プログラム、アプリケーション連携制御方法およびアプリケーション連携制御装置
JP2008234445A (ja) * 2007-03-22 2008-10-02 Brother Ind Ltd コンテンツ分散保存システム、複製データ取得方法、ノード装置、及びノード処理プログラム
JP2011041006A (ja) * 2009-08-11 2011-02-24 Fujitsu Ltd 負荷分散装置、負荷分散方法および負荷分散プログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1117769A (ja) 1997-06-20 1999-01-22 Nec Corp 確認型メッセージ通信方式
US5924096A (en) * 1997-10-15 1999-07-13 Novell, Inc. Distributed database using indexed into tags to tracks events according to type, update cache, create virtual update log on demand
US7362762B2 (en) * 2003-11-12 2008-04-22 Cisco Technology, Inc. Distributed packet processing with ordered locks to maintain requisite packet orderings
JP4591745B2 (ja) * 2003-12-02 2010-12-01 富士ゼロックス株式会社 画像形成装置、パターン形成方法及びそのプログラム
US7925624B2 (en) 2006-03-31 2011-04-12 Amazon Technologies, Inc. System and method for providing high availability data
US8139488B2 (en) * 2008-05-30 2012-03-20 Cisco Technology, Inc. Cooperative flow locks distributed among multiple components

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008191904A (ja) * 2007-02-05 2008-08-21 Nec Corp 分散データ管理システムおよび方法
WO2008105099A1 (ja) * 2007-02-28 2008-09-04 Fujitsu Limited アプリケーション連携制御プログラム、アプリケーション連携制御方法およびアプリケーション連携制御装置
JP2008234445A (ja) * 2007-03-22 2008-10-02 Brother Ind Ltd コンテンツ分散保存システム、複製データ取得方法、ノード装置、及びノード処理プログラム
JP2011041006A (ja) * 2009-08-11 2011-02-24 Fujitsu Ltd 負荷分散装置、負荷分散方法および負荷分散プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108243237A (zh) * 2016-12-27 2018-07-03 中国移动通信集团浙江有限公司 宽带定向提速方法及设备

Also Published As

Publication number Publication date
US20130159525A1 (en) 2013-06-20
US9197715B2 (en) 2015-11-24
JP5845877B2 (ja) 2016-01-20

Similar Documents

Publication Publication Date Title
JP5845877B2 (ja) 情報処理装置、データ制御方法およびデータ制御プログラム
Ascigil et al. A keyword-based ICN-IoT platform
US10291696B2 (en) Peer-to-peer architecture for processing big data
JP4938074B2 (ja) リソースの位置情報の要求方法、当該方法のためのユーザノードおよびサーバ
WO2018000993A1 (zh) 一种分布式存储的方法和系统
US8190630B2 (en) Data search device, data search system, data search method and data search program
JP2007066161A (ja) キャッシュシステム
US9367261B2 (en) Computer system, data management method and data management program
CN101640623A (zh) 在对等网络中搜索资源的方法和设备
US11354152B2 (en) Self-evolving microservices
EP2856355A1 (en) Service-aware distributed hash table routing
George et al. Hadoop MapReduce for mobile clouds
JP2012155717A (ja) キャッシュクラウド構造を用いたキャッシュシステムおよびキャッシングサービス提供方法
US20170070593A1 (en) Systems and methods for remote network topology discovery
Yoichi et al. Consistency preservation of replicas based on access frequency for content sharing in hybrid peer-to-peer networks
EP3685567B1 (en) Load shedding of traffic based on current load state of target capacity
CN114143090B (zh) 基于网络安全架构的防火墙部署方法、装置、设备及介质
US20240176762A1 (en) Geographically dispersed hybrid cloud cluster
KR102503958B1 (ko) 분산 네트워크 환경에서의 쿼리 배치 장치 및 그 방법
US9319245B2 (en) Information processing device, recording medium storing information search program, and information search method
WO2011136261A1 (ja) ストレージシステム、ストレージシステムの制御方法、及びコンピュータプログラム
JP7515693B2 (ja) 複数のパーティショングループ間のハートビート通信のランダム化
JP2014203329A (ja) ストレージシステム、ノード装置及びデータ管理方法
JP5508346B2 (ja) 分散データ管理システム、分散データ管理方法及び分散データ管理プログラム
JP6383338B2 (ja) サーバ、データ一覧作成方法、および、データ一覧作成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140904

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150707

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150907

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: 20151027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151109

R150 Certificate of patent or registration of utility model

Ref document number: 5845877

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150