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

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

Info

Publication number
JP2016081197A
JP2016081197A JP2014210303A JP2014210303A JP2016081197A JP 2016081197 A JP2016081197 A JP 2016081197A JP 2014210303 A JP2014210303 A JP 2014210303A JP 2014210303 A JP2014210303 A JP 2014210303A JP 2016081197 A JP2016081197 A JP 2016081197A
Authority
JP
Japan
Prior art keywords
server
request
servers
processing
client device
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.)
Pending
Application number
JP2014210303A
Other languages
English (en)
Inventor
佳宏 平野
Yoshihiro Hirano
佳宏 平野
英紀 太田
Hideki Ota
英紀 太田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014210303A priority Critical patent/JP2016081197A/ja
Publication of JP2016081197A publication Critical patent/JP2016081197A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

【課題】負荷分散システムの保守を容易にすることを図ること。【解決手段】図1に示す(1)の処理において、クライアント装置101は、第1のサーバとして、サーバAに、リクエスト111を送信する。リクエスト111を受信したサーバAは、所定の条件に基づいて、リクエスト111に対する処理をサーバAで実行するか否かを判断する。サーバAは、リクエスト111に対する処理をサーバAで実行しないと判断し、図1に示す(2)の処理において、振り分け先サーバとなる第2のサーバとして、サーバBにリクエスト111を送信する。サーバBは、リクエスト111に対する処理をサーバBで実行すると判断し、リクエスト111に対する処理を実行する。そして、サーバBは、図1に示す(3)の処理において、リクエスト111に対する処理の結果112を、クライアント装置101に送信する。【選択図】図1

Description

本発明は、負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法に関する。
従来、クライアント装置からの処理要求を複数のサーバのいずれかのサーバに振り分け、いずれかのサーバが処理要求に対する処理を実行する負荷分散システムがある。関連する先行技術として、例えば、複数のサーバ装置に、自己に接続されるクライアント装置の接続上限数をクライアント装置の接続数が超えないように、他のサーバ装置に接続先を変更させるように制御するものがある。また、クライアント装置からの入力イベントに応じた第1のサーバからのWebページ取得要求を第2のサーバに送信して第2のサーバがWebページを取得し、第2のサーバからクライアント装置に対しサーバ切替要求を送信する技術がある。また、複数の業務処理を行う分散クラスタ環境において、業務処理毎の優先順位付けや処理を実行する分散ノードの処理能力に応じて個別の負荷分散手法を選択し、負荷分散において利用者が決めた負荷の閾値に対して調整する技術がある。
特開2009−42842号公報 特開2011−34341号公報 特開2010−204876号公報
しかしながら、従来技術によれば、負荷分散システムの保守が困難である場合がある。例えば、処理要求を振り分けるサーバから処理要求が振り分けられたサーバが、処理要求を振り分けるサーバに処理要求に対する結果を返す構成になっていると、処理要求を振り分けるサーバを一旦停止させて負荷分散システムの保守を行うことになる。
1つの側面では、本発明は、負荷分散システムの保守を容易にする負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法を提供することを目的とする。
本発明の一側面によれば、クライアント装置と接続する複数のサーバのうちの第1のサーバに、クライアント装置から発行された処理要求をクライアント装置、または複数のサーバのうちの第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、処理要求に対する処理を第1のサーバで実行するか否かを判断し、第1のサーバで実行すると判断した場合、処理要求に対する処理を実行して、処理要求に対する処理の結果をクライアント装置に送信し、第1のサーバで実行しないと判断した場合、複数のサーバのうちの第2のサーバに処理要求を送信する負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法が提案される。
本発明の一態様によれば、負荷分散システムの保守を容易にすることができるという効果を奏する。
図1は、実施の形態1にかかる負荷分散システム100の動作例を示す説明図である。 図2は、サーバAのハードウェア構成例を示すブロック図である。 図3は、クライアント装置101のハードウェア構成例を示すブロック図である。 図4は、負荷分散システム100の機能構成例を示すブロック図である。 図5は、振り分け先候補サーバテーブル411の記憶内容の一例を示す説明図である。 図6は、自サーバ実行可能状態記憶テーブル412の記憶内容の一例を示す説明図である。 図7は、リクエスト識別子記憶テーブル413の記憶内容の一例を示す説明図である。 図8は、リクエストのフォーマットの一例を示す説明図(その1)である。 図9は、リクエストのフォーマットの一例を示す説明図(その2)である。 図10は、振り分け先サーバの決定例を示す説明図である。 図11は、サーバを追加する場合の動作例を示す説明図である。 図12は、実施の形態1にかかる分散処理手順の一例を示すフローチャート(その1)である。 図13は、実施の形態1にかかる分散処理手順の一例を示すフローチャート(その2)である。 図14は、サーバ追加処理手順の一例を示すフローチャートである。 図15は、実施の形態2にかかる負荷分散システム1500の動作を示す図である。 図16は、実行前データの記憶内容の一例を示す説明図である。 図17は、実行結果データの記憶内容の一例を示す説明図である。 図18は、実施の形態3にかかる負荷分散システム1800の動作を示す図である。 図19は、負荷分散システム1800の機能構成例を示すブロック図である。 図20は、実施の形態3にかかる分散処理手順の一例を示すフローチャート(その1)である。 図21は、実施の形態3にかかる分散処理手順の一例を示すフローチャート(その3)である。
以下に図面を参照して、開示の負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法の実施の形態を詳細に説明する。
(実施の形態1の説明)
図1は、実施の形態1にかかる負荷分散システム100の動作例を示す説明図である。負荷分散システム100は、クライアント装置101から発行された処理要求群を分散して実行するシステムである。負荷分散システム100は、クライアント装置101と、複数のサーバとを有する。複数のサーバとして、負荷分散システム100は、サーバA、B、C、…を有する。
以下、発行された処理要求を、「リクエスト」と称する。また、接尾記号“−x”が付与されている符号は、サーバxに関する符号であることを示している。
複数のサーバの各々のサーバは、ネットワーク102を介してお互いに通信することができる。各々のサーバは、リクエストを処理する負荷分散装置である。また、各々のサーバは、パーソナル・コンピュータでもよい。
クライアント装置101は、処理要求を発行するコンピュータである。クライアント装置101は、1つでもよいし、複数でもよい。また、クライアント装置101は、パーソナル・コンピュータでもよいし、携帯端末でもよい。
ここで、負荷分散システムの適用例について説明する。例えば、負荷分散システムの適用例として、ある社内用の複数の業務システムのサーバ間でデータを連携するサービスを提供するシステムとして適用されることがある。この場合、クライアント装置からリクエストを受け取って、複数の業務システムのいずれかのサーバにリクエストを振り分ける被分散装置を有する負荷分散システムとすることが考えられる。さらに、リクエスト数の増大や、データ量の増加によって発生するリソース不足によるサービス運用の停止を避けるため、またはサーバの故障発生によるサービス運用の停止を避けるため、被分散装置を複数有する負荷分散システムとすることが考えられる。
ここで、負荷分散システムに含まれる業務システムのリソースを増やすために、業務システムのサーバの台数を増やしたり、業務システムのサーバの保守のためにサーバを一時停止させる場合がある。このとき、負荷分散システムに含まれる被分散装置は、振り分け先となるサーバ全てを管理するため、サーバの台数の増減やサーバの保守に伴って、サーバ全てを管理する情報やサーバにリクエストを割り振るプログラムの修正をすることになる。このように、負荷分散システムにおける、機能を容易に拡張できることを示す拡張性(スケーラビリティ)や、故障が発生してもサービスを停止させないことを示す保守性(アベイラビリティ)を確保することが困難である。
そこで、負荷分散システム100は、負荷分散システム100内のあるサーバが他のサーバから受信したクライアント装置101のリクエストに対する処理を実行したらクライアント装置101にリクエストに対する処理の結果を直接送信する。これにより、負荷分散システム100は、リクエストを送信した後は他のサーバがリクエストに関与しないため、負荷分散システム100の保守や拡張が容易になる。具体的には、他のサーバが、クライアント装置101のリクエストを受信してから、あるサーバに送信するまでの以外のタイミングであれば、いつでも負荷分散システム100が提供するサービスを停止させることなく、他のサーバを保守することができる。
図1に示す(1)の処理において、クライアント装置101は、第1のサーバとして、サーバAに、リクエスト111を送信する。リクエスト111を受信したサーバAは、所定の条件に基づいて、リクエスト111に対する処理をサーバAで実行するか否かを判断する。ここで、所定の条件は、予めサーバで決められた条件である。例えば、サーバAは、サーバAのCPU(Central Processing Unit)の使用率が所定の閾値以下であれば、サーバAで実行し、サーバAのCPUの使用率が所定の閾値より大きければサーバAでは実行しないと判断する。所定の条件は、各サーバで同じであってもよいし、異なってもよい。
図1の例では、サーバAは、リクエスト111に対する処理をサーバAで実行しないと判断し、図1に示す(2)の処理において、振り分け先サーバとなる第2のサーバとして、サーバBにリクエスト111を送信する。リクエスト111を受信したサーバBは、所定の条件に基づいて、リクエスト111に対する処理をサーバBで実行するか否かを判断する。図1の例では、サーバBは、リクエスト111に対する処理をサーバBで実行すると判断し、リクエスト111に対する処理を実行する。
リクエスト111に対する処理を実行した後、サーバBは、図1に示す(3)の処理において、リクエスト111に対する処理の結果112を、クライアント装置101に送信する。リクエスト111に対する処理の結果112の送信先は、リクエスト111を送信したクライアント装置101でも良いし、クライアント装置101とは異なるクライアント装置103でもよい。次に、図2を用いて、複数のサーバのうちのサーバAのハードウェア構成について説明し、図3を用いて、クライアント装置101のハードウェア構成について説明する。
図2は、サーバAのハードウェア構成例を示すブロック図である。図2では、複数のサーバのうちのサーバAのハードウェア構成例を示す。また、図2では図示していないが、サーバB、C、…も、サーバAと同様のハードウェアを有する。
図2において、サーバAは、CPU201と、ROM(Read Only Memory)202と、RAM(Random Access Memory)203と、を含む。また、サーバAは、ディスクドライブ204およびディスク205と、通信インターフェース206と、を含む。また、CPU201〜ディスクドライブ204、通信インターフェース206はバス207によってそれぞれ接続される。
CPU201は、サーバAの全体の制御を司る演算処理装置である。ROM202は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM203は、CPU201のワークエリアとして使用される揮発性メモリである。
ディスクドライブ204は、CPU201の制御に従ってディスク205に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ204には、例えば、磁気ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ204が磁気ディスクドライブである場合、ディスク205には、磁気ディスクを採用することができる。また、ディスクドライブ204がソリッドステートドライブである場合、ディスク205には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
通信インターフェース206は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース206は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース206には、例えば、モデムやLAN(Local Area Network)アダプタなどを採用することができる。
また、負荷分散システム100の管理者が、サーバAを直接操作する場合、サーバAは、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。
図3は、クライアント装置101のハードウェア構成例を示すブロック図である。クライアント装置101は、CPU301と、ROM302と、RAM303と、を含む。また、クライアント装置101は、ディスクドライブ304と、ディスク305と、通信インターフェース306と、を含む。また、クライアント装置101は、ディスプレイ307と、キーボード308と、マウス309とを含む。また、CPU301〜ディスクドライブ304と、通信インターフェース306〜マウス309とは、バス310によってそれぞれ接続される。
CPU301は、クライアント装置101の全体の制御を司る演算処理装置である。ROM302は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM303は、CPU301のワークエリアとして使用される揮発性メモリである。
ディスクドライブ304は、CPU301の制御に従ってディスク305に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ304には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク305は、ディスクドライブ304の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ304が磁気ディスクドライブである場合、ディスク305には、磁気ディスクを採用することができる。また、ディスクドライブ304が光ディスクドライブである場合、ディスク305には、光ディスクを採用することができる。また、ディスクドライブ304がソリッドステートドライブである場合、ディスク305には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
通信インターフェース306は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース306は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース306には、例えば、モデムやLANアダプタなどを採用することができる。
ディスプレイ307は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ307には、例えば、CRT(Cathode Ray Tube)、TFT(Thin Film Transistor)液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
キーボード308は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード308は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス309は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス309は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。
(負荷分散システム100の機能構成例)
図4は、負荷分散システム100の機能構成例を示すブロック図である。複数のサーバの各サーバは、制御部400を有する。制御部400は、判断部401と、決定部402と、送信部403と、実行部404とを含む。図4では、サーバAが有する機能構成を示す。他のサーバも、サーバAが有する機能と同等の機能を有する。以下の説明では、サーバAについて説明する。
制御部400−Aは、記憶装置に記憶されたプログラムをCPU201が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図2に示したROM202、RAM203、ディスク205などである。また、各部の処理結果は、CPU201のレジスタや、CPU201のキャッシュメモリ等に格納される。
また、サーバAは、振り分け先候補サーバテーブル411−A、自サーバ実行可能状態記憶テーブル412−A、リクエスト識別子記憶テーブル413−Aにアクセス可能である。振り分け先候補サーバテーブル411−A、自サーバ実行可能状態記憶テーブル412−A、リクエスト識別子記憶テーブル413−Aは、RAM203、ディスク205といった記憶装置に格納される。
振り分け先候補サーバテーブル411は、振り分け先候補のサーバを記憶するテーブルである。振り分け先候補サーバテーブル411の記憶内容の一例は、図5で説明する。自サーバ実行可能状態記憶テーブル412は、リクエストに対する処理を自サーバで実行するか否かの判断に用いるテーブルである。自サーバ実行可能状態記憶テーブル412の記憶内容の一例は、図6で説明する。リクエスト識別子記憶テーブル413は、受信したリクエストのリクエスト識別子を記憶するテーブルである。リクエスト識別子記憶テーブル413の記憶内容の一例は、図7で説明する。
判断部401−Aは、リクエストを、クライアント装置101、または複数のサーバのうちのサーバAとは異なる他のサーバから受信した場合、所定の条件に基づいて、リクエストに対する処理をサーバAで実行するか否かを判断する。具体的には、判断部401−Aは、所定の条件として、自サーバ実行可能状態記憶テーブル412−Aを参照してリクエストに対する処理をサーバAで実行するか否かを判断する。
また、複数のサーバが、3以上のサーバであるとする。さらに、判断部401−AがサーバAで実行しないと判断したとする。このとき、決定部402−Aは、振り分け先候補サーバテーブル411−Aを参照して、振り分け先候補サーバテーブル411−Aの優先順位に基づいて、2以上の振り分け先候補のサーバから振り分け先サーバを決定する。振り分け先候補サーバテーブル411−Aは、振り分け先候補のサーバを特定する情報を記憶する。そして、振り分け先候補サーバテーブル411−Aに記憶される振り分け先候補のサーバは、複数のサーバが形成する環状または直線状の論理的な通信経路におけるサーバAと所定の方向で接続する複数のサーバの数未満であり2以上存在する。環状または直線状の論理的な通信経路、所定の方向については、図10で説明する。また、振り分け先候補サーバテーブル411−Aは、振り分け先候補のサーバを決定する優先順位として、振り分け先候補のサーバおよびサーバAの間の論理的な通信経路上での距離を表す情報を記憶する。
実行部404−Aは、サーバAの運用サービスを提供するアプリケーションソフトウェアの実行処理を行う。
送信部403−Aは、サーバAで実行すると判断した場合、実行部404−Aにおいて、リクエストに対する処理を実行して、リクエストに対する処理の結果をクライアント装置101に送信する。また、送信部403−Aは、サーバAで実行しないと判断した場合、複数のサーバのうちの振り分け先サーバにリクエストを送信する。また、リクエストは、クライアント装置101の識別情報を含む。リクエストのフォーマット例については、図8、図9で説明する。
また、複数のサーバが、3以上のサーバであるとする。このとき、送信部403−Aは、サーバAで実行しないと判断した場合、複数のサーバが形成する環状または直線状の論理的な通信経路においてサーバAと隣接しており他のサーバとは異なる振り分け先サーバに、リクエストを送信する。また、送信部403−Aは、決定部402−Aが決定した振り分け先サーバにリクエストを送信してもよい。
図5は、振り分け先候補サーバテーブル411の記憶内容の一例を示す説明図である。図5では、サーバAが有する振り分け先候補サーバテーブル411−Aを用いて説明を行う。振り分け先候補サーバテーブル411は、振り分け先候補のサーバを記憶するテーブルである。図5に示す振り分け先候補サーバテーブル411−Aは、レコード501−1、2を有する。
振り分け先候補サーバテーブル411は、優先順位と、サーバアドレスと、リクエスト再送信待機時間と、リクエスト再送信可能回数と、リクエスト再送信回数と、というフィールドを含む。優先順位フィールドには、振り分け先候補サーバテーブル411に登録されている振り分け先候補のサーバから、振り分け先のサーバを決定する優先順位として、論理的な通信経路上での距離を表す値が格納される。サーバアドレスフィールドには、振り分け先候補のサーバのアドレスが格納される。サーバのアドレスとしては、例えば、サーバのIP(Internet Protocol)アドレスでもよいし、サーバのMAC(Media Access Control)アドレスでもよい。リクエスト再送信待機時間フィールドには、リクエストを振り分け先候補のサーバに送信して、リクエストを再送する際に待機する時間が格納される。リクエスト再送信可能回数フィールドには、リクエストを振り分け先候補のサーバに送信可能な最大の回数が格納される。リクエスト再送信回数フィールドには、リクエストを振り分け先候補のサーバに送信した回数が格納される。
例えば、レコード501−1は、サーバAの振り分け先候補のサーバ群のうち、サーバBが、論理的な通信経路上で最も近くにあるため優先順位が1番であることを示す。さらに、レコード501−1は、優先順位が1番となるサーバBのIPアドレスを示しており、リクエスト再送信可能回数が5回であり、リクエスト再送信回数が0回であることを示す。
また、振り分け先候補サーバテーブル411は、2つ以上のサーバを記憶しておくことが好ましい。これにより、負荷分散システム100は、あるサーバがサービス停止していたとしても、他のサーバにリクエストを送信することにより、リクエストが停滞することが無いようにサービスの継続性を向上することができる。
また、リクエスト再送信待機時間、リクエスト再送信可能回数、リクエスト再送信回数の各フィールドを有することにより、負荷分散システム100は、間隔を置いて再送信を行えて、リクエストが周回ループすることを防ぐことができる。
図6は、自サーバ実行可能状態記憶テーブル412の記憶内容の一例を示す説明図である。自サーバ実行可能状態記憶テーブル412は、リクエストに対する処理を自サーバで実行するか否かの判断に用いるテーブルである。図6では、サーバAが有する自サーバ実行可能状態記憶テーブル412−Aを用いて説明を行う。自サーバ実行可能状態記憶テーブル412は、アプリケーションのリソース管理情報と、データベースリソース管理情報と、サーバのインフラリソース管理情報とを含む。
アプリケーションのリソース管理情報は、アプリケーションリソースの実行可能状態として、ヒープサイズと、スレッド数と、メッセージキューの滞留数とを含む。データベースリソース管理情報は、データベースリソースの実行可能状態として、DB(DataBase)スペース使用率と、DBバッファ使用率とを含む。サーバのインフラリソース管理情報は、サーバのインフラリソースの実行可能状態として、CPU使用率と、メモリ使用率と、ディスク利用率とを含む。
サーバAは、自サーバで処理を実行するか否かを判断する際に、アプリケーションリソースの実行可能状態、データベースリソースの実行可能状態、サーバのインフラリソースの実行可能状態のいずれを参照してもよい。
図7は、リクエスト識別子記憶テーブル413の記憶内容の一例を示す説明図である。リクエスト識別子記憶テーブル413は、受信したリクエストのリクエスト識別子を記憶するテーブルである。図7では、サーバAが有するリクエスト識別子記憶テーブル413−Aを用いて説明を行う。図7に示すリクエスト識別子記憶テーブル413−Aは、レコード701−1、2を有する。
リクエスト識別子記憶テーブル413は、リクエスト識別子というフィールドを含む。リクエスト識別子フィールドには、サーバが受信したリクエストのリクエスト識別子が格納される。リクエスト識別子としては、例えば、GUID(Globally Unique IDentifier)が使用される。
例えば、図7に示すリクエスト識別子記憶テーブル413−Aは、レコード701−1が示すGUID「xxxxxxxx−x…」を有するリクエストと、レコード701−2が示すGUID「yyyyyyyy−y…」を有するリクエストとを受信したことを示す。
次に、図8、図9で、リクエストのフォーマットの一例を示す。図8では、クライアント装置101から受信する際のリクエストのフォーマットを示し、図9では、他のサーバから受信する際のリクエストのフォーマットを示す。
図8は、リクエストのフォーマットの一例を示す説明図(その1)である。図8では、クライアント装置101から受信する際のリクエストのフォーマット801を示す。フォーマット801は、リクエスト識別子、返信先アドレス、実行前データ、送信元アドレス、実行結果データというフィールドを有する。
リクエスト識別子フィールドには、リクエストを一意に識別するリクエスト識別子が格納される。リクエスト識別子としては、例えば、GUIDが使用される。また、クライアント装置101にGUIDを付与する機能がない場合、リクエスト識別子フィールドに何も値が入っていない場合もありうる。リクエスト識別子フィールドに何も値が入っていないリクエストを受信したサーバは、該当のリクエストにGUIDを付与する。
返信先アドレスフィールドには、リクエストの実行結果の返信先となるクライアント装置101のアドレスが格納される。クライアント装置101のアドレスとしては、IPアドレス、MACアドレス以外にも、メールアドレス、HTTP(HyperText Transfer Protocol)に従ったURL(Uniform Resource Locator)、FTP(File Transfer Protocol)のアドレス等でもよい。
実行前データフィールドには、リクエストのデータが格納される。具体的には、例えば、実行前データフィールドには、サーバに処理させる処理の種別と、引数の内容とが格納される。送信元アドレスフィールドには、リクエストを発行したクライアント装置101のアドレスが格納される。実行結果データフィールドには、処理結果のデータが格納される。
また、フォーマット801が示すように、返信先アドレスフィールドと送信元アドレスフィールドとには、異なるクライアント装置101を設定することができる。例えば、負荷分散システム100内に、複数の業務サービスがある場合に、ある業務サービスを利用するクライアント装置101が、他の業務サービスを利用するクライアントとして、処理結果を渡す際に、クライアント装置103が設定される。
図9は、リクエストのフォーマットの一例を示す説明図(その2)である。図9では、他のサーバから受信する際のリクエストのフォーマット901を示す。フォーマット901は、フォーマット801に、転送元アドレスフィールドを追加したフォーマットである。フォーマット901のうち、フォーマット801が有するフォーマットについては、説明を省略する。
転送元アドレスフィールドは、リクエストを送信したサーバのアドレスが格納される。転送元アドレスフィールドの使用例として、例えば、サーバBが、サーバAからリクエストを受信したとする。このとき、サーバBが、サーバBでリクエストに対する処理を実行することができないと判断した場合、振り分け先候補サーバテーブル411に格納されているサーバのうち、転送元アドレスフィールドに格納されたサーバA以外のサーバにリクエストを送信する。これによって、同じサーバAとサーバB間で同じリクエストデータの往復が発生することを防止する。
図10は、振り分け先サーバの決定例を示す説明図である。複数のサーバの各々のサーバは、各々のサーバでリクエストに対する処理が実行できないと判断した場合に、リクエストを振り分ける振り分け先サーバを決定する。図10では、振り分け先サーバの決定例を示す。同じドメイン内および同じクラスタ内の複数のサーバは、お互いにリクエストを送信しあうことにならないように、複数のサーバで論理的な通信経路を形成し、論理的な通信経路における所定の方向を決めておく。論理的な通信経路は、直線状でもよいし、環状でもよい。論理的な通信経路は、どのようなルールで形成してもよい。例えば、各々のサーバの名称のABC順となる方向を所定の方向として、論理的な通信経路を形成してもよいし、各々のサーバのIPアドレスの昇順となる方向を所定の方向として、論理的な通信経路を形成してもよい。
図10では、サーバA、B、C、D、A、…を順方向とする環状の論理的な通信経路1001が形成された例を示す。サーバAは、振り分け先候補サーバテーブル411−Aに、通信経路1001上でサーバAから最も距離が短いサーバBを優先順位の1番目として、サーバBの次に距離が短いサーバCを優先順位の2番目として設定する。以下、図10、図11において、優先順位の1番目のサーバへの矢印を実線で示し、優先順位の2番目のサーバへの矢印を点線で示す。
例えば、サーバAは、サーバAでリクエストに対する処理が実行できないと判断した場合に、まず、優先順位が最も高いサーバBを振り分け先サーバとして決定する。そして、サーバBが故障していたりしてリクエストの送信に対する応答がない場合、サーバAは、優先順位が次に高いサーバCを振り分け先サーバとして決定する。ここで、論理的な通信経路1001は、物理的な通信経路ではないため、サーバAとサーバCとは、サーバBを介さずとも通信することができる。
図11は、サーバを追加する場合の動作例を示す説明図である。図11では、負荷分散システム100にサーバを追加する動作例として、サーバZを追加する場合を例にして説明を行う。
図11の例では、追加の一例として、サーバZを、サーバBの振り分け先候補のサーバの1つとして追加する例を示す。サーバZは、サーバCとサーバDとを、振り分け先候補サーバテーブル411−Zに追加する。また、サーバBは、サーバZを振り分け先候補サーバテーブル411−Bに追加する。図11の例では、サーバBは、サーバZを優先順位の3番目として追加しているが、優先順位の1番目として追加してもよい。
サーバBがサーバZを振り分け先候補サーバテーブル411−Bに追加する際には、サーバBのサービスを一時的に停止させることになる。しかし、サーバCとサーバDとは、振り分け先候補サーバテーブル411に追加しないため、サーバZの追加中であってもサービスの運用を続行することができる。また、サーバBのサービスを一時的に停止しても、サーバBを振り分け先候補のサーバとするサーバAは、サーバB以外にも他の振り分け先候補のサーバとしてサーバCがあるため、負荷分散システム100は、リクエストが停滞することを抑制することができる。
なお、論理的な通信経路上のどこに、サーバを追加するかについては、負荷分散システム100は、論理的な通信経路のどこに追加してもよい。例えば、負荷分散システム100は、論理的な通信経路を形成したルールに従って、サーバを追加する。
次に、図12〜図14を用いて、負荷分散システム100が実行するフローチャートについて説明する。
図12は、実施の形態1にかかる分散処理手順の一例を示すフローチャート(その1)である。また、図13は、実施の形態1にかかる分散処理手順の一例を示すフローチャート(その2)である。分散処理は、クライアント装置101から発行されたリクエスト群に対する処理を複数のサーバで分散する処理である。また、分散処理は、複数のサーバの各々のサーバが行う。図12、図13では、サーバAが実行する例を示す。
サーバAは、リクエストを受信する(ステップS1201)。ステップS1201の処理について、サーバAは、クライアント装置101からリクエストを受信する場合と、サーバA以外の他のサーバからリクエストを受信する場合とがある。また、クライアント装置101は、複数のサーバのうちのどのサーバにリクエストを送信してもよい。例えば、クライアント装置101は、複数のサーバのうちのいくつかのサーバの識別情報として、IPアドレスを有しておく。そして、クライアント装置101は、クライアント装置101のIPアドレスのネットワークアドレスと同一のIPアドレスを有するサーバに処理要求を送信する。また、クライアント装置101は、複数のサーバのうちの過去に処理要求に対する結果を受けたサーバのIPアドレスを記憶しておき、再びリクエストを送信する際には、記憶したサーバに処理要求を送信してもよい。
次に、サーバAは、受信したリクエストにリクエスト識別子が付与されているか否かを判断する(ステップS1202)。受信したリクエストにリクエスト識別子が付与されている場合(ステップS1202:Yes)、サーバAは、受信したリクエストのリクエスト識別子がリクエスト識別子記憶テーブル413−Aに登録されているか否かを判断する(ステップS1203)。受信したリクエストのリクエスト識別子がリクエスト識別子記憶テーブル413−Aに登録されている場合(ステップS1203:Yes)、リクエストが環状の論理的な通信経路を一周したことになるため、サーバAは、実行不可能であることを示すエラーをクライアント装置101に送信する(ステップS1205)。ステップS1205の処理終了後、サーバAは、分散処理を終了する。
なお、複数のサーバが直線状の論理的な通信経路を形成する場合には、論理的な通信経路の端となるサーバを予め識別しておき、端となるサーバは、処理を実行できない場合、実行不可能であることを示すエラーをクライアント装置101に送信すればよい。
一方、受信したリクエストにリクエスト識別子が付与されていない場合(ステップS1202:No)、サーバAは、受信したリクエストにリクエスト識別子を付与する(ステップS1204)。ステップS1204の処理終了後、または、受信したリクエストのリクエスト識別子がリクエスト識別子記憶テーブル413−Aに登録されていない場合(ステップS1203:No)、サーバAは、受信したリクエストのリクエスト識別子をリクエスト識別子記憶テーブル413−Aに登録する(ステップS1206)。
次に、サーバAは、自サーバ実行可能状態記憶テーブル412−Aを参照して、自サーバで、リクエストに対する処理が実行可能か否かを判断する(ステップS1207)。リクエストに対する処理が実行可能であると判断した場合(ステップS1207:Yes)、サーバAは、リクエストに対する処理を実行する(ステップS1208)。次に、サーバAは、実行結果をクライアント装置101に送信する(ステップS1209)。ステップS1209の処理終了後、サーバAは、分散処理を終了する。
一方、リクエストに対する処理が実行可能でないと判断した場合(ステップS1207:No)、サーバAは、受信したリクエストに、自サーバのアドレスを付与する(ステップS1301)。次に、サーバAは、振り分け先候補サーバテーブル411−Aを参照して、振り分け先サーバを決定する(ステップS1302)。例えば、サーバAは、リクエスト再送信回数フィールドの値が、リクエスト再送信可能回数フィールドの値以下である振り分け先候補のサーバのうち、優先順位が最も小さい値となる振り分け先候補のサーバを、振り分け先サーバとして決定する。
そして、サーバAは、自サーバのアドレスを付与したリクエストを振り分け先サーバに送信する(ステップS1303)。次に、サーバAは、振り分け先サーバにリクエスト送信ができたか否かを判断する(ステップS1304)。振り分け先サーバにリクエスト送信ができた場合(ステップS1304:Yes)、サーバAは、分散処理を終了する。
一方、振り分け先サーバにリクエスト送信ができない場合(ステップS1304:No)、サーバAは、振り分け先サーバへのリクエスト送信の再送信が可能か否かを判断する(ステップS1305)。ここで、ステップS1304:Noとなる場合として、例えば、振り分け先サーバが故障、またはメンテナンス等により電源が供給されておらず、サーバAが、リクエストを受信したというACK(ACKnowledgement)を受信しなかった場合である。また、リクエスト送信の再送信が可能かの判断としては、例えば、サーバAは、振り分け先候補サーバテーブル411−Aのリクエスト再送信回数フィールドの値が、リクエスト再送信可能回数フィールドの値以下である場合、再送信が可能と判断する。
振り分け先サーバへのリクエスト送信の再送信が可能でない場合(ステップS1305:No)、サーバAは、ステップS1302の処理に移行する。一方、振り分け先サーバへのリクエスト送信の再送信が可能である場合(ステップS1305:Yes)、サーバAは、振り分け先サーバへの再送信回数をインクリメントする(ステップS1306)。そして、サーバAは、振り分け先サーバに対応する待機時間分待機する(ステップS1307)。待機した後、サーバAは、ステップS1303の処理に移行する。分散処理を実行することにより、負荷分散システム100は、クライアント装置101から発行されたリクエスト群に対する処理を複数のサーバで分散することができる。
図14は、サーバ追加処理手順の一例を示すフローチャートである。サーバ追加処理は、負荷分散システム100にサーバを追加する処理である。サーバ追加処理は、負荷分散システム100に追加するサーバと、振り分け先候補サーバテーブル411に、追加するサーバを追加するサーバとが協働する。図14では、負荷分散システム100に追加するサーバをサーバZとし、振り分け先候補サーバテーブル411に、サーバZを追加するサーバをサーバBとして説明する。なお、振り分け先候補サーバテーブル411に、追加するサーバを追加するサーバは、2以上あってもよい。
サーバZは、振り分け先候補サーバテーブル411−Zに、論理的な通信経路における順方向側にある2つ以上のサーバのアドレスを追加する(ステップS1401)。次に、サーバZは、運用サービスを開始する(ステップS1402)。ステップS1402の処理について、具体的には、サーバZは、運用サービスを実行するアプリケーションソフトウェアの実行を開始する。
サーバZは、負荷分散システム100に追加するサーバであるサーバZを振り分け先候補サーバテーブル411に追加するサーバBに、追加依頼を指示する(ステップS1403)。ステップS1403の処理終了後、サーバZは、サーバ追加処理を終了する。
追加依頼を受けたサーバBは、運用サービスを停止させる(ステップS1404)。ステップS1404の処理について、具体的には、サーバBは、運用サービスを実行するアプリケーションソフトウェアの実行を終了する。次に、サーバBは、振り分け先候補サーバテーブル411−Bに、負荷分散システム100に追加するサーバのアドレスを追加する(ステップS1405)。そして、サーバBは、運用サービスを開始する(ステップS1406)。ステップS1406の処理終了後、サーバBは、サーバ追加処理を終了する。サーバ追加処理を実行することにより、サーバは、負荷分散システム100に新たなサーバを追加することができる。
以上説明したように、負荷分散システム100によれば、負荷分散システム100内のあるサーバが他のサーバから受信したクライアント装置101のリクエストに対する処理を実行したらクライアント装置101にリクエストに対する処理の結果を直接送信する。これにより、負荷分散システム100は、リクエストを送信した後は他のサーバがリクエストに関与しないため、負荷分散システム100の保守や拡張が容易になる。また、負荷分散システム100は、クライアント装置101にリクエストに対する処理の結果を直接送信するため、負荷分散システム内の通信量を削減することができる。また、負荷分散システム100によれば、専用の振り分け装置がなくとも、分散処理を行うことができる。
また、負荷分散システム100によれば、他のサーバに送信する処理要求は、クライアント装置101の識別情報を含んでもよい。これにより、他のサーバは、複数のクライアント装置101のうちの識別情報で特定されるクライアント装置101に、直接処理結果を送信することができる。また、クライアント装置101の識別情報を送信することにより、他のサーバは、処理対象の相手を特定することができるため、他のサーバが有するキャッシュを有効利用して、同じ内容のリクエストを高速にすることができる。
また、複数のサーバが3以上であるとする。このとき、負荷分散システム100によれば、第1のサーバで実行しないと判断した場合、複数のサーバが形成する環状または直線状の論理的な通信経路において第1のサーバと隣接しており他のサーバとは異なる第2のサーバに、処理要求を送信してもよい。これにより、第1のサーバは、複数のサーバのうちの第2のサーバの識別情報のみ記憶すればよいため、複数のサーバのうちの第2のサーバ以外のサーバを停止させる際に影響を受けずにすむ。
また、複数のサーバが3以上であるとする。このとき、負荷分散システム100によれば、振り分け先候補サーバテーブル411内の距離を表す情報に基づいて、振り分け先候補サーバテーブル411に登録された2以上の振り分け候補のサーバから第2のサーバを決定してもよい。これにより、第1のサーバは、複数のサーバのうちの振り分け候補のサーバの識別情報のみ記憶すればよい。さらに、第1のサーバは、振り分け候補のサーバのいずれかが停止したとしても、他の振り分け候補のサーバに処理を振り分けることができ、サービスを続行することができる。
また、負荷分散システム100は、サービスを提供するプログラムを、複数のサーバに動的に配置することが可能になる。また、負荷分散システム100は、他のサーバにリクエストを送信することに連動して他のサーバの電源をOFFからONにすることで、消費電力を削減することができる。また、負荷分散システム100は、複数のサーバのスペックに応じた分散配分を行うことができる。
(実施の形態2の説明)
実施の形態1にかかるクライアント装置101から発行された処理を要求する対象となるリクエストによっては、当該リクエストに含まれる実行前データの量、および/または、実行結果データの量が大きくなる場合がある。例えば、ギガバイト級のデータサイズの画像データ等が実行前データとして添付され、リクエストされるような場合である。このようなリクエストの場合、リクエストを受取ったサーバAで実行しないと判断した場合に、振り分け先のサーバBにデータを送信することによるネットワークへの負荷が高くなる。この負荷はサーバへの振り分けの回数が増加するほど、ネットワークへの負荷が高くなる。
そこで、後述する図15で示す実施の形態2にかかる負荷分散システム1500は、リクエストのフォーマット801において実行前データに代えて実行前データを格納した格納先アドレスを格納することを可能とする。および/または、負荷分散システム1500は、実行後データに代えて実行後データを格納した格納先アドレスを格納することを可能とする。格納先アドレスは、例えば、URLである。なお、実施の形態1において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。また、説明の簡略化のため、以下の説明における「サーバ」は、特に記載がない場合、実施の形態2にかかるサーバであるとする。
図15は、実施の形態2にかかる負荷分散システム1500の動作を示す図である。負荷分散システム1500は、サーバA〜Cと、実施の形態2にかかるクライアント装置1501とを含む。さらに、負荷分散システム1500は、フォーマット801に格納先アドレスを格納すること可能とするために、実行前データおよび/または実行結果データを格納可能な実行前データ記憶装置1502と、実行結果データ記憶装置1503とを含む。実行前データ記憶装置1502と実行結果データ記憶装置1503とは、クライアント装置1501と同じネットワーク1504を介して通信できる別々のハードウェア装置でもよい。または、実行前データ記憶装置1502と実行結果データ記憶装置1503とは、クライアント装置1501のディスクドライブでもよい。実行前データ記憶装置1502が有する実行前データの記憶内容の一例は、図16で説明する。また、実行結果データ記憶装置1503が有する実行結果データ記憶内容の一例は、図17で説明する。
クライアント装置1501は、図15の(1)の処理において、実行前データ記憶装置1502に実行前データ1511−Aを格納する。そして、クライアント装置1501は、図15の(2)の処理において、実行前データ1511−Aに代えて実行前データを格納した格納先アドレスを格納したリクエスト1511−Bを負荷分散システム1500に含まれるいずれかのサーバへ送信する。図15の例では、クライアント装置1501は、リクエスト1511−BをサーバAに送信する。ここで、クライアント装置1501は、実行前データ記憶装置1502に実行前データ1511−Aを記憶するか否かを、実行前データ1511−Aのサイズに応じて切り替える制御を行ってもよい。
負荷分散システム1500に含まれるいずれかのサーバは、受信したリクエストに実行前データを格納した格納先アドレスが格納されている場合、格納先アドレスに対応する実行前データを実行前データ記憶装置1502から読み出す。そして、いずれかのサーバは、読み出した実行前データを用いて、リクエストに応じた処理を実行する。また、いずれかのサーバは、リクエストに実行結果データを格納する格納先アドレスが格納されている場合、リクエストに応じた処理の実行結果データを、実行結果データ記憶装置1503に設けられた格納先アドレスに対応する格納先に格納する処理を実行する。そして、いずれかのサーバは、リクエストに対する処理の結果を、クライアント装置1501に送信する。
図15の例では、サーバAは、リクエスト1511−Bに対する処理をサーバAで実行しないと判断し、図15に示す(3)の処理において、振り分け先サーバとなる第2のサーバとして、サーバBにリクエスト1511−Bを送信する。そして、サーバBは、リクエスト1511−Bに実行前データを格納した格納先アドレスが格納されているため、図15の(4)の処理において、格納先アドレスに対応する実行前データ1511−Aを実行前データ記憶装置1502から読み出す。そして、サーバBは、読み出した実行前データ1511−Aを用いて、リクエスト1511−Bに応じた処理を実行する。続けて、サーバBは、図15の(5)の処理において、リクエスト1511−Bに応じた処理の実行結果データ1511−Cを、実行結果データ記憶装置1503に設けられた格納先アドレスに対応する格納先に格納する処理を実行する。実行結果データ1511−Cを実行結果データ記憶装置1503に格納するか、そのままクライアント装置1501に送信するかについて、サーバBは、実行結果データ1511−Cのデータサイズに基づいて判断してもよい。または、判断リクエスト1511−Bに予め、実行結果データ1511−Cを実行結果データ記憶装置1503に格納するか、そのままクライアント装置1501に送信するかが示されていてもよい。
そして、サーバBは、図15の(6)の処理において、リクエスト1511−Bに対する処理の結果1512を、クライアント装置1501に送信する。クライアント装置1501は、図15の(7)の処理において、格納先アドレスに対応する実行結果データ1511−Cを実行結果データ記憶装置1503から読み出す。
図16は、実行前データの記憶内容の一例を示す説明図である。具体的には、実行前データ記憶装置1502は、実行前データ記憶テーブル1600に、実行前データを記憶する。図16に示す実行前データ記憶テーブル1600は、レコード1601−1〜3を有する。
実行前データ記憶テーブル1600は、リクエスト識別子と、読出状態と、実行前データというフィールドを含む。リクエスト識別子フィールドには、リクエストのリクエスト識別子が格納される。読出状態フィールドには、実行前データの読出状態を示す識別子が格納される。具体的には、読出状態フィールドには、実行前データがまだ読み出されていないことを示す「未読出」、実行前データが読み出されている間であることを示す「読出処理中」、実行前データが既に読み出されたことを示す「読出済み」のうちのいずれかが格納される。実行前データフィールドには、リクエストのデータが格納される。
図17は、実行結果データの記憶内容の一例を示す説明図である。具体的には、実行結果データ記憶装置1503は、実行結果データ記憶テーブル1700に、結果データを記憶する。図17に示す実行結果データ記憶テーブル1700は、レコード1701−1〜3を有する。
実行結果データ記憶テーブル1700は、リクエスト識別子と、格納状態と、実行結果データというフィールドを含む。リクエスト識別子フィールドには、リクエストのリクエスト識別子が格納される。格納状態フィールドには、実行結果データの格納状態を示す識別子が格納される。具体的には、格納状態フィールドには、実行結果データがまだ格納されていないことを示す「未格納」、実行結果データが格納されている間であることを示す「格納処理中」、実行結果データが既に格納されたことを示す「格納済み」のうちのいずれかが格納される。実行結果データフィールドには、実行結果データが格納される。
実施の形態2にかかるリクエストのフォーマットについては、図8、9で示した通りであるので図示を省略する。ただし、実施の形態2にかかるリクエストにおける実行前データフィールドには、実行前データが格納された格納先アドレスが格納されてもよい。同様に、実施の形態2にかかるリクエストにおける実行結果データフィールドには、実行結果データが格納された格納先アドレスが格納されてもよい。
負荷分散システム1500が実行するフローチャートについては、後述する実施の形態3にかかる負荷分散システムが実行するフローチャートと同一であるため、実施の形態3の説明の中で行う。
(実施の形態3の説明)
実施の形態3にかかる負荷分散システムは、負荷分散システム1500の構成に加えて、リクエストを受信したサーバがリクエストの処理を実行しない場合、振り分け先候補サーバテーブル411に格納された複数のサーバに対しまとめてリクエストを送信する。なお、実施の形態1、2において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。また、説明の簡略化のため、以下の説明における「サーバ」は、特に記載がない場合、実施の形態3にかかるサーバであるとする。
図18は、実施の形態3にかかる負荷分散システム1800の動作を示す図である。ここで、図18の(1)の処理と(2)の処理とは、それぞれ、図15の(1)の処理と(2)の処理と同一であるため、説明を省略する。
リクエストを受信したサーバは、受信したリクエストについての処理の可否を判定し、処理ができないと判定した場合に、振り分け先候補サーバテーブル411に格納されている複数のサーバに対してまとめてリクエストを送信する。図18の例では、リクエスト1511−Bを受信したサーバAは、リクエスト1511−Bについての処理を実行しないと判定する。そして、サーバAは、図18の(3)の処理として、サーバBにリクエスト1511−Bを送信するとともに、図18の(4)の処理として、サーバCにリクエスト1511−Cを送信する。
一方、リクエストを受信したサーバは、受信したリクエストについての処理の可否を判定し、処理ができると判定した場合に、実行前データ記憶装置1502から実行前データを読み出す。この際、処理ができると判定したサーバは、実行前データを読み出したことを示す情報を実行前データ記憶装置1502に格納する。実行前データを読み出したことを示す情報は、具体的には、図16に示す「読出済み」である。複数のサーバにリクエストを送信するため、あるサーバが実行前データ記憶装置1502に実行前データを読み出したことを示す情報を格納した後、あるサーバとは異なる他のサーバが、受信したリクエストについての処理ができると判定する場合がある。この場合、他のサーバは、実行前データ記憶装置1502から実行前データを読み出そうとするが、あるサーバによって実行前データが読み出されているため、他のサーバは、実行前データを読み出さないで処理を終了する。
図18の例では、サーバBは、リクエスト1511−Bに実行前データを格納した格納先アドレスが格納されているため、図15の(5)の処理において、格納先アドレスに対応する実行前データ1511−Aを実行前データ記憶装置1502から読み出す。なお、実行前データ1511−Aを読み出す際には、サーバBは、実行前データ1511−Aが他のサーバから読み出されていないことを示す情報、すなわち「未読出」であることを確認する。そして、サーバBは、実行前データ1511−Aに対応する読み出し状態を、「読出済み」に設定する。次に、サーバBは、読み出した実行前データ1511−Aを用いて、リクエスト1511−Bに応じた処理を実行する。
一方、サーバCは、リクエスト1511−Bに実行前データを格納した格納先アドレスが格納されているため、図15の(6)の処理において、格納先アドレスに対応する実行前データ1511−Aを実行前データ記憶装置1502から読み出そうとする。ここで、サーバCは、実行前データ1511−Aが既に読み出されていることを示す情報を取得し、実行前データを読み出さないで処理を終了する。図18の(7)の処理と(8)の処理と(9)の処理とは、それぞれ、図15の(5)の処理と(6)の処理と(7)の処理と同一であるため、説明を省略する。
このように、負荷分散システム1800は、サーバを一台ずつリクエストを転送することなく、リクエストが送信された複数のサーバの内の処理の可能なサーバがリクエストについての処理を実行することが可能となる。従って、負荷分散システム1800は、一台ずつのサーバにリクエストを転送するよりもリクエストについての処理が開始されるまでの時間が短縮できる効果がある。
図19は、負荷分散システム1800の機能構成例を示すブロック図である。複数のサーバの各サーバは、制御部1900を有する。制御部1900は、判断部401と、決定部402と、送信部403と、実行部404と、分散処理部1901と、読出部1902と、格納部1903とを含む。図19では、サーバAが有する機能構成を示す。他のサーバも、サーバAが有する機能と同等の機能を有する。以下の説明では、サーバAについて説明する。
制御部1900−Aは、記憶装置に記憶されたプログラムをCPU201が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図2に示したROM202、RAM203、ディスク205などである。また、各部の処理結果は、CPU201のレジスタや、CPU201のキャッシュメモリ等に格納される。
分散処理部1901−Aは、受信したリクエストを複数のサーバにまとめて送信する。読出部1902−Aは、受信したリクエストについての処理の可否を判定し、処理ができると判定した場合に、実行前データ記憶装置1502から実行前データを読み出す。格納部1903−Aは、実行結果データを、実行結果データ記憶装置1503に格納する。
次に、図20、図21を用いて、負荷分散システム1800が実行する実施の形態3にかかる分散処理をフローチャートとして示す。また、負荷分散システム1500も、図20、図21に示すフローチャートに従って動作する。
図20は、実施の形態3にかかる分散処理手順の一例を示すフローチャート(その1)である。また、図21は、実施の形態3にかかる分散処理手順の一例を示すフローチャート(その3)である。また、分散処理は、複数のサーバの各々のサーバが行う。図20、図21では、サーバAが実行する例を示す。
ここで、実施の形態3にかかる分散処理手順の一例を示すフローチャート(その2)は、図13で示したフローチャートと同一であるため、図示および説明を省略する。なお、図13で示したステップS1302の処理において、実施の形態3にかかるサーバは、振り分け先サーバを、複数決定する。さらに、図20に示すステップS2001〜S2007、S2009、S2010の各処理は、図12で示したステップS1201〜S1209の各処理と同一であるため、説明を省略する。
ステップS2007:Yesである場合、サーバAは、受信したリクエストの実行前データが、実行前データ記憶装置1502に格納されているか否かを判断する(ステップS2008)。受信したリクエストの実行前データが、実行前データ記憶装置1502に格納されていない場合(ステップS2008:No)、サーバAは、ステップS2009の処理に移行する。
受信したリクエストの実行前データが、実行前データ記憶装置1502に格納されている場合(ステップS2008:Yes)、サーバAは、実行前データの読出状態が次に示す識別子のいずれに一致するかを判断する(ステップS2101)。次に示す識別子は、「未読出」と、「読出処理中」と、「読出済み」とである。実行前データの読出状態が「読出処理中」か「読出済み」である場合(ステップS2101:「読出処理中」、「読出済み」)、サーバAは、リクエストを受信したときに登録したリクエスト識別子記憶テーブル413−Aのリクエスト識別子を削除する(ステップS2102)。ステップS2102の処理終了後、サーバAは、分散処理を終了する。
実行前データの読出状態が「未読出」である場合(ステップS2101:「未読出」)、サーバAは、実行前データの読出状態を、「読出処理中」に設定する(ステップS2103)。次に、サーバAは、実行前データを、実行前データ記憶装置1502から読み出す(ステップS2104)。そして、サーバAは、リクエストに対する処理を実行する(ステップS2105)。
次に、サーバAは、実行結果データのデータサイズがギガバイトオーダか否かを判断する(ステップS2106)。実行結果データのデータサイズがギガバイトオーダである場合(ステップS2106:Yes)、サーバAは、実行結果データ記憶テーブル1700の該当のリクエストの格納状態を、「格納処理中」に設定する(ステップS2107)。次に、サーバAは、実行結果データを、実行結果データ記憶装置1503に書き込む(ステップS2108)。そして、サーバAは、実行結果データの格納アドレスをクライアント装置1501に送信する(ステップS2109)。次に、サーバAは、実行結果データ記憶テーブル1700の該当のリクエストの格納状態を、「格納済み」に設定する(ステップS2110)。
一方、実行結果データのデータサイズがギガバイトオーダでない場合(ステップS2106:No)、サーバAは、実行結果データをクライアント装置1501に送信する(ステップS2111)。ステップS2110、またはステップS2111の処理終了後、サーバAは、実行前データの読出状態を、「読出済み」に設定する(ステップS2112)。ステップS2112の処理終了後、サーバAは、分散処理を終了する。
なお、実施の形態1〜3で説明した負荷分散方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本負荷分散プログラムは、ハードディスク、フレキシブルディスク、CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本負荷分散プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態1〜3に関し、さらに以下の付記を開示する。
(付記1)クライアント装置と接続する複数のサーバのうちの第1のサーバに、
前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信する、
処理を実行させることを特徴とする負荷分散プログラム。
(付記2)前記処理要求は、前記クライアント装置の識別情報を含むことを特徴とする付記1に記載の負荷分散プログラム。
(付記3)前記複数のサーバは、3以上のサーバであって、
前記処理要求を送信する処理は、
前記第1のサーバで実行しないと判断した場合、前記複数のサーバが形成する環状または直線状の論理的な通信経路において前記第1のサーバと隣接しており前記他のサーバとは異なる第2のサーバに、前記処理要求を送信することを特徴とする付記1または2に記載の負荷分散プログラム。
(付記4)前記複数のサーバは、3以上のサーバであって、
前記第1のサーバに、
前記第1のサーバで実行しないと判断した場合、前記複数のサーバが形成する環状または直線状の論理的な通信経路における前記第1のサーバと所定の方向で接続する前記複数のサーバの数未満であって2以上のサーバと、前記2以上のサーバの各々のサーバおよび前記第1のサーバの間の前記通信経路上での距離を表す情報と、を関連付けた情報を参照して、前記距離を表す情報に基づいて、前記2以上のサーバから第2のサーバを決定する、処理を実行させ、
前記処理要求を送信する処理は、
決定した前記第2のサーバに前記処理要求を送信する、
処理を実行させることを特徴とする付記1〜3のいずれか一つに記載の負荷分散プログラム。
(付記5)クライアント装置と接続する複数の負荷分散装置のうちの第1の負荷分散装置であって、
前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数の負荷分散装置のうちの前記第1の負荷分散装置とは異なる他の負荷分散装置から受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1の負荷分散装置で実行するか否かを判断し、
前記第1の負荷分散装置で実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
前記第1の負荷分散装置で実行しないと判断した場合、前記複数の負荷分散装置のうちの第2の負荷分散装置に前記処理要求を送信する、
制御部を有することを特徴とする負荷分散装置。
(付記6)クライアント装置と複数のサーバとを有する負荷分散システムであって、
前記クライアント装置は、
前記複数のサーバのうちの第1のサーバに処理要求を発行し、
前記第1のサーバは、
前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信し、
前記クライアント装置は、
前記複数のサーバのうちの前記処理要求に対する処理を実行したサーバから、前記処理要求に対する処理の結果を受信する、
ことを特徴とする負荷分散システム。
(付記7)クライアント装置と接続する複数のサーバのうちの第1のサーバが、
前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信する、
処理を実行することを特徴とする負荷分散方法。
A、B、C、Z サーバ
100、1500、1800 負荷分散システム
101、1501 クライアント装置
400 制御部
401 判断部
402 決定部
403 送信部
404 実行部
411 振り分け先候補サーバテーブル
412 自サーバ実行可能状態記憶テーブル
413 リクエスト識別子記憶テーブル

Claims (7)

  1. クライアント装置と接続する複数のサーバのうちの第1のサーバに、
    前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
    前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
    前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信する、
    処理を実行させることを特徴とする負荷分散プログラム。
  2. 前記処理要求は、前記クライアント装置の識別情報を含むことを特徴とする請求項1に記載の負荷分散プログラム。
  3. 前記複数のサーバは、3以上のサーバであって、
    前記処理要求を送信する処理は、
    前記第1のサーバで実行しないと判断した場合、前記複数のサーバが形成する環状または直線状の論理的な通信経路において前記第1のサーバと隣接しており前記他のサーバとは異なる第2のサーバに、前記処理要求を送信することを特徴とする請求項1または2に記載の負荷分散プログラム。
  4. 前記複数のサーバは、3以上のサーバであって、
    前記第1のサーバに、
    前記第1のサーバで実行しないと判断した場合、前記複数のサーバが形成する環状または直線状の論理的な通信経路における前記第1のサーバと所定の方向で接続する前記複数のサーバの数未満であって2以上のサーバと、前記2以上のサーバの各々のサーバおよび前記第1のサーバの間の前記通信経路上での距離を表す情報と、を関連付けた情報を参照して、前記距離を表す情報に基づいて、前記2以上のサーバから第2のサーバを決定する、処理を実行させ、
    前記処理要求を送信する処理は、
    決定した前記第2のサーバに前記処理要求を送信する、
    処理を実行させることを特徴とする請求項1〜3のいずれか一つに記載の負荷分散プログラム。
  5. クライアント装置と接続する複数の負荷分散装置のうちの第1の負荷分散装置であって、
    前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数の負荷分散装置のうちの前記第1の負荷分散装置とは異なる他の負荷分散装置から受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1の負荷分散装置で実行するか否かを判断し、
    前記第1の負荷分散装置で実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
    前記第1の負荷分散装置で実行しないと判断した場合、前記複数の負荷分散装置のうちの第2の負荷分散装置に前記処理要求を送信する、
    制御部を有することを特徴とする負荷分散装置。
  6. クライアント装置と複数のサーバとを有する負荷分散システムであって、
    前記クライアント装置は、
    前記複数のサーバのうちの第1のサーバに処理要求を発行し、
    前記第1のサーバは、
    前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
    前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
    前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信し、
    前記クライアント装置は、
    前記複数のサーバのうちの前記処理要求に対する処理を実行したサーバから、前記処理要求に対する処理の結果を受信する、
    ことを特徴とする負荷分散システム。
  7. クライアント装置と接続する複数のサーバのうちの第1のサーバが、
    前記クライアント装置から発行された処理要求を前記クライアント装置、または前記複数のサーバのうちの前記第1のサーバとは異なる他のサーバから受信した場合、所定の条件に基づいて、前記処理要求に対する処理を前記第1のサーバで実行するか否かを判断し、
    前記第1のサーバで実行すると判断した場合、前記処理要求に対する処理を実行して、前記処理要求に対する処理の結果を前記クライアント装置に送信し、
    前記第1のサーバで実行しないと判断した場合、前記複数のサーバのうちの第2のサーバに前記処理要求を送信する、
    処理を実行することを特徴とする負荷分散方法。
JP2014210303A 2014-10-14 2014-10-14 負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法 Pending JP2016081197A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014210303A JP2016081197A (ja) 2014-10-14 2014-10-14 負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014210303A JP2016081197A (ja) 2014-10-14 2014-10-14 負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法

Publications (1)

Publication Number Publication Date
JP2016081197A true JP2016081197A (ja) 2016-05-16

Family

ID=55958635

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014210303A Pending JP2016081197A (ja) 2014-10-14 2014-10-14 負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法

Country Status (1)

Country Link
JP (1) JP2016081197A (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH076110A (ja) * 1993-06-15 1995-01-10 Hitachi Ltd 分散処理システムの通信オーバヘッド低減方法
JP2008504600A (ja) * 2004-06-25 2008-02-14 テルコーディア テクノロジーズ インコーポレイテッド 分散要求ルーティング

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH076110A (ja) * 1993-06-15 1995-01-10 Hitachi Ltd 分散処理システムの通信オーバヘッド低減方法
JP2008504600A (ja) * 2004-06-25 2008-02-14 テルコーディア テクノロジーズ インコーポレイテッド 分散要求ルーティング

Similar Documents

Publication Publication Date Title
US10637947B2 (en) Scalable, real-time messaging system
US10630785B2 (en) Scalable, real-time messaging system
US9319363B1 (en) Scalable, real-time messaging system
US10333879B2 (en) Scalable, real-time messaging system
JP2013025497A (ja) 分散処理システム、分散処理方法、負荷分散装置、負荷分散方法、及び、負荷分散プログラム
US10484262B2 (en) Dynamic cloning of application infrastructures
US11102139B1 (en) Shared queue management utilizing shuffle sharding
US20190319901A1 (en) Scalable, real-time messaging system
US20190238637A1 (en) Data replication in scalable messaging system
US10659330B2 (en) Channel management in scalable messaging system
JP2016081197A (ja) 負荷分散プログラム、負荷分散装置、負荷分散システム、および負荷分散方法
US20170339086A1 (en) Efficient message exchange system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170704

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180416

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180501

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20181030