JP6324304B2 - クライアント装置及び通信システム及びデータ処理方法及びプログラム - Google Patents

クライアント装置及び通信システム及びデータ処理方法及びプログラム Download PDF

Info

Publication number
JP6324304B2
JP6324304B2 JP2014243741A JP2014243741A JP6324304B2 JP 6324304 B2 JP6324304 B2 JP 6324304B2 JP 2014243741 A JP2014243741 A JP 2014243741A JP 2014243741 A JP2014243741 A JP 2014243741A JP 6324304 B2 JP6324304 B2 JP 6324304B2
Authority
JP
Japan
Prior art keywords
client
representative
request
client device
response
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
JP2014243741A
Other languages
English (en)
Other versions
JP2016110175A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2014243741A priority Critical patent/JP6324304B2/ja
Publication of JP2016110175A publication Critical patent/JP2016110175A/ja
Application granted granted Critical
Publication of JP6324304B2 publication Critical patent/JP6324304B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Transfer Between Computers (AREA)

Description

本発明は、クライアント・サーバシステムに関する。
サーバ装置(以下、単にサーバともいう)が様々な処理やデータをクライアント装置(以下、単にクライアントともいう)に提供するクライアント・サーバシステムにおいて、クライアント装置の台数、もしくはクライアント装置からサーバ装置への要求数が増大した場合、その増加率に応じてサーバ装置の処理負荷は増大する。
サーバ装置の処理負荷を分散・平準化する方法として、以下の方法が存在する。
サーバ装置とクライアント装置の間にロードバランサーを配置し、クライアント装置はロードバランサーに対して要求を送信し、ロードバランサーがある一定の基準に従ってその要求を、複数あるサーバ装置のうち、どのサーバ装置が処理するかを決定する。
そして、ロードバランサーが、処理を行わせるサーバ装置に要求に対処するよう命令を発行する。
これにより、個々のサーバ装置の処理負荷を分散・平準化させることができる。
しかし、この先行技術では複数のサーバ装置とロードバランサーをサーバシステム側で確保する必要があり、サーバ装置が単体のサーバシステムを構築する場合には、当該技術を利用できないという課題がある。
また、サーバ装置の処理負荷の分散・平準化技術として、例えば、特許文献1に記載される方法が存在する。
特許文献1の技術では、サーバ装置と複数のクライアント装置で構成され、クライアント装置にソフトウエアイメージを配布するシステムにおいて、サーバ装置がクライアント装置を複数のグループに分類し、グループごとに代表クライアント装置を決め、サーバ装置は代表クライアント装置へソフトウエアイメージを配布する。
代表クライアント装置は、同一グループに所属する他のクライアント装置からの要求に基づいてソフトウエアイメージを同一グループに属するクライアント装置に配布する。
国際公開WO2011/135629号
しかし、特許文献1の技術では、サーバ装置が複数のクライアント装置のグループ分類と代表クライアント装置の決定を行う必要がある。
クライアント装置のシステムへの参加、離脱が頻繁に発生するような、例えば高速移動体からの無線通信によるシステム参加が行われる状況においては、サーバ装置が頻繁にグループ管理、代表クライアント装置の決定を行う必要があり、サーバ装置の処理負荷が増加してしまうという課題がある。
本発明は、上述の課題を解決することを主な目的とし、サーバ装置を増強させることなく、また、サーバ装置が単体で構成される場合でも、サーバ装置の負荷を軽減することを主な目的とする。
本発明に係るクライアント装置は、
複数のクライアント装置が含まれる通信システムに含まれるクライアント装置であって、
いずれかのクライアント装置により生成されたサーバ装置へのリクエストを取得した場合に、取得した取得リクエストについて、代表してリクエストを処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定部と、
前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記取得リクエストに対応する前記サーバ装置からのレスポンスが、自装置がアクセスできるキャッシュ領域にキャッシュされているか否かを判定する代表クライアント処理部と、
前記取得リクエストについての代表クライアントロールが自装置に割り当てられており、前記取得リクエストに対応するレスポンスが前記キャッシュ領域にキャッシュされていない場合に、前記取得リクエストを前記サーバ装置に送信するサーバ通信部と、
前記取得リクエストについての代表クライアントロールが自装置に割り当てられていない場合に、前記取得リクエストを他のクライアント装置に送信する他クライアント通信部とを有する。
本発明では、代表クライアントロールが割り当てられているクライアント装置にリクエストの処理を集約しているため、クライアント装置ごとにリクエストが送信され、サーバ装置が個別にレスポンスを返信するという事態を回避することができる。
また、代表クライアントロールが割り当てられているクライアント装置においてレスポンスがキャッシュされている場合には、サーバ装置にリクエストを送信することなく、リクエスト生成元のクライアント装置にレスポンスを提供することができる。
このため、サーバ装置を増強させることなく、また、サーバ装置が単体で構成される場合でも、サーバ装置の負荷を軽減することができる。
実施の形態1に係るサーバ装置及びクライアント装置のハードウエア構成例を示す図。 実施の形態1に係るサーバ装置の内部処理モジュールの構成例を示す図。 実施の形態1に係るクライアント装置の内部処理モジュールの構成例を示す図。 実施の形態1に係るリクエスト生成元のクライアント装置の動作例を示すフローチャート図。 実施の形態1に係るリクエスト送信先のクライアント装置の動作例を示すフローチャート図。 実施の形態1に係るAPI呼び出し例とリクエスト例とを示す図。 実施の形態1に係るリクエスト生成部の動作例を示すフローチャート図。 実施の形態1に係る代表クライアント判定部の動作例を示すフローチャート図。 実施の形態1に係る代表クライアント判定部の動作例を示すフローチャート図。 実施の形態1に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態1に係る受信データ管理部でのリクエストとレスポンス保存例を示す図。 実施の形態2に係る仮想空間上のノードとキーの配置例を示す図。 実施の形態2に係る仮想空間上のノードとキーの配置例を示す図。 実施の形態2に係る代表クライアント処理部の動作例を示す図。 実施の形態3に係る予備代表クライアントの情報をHTTPリクエストに結合した例を示す図。 実施の形態3に係る予備代表クライアントの情報をHTTPリクエストに結合した例を示す図。 実施の形態3に係るサーバ装置の動作例を示すフローチャート図。 実施の形態4に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態4に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態4に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態4に係るリクエストとリクエスト発行元とを管理するリストの例を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントと代表クライアントクローンとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントと代表クライアントクローンとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントと代表クライアントクローンとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントと代表クライアントクローンとの関係を示す図。 実施の形態4に係る代表クライアントとリクエスト発行元クライアントと代表クライアントクローンとの関係を示す図。 実施の形態4に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態4に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態5に係る代表クライアント判定部の動作例を示すフローチャート図。 実施の形態5に係る代表クライアント判定部の動作例を示すフローチャート図。 実施の形態5に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態5に係る代表クライアント処理部の動作例を示すフローチャート図。 実施の形態5に係る論理和リクエストとレスポンスとを管理するテーブルの例を図。 実施の形態5に係るレスポンスの例を示す図。
実施の形態1.
以下にて、本実施の形態を説明する。
本実施の形態では、サーバ装置のリソースを増強させることなく、また、サーバ装置単体のみで構成した場合でも、サーバ装置の負荷軽減効果が得られるようにする。
このため、本実施の形態では、サーバ装置に負荷分散のための処理を行わせるのではなく、クライアント装置に負荷分散のための処理を行わせる。
***構成の説明***
図1は、本実施の形態に係るクライアント・サーバシステムの構成例を示す。
図1に示すように、本実施の形態に係るクライアント・サーバシステムは、2台以上のクライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104と、1台以上のサーバ装置105が存在し、それぞれがネットワーク130を経由して接続されている。
クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104で構成されるシステムは、通信システム1000という。
なお、クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104は、あくまで複数のクライアント装置が存在する事を示すため、一つの例として4台のクライアント構成としている。
クライアント装置の台数は複数であれば構わず、4台以外の構成で構わない。
以下では、サーバ装置105を単にサーバともいい、クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104を単にクライアントともいう。
次に、クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104のハードウエア構成例を説明する。
なお、クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104のハードウエア構成例は共通しているため、以下では、代表として、クライアント装置101のハードウエア構成例を説明する。
以下の説明は、クライアント装置102、クライアント装置103、クライアント装置104にも同様に当てはまる。
クライアント装置101は、情報処理装置であり、CPU(Central Processing Unit)110、メモリ111、入力インタフェース112、出力インタフェース113、通信インタフェース114、永続記憶インタフェース115、ディスク116などの要素を内蔵し、それらがバス117で接続されている。
CPU110は、メモリ111に格納されているプログラムやデータ、各種要素からの割り込みやデータ受け処理を行い、クライアント装置101としての動作を実現する。
より具体的には、CPU110が、後述するアプリケーションロジック部206、リクエスト生成部207、代表クライアント判定部208、他クライアント通信部209、代表クライアント処理部210、受信データ管理部211、サーバ通信部212の機能を実現するプログラムを実行することで、クライアント装置101の後述する処理が行われる。
入力インタフェース112は、マウスやキーボードなどの入力デバイスが接続されるインタフェースであり、クライアント装置101のユーザは入力インタフェース112に接続された入力デバイスを操作して、クライアント装置101を操作する。
出力インタフェース113は、ディスプレイやスピーカーなどの出力デバイスが接続されるインタフェースであり、クライアント装置101のユーザは出力デバイスに出力される光や音などの刺激を元にクライアント装置101の状況を知覚する事が可能となる。
通信インタフェース114は、クライアント装置101がサーバ装置105や他クライアント装置102、クライアント装置103、クライアント装置104とデータの交換を行うためのインタフェースであり、ネットワーク130に接続される。
永続記憶インタフェース115は、ディスクなどの不揮発性の記憶装置が接続されるインタフェースであり、電源断後にも記憶したいデータや一時データの保存読み出しはこのインタフェースを通して行われる。
次に、サーバ装置105のハードウエア構成例を説明する。
サーバ装置105は、クライアント装置101〜104と同等の情報処理装置である。
サーバ装置105は、CPU120、メモリ121、入力インタフェース122、出力インタフェース123、通信インタフェース124、永続記憶インタフェース125、ディスク126などの要素を内蔵しており、それらがバス127で接続されている。
CPU120は、メモリ121に格納されているプログラムやデータ、各種要素からの割り込みやデータ受け処理を行い、サーバ装置105としての動作を実現する。
より具体的には、CPU120が、後述する通信部213及び要求処理部214の機能を実現するプログラムを実行することで、サーバ装置105の後述する処理が行われる。
入力インタフェース122は、マウスやキーボードなどの入力デバイスが接続されるインタフェースであり、サーバ管理者は入力インタフェース122に接続された入力デバイスを操作して、サーバ装置105を操作する。
出力インタフェース123は、ディスプレイやスピーカーなどの出力デバイスが接続されるインタフェースであり、サーバ管理者は出力デバイスに出力される光や音などの刺激を元にサーバ装置105の状況を知覚する事が可能となる。
通信インタフェース124は、クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104とデータの交換を行うためのインタフェースであり、ネットワーク130に接続される。
永続記憶インタフェース125は、ディスクなどの不揮発性の記憶装置が接続されるインタフェースであり、電源断後にも記憶したいデータや一時データの保存読み出しはこのインタフェースを通して行われる。
クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104はクライアント装置のユーザに対してあるサービスを提供するため、ネットワーク130を経由してサーバ装置105と連携処理を行う。
クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104は、サーバ装置105に何らかの処理を要求する場合、その要求内容をデータとして記述したリクエストをサーバ装置105に発行する。
例えばWebシステムではクライアント・サーバ間の通信はHTTP(HyperText Transfer Protocol)を用いて行われ、そのリクエストはHTTPリクエストのメソッド、URI(Unified Resource Identifier)、ボディなどとして表現される。
なお、サーバ・クライアント間の通信はHTTP以外にもWebSocket API(Application Programming Interface)など他のプロトコルを用いたとしても、本質的には同等であり、違いはない。
クライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104が送信したリクエストを受信したサーバ装置105は、そのリクエストの内容を解析し、どの様な処理を行うべきかを決定する。
HTTPを用いてリクエストを受け取った場合、サーバ装置105は、一般的にはURIで処理を行うべき対象となるリソースを一意に特定し、メソッドでそのリソースに対する具体的な動作を特定する。
その他処理に必要となるパラメータをクライアント装置から指定する場合にはURIのクエリー部もしくはボディとしてパラメータを与えて、クライアント装置から送信されてくるため、サーバ装置105は適時その情報(パラメータ)を利用して処理を行う。
サーバ装置105がクライアント装置に提供する処理は、ファイルの内容の送信、ファイルの書き換え、データベース等の他プロセスの制御や、サーバ装置105に接続されている各種機器の制御など多岐にわたる。
図2を用いて、本実施の形態に係るサーバ装置105の内部処理モジュールの説明を行う。
サーバ装置105は、システム内に存在するクライアント装置101、クライアント装置102、クライアント装置103、クライアント装置104と通信するための通信部213を持つ。
通信部213は、複数のクライアント装置と並行して通信のコネクションを確立できる。
通信部213は、クライアント装置からのリクエストを受信すると、そのリクエストを要求処理部214に転送する。
要求処理部214は、リクエストを解析し、どの様な処理が要求されているのかを特定する。
その後、要求処理部214は、特定された要求処理を実行し、その処理結果を得る。
処理結果を得た要求処理部214はクライアント装置が解釈可能な形式にその処理結果を変換しレスポンスを生成する。
レスポンス生成後、要求処理部214は通信部213を利用してレスポンスを、リクエスト送信元のクライアント装置に返信する。
次に、図3を用いて本実施の形態に係るクライアント装置の内部処理モジュールの説明を行う。
各クライアント装置は、それぞれ同等の内部処理モジュール構成となっており、どのクライアント装置も基本的に等価である。
図3では、クライアント装置101、クライアント装置102のみ内部処理モジュールを記述しているが、クライアント装置103、クライアント装置104にはその記述がないのは、記述を省略しているためであり、クライアント装置103、クライアント装置104はクライアント装置101、クライアント装置102と同等の内部処理モジュールを持つ。
以下では、代表として、クライアント装置101の内部処理モジュールを説明する。
以下の説明は、クライアント装置102、クライアント装置103、クライアント装置104にも同様に当てはまる。
クライアント装置101がクライアント装置101のユーザに提供するサービスの具体的なロジックを記述するのがアプリケーションロジック部206である。
例えば、提供するサービスがサーバ装置105と連動して動作するゲームアプリケーションであれば、ゲームアプリケーションに必要となるデータやゲームロジックなどがプログラミングされたソフトウエア等がアプリケーションロジック部206に相当する。
それ以外にサーバ装置105を経由したプラント監視制御を提供するサービスであれば、監視制御に必要な制御手続きやプラントから取得したデータを表示するための表示ロジック等がプログラミングされたソフトウエア等がアプリケーションロジック部206に相当する。
アプリケーションロジック部206は、サーバ装置105と連動して動作するアプリケーションであれば何でも構わない。
アプリケーションロジック部206は、サーバ装置105と連動する必要が発生すると、リクエスト生成部207に対してサーバ装置105と連動すべき具体的な処理内容を伝える処理を行う。
リクエスト生成部207は、アプリケーションロジック部206に対して、サーバ装置105がクライアント装置101に提供する処理内容に対応したAPIを提供する。
アプリケーションロジック部206は連動すべき処理内容に対応するAPIを呼び出す。
また、リクエスト生成部207は、必要に応じてパラメータをAPIに提供する。
更に、リクエスト生成部207は、アプリケーションロジック部206がサーバ装置105と通信する際のプロトコルやリクエストのデータ形式を意識することなく、またサーバ装置105からのレスポンスのデータ形式を意識することなく処理を遂行できるようにするための抽象化層の役割を持つ。
また、リクエスト生成部207は、本実施の形態に関わる振る舞いをアプリケーションロジック部206と独立にするための抽象化層の役割も併せ持つ。
呼び出されたAPIに対応する処理内容と提供されたパラメータを元にサーバ装置105が解釈可能なリクエストを生成したリクエスト生成部207は、代表クライアント判定部208に生成したリクエストを出力する。
代表クライアント判定部208は、いずれかのクライアント装置により生成されたサーバ装置105へのリクエストを取得した場合に、取得したリクエストについて、代表してリクエストを処理する役割である代表クライアントロールが自装置(クライアント装置101)に割り当てられているか否かを判定する。
代表クライアントロールが割り当てられているクライアント装置を、代表クライアント装置又は単に代表クライアントという。
なお、上記「リクエストを処理する」における「処理」には、リクエストに対するレスポンスがキャッシュされているか否かを判定する処理、レスポンスがキャッシュされていない場合に、リクエストをサーバ装置105に送信する処理、サーバ装置105からレスポンスを受信する処理、受信したレスポンスをリクエスト発行元に返信する処理、受信したレスポンスをキャッシュする処理が含まれる。
代表クライアント判定部208は、前述したように、自装置のリクエスト生成部207により生成されたリクエストを取得する場合もあるし、他のクライアント装置のリクエスト生成部207により生成されたリクエストを取得する場合もある。
自装置のリクエスト生成部207により生成されたリクエストであって代表クライアント判定部208が取得したリクエスト、他のクライアント装置のリクエスト生成部207により生成されたリクエストであって代表クライアント判定部208が取得したリクエストの両者を、以下では取得リクエストという。
代表クライアント判定部208は、複数のクライアント装置の間で共有している分散ハッシュテーブルを用いて、取得リクエストについての代表クライアントロールが自装置(クライアント装置101)に割り当てられているか否かを判定する。
代表クライアント判定部208は、取得リクエストについて、代表クライアントロールが自装置(クライアント装置101)に割り当てられている場合は、取得リクエストを代表クライアント処理部210に出力する。
一方、取得リクエストについて、代表クライアントロールが自装置(クライアント装置101)に割り当てられていない場合は、代表クライアント判定部208は、取得リクエストを他クライアント通信部209に出力する。
前述したように、取得リクエストについての代表クライアントロールが自装置(クライアント装置101)に割り当てられていない場合は、代表クライアント判定部208から取得リクエストが出力され、他クライアント通信部209が、取得リクエストを他のクライアント装置に送信する。
また、取得リクエストが他のクライアント装置で生成されたリクエストであり、取得リクエストについての代表クライアントロールが自装置(クライアント装置101)に割り当てられており、キャッシュ領域に取得リクエストに対応するレスポンスがキャッシュされている場合に、他クライアント通信部209は、受信データ管理部211にキャッシュされているレスポンスを取得リクエストの生成元のクライアント装置に送信する。
他クライアント通信部209は、通信インタフェース114を用いて他クライアント装置と通信を行うためのAPI(Application Programming Interface)を提供している。
例えば、本実施の形態に係るシステムがWebシステムとして構築されており、クライアント装置101がWebブラウザ上に実装されている場合には、WebRTCなどのAPIを提供する事となる。
他クライアント通信部209は、何らかのデータ送信要求がAPI経由で通知された場合には、その要求に従い送信先となるクライアント装置にデータを送信する。
また、他のクライアント装置から何らかのデータが送信されてきた場合には、他のクライアント装置からデータが送信されてきた旨をイベントなどの形式でクライアント装置101内に通知し、そのイベントを監視しているモジュールがその受信データを処理する事となる。
代表クライアント処理部210は、自装置(クライアント装置101)に代表クライアントロールが割り当てられている場合に、代表クライアントとして振る舞うための動作を行う。
具体的には、代表クライアント処理部210は、取得リクエストがリクエスト生成部207で生成されたリクエストであり、取得リクエストについての代表クライアントロール(クライアント装置101)が自装置に割り当てられており、受信データ管理部211に取得リクエストに対応するサーバ装置105からのレスポンスであって有効期限内のレスポンスがキャッシュされている場合に、受信データ管理部211にキャッシュされているレスポンスを代表クライアント判定部208を介してリクエスト生成部207に出力する。
また、取得リクエストが他のクライアント装置のリクエスト生成部207で生成されたリクエストであり、取得リクエストについての代表クライアントロール(クライアント装置101)が自装置に割り当てられており、受信データ管理部211に取得リクエストに対応するサーバ装置105からのレスポンスがキャッシュされている場合に、受信データ管理部211にキャッシュされているレスポンスを他クライアント通信部209に出力する。
受信データ管理部211は、サーバ装置105からのレスポンスを保存するキャッシュ領域を持ち、キャッシュ領域を管理する。
受信データ管理部211は、代表クライアント処理部210がサーバ装置105より取得したレスポンスを対応するリクエストと対応付けしてキャッシュ領域に保存する。
また、受信データ管理部211は、あるリクエストをキーとして対応するレスポンスを取得することができる。
なお、本実施の形態では、キャッシュ領域はクライアント装置101に内蔵されているが、キャッシュ領域は、クライアント装置101(より厳密には、代表クライアント処理部210)がアクセスできればよく、クライアント装置101に内蔵されていなくてもよい。
なお、以下では、レスポンスが受信データ管理部211にキャッシュされている旨の表現も用いるが、これは受信データ管理部211が管理するキャッシュ領域にレスポンスがキャッシュされているという意味である。
サーバ通信部212は、取得リクエストについての代表クライアントロールが自装置(クライアント装置101)に割り当てられており、取得リクエストに対応するレスポンスが受信データ管理部211にキャッシュされていない場合に、取得リクエストをサーバ装置105に送信する。
サーバ通信部212は、通信インタフェース114を用いてサーバ装置105と通信を行うためのAPIを提供している。
例えば、本実施の形態に係るシステムがWebシステムとして構築されており、クライアント装置101がWebブラウザ上に実装されている場合には、XMLHttpRequestオブジェクトやWebSocket APIなどがサーバ通信部212に相当する。
なおサーバ装置、クライアント装置間の通信プロトコルをHTTPとする場合にはXMLHttpRequestオブジェクトを用いる事になるが、WebSocket APIを用いたとしてもHTTPと同等の機能を実現できるため、実質的にどちらを用いたとしても、両方を併用したとしても、違いはない。
***動作の説明***
次に、本実施の形態に係るクライアント装置におけるデータ処理方法の概要を説明する。
図4は、リクエスト生成元のクライアント装置の動作例を示す。
以下では、クライアント装置101がリクエスト生成元である例を用いて説明を進める。
クライアント装置101のリクエスト生成部207は、アプリケーションロジック部206からの指示に基づき、サーバ装置105へのリクエストを生成する(処理101)。
そして、リクエスト生成部207は生成したリクエストを代表クライアント判定部208に出力する。
代表クライアント判定部208は、当該リクエスト(取得リクエスト)についての代表クライアントロールが自装置(クライアント装置101)に割り当てられているか否かを判定する(処理102)。
この処理102は、代表クライアント判定ステップに相当する。
リクエストについて自装置に代表クライアントロールが割り当てられている場合(処理102でYES)は、代表クライアント判定部208はリクエストを代表クライアント処理部210に出力し、代表クライアント処理部210が、サーバ通信部212にリクエストに対応するレスポンスがキャッシュされているか否かを判定する(処理103)。
この処理103は、代表クライアント処理ステップに相当する。
受信データ管理部211にレスポンスがキャッシュされている場合(処理103でYES)は、代表クライアント処理部210は、受信データ管理部211にキャッシュされているレスポンスをリクエスト生成部207に返し、また、リクエスト生成部207が当該レスポンスをアプリケーションロジック部206に返し、アプリケーションロジック部206は当該レスポンスを用いた処理を行う(処理104)。
一方、受信データ管理部211にレスポンスがキャッシュされていない場合(処理103でNO)は、代表クライアント処理部210はリクエストをサーバ通信部212に出力し、サーバ通信部212がサーバ装置105にリクエストを送信する(処理105)。
この処理105は、サーバ通信ステップに相当する。
サーバ通信部212は、サーバ装置105からレスポンスを受信する(処理106)。
その後、サーバ通信部212はサーバ装置105からのレスポンスを代表クライアント処理部210及び代表クライアント判定部208を経由してリクエスト生成部207に返し、リクエスト生成部207がアプリケーションロジック部206にレスポンスを返し、リクエスト生成部207が当該レスポンスを用いた処理を行う(処理104)。
一方、リクエストについて自装置に代表クライアントロールが割り当てられていない場合(処理102でNO)は、代表クライアント判定部208はリクエストを他クライアント通信部209に出力し、他クライアント通信部209がリクエストを他のクライアント装置(例えば、クライアント装置102)に送信する(処理107)。
この処理107は、他クライアント通信ステップに相当する。
他クライアント通信部209は、他のクライアント装置(例えば、クライアント装置102)からレスポンスを受信する(処理108)。
その後、他クライアント通信部209は、受信したレスポンスを代表クライアント処理部210に出力する。
代表クライアント処理部210は、他クライアント通信部209から出力されたレスポンスが自装置(クライアント装置101)宛のレスポンスであるか否かを判定する(処理109)。
自装置(クライアント装置101)宛のレスポンスであれば(処理109でYES)、代表クライアント処理部210は、代表クライアント判定部208を経由して当該レスポンスをリクエスト生成部207に返し、また、リクエスト生成部207が当該レスポンスをアプリケーションロジック部206に返し、アプリケーションロジック部206は当該レスポンスを用いた処理を行う(処理104)。
一方、自装置(クライアント装置101)宛のレスポンスでなければ(処理109でNO)、代表クライアント判定部208は、当該レスポンスを他クライアント通信部209に出力し、他クライアント通信部209が当該レスポンスを他のクライアント装置(例えば、クライアント装置103)に転送する(処理110)。
処理109でNOとなるのは、リクエスト生成部207で生成されたリクエストを他のクライアント装置(例えば、クライアント装置102)に送信するとともに、他のクライアント装置(例えば、クライアント装置103)で生成されたリクエストを他のクライアント装置(クライアント装置102)に送信し、他のクライアント装置(クライアント装置102)から他のクライアント装置(クライアント装置103)で生成されたリクエストに対するレスポンスを受信した場合である。
図5は、リクエストの送信先のクライアント装置の動作例を示す。
ここでは、クライアント装置102がクライアント装置101で生成されたリクエストを受信した例を用いて、説明を進める。
クライアント装置102では、他クライアント通信部209が他のクライアント装置(クライアント装置101)から送信されたリクエストを受信する(処理201)。
他クライアント通信部209は、受信したリクエストを代表クライアント判定部208に出力する。
代表クライアント判定部208は、当該リクエスト(取得リクエスト)についての代表クライアントロールが自装置(クライアント装置102)に割り当てられているか否かを判定する(処理202)。
当該リクエストについて自装置に代表クライアントロールが割り当てられている場合(処理202でYES)は、代表クライアント判定部208は当該リクエストを代表クライアント処理部210に出力し、代表クライアント処理部210が、受信データ管理部211に当該リクエストに対応するレスポンスがキャッシュされているか否かを判定する(処理203)。
受信データ管理部211にレスポンスがキャッシュされている場合(処理203でYES)は、代表クライアント処理部210は、受信データ管理部211にキャッシュされているレスポンスを代表クライアント判定部208を経由して他クライアント通信部209に返し、他クライアント通信部209が当該レスポンスを他のクライアント装置(クライアント装置101)に返信する(処理204)。
一方、受信データ管理部211にレスポンスがキャッシュされていない場合(処理203でNO)は、代表クライアント処理部210はリクエストをサーバ通信部212に出力し、サーバ通信部212がサーバ装置105にリクエストを送信する(処理205)。
サーバ通信部212は、サーバ装置105からレスポンスを受信する(処理206)。
その後、サーバ通信部212はサーバ装置105からのレスポンスを代表クライアント処理部210及び代表クライアント判定部208を経由して他クライアント通信部209に返し、他クライアント通信部209が当該レスポンスを他のクライアント装置(クライアント装置101)に返信する(処理204)。
一方、当該リクエストについて自装置に代表クライアントロールが割り当てられていない場合(処理202でNO)は、代表クライアント判定部208は当該リクエストを他クライアント通信部209に出力し、他クライアント通信部209が当該リクエストを他のクライアント装置(例えば、クライアント装置104)に送信する(処理207)。
他クライアント通信部209は、他のクライアント装置(クライアント装置104)からレスポンスを受信する(処理208)。
その後、他クライアント通信部209は当該レスポンスを他のクライアント装置(クライアント装置101)に返信する(処理204)。
次に、本実施の形態に係るクライアント装置の動作を詳細に説明する。
まず、APIの呼び出し後にリクエスト生成部207が行う処理を、図7を用いて説明する。
処理401で、リクエスト生成部207は、呼び出されたAPIに対応する処理内容と提供されたパラメータを元にサーバ装置105が解釈可能なリクエストを生成する。
図6に処理401の一つの具体例を示す。
図6はAPI呼出し時のコード上の記述に対応する、生成されるリクエストの一例を示した対応表である。
ここでは、アプリケーションロジック部206が提供すべきサービスはプラント監視制御を想定し、プラントの監視時間間隔を取得するAPI、監視時間間隔を変更するAPI、ディスプレイに表示すべき画面の定義データを取得するAPIがあるとし、それぞれのAPI名は「getMonitorInterval」、「setMonitorInterval」、「getPageContent」としている。
また、サーバ装置105とクライアント装置はHTTPで通信すると仮定している。
監視時間間隔を取得する場合、アプリケーションロジック部206は引数なしで「getMonitorInterval」を呼び出す。
呼び出されたリクエスト生成部207はデータ取得を意味するメソッドGETと時間間隔を一意に特定するURIである「http://xxx/api/monitor_interval/ 」で構成されるHTTPリクエストを生成する。
また、監視時間間隔を変更する場合、アプリケーションロジック部206は引数で設定した時間間隔を与えて「setMonitorInterval」を呼び出す。
呼び出されたリクエスト生成部207は、データ送信を意味するメソッドPOSTと時間間隔を一意に特定するURIである「http://xxx/api/monitor_interval/ 」に対してクエリーとして引数で指定された値を加えたURLを生成し、それらで構成されるHTTPリクエストを生成する。
加えて、画面の定義データを取得する場合、アプリケーションロジック部206は引数で画面名を与えて「getPagetContent」を呼び出す。
呼び出されたリクエスト生成部207は、データ取得を意味するメソッドGETと要求された画面の定義データを一意に特定するURIである「http://xxx/html/Monitor.html」で構成されるHTTPリクエストを生成する。
この例では、画面定義データをHTML(HyperText Markup Language)で記述されているファイルであると仮定しており、「http://xxx/html/」と「.html」の間に引数で受けた画面名を挿入してURIを構成している。
図7に戻り、処理401でリクエストを生成した後、リクエスト生成部207は、処理402で、代表クライアント判定部208にリクエストを送信し、処理403でそのレスポンスが代表クライアント判定部208から返信されるまで待機する。
レスポンスが代表クライアント判定部208から返信されると、リクエスト生成部207は、処理404で、返信されたレスポンスをアプリケーションロジック部206が解釈可能な形式に変換する。
そして、処理405で、リクエスト生成部207は、その変換結果をアプリケーションロジック部206に返信し処理を完了する。
処理404でのレスポンスの変換処理の一例としてレスポンスがJSON(JavaScript(登録商標) Object Notation)形式のデータである場合には、JavaScript(登録商標)が解釈可能なオブジェクトに変換するなどが考えられる。
リクエストの転送を受けた代表クライアント判定部208の処理を、図8を用いて説明する。
リクエストの転送を受けた代表クライアント判定部208は、処理501で、分散ハッシュテーブルを用い、そのリクエストのIDを算出する。
分散ハッシュテーブルとは複数のピアでハッシュテーブルを分散して管理する技術の事であり、ピアを本実施の形態ではクライアント装置に対応づけて解釈する。
分散ハッシュテーブルは分散管理されている以外はハッシュテーブルと機能面では同等であり、ある値をハッシュ関数を用いてある空間の点に射影し、その点をIDとして値に関連付けを行う。
この関連付けを行う事によってIDから値を検索する事が可能となる。
ハッシュ関数への入力値は異なる尺度の値でも構わず、それぞれの尺度の値同士の関連性を作り出すためにも用いる事が出来る。
そのため、分散ファイルシステムでどのファイルをどのノードで管理するかを決定するために分散ハッシュテーブルを用いてファイルとノードの関連性を作り出す事にも用いられる事がある。
本実施の形態では、リクエストとクライアント装置の通信時の識別情報となるネットワークIDをハッシュ関数の入力として扱い、各リクエストのIDと各クライアント装置のIDの関係に応じて、どのリクエストに対して、どのクライアント装置がサーバに発行するクライアント装置である代表クライアント装置になるか(どのクライアント装置に代表クライアントロールが割り当てられているか)を分散ハッシュテーブルを用いて決定する。
リクエストのIDの具体例としてURIが考えられる。
また、クライアント装置のネットワークIDの具体例として、そのクライアント装置のIP(Internet Protocol)アドレスやMAC(Media Access Control)アドレスが考えられる。
分散ハッシュテーブルはハッシュ関数を選択する事によって、代表クライアントロールを確率的に一様に各クライアント装置に振り分ける事が理論上可能となるため、ある特定のクライアント装置に多くの代表クライアントロールを割り当てる様なクライアント装置間の処理負荷の偏りを回避可能である。
図8に戻り、処理502では、代表クライアント判定部208は、リクエストIDとそのクライアント装置に対する分散ハッシュテーブル上のIDおよび分散ハッシュテーブル自身を用いて、そのクライアント装置自身が、サーバ装置にそのリクエストを発行するクライアント装置である代表クライアント装置となるかを判定する。
つまり、そのクライアント装置に、そのリクエストについて代表クライアントロールが割り当てられているかを判定する。
そのクライアント装置自身が代表クライアント装置である場合には処理503、そのクライアント装置ではない他のクライアント装置が代表クライアント装置である場合には処理505に処理を分岐する。
処理503では、クライアント装置自身が代表クライアント装置となるため、代表クライアント判定部208は、そのリクエストを代表クライアント処理部210に転送し、処理504で代表クライアント処理部210からリクエストに対応するレスポンスが返信されるまで待機を行う。
その後、レスポンスが返信された場合には処理507に遷移する。
一方で、処理505では、そのクライアント装置以外の他のクライアント装置が代表クライアント装置となるため、代表クライアント判定部208は、リクエストを分散ハッシュテーブルのアルゴリズムに従って他クライアント通信部209より他のクライアント装置に転送する。
この時、リクエストに加えて、クライアント装置自身の分散ハッシュテーブルに従って算出されたIDもしくはクライアント装置自身のネットワークIDなど、リクエストに対応するレスポンスを最終的にどのクライアント装置に返信すればよいかを判断できる情報を付加して転送する。
リクエストの転送後、処理506で、代表クライアント判定部208は、そのクライアント装置が転送したリクエストに対応するレスポンスが代表クライアント装置から返信されるまで待機する。
代表クライアント装置からのレスポンスの返信があった場合には処理507に遷移する。
処理507では、代表クライアント判定部208は、レスポンスに対応するリクエストの発行元クライアントが現在処理を行っているクライアント装置自身であるか判定を行う。
その結果、クライアント装置自身である場合には処理508に遷移し、サーバ装置105、もしくは代表クライアントからのレスポンスをリクエスト生成部207に返信する。
逆に、その結果がクライアント装置自身でない場合には、代表クライアント判定部208は、処理509で、リクエストの発行元のクライアント装置に向け分散ハッシュテーブルに従い、他のクライアント装置にレスポンスを転送する。
例えば、図8の処理を行っているクライアント装置がクライアント装置101であり、代表クライアント装置がクライアント装置103であり、リクエスト発行元のクライアント装置がクライアント装置104である場合は、クライアント装置101の代表クライアント判定部208は、クライアント装置102にレスポンスを転送する。
次に、処理505でリクエストを他のクライアント装置に転送した際の、リクエストの転送先となるクライアント装置の処理を図9を用いて説明する。
図9はリクエストの転送先となるクライアント装置の代表クライアント判定部208の処理フローである。
リクエストの転送を他クライアント通信部209で受けたクライアント装置は、代表クライアント判定部208にそのリクエストを転送する。
リクエストの転送を受けた代表クライアント判定部208は、処理601で、分散ハッシュテーブルを用い、そのリクエストのIDを算出する。
処理602では、代表クライアント判定部208は、リクエストIDとそのクライアント装置自身に対する分散ハッシュテーブル上のIDおよび分散ハッシュテーブル自身を用いて、そのクライアント装置自身が、代表クライアント装置となるかを判定する。
そのクライアント装置自身が代表クライアント装置である場合には処理603、そのクライアント装置ではない他のクライアント装置が代表クライアント装置である場合には処理605に処理を分岐する。
処理603では、クライアント装置自身が処理中のリクエストに対する代表クライアント装置となるため、代表クライアント判定部208は、そのリクエストを代表クライアント処理部210に転送し、処理604で、代表クライアント処理部210からリクエストに対応するレスポンスが返信されるまで待機を行う。
その後、レスポンスが返信された場合には処理606に遷移し、代表クライアント判定部208は、リクエスト発行元のクライアント装置に向け分散ハッシュテーブルに従い、他クライアント通信部209を介して、他のクライアント装置にレスポンスを転送する。
ただし、この時にリクエスト発行元のクライアント装置のネットワークIDが既知である場合には、分散ハッシュテーブルに従うことなく、直接リクエスト発行元のクライアント装置にレスポンスを返信しても構わない。
処理605では、クライアント装置自身は処理中のリクエストに対する代表クライアント装置ではないため、代表クライアント判定部208は、分散ハッシュテーブルに従い、他のクライアント装置にレスポンスを転送する。
処理605でリクエストを他のクライアント装置に転送した際の、リクエストの転送先となるクライアント装置の処理は図9で説明した通りの処理が行われ、システム内でリクエストに対応する代表クライアント装置に到達するまで、クライアント装置を渡り歩く形で、再帰的に処理が繰り返される。
次に、代表クライアント処理部210の処理を図10を用いて説明する。
リクエストを受けた代表クライアント処理部210は、処理701で、そのリクエストが安全であるかどうかを判定する。
リクエストが安全であるとは、そのリクエストをサーバ装置105が処理する事によってサーバ装置105の内部に変更が発生しない事を意味する。
例えば、HTTPではGETメソッドを用いたリクエストは指定したリソースの取得を行うメソッドであり、安全なリクエストであると言える。
一方で、POSTやPUTと言ったメソッドを用いたリクエストはサーバ装置105の内部に変更が発生する可能性があるため、安全でないリクエストとなる。
リクエストが安全である場合には処理702へ遷移し、安全でない場合には処理703に遷移する。
安全なリクエストの場合には、サーバ装置105に変更が発生しないため、もし代表クライアント装置となっているクライアント装置の内部に現在処理中のリクエストに対応するレスポンスが保存されている場合には、そのレスポンスを流用する事が出来る可能性がある。
そこで、処理702では、代表クライアント処理部210は、現在処理中のリクエストに対応するレスポンスが受信データ管理部211に保存されているかを判定する。
対応するレスポンスが受信データ管理部211に保存されている場合には処理706へ遷移し、保存されていない場合には処理703に遷移する。
処理706では、受信データ管理部211に対応するレスポンスが保存されている事が確認できている。
しかし、そのレスポンスを再利用して問題ないかの判定が行われていない状態である。そこで、レスポンスの有効期限が切れているか否かの判定を処理706で行う。
有効期限はHTTPであればレスポンスヘッダの中からExpiresレスポンスヘッダもしくはCache−Controlレスポンスヘッダのmax−ageを用いて判定する事が可能である。
Expiresレスポンスヘッダにはそのレスポンスの有効期限が値として記述されている。
その有効期限が現在日時と比較して過去であればそのレスポンスの有効期限は切れていると判定可能である。
Cache−Controlレスポンスヘッダのmax−ageにはそのレスポンスをキャッシュして構わない時間が値として記述されている。
レスポンスの受信時刻にmax−ageの時間を加算した結果と現在日時を比較し、過去であればそのレスポンスの有効期限は切れていると判定可能である。
処理706で有効期限が切れていると判定された場合には処理703に遷移し、有効期限が切れていないと判定された場合には処理707に遷移する。
なお、有効期限が切れていると判定された場合には、代表クライアント処理部210は、受信データ管理部211に対してリクエストに対応するエントリーを削除させても構わない。
なお、データの有効期限が存在しない場合、全てのレスポンスは変更されない場合、もしくは全てのレスポンスは常に更新されており、流用する事が出来ない様な場合には、処理706の処理はなくても構わない。
その場合、例えば全てのレスポンスが変更されない場合には、処理706への処理遷移は処理707への処理遷移に置き換えられる。
また、全てのレスポンスが常に更新されている場合には、処理706への処理遷移は処理703への処理遷移に置き換えられる。
処理707は、現在処理中のリクエストが安全でかつ有効期限が切れていない事が確認できている状態で処理が行われる。
この処理では、代表クライアント処理部210は、現在処理中のリクエストに対応するレスポンスを受信データ管理部211から取得する。
取得完了後に処理708に遷移する。
処理703は、現在処理中のリクエストに対応するレスポンスが代表クライアント装置であるクライアント装置が保持していたとしても、再利用する事が出来ない事が確認できている状態で行われる。
この処理では現在処理中のリクエストをサーバ通信部212を介して、サーバ装置105に発行する処理を行う。
リクエスト発行完了後、処理704に遷移する。
処理704は、発行したリクエストに対応するサーバからのレスポンスが返信されているまで待機する処理である。
レスポンスがサーバ装置105から返信された事をトリガーとして処理705に遷移する。
処理705では、サーバ装置105から受信したレスポンスが対応するリクエストが安全である場合には、代表クライアント処理部210は、そのレスポンスとそのリクエストを関連付けて受信データ管理部211に保存する。
受信データ管理部211ではリクエストとそのレスポンスを対応づけて保存しているため、処理702でリクエストをキーとしてレスポンスを存在するか確認する事が可能となっている。
保存完了後、処理708に遷移する。
処理708では、代表クライアント処理部210は、サーバ装置105もしくは受信データ管理部211から取得したレスポンスが対応するリクエストの発行元となるクライアント装置が自身であるか判定する。
判定の結果、リクエストの発行元がクライアント装置自身である場合には処理709に遷移し、代表クライアント判定部208にレスポンスを返信する。
リクエストの発行元がクライアント装置自身ではない場合には処理710に遷移し、代表クライアント処理部210は、リクエスト発行元のクライアント装置に向け分散ハッシュテーブルに従い、他クライアント通信部209を介して、他クライアント装置にレスポンスを転送する。
図11に受信データ管理部211でのリクエストとレスポンスの保存の具体例を示す。
この例では、HTTPに従ったリクエストとレスポンスを想定している。
リクエストではHTTPのリクエストのスタートライン、ヘッダ、ボディをリクエストとして保存し、対応するレスポンスに関しても同様にHTTPのレスポンスのスタートライン、ヘッダ、ボディを保存する。
この例では、同じ行のリクエストとレスポンスが対応づけられているとして表現している。
つまり、あるリクエストをキーとしてレスポンスを検索する場合、まずリクエスト列にキーとなるリクエストに合致するリクエストが存在するか検索し、あった場合にはそのリクエストと同じ行のレスポンスが検索すべきレスポンスとなる。
また、キーとなるリクエストとリクエスト列のリクエストを比較する場合にスタートライン、ヘッダ、ボディ全てが完全一致した場合、そのリクエスト同士は同一であるとする。
しかし、簡略化のためスタートライン中のURIのみの比較で行う事も可能である。
***効果の説明***
以上までで説明した本実施の形態におけるクライアント処理を行う事によって、複数のクライアント装置で同一のリクエストをサーバ装置105に発行する必要がある状況において、複数のクライアント装置の全てが同一のリクエストを独立に発行することなく、そのリクエストに対応する代表クライアント装置を一意に決定し、その代表クライアント装置のみがサーバ装置105に対してリクエストを発行する事が可能となる。
この時、リクエスト発行を代表クライアント装置のみに決定する処理にサーバ装置105が関与していない事が重要であり、代表クライアント装置を決めるための処理負荷がサーバ装置105の新たな負荷として発生しない事が一つの効果である。
また、代表クライアント装置を決定するに当たり、分散ハッシュテーブルを用い、公平な代表クライアント装置の決定アルゴリズムを実現する事が可能となっているため、クライアント装置がクライアント・サーバシステムへ参加したタイミングによって多くのリクエストに対する代表クライアント装置が一つのクライアント装置に偏って決定される不公平が理論上発生しない点ももう一つの効果である。
参加したタイミングによって代表クライアント装置が偏る不公平が発生する一つの理由として、リクエストを発行する前にクライアント装置間でリクエストに対応するレスポンスを保持しているクライアント装置の検索を行い、保持するクライアント装置がいない場合には、リクエストを発行するクライアント装置が代表クライアント装置となる方式が、考えられる。
この方式では、システムに最初に参加したクライアント装置の参加時刻とその次に参加したクライアント装置の参加時刻との間の時間幅が大きい場合、最初に参加したクライアント装置が多くのリクエストをサーバ装置105に出す事になり、必然的に最初に参加したクライアント装置が多くのリクエストの代表クライアント装置に決定されやすくなる。
しかし、分散ハッシュテーブルを用いた本実施の形態による方式では、同様の状況であっても、2番目に参加したクライアント装置が発生すると、分散ハッシュテーブルの機能を利用して、代表クライアント装置の再配分が行われる事になる。
そのため、最初に参加したクライアント装置に多くのリクエストに対応する代表クライアント装置が決定していたとしても、2番目のクライアント装置が参加する事によって、代表クライアント装置の受け持ち数を平準化させる事が可能となる。
このような効果を得るために用いられる具体的な分散ハッシュテーブルのアルゴリズムの一つとしてChordなどがあげられる。
Chordはネットワークに参加するクライアント装置が動的に増減しても、分散ハッシュテーブルの維持・管理が可能である。
実施の形態2.
以下では、実施の形態1に示したシステム構成において分散ハッシュテーブルとしてChordを用いた場合の具体例を説明する。
本実施の形態では、通信システム1000に新たなクライアント装置が参入する際の代表クライアントロールの引き継ぎ動作と、通信システム1000からクライアント装置が離脱する際の代表クライアントロールの引き継ぎ動作を説明する。
***構成の説明***
本実施の形態に係るサーバ装置105の構成例は、図2に示す通りであり、また、本実施の形態に係る各クライアント装置の構成例は、図3に示す通りである。
本実施の形態では、主に実施の形態1との差異を説明する。
本実施の形態で説明していない事項は、実施の形態1と同様である。
新たなクライアント装置が通信システム1000に参加する際には、新たなクライアント装置に代表クライアントロールを引き継ぐクライアント装置では、他クライアント通信部209が以下のように動作する。
新たなクライアント装置に割り当てられる代表クライアントロールが対象とするリクエストに対応するレスポンスが受信データ管理部211にキャッシュされている場合に、他クライアント通信部209は、受信データ管理部211にキャッシュされているレスポンスを、新たなクライアント装置に送信する。
新たなクライアント装置は、送信されたレスポンスを記憶する。
また、通信システム1000からクライアント装置が離脱する際には、残留するクライアント装置では、他クライアント通信部209が以下のように動作する。
通信システムから離脱する離脱クライアント装置に割り当てられている代表クライアントロールが対象とするリクエストに対応するレスポンスが離脱クライアント装置にキャッシュされている場合に、他クライアント通信部209は、キャッシュされているレスポンスを離脱クライアント装置から受信する。
そして、残留するクライアント装置では、離脱クライアント装置から受信したレスポンスを受信データ管理部211で保存する。
***動作の説明***
次に、本実施の形態に係るクライアント装置の動作例を図12及び図13を参照して説明する。
図12は、Chordを用いた本システムでのクライアント装置とリクエストとで構成する仮想空間を示す。
Chordでは、ノードとキーが同一の仮想空間上に配置される。
ノードとは実施の形態1のクライアント装置に対応し、キーとは実施の形態1のリクエストに対応する。
つまり、図12のノード902、903、904、905は、通信システム1000に参加しているクライアント装置101、102、103、104のいずれかに相当する。
ノードとキーの仮想空間上の配置の決定はハッシュ関数を用い、それぞれにIDを割り振り、そのIDの位置に配置する。
図12は、複数のノードとキーが仮想空間上に配置されている一例を図示している。
仮想空間901上にノード902、903、904、905とキー906、907、908、909、910、911、912がハッシュ関数によってそれぞれ求められたIDの位置に配置されている。
Chordではキーおよびそのキーに対応するデータの管理はノードが行う。
どのノードがどのキーおよびそのキーに対応するデータを管理するかの決定方法は以下の通りである。
あるノードとそのノードが仮想空間上で右回りで隣接するノードとの間に存在するキーおよびそのキーに対応するデータをそのノードが管理する。
例えば、ノード903は右回りで隣接するノード902の間にはキー906、907が存在する。
よって、ノード903はキー906、907およびそれらに対応するデータの管理を行う。
同様に、ノード904はキー908、909、910およびそれらに対応するデータの管理を行う。
図12に基づいて、本実施の形態における代表クライアント装置とリクエストとの関係を説明する。
前述の通り、ノードはクライアント装置、キーはリクエストに対応する。
Chordでは、キーおよびキーに対応するデータの管理をノードで行うが、そのキーに対応するデータとして、本実施の形態では少なくとも以下のものが対応する。
・リクエストによって取得されるレスポンス
・リクエストの発行元のクライアント装置のリスト
よってノード904に対応するクライアント装置はキー908、909、910に対応するリクエストの代表クライアント装置である事を意味する。
そのため、ノード904以外のノードに対応するクライアント装置が例えばキー908に対応するリクエストのレスポンスを取得するためには、そのリクエストをノード904に対応するクライアント装置に転送し、ノード904に対応するクライアント装置からレスポンスを入手する。
次に、図13を用いて新規にクライアント装置が通信システム1000に参加した場合の挙動を説明する。
図13は、図12の状態の仮想空間に対してノード1001に対応するクライアント装置が新規に参加した状況を示す。
この場合は、ノード1001に対応するクライアント装置はキー906に対応するリクエストの代表クライアント装置とならなければならない。
Chordでは新規参加ノードが仮想空間に参加した場合、新規参加ノードの前後のノードと通信を行い、状態更新を行う。
その際に、新規参加ノードに対応するクライアント装置は、代表クライアント装置を担当すべきリクエストおよびその関連データ(レスポンス、リクエスト発行元のクライアント装置のリスト)を参加前の代表クライアント装置から受け取る。
ノード1001に対応するクライアント装置の参加前の代表クライアント装置は、ノード903に対応するクライアント装置である。
このため、ノード1001に対応するクライアント装置は、ノード903に対応するクライアント装置からキー906に対応するリクエストおよび関連データを引継ぐ必要がある。
この時、引継ぎ元のクライアント装置からリクエストおよび関連データを引き継ぎ先のクライアント装置に引継ぐ際、引継ぎ元のクライアント装置がレスポンスをサーバ装置105から受信中の場合には、受信完了を待ってから引継ぎ処理を開始する。
受信完了を待つ事によって、不完全なレスポンスが引継がれる事を回避できる。
次に、図13の状態からノード1001に対応するクライアント装置が通信システム1000から離脱した場合の挙動を例にクライアント装置の離脱時の処理を説明する。
なお、この離脱が完了すると図12の状態に戻る事を意味する。
ノード1001に対応するクライアント装置が離脱した場合、そのクライアント装置が代表クライアント装置を担当していたキー906に対応するリクエストの代表クライアントを引き続きシステムに残るクライアント装置に引継ぐ必要がある。
Chordを用いた場合には、代表クライアントを引継ぐクライアント装置はノード903に対応するクライアント装置となる。
そこで、ノード1001に対応するクライアントは、離脱する前に、自身が代表クライアント装置を担当するリクエストおよび関連データをノード903に対応するクライアント装置に引継ぐ。
この時、新規参加と同様にサーバ装置105からレスポンスを受信している場合は、レスポンスの受信完了を待ってからノード903に対応するクライアント装置に引継ぐ。
***効果の説明***
本実施の形態によれば、システムに対するクライアント装置の参加、離脱が発生した場合であっても、適切な代表クライアント装置の引継ぎが可能となる。
実施の形態3.
本実施の形態では、通信システム1000からのクライアント装置の離脱に関する手順を更に説明する。
あるクライアント装置のシステム離脱は大きく分けて、クライアント装置として計画した離脱と、主に不正処理による強制終了などを要因とした計画していない離脱に分けられる。
計画した離脱の場合には実施の形態2に前述した通りの手順にて分散ハッシュテーブルを用いる事で代表クライアントロールの引継ぎが適切に行えるが、計画していない離脱の場合には、代表クライアントロールの引継ぎを前述の手順で行えない。
本実施の形態では、計画していないクライアント装置の離脱に対応する手順を説明する。
***構成の説明***
本実施の形態に係るサーバ装置105の構成例は、図2に示す通りであり、また、本実施の形態に係る各クライアント装置の構成例は、図3に示す通りである。
本実施の形態では、主に実施の形態1、2との差異を説明する。
本実施の形態で説明していない事項は、実施の形態1、2と同様である。
本実施の形態では、代表クライアント処理部210が、自装置が通信システム1000から離脱した後に自装置に代わって動作する予備代表クライアント装置(以下、単に予備代表クライアントともいう)を他のクライアント装置の中から選択し、サーバ装置105に送信するリクエストに予備代表クライアント装置の識別子を追加する。
そして、サーバ通信部212は、代表クライアント処理部210により予備代表クライアント装置の識別子が追加されたリクエストをサーバ装置105に送信する。
サーバ装置105では、通信部213が、リクエスト発行元のクライアント装置にレスポンスを送信できない場合に、予備代表クライアント装置にレスポンスを送信する。
***動作の説明***
次に、本実施の形態に係る代表クライアント処理部210の動作例を図14を用いて説明する。
図14は、図10で示した代表クライアント処理部210の処理を拡張した処理フロー図であり、図10に対して処理1101、1102が追加されている。
以下では、追加処理に関連する部分のみを説明する。
処理1101は、代表クライアント装置として、サーバ装置105にリクエストを送信する事が決定した時に最初に処理される処理である。
そのため、処理702でレスポンスが受信データ管理部211に保存されていない事が判明した場合、および処理706で受信データ管理部211に保存される対応するレスポンスの有効期限が切れている事が判明した場合に、処理1101に遷移する。
処理1101では、この処理を行っているクライアント装置が処理704でサーバ装置105からのレスポンスの返信待機中に計画していない離脱を余儀なくされた場合に、処理中の代表クライアントの処理を引継ぐクライアント装置である予備代表クライアント装置の探索を行う。
具体的にはその時点の分散ハッシュテーブルにて、代表クライアント装置が離脱した場合に、その代表クライアント装置が担当する全てのリクエスト及びレスポンスの処理を引継ぐクライアント装置を予備代表クライアント装置として決定する。
分散ハッシュテーブルとしてChordを用いている場合であれば、その代表クライアントの時計回りに隣接するノードに対応するクライアント装置となる。
次に、処理1102では、代表クライアント処理部210が、処理1101で決定した予備代表クライアントの情報をリクエストに結合する。
図15は予備代表クライアントの情報をHTTPリクエストに結合した一つの例である。
図15では、予備代表クライアントの情報をHTTP Headerとして結合している。
具体的にはX−Representative−Client−AddressヘッダとX−Requestor−Client−Addresses−Listヘッダである。
X−Representative−Client−Addressヘッダには予備代表クライアントのネットワークIDを値として設定し、X−Requestor−Client−Addresses−Listヘッダにはこのリクエストのリクエスト元のクライアントのネットワークIDのリストを値として設定している。
なお、ヘッダ名は一つの例であり、ヘッダ名が異なる場合であっても、本質的な違いはない。
また、図16は予備代表クライアントの情報をHTTPリクエストに結合したもう一つの例である。
図16では、予備代表クライアントの情報をHTTP Request Bodyとして結合している。
具体的には予備代表クライアントの情報をJSON形式で表現しており、Representativeプロパティに予備代表クライアントのネットワークIDを値として設定し、Requestorsプロパティにこのリクエストのリクエスト元のクライアントのネットワークIDのリストを値として設定している。
なお、予備代表クライアントは唯一とする必要はなく、予備代表クライアントも離脱している場合を想定して、その先の予備代表クライアントも含めて複数の予備代表クライアントをサーバ装置105に送信するとしても構わない。
その場合には、予備代表クライアントのネットワークIDはリストとしてサーバ装置105に送信される事になる。
次に、図17を用いて予備代表クライアントの情報を用いたサーバ処理を説明する。
なお、説明を簡単化するため本サーバの処理フローはシングルスレッドで動作する事を前提としているが、マルチスレッドでの動作で動作するサーバでも構わない。
処理1401で、サーバ装置105はクライアント装置からリクエストが送信されるのを待機する。
クライアント装置からリクエストが送信されてくると処理1402に遷移する。
処理1402では、通信部213が、送信されてきたリクエストを受信し、メモリ上に展開する。
処理1403では、要求処理部214が、メモリ上に展開したリクエストを解析し、内容を解釈可能な状態にする。
処理1404で、要求処理部214が、そのリクエストに記述されている内容に従った処理を実施する。
その処理内容についてはリクエストに依存するため、ここでは言及しない。
処理1405では、要求処理部214が、処理1404で処理した結果、クライアントに通知すべき内容をレスポンスとして生成する。
処理1406では、通信部213が、処理1405で生成したレスポンスをリクエストを送信してきたクライアント装置に送信する。
処理1407では、要求処理部214が、処理1406での送信処理が正常に完了したかを判定し、正常に完了した場合には処理1401に遷移し、他のクライアント装置からのリクエスト送信に備えて待機を行う。
逆に正常に完了しなかった場合は、処理1408に遷移する。
処理1408では、クライアント装置に正常にレスポンスを返信できなかったため、サーバ装置105では、要求処理部214が、処理1403でリクエストを解析した結果から未処理の予備代表クライアントの情報のうちの一つの取得を試みる。
処理1409では、要求処理部214が、処理1408の結果、未処理である予備代表クライアントの情報の取得に成功したかを判定する。
取得に成功した場合には処理1410に遷移し、失敗した場合には、これ以上予備代表クライアントの情報はないため、今回の処理はエラー終了として結果を破棄し処理1401に遷移する。
処理1410では、通信部213が、処理1408で取得した未処理である予備代表クライアントの情報に記載されている予備代表クライアントのネットワークIDを取得し、そのネットワークIDの相手に対してレスポンスの送信を試みる。
ここでの送信ではHTTPの様にクライアントからのリクエストを起点とするプロトコルは用いる事ができないため、例えばWebSocketやServer−Sent Eventsなどのサーバを起点とする事が可能なプロトコルを用いる。
処理1411では、要求処理部214が、処理1410での送信処理が正常に完了したかを判定し、正常に完了した場合には処理1401に遷移し、他のクライアント装置からのリクエスト送信に備えて待機を行う。
逆に正常に完了しなかった場合は、処理1408に遷移し、残る未処理である予備代表クライアントの情報を用いた送信処理を繰り返す。
***効果の説明***
本実施の形態によれば、代表クライアント装置に計画外の離脱が発生した場合であっても、予備代表クライアント装置により、リクエスト発行元に確実にレスポンスを返すことができる。
実施の形態4.
クライアント・サーバシステムにおいて、サーバ装置はクライアント装置の要求に必ず即時にレスポンスを返信するとは限らない。
例えば、要求に対応するサーバ処理に非常に時間がかかる場合、サーバ装置の都合に応じてレスポンスの返信タイミングが遅延する場合が想定され、その場合には時間をおいてクライアント装置にレスポンスが返信される事になる。
複数のクライアント装置から同一のリクエストが発生している状況でサーバ装置からのレスポンスが遅延した場合に、マルチキャスト配信ができないシステムでは、そのリクエストの代表クライアント装置はレスポンスの受信後に、全てのリクエスト発行元のクライアント装置に順次レスポンスを返信しなければならない。
このような場合は、代表クライアント装置の返信負荷が一時期に集中してしまう。
また、最初にレスポンスが返信されるリクエスト発行元のクライアント装置と最後にレスポンスが返信されるリクエスト発行元のクライアント装置では、レスポンスを受信するタイミングに差異が生じる。
リクエスト発行元のクライアント装置が多いほど、この差異は大きくなる。
本実施の形態は、これらの事情に鑑みたものである。
***構成の説明***
本実施の形態に係るサーバ装置105の構成例は、図2に示す通りであり、また、本実施の形態に係る各クライアント装置の構成例は、図3に示す通りである。
本実施の形態では、主に実施の形態1との差異を説明する。
本実施の形態で説明していない事項は、実施の形態1と同様である。
本実施の形態では、代表クライアント処理部210は、2以上のクライアント装置で生成された同一のリクエストが取得リクエストとして取得され、当該取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、リクエスト生成元の2以上のクライアント装置のうちのいずれかのクライアント装置を、自装置と協働する代表クライアントクローン装置(以下、単に代表クライアントクローンともいう)に指定する。
より具体的には、代表クライアント処理部210は、取得リクエストのリクエスト生成元のクライアント装置の個数が閾値を超える場合に、代表クライアントクローン装置を指定する。
他クライアント通信部209は、代表クライアントクローン装置に指定されたクライアント装置に対して、代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信する。
また、他クライアント通信部209は、取得リクエストに対応するレスポンスを、代表クライアントクローン装置に送信し、代表クライアントクローン装置から、通知メッセージで通知した送信先のクライアント装置にレスポンスを送信させる。
他クライアント通信部209は、代表クライアントクローン装置がレスポンスを送信するクライアント装置には、レスポンスを送信しない。
また、代表クライアントクローン装置に指定されたクライアント装置では、他クライアント通信部209が、他のクライアント装置から通知メッセージを受信する。
通知メッセージでは、前述のように、代表クライアントクローン装置に指定された旨が通知されるとともに、レスポンスの送信先のクライアント装置が通知される。
他クライアント通信部209は、通知メッセージを受信した後に、他のクライアント装置からレスポンスを受信した場合に、受信したレスポンスを、通知メッセージで通知された送信先のクライアント装置に送信する。
また、代表クライアントクローン装置に指定されたクライアント装置では、代表クライアント処理部210は、通知メッセージで通知された送信先のクライアント装置の個数が2以上であり、当該個数が閾値以上である場合に、2以上のクライアント装置のうちのいずれかのクライアント装置を、新たな代表クライアントクローン装置に指定する。
そして、他クライアント通信部209が、新たな代表クライアントクローン装置に指定されたクライアント装置に対して、代表クライアントクローン装置に指定された旨を通知するとともに、2以上のクライアント装置のうち新たな代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信する。
そして、他クライアント通信部209は、他のクライアント装置からレスポンスを受信した場合に、受信したレスポンスを、新たな代表クライアントクローン装置に送信し、新たな代表クライアントクローン装置から、新たな代表クライアントクローン装置への通知メッセージで通知した送信先のクライアント装置にレスポンスを送信させる。
他クライアント通信部209は、新たな代表クライアントクローン装置がレスポンスを送信するクライアント装置には、レスポンスを送信しない。
***動作の説明***
図22〜図28を用いて、本実施の形態に係るクライアント装置の動作の概略を説明する。
図22〜図28において、あるリクエストに対する代表クライアント装置をクライアント0とし、代表クライアント装置を丸図形で表現する。
また、図22〜図28では、代表クライアント装置に対するリクエストの発行元となるクライアント装置は正方形で表現する。
また、図22〜図28では、代表クライアントクローン装置となるクライアント装置は六角形で表現する。
また、図22〜図28において、番号0〜7は、クライアント装置のID番号である。
また、代表クライアントおよび代表クライアントクローンがレスポンスを返信する担当となるクライアントの図形に対しては矢印が伸びる事で表現する。
例えば、図22は、代表クライアント0はリクエスト発行元クライアント1にレスポンスを返信する担当である事を意味する。
以下では、代表クライアントクローンを指定するための閾値をN=3として説明を進める。
つまり、同一のリクエストが3つのクライアントで発行された場合には、代表クライアント装置の代表クライアント処理部210は、当該3つのクライアントの中から代表クライアントクローンを指定する。
同様に、代表クライアントクローンの代表クライアント処理部210は、代表クライアントから、3つのクライアントへのレスポンスの送信が要求された場合に、当該3つのクライアントの中から新たな代表クライアントクローンを指定する。
図22に示す通り、最初にクライアント1がリクエストを発行した際には、代表クライアント0がリクエストの処理を担当する。
次に、クライアント2がリクエストを発行した際にも同様に代表クライアント0がリクエストの処理を担当し、図23の通りとなる。
次に、クライアント3がリクエストを発行した際は、閾値N=3に達するため、代表クライアント0の代表クライアント処理部210は、例えばクライアント1をクライアント3に対する代表クライアントクローンに指定する。
そして、代表クライアント0の他クライアント通信部209が、クライアント1に通知メッセージ(以下、代表クライアントクローン要求という)を送信する。
代表クライアントクローン要求では、クライアント1が代表クライアントクローンに指定された旨と、クライアント3にレスポンスを送信する旨が通知される。
この結果、図24の通り、クライアント1がクライアント3を担当する代表クライアントクローンとなる。
次に、クライアント4がリクエストを発行した際は、閾値N=3に達しているので、代表クライアント0の代表クライアント処理部210は、例えばクライアント2をクライアント4に対する代表クライアントクローンに指定する。
そして、代表クライアント0の他クライアント通信部209が、クライアント2に代表クライアントクローン要求を送信する。
この代表クライアントクローン要求では、クライアント2が代表クライアントクローンに指定された旨と、クライアント4にレスポンスを送信する旨が通知される。
この結果、図25の通り、クライアント2がクライアント4を担当する代表クライアントクローンとなる。
次に、クライアント5がリクエストを発行した際は、閾値N=3に達しているので、代表クライアント0の代表クライアント処理部210は、例えばクライアント1をクライアント5に対する代表クライアントクローンに指定する。
そして、代表クライアント0の他クライアント通信部209が、クライアント1に代表クライアントクローン要求を送信する。
この代表クライアントクローン要求では、クライアント1が代表クライアントクローンに指定された旨と、クライアント5にレスポンスを送信する旨が通知される。
この結果、図26の通り、クライアント1がクライアント3とクライアント5を担当する代表クライアントクローンとなる。
次に、クライアント6がリクエストを発行した際は、閾値N=3に達しているので、代表クライアント0の代表クライアント処理部210は、例えばクライアント2をクライアント6に対する代表クライアントクローンに指定する。
そして、代表クライアント0の他クライアント通信部209が、クライアント2に代表クライアントクローン要求を送信する。
この代表クライアントクローン要求では、クライアント2が代表クライアントクローンに指定された旨と、クライアント6にレスポンスを送信する旨が通知される。
この結果、図27の通り、クライアント2がクライアント4とクライアント6を担当する代表クライアントクローンとなる。
次に、クライアント7がリクエストを発行した際は、閾値N=3に達しているので、代表クライアント0の代表クライアント処理部210は、例えばクライアント1をクライアント7に対する代表クライアントクローンに指定する。
そして、代表クライアント0の他クライアント通信部209が、クライアント1に代表クライアントクローン要求を送信する。
しかし、代表クライアントクローン1でも閾値N=3に達する。
このため、代表クライアントクローン1の代表クライアント処理部210は、例えば、クライアント3をクライアント7に対する代表クライアントクローンとして新たに指定する。
そして、代表クライアントクローン1の他クライアント通信部209が、クライアント3に代表クライアントクローン要求を送信する。
この代表クライアントクローン要求では、クライアント3が代表クライアントクローンに指定された旨と、クライアント7にレスポンスを送信する旨が通知される。
この結果、図27の通り、クライアント3がクライアント7を担当する新たな代表クライアントクローンとなる。
次に、図18、図19、図20を用いて本実施の形態における代表クライアント処理部210の処理フローを説明する。
図18、図19、図20は、図10で示した代表クライアント処理部210の処理フローを拡張した処理フローであり、図10に対して処理1501〜1509の処理が追加されている。
以下では、追加処理に関連する部分のみを説明する。
また、本実施の形態では、代表クライアント処理部210はリクエストと、そのリクエスト発行元のリストを管理する。
図21にリクエストとリクエスト発行元のリスト管理の一例を示す。
図21に示すリストでは、リクエスト一つに対して複数のリクエスト発行元の情報を管理する事が可能となっている。
リクエスト発行元の情報には、少なくともリクエスト発行元のネットワークIDなどの対応するレスポンスを各リクエスト発行元に通信にて転送する事が可能な情報が含まれている。
この例では、「GET http://xxx/api/monitor_interval/ 」リクエストに対してリクエスト発行元は「192.168.0.1」、「192.168.0.2」、「192.168.0.3」の合計3個が登録されている。
また、「GET http://xxx/html/Monitor.html」リクエストに対してリクエスト発行元は「192.168.0.5」、「192.168.0.2」、「192.168.0.6」、「192.168.0.8」の合計4個が登録されている。
図18に戻り、代表クライアント処理部210は、処理1501によって、転送されたリクエストに対応するレスポンスを取得出来るのを待機している他のクライアントが存在するかを確認する。
例えば確認はリクエストとリクエスト発行元のリストで現在処理中のリストが存在する場合には、他のクライアントが存在すると確認可能である。
他のクライアントが存在しない場合には処理701に遷移し、存在する場合には処理1502に遷移する。
処理701にてリクエストが安全でない場合には処理703ではなく処理1507に遷移する処理が異なっている。
同様に、処理702で保存されていない場合の遷移先が処理703ではなく処理1507に変更されている。
なお、処理701で行っているリクエストが安全でない場合の処理については、リクエストの発行元となるクライアントがリクエストを処理する際に判定し、安全でない場合には、本処理を実施せず、リクエスト発行元のクライアントが直接サーバにリクエストを発行するとしても構わない。
その様な挙動にする事によって、リクエストの転送分の通信処理を削減可能である。
処理1507では、代表クライアント処理部210は、現在処理中のリクエストに対応するエントリーがリクエストとリクエスト発行元のリスト(図21)に存在していないため、そのエントリーを作成し、そのエントリーのリクエスト発行元として現在処理中のリクエスト発行元を登録する。
登録完了後、処理703に遷移する。
また、処理705および処理707の遷移先が処理708から処理1508に変更となっている。
処理1508では、代表クライアント処理部210は、処理中のリクエストに対応するレスポンスの転送先となる未処理のリクエスト発行元クライアントがリクエスト発行元のリスト(図21)に存在するかを判定する。
存在しない場合には処理を完了し、存在する場合には処理1509に遷移し、代表クライアント処理部210は、その未処理リクエスト発行元を取得して、処理708に遷移する。
その後の処理として処理709および処理710の遷移先が終了ではなく、処理1508となり、全ての未処理のリクエスト発行元に対してレスポンスを返信するまで処理を繰り返す。
処理1502では、現在処理中のリクエストに対するリクエスト発行元が存在している状態であり、代表クライアント処理部210は、リクエストとリクエスト発行元のリスト(図21)のそのリクエストに対応するエントリーのリクエスト発行元に現在処理中のリクエスト発行元を追加登録する。
処理1503では、代表クライアント処理部210は、同一リクエストに対するリクエスト発行元の個数が閾値となるN個以上あるかを判定する。
その判定の結果、N個未満である場合には処理を終了する。
一方で、N個以上存在する場合には処理1504に遷移する。
なお、閾値Nは固定値として与えてもよいし、ネットワークやクライアントの処理負荷状況などを考慮して動的に変更される値として与えてもよいが、(N−1)は単一の代表クライアントがある単一のリクエストに対するレスポンスをそのリクエスト発行元となるクライアントに転送する処理の繰返し最大回数を意味する。
処理1504では、代表クライアント処理部210は、現在処理中のリクエストに対する全てのリクエスト発行元の中から代表クライアントクローンを決定する。
この時に代表クライアントクローンを唯一に決めてもよいし、複数個決めても構わない。
ただし、複数個に決めた場合、処理1505および処理1506はその個数分だけ繰り返される事になる。
処理1505では、代表クライアント処理部210は、処理1504で決定した各代表クライアントクローンがレスポンスの転送を担当するリクエスト発行元クライアントを決定する。
処理1506では、他クライアント通信部209が、処理1505で決定した担当するリクエスト発行元クライアントに関する情報とリクエスト情報を持たせた代表クライアントクローン要求を代表クライアントクローンに対して送付し、処理を完了する。
次に、図29及び図30を用いて代表クライアントクローン要求を受信した際の代表クライアント処理部210の処理フローを説明する。
処理2401では、代表クライアント処理部210は、代表クライアントクローン要求から代表クライアントクローンになる事を要求されている対応するリクエストの情報を取得する。
処理2402では、代表クライアント処理部210は、処理2401で取得したリクエストに対応するエントリーがリクエストとリクエスト発行元のリスト(図21)に存在するかを判定する。
エントリーが存在した場合には処理2404、存在しない場合には処理2403に遷移する。
処理2403では、代表クライアント処理部210は、リクエストとリクエスト発行元のリスト(図21)に現在処理中のリクエストに対応するエントリーを新規作成し、処理2404に遷移する。
処理2404では、代表クライアント処理部210は、リクエストとリクエスト発行元のリスト(図21)の現在処理中のリクエストに対応するエントリーに代表クライアントクローン要求に記載されている担当するリクエスト発行元クライアントに関する情報に記載の全てのリクエスト発行元を追加する。
処理2405では、代表クライアント処理部210は、同一リクエストに対するリクエスト発行元の個数が閾値となるN個以上あるかを判定する。
その判定の結果、N個未満である場合には処理2409に遷移する。
一方で、N個以上存在する場合には処理2406に遷移する。
なお、閾値Nは固定値として与えてもよいし、ネットワークやクライアントの処理負荷状況などを考慮して動的に変更される値として与えてもよいが、(N−1)は単一の代表クライアントクローンがある単一のリクエストに対するレスポンスをそのリクエスト発行元となるクライアントに転送する処理の繰返し最大回数を意味する。
処理2406では、代表クライアント処理部210は、現在処理中のリクエストに対する全てのリクエスト発行元の中から代表クライアントクローンを決定する。
この時に代表クライアントクローンを唯一に決めてもよいし、複数個決めても構わない。
ただし、複数個に決めた場合、処理2407および処理2408はその個数分だけ繰り返される事になる。
処理2407では、代表クライアント処理部210は、処理2406で決定した各代表クライアントクローンがレスポンスの返信を担当するリクエスト発行元クライアントを決定する。
処理2408では、他クライアント通信部209は、処理2407で決定した担当するリクエスト発行元に関する情報とリクエスト情報を持たせた代表クライアントクローン要求を代表クライアントクローンに対して送付し、処理2409に遷移する。
処理2409では、代表クライアントもしくは他の代表クライアントクローンから処理中のリクエストに対応するレスポンスが送信されるまで待機する。
処理中のリクエストに対応するレスポンスが送信されてきた場合には処理1508に遷移する。
それ以降の処理は図18、図19、図20を用いて説明した処理と同一であるため、説明は省略する。
***効果の説明***
以上の処理を行う事で、単一リクエストに対して多数のリクエスト発行元が待機状態となった場合に、レスポンスのリクエスト発行元への転送処理を代表クライアントクローンに分散して処理する事が可能となり、単一の代表クライアントの処理負荷が高くなることなく、全てのリクエスト発行元に対して転送し終わるまでの処理時間を短縮する事が可能となる。
図22〜図28を用いて本実施の形態の具体的な効果を説明する。
図22〜図28に示すように、クライアント1〜クライアント7から同一のリクエストが発生した場合を想定する。
この時、代表クライアントクローンを設定しない場合、代表クライアント0が全てのリクエスト発行元クライアントに対して順次レスポンスを返信するため、返信処理は7回実施される。
また、返信処理時間が一定と仮定し、その時間をTとして表現すると、最後に返信されるクライアントレスポンスは7Tだけの遅延が発生する事になる。
一方で、閾値N=3として代表クライアントクローンを設定した場合は、代表クライアントおよび各代表クライアントクローンのレスポンスの返信処理回数は高々2回である。
つまり、代表クライアント0は、代表クライアントクローン1と代表クライアントクローン2にのみレスポンスを返信すればよい。
代表クライアントクローン1は、代表クライアントクローン3とクライアント5にのみレスポンスを返信すればよい。
代表クライアントクローン2は、クライアント4とクライアント6にのみレスポンスを返信すればよい。
代表クライアントクローン3は、クライアント7にのみレスポンスを返信すればよい。
このように、代表クライアントクローンを設定しない場合と比べると代表クライアントの負荷の偏りがない事が分かる。
また、図28において返信処理を左側の矢印を右側の矢印よりも先に処理するとした場合、最後に返信されるクライアントはクライアント6である。
クライアント0→クライアント1、クライアント0→クライアント2、クライアント2→クライアント4、クライアント2→クライアント6という順序でレスポンスが返信される。
このため、クライアント6での遅延時間は4Tとなり、代表クライアントクローンを設定しない場合と比べると3Tだけ短縮される事が分かる。
実施の形態5.
一般的にクライアント装置からサーバ装置105に発行するリクエストにはパラメータを付加する事がある。
例えばURIであれば「?」記号の後にパラメータの名前と値の間に「=」記号を挟む形でパラメータを付加する事がある。
例えば、図6に記載のリクエスト例の一つである「POST http://xxx/api/monitor_interval/?val=5」における「val=5」がパラメータであり、名前が「val」のパラメータの値として「5」を指定している。
また、複数のパラメータを付加する場合には、各パラメータ間を「&」記号で区切って連結する事がある。
例えば、「http://xxx/api/monitor_interval/?val=5&target=temperature」の場合には名前が「val」のパラメータの値として「5」を、名前が「target」のパラメータの値として「temperature」を指定している。
これらパラメータを記述する「?」記号の後の文字列をクエリー部と呼ぶ事にする。
クエリー部には、サーバ装置105での検索の対象となる検索条件式が定義される。
ここまでに例示したパラメータでは具体的な値を指定しているが、パラメータ自体の解釈として値の集合や範囲を指定する事も可能である。
例えば、「http://xxx/api/user?height=160|170|180」は、パラメータ「height」の値が「160」もしくは「170」もしくは「180」を指定すると解釈させる事も可能である。
また、例えば「http://xxx/api/user?height_gt=160」はパラメータ「height_gt」の値が「160」と言う意味になるが、パラメータ「height_gt」はパラメータ「height」の値が「height_gt」の値より大きい(gt=Greater Than)事を示すパラメータと解釈させる事で、最終的にパラメータ「height」の値が「160」より大きい値と言う範囲を指定する事も可能となる。
URIのクエリー部は前述の例の様な表現に限定されるものではなく、同じ内容を別の書式にて表現しても構わない。
また、説明を単純化するため、本実施の形態ではURIのクエリー部のみを例として説明するが、URIのクエリー部でパラメータを表現しなくとも、HTTPのPOSTメソッドのリクエストボディ部に同様にパラメータを指定する方法でも構わない。
上記の説明の通り、リクエストにパラメータが与えられる事を想定した場合、リクエストからURIのクエリー部を除外した内容は同一だが、クエリー部のみが異なるリクエストが発生する事が考えられる。
例えば、
http://xxx/api/user?height_gt=160
http://xxx/api/user?height_gt=170
の2つのURIを例に挙げて考えると、それぞれ別のリクエストとして処理する事になるが、実際には、
http://xxx/api/user?height_gt=160
に関するリクエストのみをサーバに発行し、得られたレスポンスから
http://xxx/api/user?height_gt=170
に適合するレスポンスのみを代表クライアントで抽出可能な場合がある。
具体的にはレスポンスのデータ群それぞれがプロパティ「height」の値を持っている場合などが挙げられるが、それはシステム開発時にレスポンスのデータ構造を決定する時点で明らかとなる。
その場合には、上記2種類のリクエストに対して、サーバ装置105には1種類のリクエストを発行するのみで、2種類のリクエストに対するレスポンスを得る事が可能となる。
以上を考慮して更なるサーバ負荷軽減を実現するための実施の形態を説明する。
***構成の説明***
本実施の形態に係るサーバ装置105の構成例は、図2に示す通りであり、また、本実施の形態に係る各クライアント装置の構成例は、図3に示す通りである。
本実施の形態では、主に実施の形態1との差異を説明する。
本実施の形態で説明していない事項は、実施の形態1と同様である。
本実施の形態では、取得リクエストについての代表クライアントロールが自装置に割り当てられており、取得リクエストに対応するレスポンスが受信データ管理部211にキャッシュされておらず、取得リクエストに検索条件式が含まれ、当該検索条件式で得られる検索結果よりも広範な検索結果が得られる広範検索条件式に当該検索条件式を変換可能である場合に、代表クライアント処理部210は、検索条件式を広範検索条件式に変換する。
例えば、取得リクエストが前述の「http://xxx/api/user?height_gt=170」である場合に、クエリー部に含まれる検索条件式「height_gt=170」は、より広範な検索結果が得られる「height_gt=160」という検索条件式に変換可能である。
このため、代表クライアント処理部210は、クエリー部の「height_gt=170」という検索条件式を「height_gt=160」という広範検索条件式に変換する。
サーバ通信部212は、代表クライアント処理部210により変換された広範検索条件式が含まれるリクエストをサーバ装置105に送信する。
前述の例では、サーバ通信部212は、「http://xxx/api/user?height_gt=160」をサーバ装置105に送信する。
***動作の説明***
図31を用いて、本実施の形態におけるリクエスト生成元のクライアント装置の代表クライアント判定部208の処理フローを説明する。
図31は、図8で示した代表クライアント判定部208の処理フローを拡張した処理フローであり、図8に対して処理2501〜2503の処理が追加されている。
追加処理に関連する部分のみを説明する。
処理2501では、代表クライアント判定部208は、転送されたリクエストにクエリー部があるかを判定する。
判定にはURIに「?」が存在するかどうかを条件として利用可能である。
クエリー部がある場合には処理2502へ遷移し、クエリー部がない場合は、これまでの実施の形態と同様の処理可能であるため処理501に遷移する。
処理2502では、代表クライアント判定部208は、処理中のリクエストのクエリー部をクエリー部の内容のみ異なる同一のリクエストと論理和構成したリクエストでレスポンスを取得した際に、各クエリー部に対応するレスポンスに分離可能か判定する。
この判定には前述の通り、例えばシステム開発時にクエリーを含まないリクエストに対して論理和構成可能かが決定するため、その可否情報をテーブルとしてデータ化し、そのテーブルに基づいて判定する方法が考えられる。
論理和構成可能である場合には処理2503に遷移し、論理和構成不可能である場合には処理501に遷移する。
処理2503では、クエリー部を論理和構成可能なリクエストに対するリクエストのID算出処理を行う。
ID算出のキーとして少なくともリクエストからクエリー部の情報を除去した結果をキーとして算出する。
ID算出完了後、処理502に遷移する。
それ以降の処理は前述の通りであり説明は省略する。
次に、処理505でリクエストを他クライアント装置に転送した際の、リクエストの転送先となるクライアント装置の処理を図32を用いて説明する。
図32はリクエストの転送先となるクライアントの代表クライアント判定部208の処理フローである。
図32は、図9で示した代表クライアント判定部208の処理フローを拡張した処理フローであり、図9に対して処理2601〜2603の処理が追加されている。
追加処理に関連する部分のみを説明する。
処理2601では、代表クライアント判定部208は、転送されたリクエストにクエリー部があるかを判定する。
判定にはURIに「?」が存在するかどうかを条件として利用可能である。
クエリー部がある場合には処理2602へ遷移し、クエリー部がない場合は、これまでの実施の形態と同様の処理が可能であるため処理601に遷移する。
処理2602では、代表クライアント判定部208は、処理中のリクエストのクエリー部をクエリー部の内容のみ異なる同一のリクエストと論理和構成したリクエストでレスポンスを取得した際に、各クエリー部に対応するレスポンスに分離可能か判定する。
この判定には前述の通り、例えばシステム開発時にクエリーを含まないリクエストに対して論理和構成可能かが決定するため、その可否情報をテーブルとしてデータ化し、そのテーブルに基づいて判定する方法が考えられる。
論理和構成可能である場合には処理2603に遷移し、論理和構成不可能である場合には処理601に遷移する。
処理2603では、クエリー部を論理和構成可能なリクエストに対するリクエストのID算出処理を行う。
ID算出のキーとして少なくともリクエストからクエリー部の情報を除去した結果をキーとして算出する。
ID算出完了後、処理602に遷移する。
それ以降の処理は前述の通りであり説明は省略する。
次に、図33及び図34は、図10で示した代表クライアント処理部210の処理を拡張した処理フロー図であり、図10に対して処理2701、2702、2703、2704が追加されている。
追加処理に関連する部分のみを説明する。
処理2701は、処理702で対応するレスポンスが受信データ管理部211に保存されていない場合、もしくは処理706で対応レスポンスの有効期限が切れている場合に到達する処理である。
本処理では、代表クライアント処理部210は、現在処理中のリクエストからクエリー部を比較対象外として対応するレスポンスが受信データ管理部211に保存されているか判定する。
保存されていない場合には、現在処理中のリクエストをそのままサーバ装置に発行する必要があるため処理703に遷移する。
保存されている場合には、処理2702に遷移する。
処理2702では、代表クライアント処理部210は、現在処理中のリクエストのクエリー部と処理2701でヒットしたレスポンスに対応するリクエストのクエリー部とでクエリーの論理和を生成し、その生成結果を新たなクエリー部とする論理和リクエストを生成し、それを処理703でサーバ装置105に発行するリクエストとする。
論理和リクエストの生成完了後、処理2705に遷移する。
処理2703は、処理705又は処理707から遷移する処理となる。
本処理では、代表クライアント処理部210は、サーバ装置105から受け取ったレスポンスに対応するリクエストが処理2702で生成した論理和リクエストに基づくものかを判定する。
論理和リクエストに基づかない場合には処理708に遷移し、基づく場合には処理2704に遷移する。
処理2704では、論理和リクエストに基づくレスポンスをサーバ装置105から受け取った状態であるため、現在処理中のリクエストのクエリー部に対応するデータのみで構成されるレスポンスを生成する必要があり、その生成処理を行う。
生成処理結果を処理中のリクエストに対応するレスポンスとして処理708に遷移する。
処理2705は、処理2702から遷移する処理である。
本処理では、処理2702で生成したリクエストに対応するレスポンスが受信データ管理部211に保存済みかどうかを判断する。
レスポンスが受信データ管理部211に保存済みである場合には処理706に遷移し、保存済みでない場合には処理703に遷移する。
なお、本実施の形態では、処理707の後は処理708ではなく処理2703に遷移する。
図35に、論理和リクエストと対応するレスポンスとを保存したテーブルの一例を示す。
図35ではURIが「http://xxx/data.dat」に対してクエリー部に「min=3」という検索条件式が存在するリクエストと「min=4」という検索条件式が存在するリクエストという2つのリクエストを想定している。
ここで、プロパティ「min」は、レスポンスで得られるプロパティ「val」の値がプロパティ「min」の値を下限とする事を意味する。
この意味に従うと2つのリクエストのクエリー部の論理和は「min=3」となり、その論理和リクエストによって得られたレスポンスをレスポンスエントリーに保存している。
処理2704で各リクエストに対応するデータのみで構成されるレスポンスを生成すると、クエリー部が「min=3」のリクエストに対しては論理和リクエストと一致するため、レスポンスエントリーの内容がそのままレスポンスとなる。
一方で、クエリー部が「min=4」のリクエストに対しては論理和リクエストと一致せず、各データのプロパティ「val」の値が下限となる4以上となるもののみを抽出する処理を処理2704で行う事となる。
その結果、得られるレスポンスは図36の通りとなる。
***効果の説明***
以上の処理を行う事によって、リクエストにおけるクエリー部のみが異なる複数のリクエストに関して、クエリー部を論理和構成可能な場合には、それら複数のリクエストを一つの論理和リクエストとしてまとめ、それぞれのリクエストをサーバに発行するのではなく、論理和リクエストのみをサーバに発行するだけで済ませる事が可能となり、サーバ負荷の軽減が達成される。
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、2つ以上を組み合わせて実施しても構わない。
あるいは、これらの実施の形態のうち、1つを部分的に実施しても構わない。
あるいは、これらの実施の形態のうち、2つ以上を部分的に組み合わせて実施しても構わない。
なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
101 クライアント装置、102 クライアント装置、103 クライアント装置、104 クライアント装置、105 サーバ装置、110 CPU、111 メモリ、112 入力インタフェース、113 出力インタフェース、114 通信インタフェース、115 永続記憶インタフェース、116 ディスク、120 CPU、121 メモリ、122 入力インタフェース、123 出力インタフェース、124 通信インタフェース、125 永続記憶インタフェース、126 ディスク、206 アプリケーションロジック部、207 リクエスト生成部、208 代表クライアント判定部、209 他クライアント通信部、210 代表クライアント処理部、211 受信データ管理部、212 サーバ通信部、213 通信部、214 要求処理部。

Claims (16)

  1. 複数のクライアント装置が含まれる通信システムに含まれるクライアント装置であって
    ーバ装置へのリクエストを代表して処理する役割である代表クライアントロールが自装置に割り当てられている場合に、自装置が前記通信システムから離脱した後に自装置に代わって動作する予備代表クライアント装置を他のクライアント装置の中から選択し、前記サーバ装置に送信するリクエストに前記予備代表クライアント装置の識別子を追加する代表クライアント処理部と
    前記代表クライアント処理部により前記予備代表クライアント装置の識別子が追加されたリクエストを前記サーバ装置に送信するサーバ通信部とを有するクライアント装置。
  2. 複数のクライアント装置が含まれる通信システムに含まれるクライアント装置であって、
    2以上のクライアント装置生成されたサーバ装置への同一のリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定部と、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、リクエスト生成元の2以上のクライアント装置のうちのいずれかのクライアント装置を、自装置と協働する代表クライアントクローン装置に指定する代表クライアント処理部と
    前記代表クライアントクローン装置に指定されたクライアント装置に対して、前記代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち前記代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信し、前記取得リクエストに対応するレスポンスを、前記代表クライアントクローン装置に送信し、前記代表クライアントクローン装置から、前記通知メッセージで通知した送信先のクライアント装置に前記レスポンスを送信させる他クライアント通信部とを有するクライアント装置。
  3. 前記他クライアント通信部は、
    前記代表クライアントクローン装置がレスポンスを送信するクライアント装置には、レスポンスを送信しない請求項2に記載のクライアント装置。
  4. 前記代表クライアント処理部は、
    前記取得リクエストのリクエスト生成元のクライアント装置の個数が閾値を超える場合に、前記代表クライアントクローン装置を指定する請求項2に記載のクライアント装置。
  5. 前記他クライアント通信部は、
    他のクライアント装置から、前記代表クライアントクローン装置に指定された旨を通知するとともに、レスポンスの送信先のクライアント装置を通知する通知メッセージを受信する場合があり、
    前記通知メッセージを受信した後に、前記他のクライアント装置からレスポンスを受信した場合に、受信したレスポンスを、前記通知メッセージで通知された送信先のクライアント装置に送信する請求項2に記載のクライアント装置。
  6. 前記代表クライアント処理部は、
    前記通知メッセージで通知された送信先のクライアント装置の個数が2以上である場合に、2以上のクライアント装置のうちのいずれかのクライアント装置を、新たな代表クライアントクローン装置に指定し、
    前記他クライアント通信部は、
    前記新たな代表クライアントクローン装置に指定されたクライアント装置に対して、代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち前記新たな代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信し、
    前記他のクライアント装置からレスポンスを受信した場合に、受信したレスポンスを、前記新たな代表クライアントクローン装置に送信し、前記新たな代表クライアントクローン装置から、前記新たな代表クライアントクローン装置への通知メッセージで通知した送信先のクライアント装置に前記レスポンスを送信させる請求項5に記載のクライアント装置。
  7. 複数のクライアント装置が含まれる通信システムに含まれるクライアント装置であって、
    いずれかのクライアント装置により生成されたサーバ装置へのリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定部と、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記取得リクエストに対応する前記サーバ装置からのレスポンスが、自装置がアクセスできるキャッシュ領域にキャッシュされているか否かを判定し、前記取得リクエストに対応するレスポンスが前記キャッシュ領域にキャッシュされておらず、前記取得リクエストに検索条件式が含まれ、当該検索条件式で得られる検索結果よりも広範な検索結果が得られる広範検索条件式に当該検索条件式を変換可能である場合に、前記検索条件式を前記広範検索条件式に変換する代表クライアント処理部と、
    前記代表クライアント処理部により変換された前記広範検索条件式が含まれるリクエストを前記サーバ装置に送信するサーバ通信部とを有するクライアント装置。
  8. 複数のクライアント装置が含まれる通信システムであって、
    各クライアント装置は
    ーバ装置へのリクエストを代表して処理する役割である代表クライアントロールが自装置に割り当てられている場合に、自装置が前記通信システムから離脱した後に自装置に代わって動作する予備代表クライアント装置を他のクライアント装置の中から選択し、前記サーバ装置に送信するリクエストに前記予備代表クライアント装置の識別子を追加し、
    前記予備代表クライアント装置の識別子が追加されたリクエストを前記サーバ装置に送信する通信システム。
  9. 複数のクライアント装置が含まれる通信システムであって、
    各クライアント装置は、
    2以上のクライアント装置生成されたサーバ装置への同一のリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定し、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、リクエスト生成元の2以上のクライアント装置のうちのいずれかのクライアント装置を、自装置と協働する代表クライアントクローン装置に指定し
    前記代表クライアントクローン装置に指定されたクライアント装置に対して、前記代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち前記代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信し、前記取得リクエストに対応するレスポンスを、前記代表クライアントクローン装置に送信し、前記代表クライアントクローン装置から、前記通知メッセージで通知した送信先のクライアント装置に前記レスポンスを送信させる通信システム。
  10. 複数のクライアント装置が含まれる通信システムであって、
    各クライアント装置は、
    いずれかのクライアント装置により生成されたサーバ装置へのリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定し、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記取得リクエストに対応する前記サーバ装置からのレスポンスが、自装置がアクセスできるキャッシュ領域にキャッシュされているか否かを判定し、前記取得リクエストに対応するレスポンスが前記キャッシュ領域にキャッシュされておらず、前記取得リクエストに検索条件式が含まれ、当該検索条件式で得られる検索結果よりも広範な検索結果が得られる広範検索条件式に当該検索条件式を変換可能である場合に、前記検索条件式を前記広範検索条件式に変換し、
    変換された前記広範検索条件式が含まれるリクエストを前記サーバ装置に送信する通信システム。
  11. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置が行うデータ処理方法であって
    ーバ装置へのリクエストを代表して処理する役割である代表クライアントロールが自装置に割り当てられている場合に、前記クライアント装置が、自装置が前記通信システムから離脱した後に自装置に代わって動作する予備代表クライアント装置を他のクライアント装置の中から選択し、前記サーバ装置に送信するリクエストに前記予備代表クライアント装置の識別子を追加する代表クライアント処理ステップと
    記クライアント装置が、前記代表クライアント処理ステップにより前記予備代表クライアント装置の識別子が追加されたリクエストを前記サーバ装置に送信するサーバ通信ステップとを有するデータ処理方法。
  12. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置が行うデータ処理方法であって、
    前記クライアント装置が、2以上のクライアント装置生成されたサーバ装置への同一のリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定ステップと、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記クライアント装置が、リクエスト生成元の2以上のクライアント装置のうちのいずれかのクライアント装置を、自装置と協働する代表クライアントクローン装置に指定する代表クライアント処理ステップと、
    前記クライアント装置が、前記代表クライアントクローン装置に指定されたクライアント装置に対して、前記代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち前記代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信し、前記取得リクエストに対応するレスポンスを、前記代表クライアントクローン装置に送信し、前記代表クライアントクローン装置から、前記通知メッセージで通知した送信先のクライアント装置に前記レスポンスを送信させる他クライアント通信ステップとを有するデータ処理方法。
  13. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置が行うデータ処理方法であって、
    前記クライアント装置が、いずれかのクライアント装置により生成されたサーバ装置へのリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定ステップと、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記クライアント装置が、前記取得リクエストに対応する前記サーバ装置からのレスポンスが、自装置がアクセスできるキャッシュ領域にキャッシュされているか否かを判定し、前記取得リクエストに対応するレスポンスが前記キャッシュ領域にキャッシュされておらず、前記取得リクエストに検索条件式が含まれ、当該検索条件式で得られる検索結果よりも広範な検索結果が得られる広範検索条件式に当該検索条件式を変換可能である場合に、前記検索条件式を前記広範検索条件式に変換する代表クライアント処理ステップと、
    前記代表クライアント処理ステップにより変換された前記広範検索条件式が含まれるリクエストを前記サーバ装置に送信するサーバ通信ステップとを有するデータ処理方法。
  14. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置に
    ーバ装置へのリクエストを代表して処理する役割である代表クライアントロールが自装置に割り当てられている場合に、自装置が前記通信システムから離脱した後に自装置に代わって動作する予備代表クライアント装置を他のクライアント装置の中から選択し、前記サーバ装置に送信するリクエストに前記予備代表クライアント装置の識別子を追加する代表クライアント処理ステップと、
    前記代表クライアント処理ステップにより前記予備代表クライアント装置の識別子が追加されたリクエストを前記サーバ装置に送信するサーバ通信ステップとを実行させるプログラム。
  15. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置に、
    2以上のクライアント装置生成されたサーバ装置への同一のリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定ステップと、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、リクエスト生成元の2以上のクライアント装置のうちのいずれかのクライアント装置を、自装置と協働する代表クライアントクローン装置に指定する代表クライアント処理ステップと、
    前記代表クライアントクローン装置に指定されたクライアント装置に対して、前記代表クライアントクローン装置に指定された旨を通知するとともに、前記2以上のクライアント装置のうち前記代表クライアントクローン装置に指定されなかったクライアント装置をレスポンスの送信先として通知する通知メッセージを送信し、前記取得リクエストに対応するレスポンスを、前記代表クライアントクローン装置に送信し、前記代表クライアントクローン装置から、前記通知メッセージで通知した送信先のクライアント装置に前記レスポンスを送信させる他クライアント通信ステップとを実行させるプログラム。
  16. 複数のクライアント装置が含まれる通信システムに含まれるコンピュータであるクライアント装置に、
    いずれかのクライアント装置により生成されたサーバ装置へのリクエストを取得した場合に、取得した取得リクエスト代表して処理する役割である代表クライアントロールが自装置に割り当てられているか否かを判定する代表クライアント判定ステップと、
    前記取得リクエストについての代表クライアントロールが自装置に割り当てられている場合に、前記取得リクエストに対応する前記サーバ装置からのレスポンスが、自装置がアクセスできるキャッシュ領域にキャッシュされているか否かを判定し、前記取得リクエストに対応するレスポンスが前記キャッシュ領域にキャッシュされておらず、前記取得リクエストに検索条件式が含まれ、当該検索条件式で得られる検索結果よりも広範な検索結果が得られる広範検索条件式に当該検索条件式を変換可能である場合に、前記検索条件式を前記広範検索条件式に変換する代表クライアント処理ステップと、
    前記代表クライアント処理ステップにより変換された前記広範検索条件式が含まれるリクエストを前記サーバ装置に送信するサーバ通信ステップとを実行させるプログラム。
JP2014243741A 2014-12-02 2014-12-02 クライアント装置及び通信システム及びデータ処理方法及びプログラム Active JP6324304B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014243741A JP6324304B2 (ja) 2014-12-02 2014-12-02 クライアント装置及び通信システム及びデータ処理方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014243741A JP6324304B2 (ja) 2014-12-02 2014-12-02 クライアント装置及び通信システム及びデータ処理方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2016110175A JP2016110175A (ja) 2016-06-20
JP6324304B2 true JP6324304B2 (ja) 2018-05-16

Family

ID=56124309

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014243741A Active JP6324304B2 (ja) 2014-12-02 2014-12-02 クライアント装置及び通信システム及びデータ処理方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6324304B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112839071B (zh) * 2019-11-25 2024-01-05 商汤集团有限公司 训练系统、训练数据访问方法及装置、电子设备、介质

Also Published As

Publication number Publication date
JP2016110175A (ja) 2016-06-20

Similar Documents

Publication Publication Date Title
CN103209223B (zh) 分布式应用会话信息共享方法、系统和应用服务器
US10491523B2 (en) Load distribution in data networks
CN105939335B (zh) 发布-订阅数据处理环境中管理通道所有权的方法和系统
JP4599581B2 (ja) 情報配信システム、配信要求プログラム、転送プログラム及び配信プログラム等
US9164806B2 (en) Processing pattern framework for dispatching and executing tasks in a distributed computing grid
US8655956B2 (en) Stream processing using a client-server architecture
JP5719323B2 (ja) 分散処理システム、ディスパッチャおよび分散処理管理装置
US20160294667A1 (en) System and method for providing an application programming interface manager for use with a service bus runtime
CN101313292A (zh) 对等数据传送指挥协调
US8607233B2 (en) Web service management
JP2005158068A (ja) P2pプロトコルを用いてアプリケーションを共有する方法及び装置
CN114024972B (zh) 一种长连接通信方法、系统、装置、设备及存储介质
CN111917838B (zh) 基于微服务的处理方法及装置、存储介质、电子装置
CN105491078B (zh) Soa系统中的数据处理方法及装置、soa系统
CN103186536A (zh) 一种调度数据共享装置的方法及系统
WO2017128713A1 (zh) 订阅消息的发布方法及装置
KR102565409B1 (ko) 인스턴스 수 조절 방법, 장치, 전자 기기 및 판독 가능한 저장 매체
JP6324304B2 (ja) クライアント装置及び通信システム及びデータ処理方法及びプログラム
JP5109901B2 (ja) セッションデータ共有方法
US20120254895A1 (en) Information processing system, control method, and non-transitory computer readable medium storing program
CN105335362B (zh) 实时数据的处理方法及系统、即时处理系统
US20200327122A1 (en) Conflation of topic selectors
CN110798513B (zh) 物联网设备互联系统及方法
JP5723330B2 (ja) 分散処理システムおよび分散処理方法
JP2008147819A (ja) 証券・金融データ配信システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170123

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180109

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180124

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180410

R150 Certificate of patent or registration of utility model

Ref document number: 6324304

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150