(57)【要約】【課題】処理定義情報が指定されたジョブをジョブ処理手段に分散処理させる際、ジョブキューに蓄積されている処理定義情報毎のジョブの数に基づいて自ジョブ処理手段が処理するジョブを自立的に決定する。【解決手段】各ジョブ処理部５０は、ジョブ処理部５０全てに共通した振分処理を実行することによってフローを各ジョブ処理部５０に振り分ける振分処理部５１と、自己に振り分けられたフローが指定されたジョブを実行するジョブ実行部５３と、を有し、振分処理部５１は、ジョブキュー１６に蓄積されている待ちジョブ数が増加条件を満たしたフローが存在する場合、当該フローの振分先とするジョブ処理部５０の数を増加させる。オートスケーラ１５は、当該フローが全てのジョブ処理部５０に振り分けられてもなお待ちジョブ数が増加条件を満たす場合にスケールアウトを実行する。【選択図】図３
2014197340.tif 000002
【特許請求の範囲】
【請求項１】
処理対象のデータに対して実施する処理を定義する処理定義情報が指定されたジョブをジョブキューに登録する登録手段と、
前記ジョブキューに蓄積されているジョブのうち自己に振り分けた処理定義情報が指定されたジョブのみを処理する１又は複数のジョブ処理手段と、
を有し、
前記各ジョブ処理手段は、
前記ジョブ処理手段全てに共通した振分処理を実行することによって処理定義情報を前記各ジョブ処理手段に振り分ける振分処理部と、
前記振分処理部により自己に振り分けられた処理定義情報が指定されたジョブを実行するジョブ実行部と、
を有し、
前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数に応じて当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増減させることを特徴とする分散処理システム。
【請求項２】
前記ジョブ処理手段の数を調整する調整手段を有し、
前記調整手段は、前記振分処理部により全ての前記ジョブ処理手段に振り分けられた処理定義情報が指定されたジョブの数が予め決められた第一のジョブ処理手段増加条件を満たした場合に前記ジョブ処理手段の数を増加させることを特徴とする請求項１に記載の分散処理システム。
【請求項３】
前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数が予め決められた増加条件を満たした場合、当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増加させることを特徴とする請求項１に記載の分散処理システム。
【請求項４】
前記振分処理部は、前記ジョブキューに蓄積されているジョブであって複数の前記ジョブ処理手段を振分先とした処理定義情報に指定されたジョブの数が予め決められた減少条件を満たした場合、当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を減少させることを特徴とする請求項１に記載の分散処理システム。
【請求項５】
前記調整手段は、前記ジョブキューに蓄積されているジョブの数が予め決められた第二のジョブ処理手段増加条件を満たした場合にも前記ジョブ処理手段の数を増加させることを特徴とする請求項２に記載の分散処理システム。
【請求項６】
前記調整手段は、前記ジョブキューに蓄積されているジョブの数が予め決められたジョブ処理手段減少条件を満たした場合に前記ジョブ処理手段の数を減少させることを特徴とする請求項２に記載の分散処理システム。
【請求項７】
コンピュータを、
処理対象のデータに対して実施する処理を定義する処理定義情報が指定されたジョブをジョブキューに登録する登録手段、
前記ジョブキューに蓄積されているジョブのうち自己に振り分けた処理定義情報が指定されたジョブのみを処理する１又は複数のジョブ処理手段、
として機能させ、
前記各ジョブ処理手段は、
前記ジョブ処理手段全てに共通した振分処理を実行することによって処理定義情報を前記各ジョブ処理手段に振り分ける振分処理部と、
前記振分処理部により自己に振り分けられた処理定義情報が指定されたジョブを実行するジョブ実行部と、
を有し、
前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数に応じて当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増減させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システム及びプログラムに関する。
【背景技術】
【０００２】
例えば、特許文献１には、イベントを処理する複数の処理サーバにかかる負荷を分散するために、コンテキスト依存振り分け装置がイベントの内容に応じた振り分けルールに従って当該イベントを処理する処理サーバを決定する技術が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−３０９７０１号公報
【特許文献２】特開２００７−３０６１３８号公報
【特許文献３】特開２００８−０４０７１８号公報
【特許文献４】特表２０１１−５１０３６７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、処理定義情報が指定されたジョブをジョブ処理手段に分散処理させる際、ジョブキューに蓄積されている処理定義情報毎のジョブの数に基づいて自ジョブ処理手段が処理するジョブを自立的に決定することを目的とする。
【課題を解決するための手段】
【０００５】
本発明に係る分散処理システムは、処理対象のデータに対して実施する処理を定義する処理定義情報が指定されたジョブをジョブキューに登録する登録手段と、前記ジョブキューに蓄積されているジョブのうち自己に振り分けた処理定義情報が指定されたジョブのみを処理する１又は複数のジョブ処理手段と、を有し、前記各ジョブ処理手段は、前記ジョブ処理手段全てに共通した振分処理を実行することによって処理定義情報を前記各ジョブ処理手段に振り分ける振分処理部と、前記振分処理部により自己に振り分けられた処理定義情報が指定されたジョブを実行するジョブ実行部と、を有し、前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数に応じて当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増減させることを特徴とする。
【０００６】
また、前記ジョブ処理手段の数を調整する調整手段を有し、前記調整手段は、前記振分処理部により全ての前記ジョブ処理手段に振り分けられた処理定義情報が指定されたジョブの数が予め決められた第一のジョブ処理手段増加条件を満たした場合に前記ジョブ処理手段の数を増加させることを特徴とする。
【０００７】
また、前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数が予め決められた増加条件を満たした場合、当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増加させることを特徴とする。
【０００８】
また、前記振分処理部は、前記ジョブキューに蓄積されているジョブであって複数の前記ジョブ処理手段を振分先とした処理定義情報に指定されたジョブの数が予め決められた減少条件を満たした場合、当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を減少させることを特徴とする。
【０００９】
また、前記調整手段は、前記ジョブキューに蓄積されているジョブの数が予め決められた第二のジョブ処理手段増加条件を満たした場合にも前記ジョブ処理手段の数を増加させることを特徴とする。
【００１０】
また、前記調整手段は、前記ジョブキューに蓄積されているジョブの数が予め決められたジョブ処理手段減少条件を満たした場合に前記ジョブ処理手段の数を減少させることを特徴とする。
【００１１】
本発明に係るプログラムは、コンピュータを、処理対象のデータに対して実施する処理を定義する処理定義情報が指定されたジョブをジョブキューに登録する登録手段、前記ジョブキューに蓄積されているジョブのうち自己に振り分けた処理定義情報が指定されたジョブのみを処理する１又は複数のジョブ処理手段、として機能させ、前記各ジョブ処理手段は、前記ジョブ処理手段全てに共通した振分処理を実行することによって処理定義情報を前記各ジョブ処理手段に振り分ける振分処理部と、前記振分処理部により自己に振り分けられた処理定義情報が指定されたジョブを実行するジョブ実行部と、を有し、前記振分処理部は、処理定義情報毎に集計された前記ジョブキューに蓄積されているジョブの数に応じて当該ジョブに指定された処理定義情報の振分先とする前記ジョブ処理手段の数を増減させることを特徴とする。
【発明の効果】
【００１２】
請求項１記載の発明によれば、処理定義情報が指定されたジョブをジョブ処理手段に分散処理させる際、ジョブキューに蓄積されている処理定義情報毎のジョブの数に基づいて自ジョブ処理手段が処理するジョブを自立的に決定することができる。
【００１３】
請求項２記載の発明によれば、処理定義情報が全てのジョブ処理手段に振り分けられてはじめてジョブ処理手段の数を増加させることができる。
【００１４】
請求項３記載の発明によれば、処理定義情報が振り分けられたジョブ処理手段にかかる負荷が増加した場合に、当該処理定義情報の振分先とするジョブ処理手段の数を増加させることができる。
【００１５】
請求項４記載の発明によれば、処理定義情報が振り分けられたジョブ処理手段にかかる負荷が減少した場合に、当該処理定義情報の振分先とするジョブ処理手段の数を減少させることができる。
【００１６】
請求項５記載の発明によれば、全てのジョブ処理手段にかかる負荷が増加した場合に、ジョブ処理手段の数を増加させることができる。
【００１７】
請求項６記載の発明によれば、全てのジョブ処理手段にかかる負荷が減少した場合に、ジョブ処理手段の数を減少させることができる。
【００１８】
請求項７記載の発明によれば、処理定義情報が指定されたジョブをジョブ処理手段に分散処理させる際、ジョブキューに蓄積されている処理定義情報毎のジョブの数に基づいて自ジョブ処理手段が処理するジョブを自立的に決定することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明に係る分散処理システムの一実施の形態を示した全体構成図である。
【図２】本実施の形態におけるジョブ管理サーバ及びジョブ実行サーバのハードウェア構成の一例を示した図である。
【図３】本実施の形態における分散処理システムのうちクラウド側のブロック構成の一例を示した図である。
【図４】本実施の形態におけるジョブキューに登録されるジョブに関する情報のデータ構成例を示した図である。
【図５】本実施の形態におけるジョブ処理部テーブル記憶部に設定されるジョブ処理部テーブルのデータ構成例を示した図である。
【図６】本実施の形態におけるフロー多重度テーブル記憶部に設定されるフロー多重度テーブルのデータ構成例を示した図である。
【図７】本実施の形態におけるジョブ処理部が行うジョブの実行処理を示したフローチャートである。
【図８】本実施の形態においてコンシステント・ハッシュ法に基づく円周上にジョブ処理部及びフローをマッピングする手順及びジョブ処理部に対するフローの振分状態を示した図である。
【図９】本実施の形態におけるジョブ管理サーバ側の処理を示したフローチャートである。
【図１０】本実施の形態においてジョブ数の増加に伴いコンシステント・ハッシュ法に基づく円周上にフローの複製及びジョブ処理部をマッピングする順番を示した図である。
【図１１】本実施の形態におけるジョブとジョブ処理部との関係を示した図である。
【図１２】本実施の形態において待ちジョブ数の減少に伴いコンシステント・ハッシュ法に基づく円周上にマッピングされたフローの複製及びジョブ処理部を削除する順番を示した図である。
【発明を実施するための形態】
【００２０】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【００２１】
図１は、本発明に係る分散処理システムの一実施の形態を示した全体構成図である。図１には、ジョブの実行を要求する装置の一例として設けられている画像形成装置１と、クラウド２の一部を構成するジョブ管理サーバ１０及びジョブ実行サーバ５が示されている。画像形成装置１は、スキャン機能、コピー機能、ネットワーク機能等が搭載されたコンピュータ内蔵の装置であり、ユーザの操作指示に応じてジョブをクラウド２へ投入することでジョブの実行を要求する。ジョブ管理サーバ１０は、クラウド２に向けて送られてきたジョブの実行要求を受け付け、その受け付けたジョブの管理を行う。ジョブ実行サーバ５は、ジョブ管理サーバ１０が受け付けたジョブを実行する。
【００２２】
図２は、本実施の形態におけるジョブ管理サーバ１０のハードウェア構成の一例を示した図である。本実施の形態においてジョブ管理サーバ１０を形成するサーバコンピュータは、従前から存在する汎用的なハードウェア構成で実現できる。すなわち、コンピュータは、図２に示したようにＣＰＵ６１、ＲＯＭ６２、ＲＡＭ６３、ハードディスクドライブ（ＨＤＤ）６４を接続したＨＤＤコントローラ６５、通信手段として設けられたネットワークコントローラ６６を内部バス６７に接続して構成される。なお、図示していないが、入力手段としてマウスとキーボード、表示装置としてディスプレイをそれぞれ接続する入出力コントローラを内部バス６７に接続して構成してもよい。
【００２３】
ジョブ実行サーバ５もジョブ管理サーバ１０と同じサーバコンピュータであることから、ジョブ実行サーバ５のハードウェアをジョブ管理サーバ１０と同じように構成してもよい。
【００２４】
図３は、本実施の形態における分散処理システムのうちクラウド２側のブロック構成の一例を示した図である。図３において、ジョブ管理サーバ１０は、ジョブ受付部１１、ジョブ管理部１２、ジョブ処理部監視部１３、ジョブキュー監視部１４、オートスケーラ１５、ジョブキュー１６、ジョブ処理部テーブル記憶部１７及びフロー多重度テーブル記憶部１８を有している。ジョブ受付部１１は、投入されたジョブを受け付ける。ジョブ受付部１１が受け付けるジョブには、処理対象のデータ、当該データに対して実施する一連の処理が定義された処理定義情報としてのフロー及び当該ジョブの実行を要求したユーザの識別情報（ユーザＩＤ）が少なくとも含まれている。フローには、フォルダからの取り出し、原稿のスキャン等処理対象とするデータの取込処理、イメージ加工、ＯＣＲ処理、フォーマット変換等の加工処理及びファックス、印刷、電子メール等処理結果の配信処理といった一連の処理の流れ及び各処理の内容について定義されている。ジョブ管理部１２は、登録手段として設けられ、ジョブ受付部１１が受け付けたジョブを受け取り、当該ジョブの識別情報（ジョブＩＤ）及び当該ジョブを受け付けた受付日時を付加してジョブキュー１６に登録する。ジョブ処理部監視部１３は、各ジョブ処理部５０が稼動しているかどうかを監視する。ジョブキュー監視部１４は、ジョブキュー１６に蓄積されているジョブの数を監視する。オートスケーラ１５は、調整手段として設けられ、ジョブ処理部５０の数を調整する。
【００２５】
図４は、本実施の形態におけるジョブキュー１６に登録されるジョブに関する情報のデータ構成例を示した図である。ジョブに関する情報には、ジョブ毎に、当該ジョブの識別情報（ジョブＩＤ）、当該ジョブの実行を要求したユーザの識別情報（ユーザＩＤ）、当該ジョブに指定されたフローの識別情報（フローＩＤ）、当該ジョブを受け付けた受付日時及び当該ジョブの処理対象として指定されたデータの一形態である文書が含まれている。なお、文書には、文書データそのものではなく文書データの格納先を特定する情報でもよい。
【００２６】
図５は、本実施の形態におけるジョブ処理部テーブル記憶部１７に設定されるジョブ処理部テーブルのデータ構成例を示した図である。ジョブ処理部テーブルは、ジョブ処理部監視部１３により更新される。ジョブ処理部テーブルには、ジョブ処理部５０毎に、当該ジョブ処理部５０の識別情報（ジョブ処理部ＩＤ）、当該ジョブ処理部５０のＩＰアドレス及び最終稼動通知時刻が対応付けして設定される。最終稼動通知時刻には、当該ジョブ処理部５０が稼働中であることを確認できた直近の時刻が設定される。
【００２７】
図６は、本実施の形態におけるフロー多重度テーブル記憶部１８に設定されるフロー多重度テーブルのデータ構成例を示した図である。フロー多重度テーブルは、ジョブキュー監視部１４により更新される。フロー多重度テーブルには、フロー毎に、当該フローの識別情報（フローＩＤ）及び多重度が対応付けして設定される。多重度には、当該フローを実行するジョブ処理部５０の数が設定される。本実施の形態では、１つのフローは基本的に１つのジョブ処理部５０に分担されるので、初期値として１が設定される。
【００２８】
ジョブ管理サーバ１０における各構成要素１１〜１５は、ジョブ管理サーバ１０を形成するコンピュータと、コンピュータに搭載されたＣＰＵ６１で動作するプログラムとの協調動作により実現される。また、各記憶手段１６〜１８は、ジョブ管理サーバ１０に搭載されたＨＤＤ６４あるいはＲＡＭ６３にて実現される。あるいは、クラウド２内の他の記憶手段をネットワーク経由で利用してもよい。
【００２９】
本実施の形態では、ジョブ管理サーバ１０が提供する機能を１台のサーバコンピュータにて提供するように図示したが、これに限る必要はなく、複数台のサーバコンピュータに分散して提供するように構成してもよい。
【００３０】
本実施の形態におけるジョブ処理部５０は、仮想的なコンピュータにより実現される。１台のジョブ実行サーバ５には、１又は複数の仮想的なコンピュータが構築される。各ジョブ処理部５０は、ジョブ処理手段として設けられ、ジョブキュー１６に登録されたジョブのうち自己に振り分けたフローが指定されたジョブのみを処理する。ジョブ処理部５０は、１つでもよいし複数でもよく、オートスケーラ１５により増減される。
【００３１】
ジョブ処理部５０は、振分処理部５１、ジョブ取得部５２、ジョブ実行部５３及び制御部５４を有している。振分処理部５１は、ジョブ処理部５０全てに共通した振分処理を実行することによってフローを各ジョブ処理部５０に振り分ける。ジョブ取得部５２は、処理候補とするジョブをジョブ管理サーバ１０から取得する。ジョブ実行部５３は、振分処理部５１により自ジョブ処理部５０に振り分けられたフローが指定されたジョブを実行する。制御部５４は、各構成要素５１〜５３と連携しながらジョブ処理部５０における実行制御を行う。
【００３２】
ジョブ実行サーバ５における各構成要素５１〜５４は、ジョブ実行サーバ５を形成するコンピュータと、コンピュータに搭載されたＣＰＵ６１で動作するプログラムとの協調動作により実現される。
【００３３】
本実施の形態で用いるプログラムは、通信手段により提供することはもちろん、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体に格納して提供することも可能である。通信手段や記録媒体から提供されたプログラムはコンピュータにインストールされ、コンピュータのＣＰＵがプログラムを順次実行することで各種処理が実現される。
【００３４】
ところで、本実施の形態におけるジョブ処理部５０は、全ての種類のフローが実行可能に構成されている。従って、どのジョブをどのジョブ処理部５０に振り分けても実行できるため、オートスケーリングが容易に行える。
【００３５】
ただ、ジョブを実行している間は、そのジョブに指定されたフローに関する情報をＲＡＭ６３に保持するため、実行対象とするフローの種類が異なるジョブが増えるとＲＡＭ６３を逼迫する。例えば、同じ１０個のジョブを並行して実行していたとしても、それが同じフローが指定されたジョブなのか、全て異なるフローが指定されたジョブなのかによって、ジョブ処理部５０におけるメモリ使用量が異なってくる。特に、対話など再開待ちのジョブのようにいつ終わるかわからないようなジョブが、種類の異なるフローでいくつも同時並行して実行されるような場合は、より顕著になる。
【００３６】
そこで、本実施の形態においては、ジョブの分散処理に関しては、実行中のジョブの数に基づく負荷に基づき振り分けるのではなく、フローの種類に従ってジョブを各ジョブ処理部５０に振り分けることによってジョブ処理部５０のリソースを効率良く利用するようにしている。
【００３７】
なお、ジョブ処理部５０が処理するのはジョブであり、そのジョブに指定されたフローに従って処理対象のデータに対して一連の処理を実施することになる。このように、本実施の形態では、フローの種類に従ってジョブを各ジョブ処理部５０に振り分けるので、説明の便宜上、ジョブ処理部５０は、「指定されたフローに従ってジョブを実行する」を単に「フローを実行する」と表現する場合もある。なお、本実施の形態においてジョブに対する「処理」と「実行」とはほぼ同義である。
【００３８】
本実施の形態では、上記のように実行するフローの種類によってジョブをジョブ処理部５０に振り分けることによってジョブ処理部５０のリソースを効率良く利用しつつジョブの分散処理を実現する。本実施の形態では、基本的には１つのフローは１つのジョブ処理部５０のみによって処理されるようにフローを振り分ける。ただ、指定されたフローに偏りが発生した場合、ジョブ数が増大したフローの実行を担当するジョブ処理部５０に処理が集中してしまうことになる。
【００３９】
そこで、本実施の形態においては、ジョブキュー監視部１４がジョブキュー１６に蓄積されたジョブをフローの種類毎に集計し、振分処理部５１は、その集計したジョブの数に応じてフローの振分先とするジョブ処理部５０の数を増減させることを特徴としている。具体的には、フロー毎のジョブの数が予め決められた増加条件を満たすようになった場合には、そのフローの振分先とするジョブ処理部５０の数を増やし、一方、ジョブ処理部５０の数を増やした後、フロー毎のジョブの数が予め決められた増加条件を満たすようになった場合には、そのフローの振分先とするジョブ処理部５０の数を減少させるようにしている。なお、振分先とするジョブ処理部５０の数を増減させる各条件については追って説明する。
【００４０】
次に、本実施の形態における動作について説明する。最初に、定期的に実施される処理について説明する。
【００４１】
まず、ジョブ処理部５０を予め決められた数用意する。本実施の形態では、３つジョブ処理部ＪＰ１〜ＪＰ３を用意することにする。ジョブ処理部監視部１３は、定期的に稼動しているかどうかを各ジョブ処理部５０に対して問い合わせる。各ジョブ処理部５０は、この問い合わせに応じて応答することによって自己が稼動していることを通知する。ジョブ処理部監視部１３は、ジョブ処理部５０からの通知を受けると、その通知したジョブ処理部５０に対応したジョブ処理部テーブルにおける最終稼動通知時刻を現在時刻にて更新する。なお、応答してこないジョブ処理部５０に対応する最終稼動通知時刻は更新されないままである。例えば、ジョブ処理部監視部１３が５分毎に問い合わせる場合、最終稼動通知時刻に現在時刻より５分以内の時刻が設定されていれば、当該ジョブ処理部５０は、稼働中であると認識され、一方、最終稼動通知時刻に現在時刻より５分より前の時刻が設定されていた場合、そのジョブ処理部５０は、現時点で稼動していないと認識される。
【００４２】
続いて、ジョブがジョブキュー１６に登録されるまでの動作について説明する。
【００４３】
例えば、ユーザが、画像形成装置１の操作パネルを操作することによって、フローのリストを表示させ、その中からジョブの実施に利用するフローを選択した後、原稿をスキャンさせる。このユーザ操作に応じて、画像形成装置１は、ジョブの実行要求をしたユーザを識別するユーザＩＤ、スキャン画像データ及びユーザにより指定されたフローを識別するフローＩＤを含むジョブを送信することによってクラウド２へ投入する。
【００４４】
クラウド２におけるジョブ受付部１１は、画像形成装置１からジョブが送られてくると、そのジョブを受け付け、ジョブ管理部１２に渡す。ジョブ管理部１２は、そのジョブにジョブを識別するジョブＩＤを新たに生成して割り付け、更に送られてきたジョブに含まれているユーザＩＤ、ジョブを受け付けた日時及び文書（スキャン画像データ）を付加してジョブキュー１６に登録する。なお、文書は、文書そのものではなく、文書の格納先を特定する情報でもよい。
【００４５】
次に、ジョブ処理部５０が行うジョブの実行処理について図７に示したフローチャートを用いて説明する。このジョブ実行処理において実施する振分処理では、Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ（コンシステント・ハッシュ法）を使用して各ジョブ処理部５０に各フローを振り分ける。この振分処理は、各ジョブ処理部５０において自立的に実行されるが、振分処理に用いられる入力値及び処理内容は全て同じであるため、各ジョブ処理部５０がこの振分処理を個々に実行したとしても同じ処理結果が得られるようになっている。
【００４６】
ジョブを新たに実行可能な状態にあるジョブ処理部５０は、ジョブキュー１６からジョブを取得する（ステップ１０１）。続いて、ジョブ処理部５０は、ジョブ処理部テーブルを参照することで（ステップ１０２）、現在稼動しているジョブ処理部５０を認識する。具体的には、ジョブ処理部監視部１３が５分毎に最終稼動通知時刻を更新する場合、振分処理部５１は、現在時刻と各最終稼動通知時刻との時間差を算出し、その算出結果が５分以内であるジョブ処理部５０を稼働中と判断する。ここでは、全てのジョブ処理部ＪＰ１〜ＪＰ３が稼動しているものとして説明する。振分処理部５１は、各ジョブ処理部５０のＩＰアドレスに基づいてハッシュを計算し、図８に示したようにコンシステント・ハッシュ法に基づく仮想的な円周上に各ジョブ処理部５０をマッピングする（ステップ１０３）。本実施の形態では、各ジョブ処理部５０の円周上における位置をバランス良くするため１００点〜２００点のハッシュを計算する。図８（ａ）において丸数字はジョブ処理部５０を表し、各数字１〜３が各ジョブ処理部ＪＰ１〜ＪＰ３に対応している。
【００４７】
なお、本実施の形態では、異なるハッシュ値が算出されるように、各ジョブ処理部５０におけるユニークな情報としてＩＰアドレスを用いるようにした。本実施の形態では、各ジョブ処理部５０のＩＰアドレスをジョブ処理部テーブルに登録しておき、このテーブルから取得するようにした。ただ、各ジョブ処理部５０にユニークな情報としては、他の情報を用いてもよい。また、ユニークな情報の取得先を内部に保持しておいてもよいし、ジョブ処理部テーブル以外から取得してもよい。
【００４８】
続いて、振分処理部５１は、フロー多重度テーブルを参照し（ステップ１０３）、各フローのフローＩＤをキーとしてハッシュを計算し、図８（ｂ）に示したように各ジョブ処理部５０がマッピングされた円周上に各フローをマッピングする（ステップ１０４）。図８（ｂ）において丸英字はフローを表し、各英字Ａ〜Ｅが各フローＡ〜Ｅに対応している。
【００４９】
以上の処理によって図８（ｂ）に示したように各ジョブ処理部ＪＰ１〜ＪＰ３及び各フローＡ〜Ｅが同じ仮想的な円周上にマッピングされる。コンシステント・ハッシュ法によると、どのフローがどのジョブ処理部５０に振り分けられるかということは、円周上の各フローを時計方向に動かせばよいことになっている。つまり、各フローは、自己より大きいハッシュ値であり、かつ最も近い値のジョブ処理部５０に振り分けられることになるので、図８（ｂ）に示した例によると、フローＡ，Ｂはジョブ処理部ＪＰ１に、フローＣ，Ｄはジョブ処理部ＪＰ２に、フローＥはジョブ処理部ＪＰ３に、それぞれ振り分けられる。
【００５０】
以上のように、自己が担当するフローが決定されると、制御部５４は、ステップ１０１において取得したジョブに指定されたフローを参照して、そのジョブが実行対象であるかどうかを判定する。例えば、ジョブ処理部ＪＰ１において、取得したジョブのフローがフローＡでもフローＢでもなければ（ステップ１０６でＮ）、自己の実行対象でないジョブを取得していたと判断して、そのジョブを実行せずにジョブキュー１６に登録されている次のジョブを取得しにいく（ステップ１０１）。
【００５１】
一方、取得したジョブのフローがフローＡ又はフローＢであれば（ステップ１０６でＹ）、制御部５４は、実行対象のジョブを取得していたと判断して、そのジョブの実行をジョブ実行部５３に指示し、ジョブ実行部５３は、この指示に応じてジョブの実行を開始する（ステップ１０７）。そして、制御部５４は、ジョブ管理部１２に削除指示を送ることによって、ジョブキュー１６に登録されている当該ジョブを削除させる（ステップ１０８）。なお、ジョブキュー１６からのジョブの取得、削除等ジョブ管理部１２が実施するジョブ管理自体は、従前と同じ方法でよい。
【００５２】
本実施の形態では、以上のようにジョブを取得する度に各ジョブ処理部５０及び各フローを同じ円周上に自動的にマッピングするようにした。各ジョブ処理部５０をジョブを取得する度に各ジョブ処理部５０をマッピングするようにしたのは、第一に、ジョブを取得してから次のジョブを取得するまでの間にジョブ処理部５０が増減した場合に対処するためである。仮に、図８（ｂ）に示した状態からフローの種類が変わらずにジョブ処理部ＪＰ３が削除された場合、フローＥはジョブ処理部ＪＰ３に代わってジョブ処理部ＪＰ１により実行されることになる。第二に、ジョブを取得してから次のジョブを取得するまでの間に新たなフローが追加された場合、そのフローを担当するジョブ処理部５０を決定する必要があるためである。このように、ジョブ処理部５０及びフローの増減に対応するために、本実施の形態では、ジョブを取得する度に各マッピング処理を実施することにしている。
【００５３】
もちろん、この手法に限定する必要はない。例えば、現時点におけるジョブ処理部テーブル及びフロー多重度テーブルの設定内容を一時保持しておき、ジョブを取得する度に一時保持しておいた設定内容と新たに取得したジョブ処理部テーブル及びフロー多重度テーブルの設定内容とに差異が生じたときにハッシュ計算をして各ジョブ処理部５０及び各フローを円周上にマッピングするようにしてもよい。
【００５４】
ところで、ジョブキュー１６に蓄積されたジョブがいずれかのジョブ処理部５０により取り出され実行されていく消費速度よりジョブキュー１６で実行されずに待ち状態となっているジョブの数（以下、単に「待ちジョブ数」とも称する）が増えていく増加速度が相対的に速ければ、ジョブキュー１６には、待ちジョブ数が増えていくことになる。また、あるフロー（例えばフローＡ）を実行するジョブ処理部ＪＰ１におけるジョブの消費速度よりフローＡが指定されたジョブの増える増加速度が相対的に速ければ、ジョブキュー１６には、フローＡの待ちジョブ数が増えていくことになる。本実施の形態では、１つのフローを１つのジョブ処理部５０で実行させることを基本としているので、このフローＡの待ちジョブ数の増加は、ジョブ処理部ＪＰ１における負荷の増大のみを招くことになる。これを解消するためには、ジョブ処理部ＪＰ１に加えて他のジョブ処理部５０をフローＡの分担先として追加して対応することが考えられる。フローの分担先を追加するためには、図８に示した円周上にフローＡの複製を作成し、このフローＡの複製が現時点で分担先となっているジョブ処理部ＪＰ１以外のジョブ処理部５０に振り分けられるようにマッピングすればよい。この「フローの複製」は、フローの分担先を追加することと同義である。例えば、フローＡの複製を、ジョブ処理部ＪＰ１が担当とはならない円周上の位置にマッピングすることで、フローＡを実行するジョブ処理部５０の数を増やすことになる。これにより、ジョブ処理部ＪＰ１にかかる負荷は軽減される。このフローの複製においても負荷の増加が解消できない場合、本実施の形態では、そのときにはじめてスケールアウトによりジョブ処理部５０の数を増やして負荷分散を行うようにしている。
【００５５】
図９は、本実施の形態におけるジョブ管理サーバ１０側の処理を示したフローチャートであるが、以下、実行待ちのジョブが増えることによって行うフローの複製及びスケールアウト等ジョブ負荷の分散処理について、図７及び図９に示したフローチャートを用いて説明する。なお、本実施の形態では、図９では、処理を定期的に繰り返し実行することを想定して、処理をその都度終了させるように図示したが、処理を終了させずに常時起動した状態にて（つまり、ステップ２０１に戻るように）処理を繰り返し実行するようにしてもよい。また、ここでは、図１０（ａ）に示したように３つのジョブ処理部ＪＰ１〜ＪＰ３が稼動し、５つのフローＡ〜Ｅが使用されているものとして説明する。なお、図１０（ａ）は図８（ｂ）と同じ図である。
【００５６】
ジョブキュー監視部１４は、ジョブキュー１６へのジョブの蓄積状況を監視するためにジョブの蓄積状況を取得する（ステップ２０１）。具体的には、待ちジョブ数をフロー毎に求める。そして、あるフローの待ちジョブ数が予め決められたフロー複製条件（増加条件）、例えば一定期間（例えば１０分間）待ちジョブ数が１０という閾値を超えていた状態が続いたというフロー複製条件を満たした場合（ステップ２０２でＹ）、フロー多重度テーブルにおける当該フローの多重度に１を加算する（ステップ２０６）。なお、ここでは、フローＡがはじめてフロー複製条件に合致したものとする。すなわち、ステップ２０３でＮと判断され、フローＡのフロー多重度が２に更新されたものとする。
【００５７】
図７において、ジョブ処理部５０における振分処理部５１は、ジョブ取得部５２によりジョブが取得された後（ステップ１０１）、ジョブ処理部テーブルを参照して（ステップ１０２）、各ジョブ処理部５０を円周上にマッピングする（ステップ１０３）。ここでは、ジョブ処理部ＪＰ１〜ＪＰ３とも稼動しているので、図８（ａ）に示したように、各ジョブ処理部ＪＰ１〜ＪＰ３は円周上にマッピングされる。
【００５８】
続いて、振分処理部５１は、フロー多重度テーブルを参照すると（ステップ１０４）、フローＡの多重度は２になっている。ここで、フロー多重度が１の場合の各フローのマッピングは、前述したとおりフローＡも含めて各フローのフローＩＤをキーとしてハッシュを計算し、円周上に各フローをマッピングする（ステップ１０５）。この状態を図１０（ａ）に示す。フローの複製が行われたことでフロー多重度が２の場合、振分処理部５１は、更に当該フローのフローＩＤを入力とするフロー多重度２用の所定の計算を行うことで、当該フローＩＤとは異なる値となるキーを生成する。そして、新たに生成したキーに基づきハッシュ計算を実行し、円周上にマッピングする（ステップ１０５）。この複製されたフローＡ７１が円周上にマッピングされたときの状態を図１０（ｂ）に示す。図１０（ｂ）の例に従うと、複製によるフローＡ（以下、「複製フローＡ」）７１は、複製フローＡ７１より大きく、かつ最も近いジョブ処理部ＪＰ３に振り分けられたことになる。換言すると、フローＩＤを入力としてキーを生成するフロー多重度２用の所定の計算は、ハッシュ計算によりフローＡがジョブ処理部ＪＰ１以外に分担されるようにキーを生成する必要がある。この後の処理（ステップ１０６〜１０８）については、すでに説明しているので、ここでの説明は省略する。
【００５９】
なお、ジョブ管理サーバ１０において、フロー多重度テーブルにおける当該フローの多重度に１を加算する処理（ステップ２０６）の後の処理（ステップ２０７〜２１１）については、追って説明する。
【００６０】
図１１は、本実施の形態におけるジョブとジョブ処理部５０との関係を示した図である。図１１には、ジョブキューに未だ実行されずに蓄積されているジョブと各ジョブ処理部５０に振り分けられて実行中のジョブとが示されている。図１１において、各ジョブは、当該ジョブに指定されたフローのフローＩＤに登録順に連続番号が付加され識別される。図１１（ａ）には、図１０（ａ）に対応したジョブの状態が示されている。図１１（ａ）によると、ジョブ処理部ＪＰ１にはＡ１、Ａ２、Ｂ１、Ａ３が振り分けられ実行中である。ジョブ処理部ＪＰ２にはＤ３、Ｄ４、Ｃ１が振り分けられ実行中である。ジョブ処理部ＪＰ３にはＥ１が振り分けられ実行中である。そして、ジョブキューには、Ａ４、Ａ５、．．．、Ａ１５が蓄積されている。このフローの複製が行われる前の段階では、図１０（ａ）に示したように、ジョブ処理部ＪＰ１にはフローＡとフローＢが振り分けられ、ジョブ処理部ＪＰ２にはフローＣとフローＤが振り分けられ、ジョブ処理部ＪＰ３にはフローＥが振り分けられる。
【００６１】
そして、フローＡの複製が作成され、図１０（ｂ）に示したように円周上にマッピングされると、図１１（ｂ）に示したように、フローＡが指定されたジョブ（Ａ４）７６は、ジョブ処理部ＪＰ３においても実行されるようになる。
【００６２】
ジョブ管理サーバ１０におけるジョブキュー監視部１４は、ジョブキュー１６へのジョブの蓄積状況を監視するためにジョブの蓄積状況を取得し、待ちジョブ数をフロー毎に求めたところ（ステップ２０１）、今なお一定期間、フローＡの待ちジョブ数が１０を超えていた場合というフロー複製条件を満たしているとすると（ステップ２０２でＹ）、この段階では、全てのジョブ処理部５０（具体的には、ジョブ処理部ＪＰ２）にフローＡが分担されていないので（ステップ２０３でＮ）、フロー多重度テーブルにおける当該フローの多重度に１を加算する（ステップ２０６）。これにより、フローＡのフロー多重度は３に更新される。
【００６３】
図７において、ジョブ処理部５０における振分処理部５１は、ジョブ取得部５２によりジョブが取得された後（ステップ１０１）、ジョブ処理部テーブルを参照して（ステップ１０２）、各ジョブ処理部５０を円周上にマッピングする（ステップ１０３）。ここでは、ジョブ処理部ＪＰ１〜ＪＰ３とも稼動しているので、図８（ａ）に示したように、各ジョブ処理部ＪＰ１〜ＪＰ３は円周上にマッピングされる。
【００６４】
続いて、振分処理部５１は、フロー多重度テーブルを参照すると（ステップ１０４）、フローＡの多重度は３になっている。そこで、振分処理部５１は、まずフロー多重度が１の場合の各フローのマッピングを行う。すなわち、各フローＡ〜ＥのフローＩＤをキーとしてハッシュを計算し、円周上に各フローをマッピングする（ステップ１０５）。この状態を図１０（ａ）に示す。続いて、振分処理部５１は、前述したフロー多重度２用の所定の計算を行うことで、当該フローＩＤとは異なる値となるキーを生成し、その新たに生成したキーに基づきハッシュ計算を実行し、円周上にマッピングする（ステップ１０５）。この複製されたフローＡ７１が円周上にマッピングされたときの状態を図１０（ｂ）に示す。振分処理部５１は、更に当該フローのフローＩＤを入力とするフロー多重度３用の所定の計算を行うことで、当該フローＩＤ及びフロー多重度２の際に求めたキーとは異なる値となるキーを生成する。そして、新たに生成したキーに基づきハッシュ計算を実行し、円周上にマッピングする（ステップ１０５）。この複製されたフローＡ７２が円周上にマッピングされたときの状態を図１０（ｃ）に示す。図１０（ｃ）の例に従うと、複製フローＡ７２は、複製フローＡ７２より大きく、かつ最も近いジョブ処理部ＪＰ２に振り分けられたことになる。換言すると、フローＩＤを入力としてキーを生成するフロー多重度３用の所定の計算は、ハッシュ計算によりフローＡがすでに分担されているジョブ処理部ＪＰ１及びジョブ処理部ＪＰ３以外に分担されるようにキーを生成する必要がある。この後の処理（ステップ１０６〜１０８）については、すでに説明しているので、ここでの説明は省略する。
【００６５】
この結果、図１１（ｃ）に示したように、フローＡが指定されたジョブ（Ａ１３）７７は、ジョブ処理部ＪＰ２においても実行されるようになる。
【００６６】
以上の処理を繰り返すことで、フローＡは、複数のジョブ処理部５０により実行されることになり、フローＡの待ちジョブ数がフロー複製条件を満たした状態が解消されなければ、上記のようにフローＡを振り分けるジョブ処理部５０の数が増加され、最終的に全てのジョブ処理部ＪＰ１〜ＪＰ３に分担されることになる。
【００６７】
ジョブ管理サーバ１０におけるジョブキュー監視部１４は、ジョブキュー１６へのジョブの蓄積状況を監視するためにジョブの蓄積状況を取得し、待ちジョブ数をフロー毎に求めたところ（ステップ２０１）、フローＡがフロー複製条件を満たしたとする。この場合（ステップ２０２でＹ）、ジョブキュー監視部１４は、続いて全てのジョブ処理部５０にフローＡが複製されているかを確認する。これは、稼働中のジョブ処理部５０の数とフロー多重度の値とを比較することで確認してもよい。全てのジョブ処理部５０にフローＡが複製されている場合（ステップ２０３でＹ）、この段階ではじめてスケールアウトを実施する。すなわち、フローＡがフロー複製条件を満たし、かつ全てのジョブ処理部５０に複製されたという、予め決められた第一のジョブ処理部増加条件を満たすことによって、ジョブキュー監視部１４がスケールアウトをオートスケーラ１５に指示すると、オートスケーラ１５は、この指示に応じてスケールアウトを行う（ステップ２０４）。また、ジョブ処理部監視部１３は、ジョブ処理部テーブルに新たに生成されるジョブ処理部に関するレコードを追加する更新を行う（ステップ２０５）。ここでは、ジョブ処理部ＪＰ４を追加したものとし、最終稼動通知時刻には現在時刻を設定する。続いて、ジョブキュー監視部１４は、フロー多重度テーブルにおける当該フローの多重度に１を加算する（ステップ２０６）。これにより、フローＡのフロー多重度は４に更新される。
【００６８】
図７において、ジョブ処理部５０における振分処理部５１は、ジョブ取得部５２によりジョブが取得された後（ステップ１０１）、ジョブ処理部テーブルを参照して（ステップ１０２）、各ジョブ処理部５０を円周上にマッピングする（ステップ１０３）。このとき、振分処理部５１は、ジョブ処理部ＪＰ１〜ＪＰ４が稼動していると認識し、図１０（ｄ）に示したように、ジョブ処理部ＪＰ１〜ＪＰ３に加え、符号７４で表したジョブ処理部ＪＰ４を円周上にマッピングする。
【００６９】
続いて、振分処理部５１は、フロー多重度テーブルを参照すると（ステップ１０４）、フローＡの多重度は４になっている。振分処理部５１は、フロー多重度テーブルの設定内容を参照に円周上に各フローをマッピングするが、フローＢ〜Ｅ及びフローＡの多重度が１から３までの処理は上記と同様なので説明を省略する。
【００７０】
更に、振分処理部５１は、前述したように当該フローのフローＩＤを入力とするフロー多重度４用の所定の計算を行うことで、当該フローＩＤとは異なる値となるキーを生成する。振分処理部５１は、フロー多重度４用の所定の計算を行うことで、当該フローＩＤ、フロー多重度２及びフロー多重度３の際に求めたキーとは異なる値となるキーを生成する。そして、新たに生成したキーに基づきハッシュ計算を実行し、円周上にマッピングする（ステップ１０５）。この複製されたフローＡ７３が円周上にマッピングされたときの状態を図１０（ｄ）に示す。図１０（ｄ）の例に従うと、複製フローＡ７３は、複製フローＡ７３より大きく、かつ最も近いジョブ処理部ＪＰ４に振り分けられたことになる。マッピングの位置について着目すると、複製フローＡ７１は、多重度３のときにはジョブ処理部ＪＰ３に分担されていたが、ジョブ処理部ＪＰ４がマッピングされることによってジョブ処理部ＪＰ４に分担されたことを意味する。つまり、フローＡは、ジョブ処理部ＪＰ１，ＪＰ２，ＪＰ４に振り分けられていることになる。そこで、ここでは、ジョブ処理部ＪＰ３に分担されるように複製フローＡ７３をマッピングする必要がある。この後の処理（ステップ１０６〜１０８）については、すでに説明しているので、ここでの説明は省略する。
【００７１】
このスケールアウトの結果、図１１（ｄ）に示したように、フローＡが指定されたジョブ（Ａ２１）７８は、ジョブ処理部ＪＰ４においても実行されるようになる。
【００７２】
以上のように、フローＡが全てのジョブ処理部５０により実行されるようになった後でもなおフローＡの待ちジョブ数がフロー複製条件を満たす状態が解消されなければ、スケールアウトにより対応される。この後もフローＡの待ちジョブ数がフロー複製条件を満たす状態が解消されなければ、スケールアウトが繰り返し実行される。このようにして負荷の分散が図られる。
【００７３】
上記説明したように、あるフロー（上記例ではフローＡ）の待ちジョブ数が増加した場合には、当該フローを実行するジョブ処理部５０の数を増やすことで対応するようにした。そして、当該フローを全てのジョブ処理部５０で対応してもなお待ちジョブ数が高い負荷の状態が維持される場合、すなわちフロー複製条件を満たす状態が続いた場合には、スケールアウトで対応するようにした。
【００７４】
ただ、あるフローの待ちジョブ数がフロー複製条件を満たしていなくても（図９におけるステップ２０２でＮ）、ジョブキュー１６における全待ちジョブ数がスケールアウト実施条件（予め決められた第二のジョブ処理部増加条件）に合致した場合、例えば一定期間（例えば１０分間）全待ちジョブ数が３０という閾値を超えていた状態が続いたというスケールアウト実施条件を満たした場合（ステップ２１２でＹ）、この場合もフローＡを処理するジョブ処理部５０全体において負荷の高い状態が続いていると判断してスケールアウトを行うようにしてもよい（ステップ２０４）。
【００７５】
なお、１つのフローを担当するジョブ処理部５０の数を増やすためのフロー複製条件は、上記例に限らず、ジョブの種類やジョブ処理部５０の性能等を考慮して適宜設定すればよい。スケールアウト実施条件においても同様である。例えば、待ちジョブ数をジョブ処理部５０の数で除算した値が一定期間所定の閾値を超えた場合や実行中及び再開待ちのジョブの数が一定期間所定の閾値を超えた場合などをスケールアウト実施条件として設定してもよい。
【００７６】
以上は、待ちジョブ数が増加した場合の対応について説明した。ここでは、上記処理の流れに従ってスケールアウトを実行した後に負荷が軽減された場合における処理について図９のステップ２０７〜２１１を用いて説明する。
【００７７】
現在、円周上には、図１２（ａ）に示したようにジョブ処理部ＪＰ１〜ＪＰ４及びフローＡ〜Ｅがマッピングされているとする。なお、図１２（ａ）は、図１０（ｄ）を同じ図である。
【００７８】
ステップ２０１で取得したジョブキュー１６の状況を参照して、複製フローの待ちジョブ数が予め決められた複製解除条件（減少条件）、例えば一定期間（例えば１０分間）待ちジョブ数が５という閾値を下回った状態が続いたという複製解除条件を満たした場合（ステップ２０７でＹ）、ジョブキュー監視部１４は、フロー多重度テーブルにおける当該複製フローの多重度を１減算する（ステップ２０８）。
【００７９】
図７において、ジョブ処理部５０における振分処理部５１は、ジョブ取得部５２によりジョブが取得された後（ステップ１０１）、ジョブ処理部テーブルを参照して（ステップ１０２）、各ジョブ処理部５０を円周上にマッピングする（ステップ１０３）。ここでは、ジョブ処理部ＪＰ１〜ＪＰ４とも稼動しているので、図１２（ａ）に示したように、各ジョブ処理部ＪＰ１〜ＪＰ４は円周上にマッピングされる。
【００８０】
続いて、振分処理部５１は、フロー多重度テーブルを参照すると（ステップ１０４）、フローＡの多重度は３になっている。従って、ここでは、前述したフローＡの多重度が３のときの処理を実行する（ステップ１０５）。つまり、多重度３のときのマッピング状態に戻るので、図１２（ｂ）に示したように図１２（ａ）における状態から複製フロー７３が削除されたようなマッピングの状態になる。
【００８１】
このように、複製フローが複製解除条件を満たすことによって削除される順番は、複製フロー７３、複製フロー７２、複製フロー７１と複製された順番の逆になる。
【００８２】
また、複製フローが複製解除条件を満たしていなくても、ジョブキュー１６における全待ちジョブ数がジョブ処理部減少条件に合致した場合、例えば一定期間（例えば１０分間）全待ちジョブ数が１０という閾値を下回った状態が続いたというジョブ処理部減少条件を満たした場合（ステップ２０９でＹ）、ジョブ処理部５０を削減する（ステップ２１０）。具体的には、ジョブ処理部監視部１３は、ジョブ処理部テーブルに設定されているジョブ処理部５０を削除する更新を行う（ステップ２１１）。いずれのジョブ処理部ＪＰ１〜ＪＰ４を削除対象としてよいが、本実施の形態では、追加されたジョブ処理部ＪＰ４を削除することにする。
【００８３】
図７において、ジョブ処理部５０における振分処理部５１は、ジョブ取得部５２によりジョブが取得された後（ステップ１０１）、ジョブ処理部テーブルを参照して（ステップ１０２）、各ジョブ処理部５０を円周上にマッピングする（ステップ１０３）。このとき、振分処理部５１は、ジョブ処理部ＪＰ１〜ＪＰ３が稼動していると認識し、円周上にマッピングする。このようにして、ジョブ処理部ＪＰ４は、削除されることになる。図１２（ｂ）の状態からジョブ処理部ＪＰ４が削除されたときの状態を図１２（ｃ）に示す。図１２（ｂ）では、ジョブ処理部ＪＰ３がフローＥを、ジョブ処理部ＪＰ４がフローＡを担当していたところ、ジョブ処理部ＪＰ４が削除されることによりフローＡ７１が再びジョブ処理部ＪＰ３に分担されることになる。この結果、ジョブ処理部ＪＰ３は、フローＡ，Ｅを担当することになる。
【００８４】
なお、解除対象とする複製フロー及び削減対象とするジョブ処理部５０は、必ずしも増加する順番の逆とする必要はなく、例えば各ジョブ処理部５０にかかる現在の負荷状況を考慮して、負荷の小さいジョブ処理部５０から削除するようにしてもよい。
【００８５】
本実施の形態においては、以上のように各ジョブ処理部５０がジョブキュー１６に蓄積される待ちジョブ数に応じてフローを担当するジョブ処理部５０の数を自立的に増減して負荷分散を行えるようにした。そして、全てのジョブ処理部５０が待ちジョブ数の多いフローの分担先となってはじめてスケールアウトを行うようにした。
【００８６】
なお、本実施の形態では、コンシステント・ハッシュ法を使用してフローの振分を行うようにしたが、これに代わる手法を用いてもよい、
【符号の説明】
【００８７】
１  画像形成装置、２  クラウド、５  ジョブ実行サーバ、１０  ジョブ管理サーバ、１１  ジョブ受付部、１２  ジョブ管理部、１３  ジョブ処理部監視部、１４  ジョブキュー監視部、１５  オートスケーラ、１６  ジョブキュー、１７  ジョブ処理部テーブル記憶部、１８  フロー多重度テーブル記憶部、５０  ジョブ処理部、５１  振分処理部、５２  ジョブ取得部、５３  ジョブ実行部、５４  制御部、６１  ＣＰＵ、６２  ＲＯＭ、６３  ＲＡＭ、６４  ハードディスクドライブ（ＨＤＤ）、６５  ＨＤＤコントローラ、６６  ネットワークコントローラ、６７  内部バス。
【図１】
2014197340.tif 000003
【図２】
2014197340.tif 000004
【図３】
2014197340.tif 000005
【図４】
2014197340.tif 000006
【図５】
2014197340.tif 000007
【図６】
2014197340.tif 000008
【図７】
2014197340.tif 000009
【図８】
2014197340.tif 000010
【図９】
2014197340.tif 000011
【図１０】
2014197340.tif 000012
【図１１】
2014197340.tif 000013
【図１２】
2014197340.tif 000014