クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する付与部と、データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、前記付与部による付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させる記憶制御部と、前記付与部によってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する応答部とを有することを特徴とする情報処理装置。前記付与部によってアクセス要求に付与された最新の識別子を記憶する識別子記憶部をさらに有し、前記記憶制御部は、前記識別子記憶部に記憶される最新の識別子を増加または減少させた識別子を用いてハッシュ値を算出し、算出したハッシュ値によって特定された前記データの格納先と前記ハッシュ値の算出に用いた識別子とを対応付けて、前記記憶部に記憶させることを特徴とする請求項1に記載の情報処理装置。前記記憶制御部は、前記識別子記憶部に記憶される最新の識別子を所定回数増加または減少させた各識別子を用いてハッシュ値を算出し、算出した各ハッシュ値によって特定された各格納先と前記各識別子とを対応付けて、前記最新の識別子を増加または減少させた順に前記記憶部に記憶させることを特徴とする請求項2に記載の情報処理装置。前記記憶制御部は、前記応答部によって応答された前記データの格納先を前記記憶部から削除するたびに、前記識別子記憶部に記憶される最新の識別子を用いて前記データの格納先を特定し、特定したデータの格納先と識別子とを対応付けて、前記記憶部に記憶させることを特徴とする請求項2に記載の情報処理装置。前記受信されたアクセス要求のうち、既に処理が実行された最新のアクセス要求に付与された識別子を記憶する処理済記憶部と、前記付与部によって識別子が付与されたアクセス要求に対応する処理を実行する場合に、付与された識別子と前記処理済記憶部に記憶される識別子とを比較し、未処理のアクセス要求が存在すると判定した場合には、前記受信されたアクセス要求に先立って、当該未処理のアクセス要求に対応する処理を実行する処理実行部とをさらに有することを特徴とする請求項1に記載の情報処理装置。コンピュータが、クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与し、データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させ、アクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する各処理を実行することを特徴とするデータ制御方法。コンピュータに、クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与し、データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索し、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させ、アクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する各処理を実行させることを特徴とするデータ制御プログラム。しかしながら、従来技術では、データの処理速度が十分ではない場合があるという問題がある。例えば、オンライン証券取引のWebフロントシステムのように、数百マイクロ秒である1回の通信でも削減してレイテンシを下げることが競争力につながるシステムでは、Chordでもデータを処理する速度やデータ処理にかかる速度の安定性は十分とは言えない。また、ストリーミング処理のように、通信速度が最も遅い場合に処理を合わせるシステムでも、同様のことが言える。具体的には、Chordは、サーバ台数に寄らず50以上の確率で2ホップ以上となり、100台構成ならば最大5ホップの通信となり、1ミリ秒以上の通信性能差が発生する場合がある。つまり、複数のサーバに跨る処理が行われること自体、オーバヘッドが高いことに加え、下位層のトポロジに無関係にオーバレイのトポロジが作られる場合、下位層での無駄な通信を引き起こしやすい。このように、Chordなどのアルゴリズムを用いたとしても、システムによっては満足する処理速度を発揮できない場合がある。1つの側面では、データの処理速度を高速化する情報処理装置、データ制御方法およびデータ制御プログラムを提供することを目的とする。第1の案では、情報処理装置は、クライアント端末から受信した、データの送信要求または受信要求を示すアクセス要求に、受信した順に基づく識別子を付与する付与部を有する。情報処理装置は、記憶制御部を有する。記憶制御部は、データの送受信処理を分散させる分散型ネットワークを形成する情報処理装置から、前記付与部による付与予定の識別子が付与されるアクセス要求を処理対象とする情報処理装置を探索する。そして、記憶制御部は、探索された情報処理装置を特定する情報と前記付与予定の識別子とを対応付けて記憶部に記憶させる。情報処理装置は、前記付与部によってアクセス要求に識別子が付与された場合に、付与された識別子に対応付けて前記記憶部に記憶される情報を、前記クライアント端末に応答する応答部を有する。データの処理速度を高速化することができる。以下に、本願の開示する情報処理装置、データ制御方法およびデータ制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。図1は、実施例1に係るシステムの全体構成例を示す図である。図1に示すように、このシステムは、クライアント端末10、クライアント端末20、クライアント端末30、サーバA50、サーバB60がネットワーク5を介して相互に通信可能に接続される。図1に示したシステムは、Chordを用いた分散ハッシュテーブルを形成する。すなわち、システムは、複数のサーバに形成されるメッセージキューと、メッセージキューにデータを送信するクライアント端末と、メッセージキューからデータを読み出して受信するクライアント端末との間で、非同期連携を行うシステムである。なお、ここで示した各装置の台数等はあくまで例示であり、図示したものに限定されない。また、クライアント端末とサーバとは同一の物理マシン上で動作していてもよい。つまり、図1に示したシステムは、物理マシンで構成される物理的なシステムではなく、仮想マシン等で構成される論理的なシステムであってもよい。なお、分散ハッシュテーブルを実現するアルゴリズムは、Chord以外のアルゴリズムを用いることもできる。サーバA50やサーバB60は、クライアント端末間のデータの送受信処理を分散させる分散型ネットワークであるCH空間を形成する。図2は、実施例1に係るシステムのCH空間を示す図である。図2に示す各サーバは、例えばメッセージキューのキュー名のハッシュ値によって、CH空間上の位置が決まる。また、CH空間は、CH空間上の位置に基づいて各サーバをリンク状に接続した空間であり、時計周りにデータ等が転送される。そして、各サーバには、ハッシュ値で区切られた空間が担当する空間として割り振られている。また、各サーバは、データを転送するのに使用するルーティングテーブルを保持する。このルーティングテーブルには、例えば、時計回りで次に位置するサーバのIPInternetProtocolアドレス、リンク状に対向する位置に位置するサーバの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は、OSOperatingSystemを実行するプロセッサなどの電子回路であり、クライアント端末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が格納される。カウンタ値は、付与された最新の識別子または処理された最新の識別子を示し、FIFOFirstInFirstOut制御するための整数値が格納される。図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アドレスがxxxxxxxxx102であるサーバAとなることを示す。次に、識別子として102が付与された送信要求に含まれるデータの格納先は、IPアドレスがxxxxxxxxx105であるサーバDとなることを示す。受信用先読み格納部52cは、メッセージキューごとに、データの受信要求に付与される予定の識別子と、当該予定の識別子に対応する宛先情報とを対応付けて記憶する。受信用先読み格納部52cは、図6に示した送信用先読み格納部52bと同様、カウンタ、宛先情報、nextを1つの情報とするチェーン構造で記憶する。ここで記憶されるカウンタは、受信要求に付与される予定の識別子を示し、ここでは、受信用先読み格納部52cに記憶される最小のカウンタ値がチェーン構造の最初である。宛先情報は、サーバのIPアドレスを示し、nextは、次のデータを示すポインタである。メッセージ格納部52dは、クライアント端末から送信されたデータを物理的に記憶する。図7は、メッセージ格納部に格納される情報の例を示す図である。図7に示すように、メッセージ格納部52dは、メッセージ識別子とデータとを対応付けて記憶する。つまり、メッセージ格納部52dは、メッセージ識別子をキー、データをValueとするキーバリューストア構造である。ここで記憶されるメッセージ識別子は、メッセージに割り与えられた、メッセージを識別する識別子である。データは、クライアント端末から受信したデータである。図7の場合、キューAは、先頭がキューA0001のデータA1、次がキューA0002のデータA2とする待ち行列を形成し、キューBは、先頭がキューB0010のデータ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は、SNMPSimpleNetworkManagementProtocolなどのプロトコルや他の監視ツールを用いて、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は、キュー名未格納のカウンタ値すなわちキューA15をハッシュ値AAAに変換する。そして、先読み制御部58は、Chordの手法にしたがって、CH空間を形成するサーバから、ハッシュ値AAAを担当するサーバを探索する。その後、先読み制御部58は、送信用先読み格納部52bに格納されるキューAのエントリとして、探索されたサーバのIPアドレスとカウンタ値15とを対応付けて格納する。例えば、キューディクショナリデータ格納部52aに格納されるキューZに対応する処理済み管理用カウンタの値が15であり、受信用先読み格納部52cに格納されるキューZのカウンタが16、17、18の3つであるとする。また、受信用先読み格納部52cは、キュー名ごとに最大4つのエントリを格納できるものとする。この場合、先読み制御部58は、キュー名未格納のカウンタ値すなわちキューZ19をハッシュ値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アドレスxxxxxxxxxxxxを設定する。その後、オープン処理部66は、当該メッセージの転送元サーバ識別子に設定されたサーバAに対して、上述した情報を新たに設定したメッセージを転送する。サーバA50のオープン処理部56は、サーバB60から受信したメッセージをクライアント端末10に応答する。具体的には、図9に示すように、サーバA50のオープン処理部56は、サーバB60から受信したメッセージの通信種別を接続依頼応答から接続転送に設定変更して、クライアント端末10に送信する。クライアント端末10は、サーバA50から受信したメッセージに基づいて、指定メッセージキューを担当するサーバB60との間でコネクションを確立し、キューオープン依頼を実行する。以降、クライアント端末10は、キューAとのやり取りはサーバB60に直接通信して行う。具体的には、図9に示すように、クライアント端末10は、サーバA50から受信したメッセージの通信種別を接続転送から接続依頼初回に設定変更する。そして、クライアント端末10は、受信したメッセージの宛先情報に設定されるIPアドレスxxxxxxxxxxxxに対して、設定変更したメッセージを送信する。サーバ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アドレスyyyyyyyyyyyyを宛先情報に設定する。さらに、メッセージ処理部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アドレスyyyyyyyyyyyyを設定したメッセージを受信待ちクライアント端末に通知する。フローチャート続いて、図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アドレスyyyyyyyyyyyyを宛先情報に設定する。さらに、メッセージ処理部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アドレスyyyyyyyyyyyyを設定したメッセージを受信待ちクライアント端末に通知する。フローチャート続いて、図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、xxxxxxxxx102、0022、xxxxxxxxx127、0023、xxxxxxxxx064を保持する。すなわち、サーバB60は、既に受信済みのデータ送信またはデータ受信処理を要求するメッセージには、カウンタ値0020を用いてメッセージ識別子を生成済みである。また、サーバB60は、これから受信すると予定されるメッセージのうち次に受信されるメッセージには、0020を1増加させた0021を用いてメッセージ識別子を生成し、そのメッセージの格納先がxxxxxxxxx102であることを特定している。同様に、サーバB60は、これから受信すると予定されるメッセージのうちさらにその後に受信されるメッセージには、0021を1増加させた0022を用いてメッセージ識別子を生成し、そのメッセージの格納先がxxxxxxxxx127であることを特定している。同様に、サーバB60は、これから受信すると予定されるメッセージのうちさらにその後に受信されるメッセージには、0022を1増加させた0023を用いてメッセージ識別子を生成し、そのメッセージの格納先がxxxxxxxxx064であることを特定している。このような状態において、サーバ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アドレスxxxxxxxxx211を設定した後、当該メッセージをサーバB60に応答する。このメッセージを受信したサーバB60は、メッセージの通信種別が先読み応答であることから、自サーバが送信した先読み要求の応答であることを認識する。そして、サーバB60は、メッセージのキュー名ハッシュ値等から該当キューがキューAでありカウンタ値が0024であることを特定し、さらに宛先情報からxxxxxxxxx211を抽出する。その後、図23に示すように、サーバB60は、キューAの先読みデータとして、0024、xxxxxxxxx211を送信用先読み格納部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は、キュー名pn1のハッシュ値を算出し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の分散性の特性を継承するので、メッセージがシステム内のサーバに一様に分散して格納され、IO負荷も分散することができる。さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。キューディクショナリデータの挙動離脱図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、HDDHardDiskDrive107、RAMRandomAccessMemory108を有する。また、図28に示した各部は、バス101で相互に接続される。入力装置103は、マウスやキーボードであり、出力装置104は、ディスプレイなどであり、通信インタフェース105は、NICNetworkInterfaceCardなどのインタフェースである。HDD107は、データ制御プログラム107aととともに、図4当に示した各情報を記憶する。記録媒体の例としてHDD107を例に挙げたが、ROMReadOnlyMemory、RAM、CD-ROM等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記録媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。CPU102は、データ制御プログラム107aを読み出してRAM108に展開することで、図4等で説明した各機能を実行するデータ制御プロセス108aを動作させる。すなわち、データ制御プロセス108aは、図4に記載したクラスタ制御部54、種別判定部55、オープン処理部56、メッセージ処理部57を実行する。このようにコンピュータ100は、プログラムを読み出して実行することでデータ制御方法を実行する情報処理装置として動作する。例えば、コンピュータ100は、媒体読取装置106によって記録媒体からデータ制御プログラムを読み出し、読み出されたデータ制御プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ100によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。