(57)【要約】【課題】各サーバーが処理すべきイベントがそのサーバーに分配されるようにコンテキストに基づいた振り分けルールのみにしたがって処理を分散させる場合に比べて、本情報処理装置でのパイプラインの処理が遅くなった場合であっても、特定の第２の情報処理装置で処理が滞ってしまうことを防ぐようにした情報処理装置を提供する。【解決手段】情報処理装置の抽出手段は、本情報処理装置のパイプラインが空いている状態で処理を行った場合と、本情報処理装置のパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出すると、依頼手段は、前記抽出手段によって抽出されたパイプラインに対応する処理を、第２の情報処理装置に依頼する。【選択図】図１
2017049685.tif 000002
【特許請求の範囲】
【請求項１】
本情報処理装置のパイプラインが空いている状態で処理を行った場合と、本情報処理装置のパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出する抽出手段と、
前記抽出手段で抽出した本情報処理装置のパイプラインで実際に処理を行ったとした場合と、複数の第２の情報処理装置のパイプラインで処理を行った場合とを比較し、本情報処理装置のパイプラインで処理を行った場合よりも早く処理できる第２の情報処理装置を選択する選択手段と、
前記抽出手段によって抽出されたパイプラインに対応する処理を、前記選択手段で選択した第２の情報処理装置に依頼する依頼手段
を有する情報処理装置。
【請求項２】
前記選択手段は、本情報処理装置と第２の情報処理装置との間のデータの転送時間を含めて、該第２の情報処理装置のパイプラインで処理を行った場合の終了時間を算出する、
請求項１に記載の情報処理装置。
【請求項３】
前記依頼手段は、前記第２の情報処理装置への依頼として、前記処理の予約を行う、
請求項１又は２に記載の情報処理装置。
【請求項４】
前記依頼手段は、予約した時間よりも早く処理が可能である場合と、予約した時間には処理ができない場合に分けて、再度スケジューリングを行う、
請求項３に記載の情報処理装置。
【請求項５】
コンピュータを、
本コンピュータのパイプラインが空いている状態で処理を行った場合と、本コンピュータのパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出する抽出手段と、
前記抽出手段で抽出した本コンピュータのパイプラインで実際に処理を行ったとした場合と、複数の他の情報処理装置のパイプラインで処理を行った場合とを比較し、本コンピュータのパイプラインで処理を行った場合よりも早く処理できる他の情報処理装置を選択する選択手段と、
前記抽出手段によって抽出されたパイプラインに対応する処理を、前記選択手段で選択した他の情報処理装置に依頼する依頼手段
として機能させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
特許文献１には、処理サーバーを複数配置し、処理サーバーの前段にコンテキスト依存振り分け器を配置することで、それぞれの処理サーバーが設定された処理ルールを実行するために必要なイベントが適切に分配させるようにコンテキスト依存振り分け器に振り分けルールを設定する負荷分散システムを提供することを課題とし、処理の負荷分散のために、処理サーバーを複数配置し、イベント処理分散制御部がそれぞれの処理サーバーに別個のアプリケーションのためのイベント処理ルールをし、それにしたがって、イベント処理分散制御部がコンテキスト依存振り分け装置に、各サーバーが処理すべきイベントがそのサーバーに分配されるようにコンテキストに基づいた振り分けルールを設定することにより、処理サーバーの負荷分散を実現することが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−３０９７０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数の処理サーバーを用いて処理を行う分散処理が行われている。例えば、特許文献１には、各サーバーが処理すべきイベントがそのサーバーに分配されるようにコンテキストに基づいた振り分けルールにしたがって処理を分散させることが開示されている。
しかし、特許文献１に記載の技術では、振り分けルールのみにしたがって分散させるので、特定の処理サーバーに多くの処理が振り分けられてしまうことがあり、処理が滞ってしまうことがある。
本発明は、各サーバーが処理すべきイベントがそのサーバーに分配されるようにコンテキストに基づいた振り分けルールのみにしたがって処理を分散させる場合に比べて、本情報処理装置でのパイプラインの処理が遅くなった場合であっても、特定の第２の情報処理装置で処理が滞ってしまうことを防ぐようにした情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００５】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
【０００６】
請求項１の発明は、本情報処理装置のパイプラインが空いている状態で処理を行った場合と、本情報処理装置のパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出する抽出手段と、前記抽出手段で抽出した本情報処理装置のパイプラインで実際に処理を行ったとした場合と、複数の第２の情報処理装置のパイプラインで処理を行った場合とを比較し、本情報処理装置のパイプラインで処理を行った場合よりも早く処理できる第２の情報処理装置を選択する選択手段と、前記抽出手段によって抽出されたパイプラインに対応する処理を、前記選択手段で選択した第２の情報処理装置に依頼する依頼手段を有する情報処理装置である。
【０００７】
請求項２の発明は、前記選択手段は、本情報処理装置と第２の情報処理装置との間のデータの転送時間を含めて、該第２の情報処理装置のパイプラインで処理を行った場合の終了時間を算出する、請求項１に記載の情報処理装置である。
【０００８】
請求項３の発明は、前記依頼手段は、前記第２の情報処理装置への依頼として、前記処理の予約を行う、請求項１又は２に記載の情報処理装置である。
【０００９】
請求項４の発明は、前記依頼手段は、予約した時間よりも早く処理が可能である場合と、予約した時間には処理ができない場合に分けて、再度スケジューリングを行う、請求項３に記載の情報処理装置である。
【００１０】
請求項５の発明は、コンピュータを、本コンピュータのパイプラインが空いている状態で処理を行った場合と、本コンピュータのパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出する抽出手段と、前記抽出手段で抽出した本コンピュータのパイプラインで実際に処理を行ったとした場合と、複数の他の情報処理装置のパイプラインで処理を行った場合とを比較し、本コンピュータのパイプラインで処理を行った場合よりも早く処理できる他の情報処理装置を選択する選択手段と、前記抽出手段によって抽出されたパイプラインに対応する処理を、前記選択手段で選択した他の情報処理装置に依頼する依頼手段として機能させるための情報処理プログラムである。
【発明の効果】
【００１１】
請求項１の情報処理装置によれば、本情報処理装置でのパイプラインの処理が遅くなった場合であっても、特定の第２の情報処理装置で処理が滞ってしまうことを防ぐことができる。
【００１２】
請求項２の情報処理装置によれば、本情報処理装置と第２の情報処理装置との間のデータの転送時間を含めて算出した終了時間を用いて、第２の情報処理装置を選択することができる。
【００１３】
請求項３の情報処理装置によれば、第２の情報処理装置に処理の予約を依頼することができる。
【００１４】
請求項４の情報処理装置によれば、予約した時間よりも早く処理が可能である場合と、予約した時間には処理ができない場合に分けて、再度スケジューリングを行うことができる。
【００１５】
請求項５の情報処理プログラムによれば、本コンピュータでのパイプラインの処理が遅くなった場合であっても、特定の他の情報処理装置で処理が滞ってしまうことを防ぐことができる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態の構成例についての概念的なモジュール構成図である。
【図２】第１の実施の形態の構成例についての概念的なモジュール構成図である。
【図３】本実施の形態を利用したシステム構成例を示す説明図である。
【図４】第１の実施の形態の処理例を示すフローチャートである。
【図５】第１の実施の形態による処理例を示す説明図である。
【図６】第１の実施の形態による処理例を示す説明図である。
【図７】第１の実施の形態による処理例を示す説明図である。
【図８】サーバー情報管理テーブルのデータ構造例を示す説明図である。
【図９】サーバー情報管理テーブルのデータ構造例を示す説明図である。
【図１０】処理履歴管理テーブルのデータ構造例を示す説明図である。
【図１１】前提データテーブルのデータ構造例を示す説明図である。
【図１２】第１の実施の形態の処理例を示すフローチャートである。
【図１３】第１の実施の形態の処理例を示すフローチャートである。
【図１４】第１の実施の形態による処理例を示す説明図である。
【図１５】第１の実施の形態による処理例を示す説明図である。
【図１６】予約時の前提データテーブルのデータ構造例を示す説明図である。
【図１７】再スケジューリング方法テーブルのデータ構造例を示す説明図である。
【図１８】第２の実施の形態の構成例についての概念的なモジュール構成図である。
【図１９】第２の実施の形態の構成例についての概念的なモジュール構成図である。
【図２０】第２の実施の形態の処理例を示すフローチャートである。
【図２１】第２の実施の形態の処理例を示すフローチャートである。
【図２２】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００１７】
以下、図面に基づき本発明を実現するにあたっての好適な各種の実施の形態の例を説明する。
＜＜第１の実施の形態＞＞
図１は、第１の実施の形態（メインサーバー１００）の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム（コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム）、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態に応じて、又はそれまでの状況・状態に応じて定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、２以上の値（もちろんのことながら、全ての値も含む）が同じであってもよい。また、「Ａである場合、Ｂをする」という意味を有する記載は、「Ａであるか否かを判断し、Ａであると判断した場合はＢをする」の意味で用いる。ただし、Ａであるか否かの判断が不要である場合を除く。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」（社会システム）にすぎないものは含まない。
また、各モジュールによる処理ごとに又はモジュール内で複数の処理を行う場合はその処理ごとに、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、外部記憶媒体、通信回線を介した記憶装置、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）内のレジスタ等を含んでいてもよい。
【００１８】
本実施の形態である情報処理装置のメインサーバー１００は、第２の情報処理装置であるサブサーバー２００に対して処理を分散させるものであって、図１の例に示すように、ジョブ管理モジュール１０４、フロー文書ＤＢ１０８、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、ジョブ処理モジュール１２２、ジョブ解析モジュール１２８、フロー情報管理ＤＢ１３２、フロー登録モジュール１４０、フロー解析モジュール１４４、ワーク文書ＤＢ１５２、ジョブ処理状況管理モジュール１５６、処理履歴管理ＤＢ１６０、メインサーバー処理情報管理モジュール１６４、処理依頼判定モジュール１６８、サブサーバー登録モジュール１７２、サーバー情報管理ＤＢ１７６、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６を有している。なお、図１内の点線の矢印は、ジョブ投入前の情報の流れを示しており、実線の矢印は、ジョブ投入後の情報の流れを示している（他の図面においても同様）。
【００１９】
メインサーバー１００は、フロー処理内のジョブ処理を行うことの他に、フロー処理における負荷分散のために、ジョブを振り分けることを行う。各サブサーバー２００のパイプライン空き情報、送信するデータサイズ、ネットワーク情報等を用いて、ジョブを依頼するサブサーバー２００を決定する。ジョブを依頼する際にはデータの通信負荷を軽減させるために、メインサーバー１００で処理した場合にボトルネックとなるプラグインを判定し、そのデータを切り出して送るようにする。
なお、ジョブとは、ユーザーが記述したフロー定義に基づいて、自動的に実行される処理の単位の意である。
また、プラグインとは、フロー処理における特定の機能の意であり、例として入力検知、ドキュメント処理等がある。
パイプラインとは、フロー処理における特定の機能を処理する処理プロセスの意で、メインサーバー１００、各サブサーバー２００には１個以上の処理プロセスが存在することを前提とする。
空き情報とは、パイプラインが空いている時間帯の情報の意で、パイプラインの稼働状況とパイプラインの予約情報から算出する。
【００２０】
ジョブ管理モジュール１０４は、フロー文書ＤＢ１０８、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、ジョブ処理モジュール１２２、ジョブ解析モジュール１２８、フロー情報管理ＤＢ１３２、処理依頼判定モジュール１６８と接続されている。ジョブ管理モジュール１０４は、ユーザー１９７から文書１０２を受け付け、処理サーバー選定モジュール１１２からパイプライン情報（予約）１１４を受け取り、ジョブ処理モジュール１２２からジョブ処理状況１２４を受け取り、ジョブ解析モジュール１２８から切り取りデータ１３０を受け取り、フロー情報管理ＤＢ１３２からフロー情報・プラグイン情報１３４を受け取り、フロー文書ＤＢ１０８にオリジナル文書１０６を渡し、処理サーバー選定モジュール１１２にフロー・ジョブ情報、データサイズ１１０を渡し、パイプライン稼働状況管理モジュール１１８にパイプライン予約情報１１６を渡し、ジョブ処理モジュール１２２に切り取りデータフロー・ジョブ情報１２０を渡す。ジョブ管理モジュール１０４は、受け取ったジョブを管理する。ジョブとして、例えば、ユーザー１９７の指示によって、文字認識の処理対象とする文書１０２を受け取ることがある。
役割としては以下の６つがある。
（１）ジョブ解析モジュール１２８を使用することで、ジョブの切り取りデータを取得する。
（２）処理依頼判定モジュール１６８を使用することで、サブサーバー２００へジョブを依頼する必要があるプラグインがあるかを判定する。
（３）ジョブの依頼を託すために、ジョブの情報や切り取りデータ（フロー・ジョブ情報、データサイズ１１０）を処理サーバー選定モジュール１１２に渡す。
（４）メインサーバー１００自身で処理することが決定したら、メインサーバー１００自身のパイプライン稼働状況管理モジュール１１８がジョブの予約を行う。
（５）処理先としてジョブが到着後、予約した時間にジョブ処理モジュール１２２に処理を依頼する。
（６）ジョブ処理状況を取得し、必要に応じて予約の再スケジューリングを行う。詳細については、後述する。
【００２１】
フロー文書ＤＢ１０８は、ジョブ管理モジュール１０４と接続されており、ジョブ管理モジュール１０４からオリジナル文書１０６を受け取る。フロー文書ＤＢ１０８は、ジョブ管理モジュール１０４で受け付けた文書１０２（オリジナル文書１０６）を保存しておくためのデータベースである。
【００２２】
処理サーバー選定モジュール１１２は、ジョブ管理モジュール１０４、メインサーバー処理情報管理モジュール１６４、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６と接続されている。処理サーバー選定モジュール１１２は、ジョブ管理モジュール１０４からフロー・ジョブ情報、データサイズ１１０を受け取り、メインサーバー処理情報管理モジュール１６４からパイプライン空き情報、処理速度１４８を受け取り、処理サーバー計算モジュール１８６にデータサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４を渡し、処理サーバー計算モジュール１８６で決定した処理サーバーの情報を受け取る。先に処理サーバーにてパイプラインの予約を行うためにジョブ管理モジュール１０４にパイプライン情報（予約）１１４を渡す。処理サーバー選定モジュール１１２は、処理依頼判定モジュール１６８で抽出したメインサーバー１００のパイプラインで実際に処理を行ったとした場合と、複数のサブサーバー２００のパイプラインで処理を行った場合とを比較し、メインサーバー１００のパイプラインで処理を行った場合よりも早く処理できるサブサーバー２００を選択する。
そして、処理サーバー選定モジュール１１２は、処理依頼判定モジュール１６８によって抽出されたパイプラインに対応する処理を、選択したサブサーバー２００に依頼する。
また、処理サーバー選定モジュール１１２は、メインサーバー１００とサブサーバー２００との間のデータの転送時間を含めて、そのサブサーバー２００のパイプラインで処理を行った場合の終了時間を算出するようにしてもよい。
また、処理サーバー選定モジュール１１２は、サブサーバー２００への依頼として、処理の予約を行うようにしてもよい。
また、処理サーバー選定モジュール１１２は、予約した時間よりも早く処理が可能である場合と、予約した時間には処理ができない場合に分けて、再度スケジューリングを行うようにしてもよい。
【００２３】
具体的には、処理サーバー選定モジュール１１２は、処理サーバー（メインサーバー１００、サブサーバー２００を含む）の選定を行う。メインサーバー処理情報管理モジュール１６４及びサブサーバー処理情報管理モジュール１８２からパイプラインの空き情報と処理速度１４８を、ネットワーク情報管理モジュール１８０からネットワークの通信状況を取得し、送られてきたデータサイズとともに、メインサーバー１００、各サブサーバー２００での処理完了時間の算出を処理サーバー計算モジュール１８６に依頼する。返ってきた計算結果から処理完了時間が最も早い処理サーバーを処理の依頼先に決定する。処理の完了時間が最も早い処理サーバーを選定できるようにするためである。そして、処理サーバーのスケジュールを予約することで、他のジョブによる影響を受けずに処理をすることができるようにするためである。
【００２４】
より具体的には、処理サーバー選定モジュール１１２は、複数のサブサーバー２００の中から、ジョブを処理するサーバーを決定する。ジョブ管理モジュール１０４から処理サーバーの選定依頼を受けたタイミングで、以下の処理を行う。
（１）メインサーバー処理情報管理モジュール１６４及びサブサーバー処理情報管理モジュール１８２からパイプラインの空き情報及び処理速度を取得する。
（２）ネットワーク情報管理モジュール１８０からネットワークの通信速度を取得する。
（３）データサイズ、前記空き情報、前記処理速度、前記通信速度を処理サーバー計算モジュール１８６に渡す。
（４）処理サーバー計算モジュール１８６より返ってきた結果を比較し、最も早く処理完了するサーバーを処理の依頼先に決定する。
（５）処理の依頼先のジョブ管理モジュール１０４にパイプラインの予約を行う。
（６）処理の依頼先のサーバー情報を渡すことで、ジョブ管理モジュール１０４に処理依頼を通知する。
【００２５】
パイプライン稼働状況管理モジュール１１８は、ジョブ管理モジュール１０４、ジョブ処理モジュール１２２、処理履歴管理ＤＢ１６０、メインサーバー処理情報管理モジュール１６４と接続されている。パイプライン稼働状況管理モジュール１１８は、ジョブ管理モジュール１０４からパイプライン予約情報１１６を受け取り、ジョブ処理モジュール１２２からパイプライン稼働情報１２６を受け取り、処理履歴管理ＤＢ１６０と処理履歴１５８のやり取りをし、メインサーバー処理情報管理モジュール１６４に処理速度、パイプライン空き情報１６２を渡す。パイプライン稼働状況管理モジュール１１８は、メインサーバー１００自身のパイプラインの空き情報及び処理速度を通知する。役割としては以下の２つがある。
（１）パイプラインの空き情報（稼働状況及び予約情報）の更新通知がきたタイミングで、自サーバーのパイプラインの空き情報と処理速度をメインサーバー処理情報管理モジュール１６４に渡す。なお、パイプライン空き情報及び処理速度の更新は、パイプラインへの予約が入ったタイミング、実際に処理を開始するタイミング、処理が完了したタイミングで行う。また、処理速度は、処理履歴管理ＤＢ１６０に保存されたデータ累計から処理時間累計を割ることにより算出する。
（２）ジョブ処理モジュール１２２から処理完了通知が来たタイミングで、ジョブ処理モジュール１２２から送られてきた処理したデータサイズをデータ累計に足し、処理にかかった時間を処理時間累計に足すことで、処理履歴管理ＤＢ１６０の情報を更新する。
【００２６】
ジョブ処理モジュール１２２は、ジョブ管理モジュール１０４、パイプライン稼働状況管理モジュール１１８、ワーク文書ＤＢ１５２、ジョブ処理状況管理モジュール１５６と接続されている。ジョブ処理モジュール１２２は、ジョブ管理モジュール１０４から切り取りデータフロー・ジョブ情報１２０を受け取り、ジョブ管理モジュール１０４にジョブ処理状況１２４を渡し、パイプライン稼働状況管理モジュール１１８にパイプライン稼働情報１２６を渡し、ワーク文書ＤＢ１５２に処理文書１５０を渡し、ジョブ処理状況管理モジュール１５６にジョブ処理状況１５４を渡す。ジョブ処理モジュール１２２は、ジョブの加工処理を行う。例として、文字認識処理やイメージ加工などがある。ジョブの処理状況については、以下の通知を行う。
（１）１つの加工処理が終わるごとに、ジョブの処理結果をワーク文書ＤＢ１５２に保管する。
（２）処理状況のステータスをジョブ処理状況管理モジュール１５６に通知する。
（３）１つのプラグイン処理が開始したタイミングで、開始の旨をパイプライン稼働状況管理モジュール１１８に通知する。
（４）１つのプラグイン処理が完了したタイミングで、完了の旨をパイプライン稼働状況管理モジュール１１８に通知する。
（５）１つのプラグイン処理が完了したタイミングで、パイプライン稼働状況管理モジュール１１８に、処理にかかった時間と処理したデータサイズの情報を通知する。
【００２７】
ジョブ解析モジュール１２８は、ジョブ管理モジュール１０４、フロー情報管理ＤＢ１３２と接続されており、フロー情報管理ＤＢ１３２から関連プラグイン情報１３６を受け取り、ジョブ管理モジュール１０４に切り取りデータ１３０を渡す。ジョブ解析モジュール１２８は、プラグイン情報を取得し、関連するプラグインがあればそれも一連の処理としてまとめ、かつそれら処理に必要なデータも合わせて抽出を行う。データの送信にかかる負荷を少なくすることができるようにするためである。
【００２８】
具体的には、ジョブ解析モジュール１２８は、フロー・プラグイン情報をもとに、送られたジョブデータを解析する。ジョブが送られたタイミングで、プラグインとそれに関連するプラグイン情報（フロー情報管理ＤＢ１３２に事前に登録されている）を取得する。それらをまとめて一連の処理として切り出すとともに、文書データの中から処理に必要なデータを切り出して、ジョブ管理モジュール１０４に渡す。その後に、処理依頼判定モジュール１６８で、プラグインとそれに関連するプラグイン情報がボトルネックになるか判定する。例えば、領域指定文字認識処理をした結果を文書名設定で使用する場合は、フローの中から文書名設定と領域指定文字認識処理を取得し、文書データの中から領域指定文字認識処理に必要なデータ（切り取りデータ１３０）を抽出し、ジョブ管理モジュール１０４に渡す。その後に、文書名設定と領域指定文字認識処理がボトルネックになるかを判定する。
【００２９】
フロー登録モジュール１４０はフロー解析モジュール１４４と接続されており、フロー管理者１９９からのフロー情報１３８を受け付け、フロー解析モジュール１４４にフロー情報１４２を渡す。フロー登録モジュール１４０は、フロー管理者１９９（ユーザー）が所定のシステムの登録方法を用いることで、フロー定義であるフロー情報１３８（フロー情報１４２）をフロー解析モジュール１４４に渡して、フロー情報管理ＤＢ１３２に登録する。
【００３０】
フロー解析モジュール１４４は、フロー登録モジュール１４０、フロー情報管理ＤＢ１３２と接続されおり、フロー登録モジュール１４０からフロー情報１４２を受け取り、フロー情報管理ＤＢ１３２にフロー情報・プラグイン情報１４６を渡す。フロー解析モジュール１４４は、フロー登録モジュール１４０から渡されたフロー情報１４２を用いて、処理を行うプラグイン及びそのプラグインに関連するプラグインを解析する。解析結果（フロー情報・プラグイン情報１４６）はフロー情報管理ＤＢ１３２に保存する。
【００３１】
フロー情報管理ＤＢ１３２は、ジョブ管理モジュール１０４、ジョブ解析モジュール１２８、フロー解析モジュール１４４と接続されている。フロー情報管理ＤＢ１３２は、フロー解析モジュール１４４からフロー情報・プラグイン情報１４６を受け取り、ジョブ管理モジュール１０４にフロー情報・プラグイン情報１３４を渡し、ジョブ解析モジュール１２８に関連プラグイン情報１３６を渡す。フロー情報管理ＤＢ１３２は、フロー解析モジュール１４４による解析結果であるフロー情報・プラグイン情報１４６を登録しておくためのデータベースである。
例えば、フロー情報テーブルを記憶している。フロー情報テーブルは、フローＩＤとプラグインＩＤを対応させて記憶するテーブルである。
・フローＩＤは、フローを、本実施の形態で一意に識別するためのＩＤである。例えば、ＵＵＩＤ（Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  ＩＤｅｎｔｉｆｉｅｒ）を用いてもよい。
・プラグインＩＤとして、自プラグインＩＤ、前段プラグインＩＤのリスト、後段プラグインＩＤのリストがある。
このフロー情報テーブルを用いて、フローに関連するプラグイン情報を取得する場合は、そのフローのフローＩＤに対応するプラグインＩＤを抽出し、そのプラグインＩＤから前段プラグインＩＤ及び後段プラグインＩＤを取得する。また、前段プラグインＩＤ及び後段プラグインＩＤにさらに関連があるプラグインがあるかまで確認する。
【００３２】
ワーク文書ＤＢ１５２は、ジョブ処理モジュール１２２と接続されており、ジョブ処理モジュール１２２から処理文書１５０を受け取る。ワーク文書ＤＢ１５２は、ジョブ処理モジュール１２２によって処理されたデータ（処理文書１５０）を蓄積するデータベースである。
【００３３】
ジョブ処理状況管理モジュール１５６は、ジョブ処理モジュール１２２と接続されている。ジョブ処理モジュール１２２からジョブ処理状況１５４を受け取る。ジョブ処理状況管理モジュール１５６は、ジョブの加工中・異常終了・完了などの状況（ジョブ処理状況１５４）を管理する。メインサーバー１００にのみ存在する。
【００３４】
メインサーバー処理情報管理モジュール１６４は、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、処理依頼判定モジュール１６８、サーバー情報管理ＤＢ１７６と接続されている。メインサーバー処理情報管理モジュール１６４は、パイプライン稼働状況管理モジュール１１８から処理速度、パイプライン空き情報１６２を受け取り、処理サーバー選定モジュール１１２にパイプライン空き情報、処理速度１４８を渡し、処理依頼判定モジュール１６８にパイプライン空き情報、処理速度１６６を渡す。メインサーバー処理情報管理モジュール１６４は、メインサーバー１００のパイプラインの空き情報及び処理速度を取得・管理する。メインサーバー１００の空き情報を管理できるようにするためである。
具体的には、メインサーバー処理情報管理モジュール１６４は、メインサーバー１００での処理時間の計算に必要な情報を扱う。役割としては以下の２つがある。
（１）パイプラインの空き情報や処理速度（処理速度、パイプライン空き情報１６２、パイプライン空き情報、処理速度１４８）の更新があったタイミングで、サーバー情報管理ＤＢ１７６を更新する。
（２）パイプラインの空き情報や処理速度の情報取得の要求があったタイミングで、サーバー情報管理ＤＢ１７６の空き情報や処理速度を参照し、要求元（例えば、処理依頼判定モジュール１６８へパイプライン空き情報、処理速度１６６）に返す。
【００３５】
処理依頼判定モジュール１６８は、ジョブ管理モジュール１０４、メインサーバー処理情報管理モジュール１６４と接続されており、メインサーバー処理情報管理モジュール１６４からパイプライン空き情報、処理速度１６６を受け取る。処理依頼判定モジュール１６８は、メインサーバー１００のパイプラインが空いている状態で処理を行った場合と、メインサーバー１００のパイプラインで実際に処理を行ったとした場合とを比較し、終了時間の差分が予め定められた閾値よりも大きい又は以上であるパイプラインを抽出する。
【００３６】
具体的には、処理依頼判定モジュール１６８は、メインサーバー１００の全てのパイプラインが空いている場合と、実際にメインサーバー１００で処理した場合の時間を比較し、予め定められた閾値よりも差が大きい又は以上であるプラグインを把握する。メインサーバー１００で処理した場合に、ボトルネックとなるプラグイン情報を把握するようにしたものである。
より具体的には、処理依頼判定モジュール１６８は、プラグインごとにメインサーバー１００で処理した方がよいか、サブサーバー２００を活用した方がよいかを判定する。ジョブを受け取ったタイミングで、メインサーバー１００のパイプラインが全て空いている場合の処理完了時間と、実際のメインサーバー１００の処理完了時間を比較し、完了時間に差があるプラグインを抽出する。抽出結果（パイプライン情報（予約）１１４）をジョブ管理モジュール１０４に渡す。
【００３７】
サブサーバー登録モジュール１７２は、サーバー情報管理ＤＢ１７６と接続されており、システム管理者１９８からのサブサーバー情報１７０を受け付け、サーバー情報管理ＤＢ１７６にサブサーバー情報１７４を渡す。サブサーバー登録モジュール１７２は、システム管理者１９８の指示にしたがって、サブの処理サーバーとして使用するサブサーバー２００（サブサーバー情報１７０）を登録する。登録内容（サブサーバー情報１７４）はサーバー情報管理ＤＢ１７６に保存する。
【００３８】
サーバー情報管理ＤＢ１７６は、メインサーバー処理情報管理モジュール１６４、サブサーバー登録モジュール１７２、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２と接続されている。サーバー情報管理ＤＢ１７６は、サブサーバー登録モジュール１７２からサブサーバー情報１７４を受け取り、ネットワーク情報管理モジュール１８０と通信速度１７８のやり取りをし、サブサーバー処理情報管理モジュール１８２とサーバー情報１８８のやり取りをする。サーバー情報管理ＤＢ１７６は、メインサーバー１００、各サブサーバー２００におけるパイプラインの空き情報と処理速度及び前記ネットワーク情報を保持する。このサーバー情報管理ＤＢ１７６を参照するだけで、パイプラインの空き情報やネットワーク情報を取得できるようにするためである。
【００３９】
具体的には、サーバー情報管理ＤＢ１７６は、処理サーバーの情報を管理するデータベースである。役割としては以下の４つがある。
（１）システム管理者１９８によって登録されたサブの処理サーバー情報（サブサーバー情報１７４）を保存する。
（２）メインサーバー処理情報管理モジュール１６４から得られたパイプラインの空き情報と処理速度（サーバー情報１８８）を保存する。
（３）サブサーバー処理情報管理モジュール１８２から得られたパイプラインの空き情報と処理速度（サーバー情報１８８）を保存する。
（４）ネットワーク情報管理モジュール１８０から得られたネットワーク情報（通信速度１７８）を保存する。
【００４０】
なお、テーブルとしては以下の２つを用意する。
（Ａ）サーバー情報管理テーブル８００（図８を参照）
サーバー情報管理テーブル８００は、サーバーＩＤ、ＩＰアドレス、ユーザーＩＤ、パスワード、通信速度を対応させて記憶するテーブルである。つまり、サーバー情報管理テーブル８００は、サーバーＩＤ欄８０２、ＩＰアドレス欄８０４、ユーザーＩＤ欄８０６、パスワード欄８０８、通信速度欄８１０を記憶している。
・サーバーＩＤ欄８０２内のサーバーＩＤ（例えば、ＵＵＩＤ）は、サーバー（メインサーバー１００、各サブサーバー２００）を、本実施の形態で一意に識別するためのＩＤである。サーバーを識別するために使用し、サーバーを登録した際に機械的に割り振る。
・ＩＰアドレス欄８０４内のＩＰアドレスは、「＊＊＊．＊＊．＊＊．＊＊＊」の形式で表され、システム管理者１９８（ユーザー）が登録する。例えば、「１２３．４５．６７．８９０」等がある。
・ユーザーＩＤ欄８０６内のユーザーＩＤは、サーバー（メインサーバー１００、各サブサーバー２００）にアクセスするためのユーザーのＩＤである。システム管理者１９８等（ユーザー）が登録する。
・パスワード欄８０８内のパスワードは、サーバー（メインサーバー１００、各サブサーバー２００）にアクセスするためのユーザーのパスワードである。システム管理者１９８等（ユーザー）が登録する。
・通信速度欄８１０内の通信速度（メインサーバー１００では不要のため任意）は、例えば、「○○ｂｙｔｅ／ｓ」の形式で登録される。一定間隔ごとにｐｉｎｇを実行させ、ネットワークの通信速度を計測し、情報を更新する。
【００４１】
（Ｂ）サーバー情報管理テーブル９００（図９を参照）
サーバー情報管理テーブル９００は、サーバーＩＤ、プラグインＩＤ、パイプライン処理速度、パイプライン空き情報を対応させて記憶するテーブルである。つまり、サーバー情報管理テーブル９００は、サーバーＩＤ欄９０２、プラグインＩＤ欄９０４、パイプラインＡ処理速度欄９０６、パイプラインＡ空き情報欄９０８、パイプラインＢ欄９１０を記憶している。
・サーバーＩＤ欄９０２内のサーバーＩＤは、サーバー情報管理テーブル８００のサーバーＩＤと同じである。
・プラグインＩＤ欄９０４内のプラグインＩＤ（例えば、ＵＵＩＤ）は、プラグインを、本実施の形態で一意に識別するために使用し、事前に決められた値となっている。例えば、文字認識処理は「００１」等とする。
・パイプライン処理速度（パイプラインＡ処理速度欄９０６、パイプラインＢ欄９１０等）は、例えば、「○○ｂｙｔｅ／ｓ」の形式で登録される。例えば、パイプラインＡとは具体的に文字認識処理等のパイプラインを指す。
・パイプライン空き情報（パイプラインＡ空き情報欄９０８等）は、例えば、（ｔ１，  ｔ２），（ｔ３，  ｔ４）…（ｔｎ，  ＮＵＬＬ）のように、空き開始時間と空き終了時間のリストの形式で登録される。なお、終端のＮＵＬＬは空きを表す。
なお、パイプライン処理速度とパイプライン空き情報はパイプラインごとに用意する。
また、処理速度の算出において、利用実績のないサブサーバー２００は、例えば、メインサーバー１００と同じ処理速度として判断してもよい。また、利用実績のあるサブサーバー２００は、例えば、処理履歴管理ＤＢ１６０（処理履歴管理ＤＢ２６０）に記憶されたデータ累計を処理時間累計で除算することで、処理速度を算出すればよい。
【００４２】
ネットワーク情報管理モジュール１８０は、処理サーバー選定モジュール１１２、サーバー情報管理ＤＢ１７６と接続されており、サーバー情報管理ＤＢ１７６と通信速度１７８のやり取りをする。ネットワーク情報管理モジュール１８０は、複数の処理サーバーとのネットワーク情報（通信状況）を取得・管理する。データ転送にかかる時間を検知することができるようにするためである。なお、ネットワーク情報の取得は予め定められた間隔で行う。
具体的には、ネットワーク情報管理モジュール１８０は、データ送信時の転送速度を知るために、定期的にネットワークの通信状況を監視する。役割としては以下の２つがある。
（１）定期的にネットワークにテスト通信（例えば、ｐｉｎｇ）を行い、そこで得られたネットワーク情報（通信速度１７８等）をサーバー情報管理ＤＢ１７６に更新する。
（２）ネットワーク情報取得の要求があったタイミングで、サーバー情報管理ＤＢ１７６のネットワーク情報を参照し、要求元（例えば、処理サーバー選定モジュール１１２）に返す。
【００４３】
サブサーバー処理情報管理モジュール１８２は、処理サーバー選定モジュール１１２、サーバー情報管理ＤＢ１７６と接続されており、サーバー情報管理ＤＢ１７６とサーバー情報１８８のやり取りをする。サブサーバー処理情報管理モジュール１８２は、各サブサーバー２００のパイプラインの空き情報及び処理速度を取得・管理する。各サブサーバー２００の空き情報を管理できるようにするためである。
具体的には、サブサーバー処理情報管理モジュール１８２は、サブサーバー２００での処理時間の計算に必要な情報を扱う。役割としては以下の２つがある。
（１）空き情報や処理速度の更新があったタイミングで、サーバー情報管理ＤＢ１７６を更新する。
（２）空き情報や処理速度の情報取得の要求があったタイミングで、サーバー情報管理ＤＢ１７６の空き情報や処理速度（サーバー情報１８８）を参照し、要求元（例えば、処理サーバー選定モジュール１１２）に返す。
【００４４】
処理サーバー計算モジュール１８６は、処理サーバー選定モジュール１１２と接続されており、処理サーバー選定モジュール１１２とデータサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４のやり取りをする。処理サーバー計算モジュール１８６は、パイプラインの処理情報（空き情報と処理速度）、ネットワーク情報及びデータサイズをもとに、メインサーバー１００、各サブサーバー２００での処理完了時間を算出する。メインサーバー１００、各サブサーバー２００での処理の完了時間を把握できるようにするためである。
具体的には、処理サーバー計算モジュール１８６は、各サーバー（メインサーバー１００、各サブサーバー２００）での処理完了時間を算出するために、各サーバーでの処理時間を計算し、完了時間が早く処理できるサーバーの情報を返す。処理時間の計算には、メインサーバー１００及びサブサーバー２００のパイプラインの空き情報や処理速度、ネットワークの通信状況やジョブのデータサイズ（データサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４）をもとに行う。詳細については、後述する。
【００４５】
処理履歴管理ＤＢ１６０は、パイプライン稼働状況管理モジュール１１８と接続されている。処理履歴管理ＤＢ１６０は、パイプライン稼働状況管理モジュール１１８による処理速度の算出に必要な処理履歴１５８を蓄積するために、各サーバーに用意されているデータベースである。
例えば、処理履歴管理テーブル１０００を記憶している（図１０を参照）。処理履歴管理テーブル１０００は、プラグインＩＤ、パイプラインデータ累計、パイプライン処理時間累計を対応させて記憶している。つまり、処理履歴管理テーブル１０００は、プラグインＩＤ欄１００２、パイプラインＡデータ累計欄１００４、パイプラインＡ処理時間累計欄１００６、パイプラインＢ欄１００８を記憶している。
・プラグインＩＤ欄１００２内のプラグインＩＤは、サーバー情報管理テーブル８００のプラグインＩＤと同じである。
・パイプラインＡデータ累計欄１００４内のパイプラインＡデータ累計は、例えば、「○○ｂｙｔｅ」の形式で登録される。
・パイプラインＡ処理時間累計欄１００６内のパイプラインＡ処理時間累計は、例えば、「○○ｓ」の形式で登録される。
なお、パイプラインデータ累計とパイプライン処理時間累計はパイプラインごとに用意する。
【００４６】
図２は、第１の実施の形態（サブサーバー２００）の構成例についての概念的なモジュール構成図である。メインサーバー１００が処理を依頼するサブサーバー２００について説明する。なお、図２の例に示すメインサーバー１００は、サブサーバー２００との関係を有するモジュールであるジョブ管理モジュール１０４、処理サーバー選定モジュール１１２、ジョブ処理状況管理モジュール１５６、サブサーバー処理情報管理モジュール１８２を示している。ジョブ管理モジュール１０４は、サブサーバー２００のジョブ管理モジュール２０４と接続されており、ジョブ管理モジュール２０４に切り取りデータ、フロー・ジョブ情報２９２を渡す。処理サーバー選定モジュール１１２は、サブサーバー２００のジョブ管理モジュール２０４と接続されており、ジョブ管理モジュール２０４にパイプライン情報（予約）２９４を渡す。ジョブ処理状況管理モジュール１５６は、サブサーバー２００のジョブ管理モジュール２０４と接続されており、ジョブ管理モジュール２０４からジョブ処理状況２９０を受け取る。サブサーバー処理情報管理モジュール１８２は、サブサーバー２００のパイプライン稼働状況管理モジュール２１８と接続されており、パイプライン稼働状況管理モジュール２１８から処理速度、パイプライン空き情報２９６を受け取る。サブサーバー２００は、ジョブ管理モジュール２０４、パイプライン稼働状況管理モジュール２１８、ジョブ処理モジュール２２２、ワーク文書ＤＢ２５２、処理履歴管理ＤＢ２６０、外部サーバー登録モジュール２７２、外部サーバー情報管理ＤＢ２７６を有している。
【００４７】
サブサーバー２００のジョブ管理モジュール２０４はメインサーバー１００のジョブ管理モジュール１０４に相当し、パイプライン稼働状況管理モジュール２１８はメインサーバー１００のパイプライン稼働状況管理モジュール１１８に相当し、ジョブ処理モジュール２２２はメインサーバー１００のジョブ処理モジュール１２２に相当し、ワーク文書ＤＢ２５２はメインサーバー１００のワーク文書ＤＢ１５２に相当し、処理履歴管理ＤＢ２６０はメインサーバー１００の処理履歴管理ＤＢ１６０に相当し、外部サーバー登録モジュール２７２はメインサーバー１００のサブサーバー登録モジュール１７２に相当し、外部サーバー情報管理ＤＢ２７６はメインサーバー１００のサーバー情報管理ＤＢ１７６に相当する。また、サブサーバー２００のパイプライン予約情報２１４はメインサーバー１００のパイプライン情報（予約）１１４に相当し、切り取りデータフロー・ジョブ情報２２０はメインサーバー１００の切り取りデータフロー・ジョブ情報１２０に相当し、ジョブ処理状況２２４はメインサーバー１００のジョブ処理状況１２４に相当し、パイプライン稼働情報２２６はメインサーバー１００のパイプライン稼働情報１２６に相当し、処理文書２５０はメインサーバー１００の処理文書１５０に相当し、ジョブ処理状況２５４はメインサーバー１００のジョブ処理状況１５４に相当し、処理履歴２５８はメインサーバー１００の処理履歴１５８に相当し、外部サーバー情報２７０はメインサーバー１００のサブサーバー情報１７０に相当し、外部サーバー情報２７４はメインサーバー１００のサブサーバー情報１７４に相当し、外部サーバー情報２８８はメインサーバー１００のサーバー情報１８８に相当する。
【００４８】
ジョブ管理モジュール２０４は、パイプライン稼働状況管理モジュール２１８、ジョブ処理モジュール２２２、メインサーバー１００のジョブ管理モジュール１０４、処理サーバー選定モジュール１１２、ジョブ処理状況管理モジュール１５６と接続されている。ジョブ管理モジュール２０４は、ジョブ管理モジュール１０４から切り取りデータ、フロー・ジョブ情報２９２を受け取り、処理サーバー選定モジュール１１２からパイプライン情報（予約）２９４を受け取り、ジョブ処理モジュール２２２からジョブ処理状況２２４を受け取り、パイプライン稼働状況管理モジュール２１８にパイプライン予約情報２１４を渡し、ジョブ処理モジュール２２２に切り取りデータフロー・ジョブ情報２２０を渡し、ジョブ処理状況管理モジュール１５６にジョブ処理状況２９０を渡す。
【００４９】
パイプライン稼働状況管理モジュール２１８は、ジョブ管理モジュール２０４、ジョブ処理モジュール２２２、処理履歴管理ＤＢ２６０、外部サーバー情報管理ＤＢ２７６、メインサーバー１００のサブサーバー処理情報管理モジュール１８２と接続されている。パイプライン稼働状況管理モジュール２１８は、ジョブ管理モジュール２０４からパイプライン予約情報２１４を受け取り、ジョブ処理モジュール２２２からパイプライン稼働情報２２６を受け取り、外部サーバー情報管理ＤＢ２７６から外部サーバー情報２８８を受け取り、処理履歴管理ＤＢ２６０と処理履歴２５８のやり取りをし、サブサーバー処理情報管理モジュール１８２に処理速度、パイプライン空き情報２９６を渡す。
【００５０】
ジョブ処理モジュール２２２は、ジョブ管理モジュール２０４、パイプライン稼働状況管理モジュール２１８、ワーク文書ＤＢ２５２と接続されている。ジョブ処理モジュール２２２は、ジョブ管理モジュール２０４から切り取りデータフロー・ジョブ情報２２０を受け取り、ジョブ管理モジュール２０４にジョブ処理状況２２４を渡し、パイプライン稼働状況管理モジュール２１８にパイプライン稼働情報２２６を渡し、ワーク文書ＤＢ２５２に処理文書２５０を渡す。
ワーク文書ＤＢ２５２は、ジョブ処理モジュール２２２と接続されており、ジョブ処理モジュール２２２から処理文書２５０を受け取る。
処理履歴管理ＤＢ２６０は、パイプライン稼働状況管理モジュール２１８と接続されており、パイプライン稼働状況管理モジュール２１８と処理履歴２５８のやり取りをする。
【００５１】
外部サーバー登録モジュール２７２は、外部サーバー情報管理ＤＢ２７６と接続されており、システム管理者２９８からの外部サーバー情報２７０を受け付け、外部サーバー情報管理ＤＢ２７６に外部サーバー情報２７４を渡す。外部サーバー登録モジュール２７２は、サブサーバー２００のパイプラインの空き情報を通知するメインサーバー１００（外部サーバー情報２７０）を登録する。サブサーバー２００にメインサーバー１００の情報を登録するためである。
【００５２】
外部サーバー情報管理ＤＢ２７６は、パイプライン稼働状況管理モジュール２１８、外部サーバー登録モジュール２７２と接続されており、外部サーバー登録モジュール２７２から外部サーバー情報２７４を受け取り、パイプライン稼働状況管理モジュール２１８に外部サーバー情報２８８を渡す。外部サーバー情報管理ＤＢ２７６は、情報の通知先としての外部サーバーであるメインサーバー１００の情報を保管するデータベースである。つまり、サブサーバー２００がメインサーバー１００に稼働状況の通知を行うために、メインサーバー１００のサーバー情報を保管するデータベース。図８の例に示したサーバー情報管理テーブル８００と同等のテーブルを記憶している。つまり、サーバーＩＤ、ＩＰアドレス、ユーザーＩＤ、パスワード、通信速度を対応させて記憶している。
【００５３】
なお、メインサーバー１００及びサブサーバー２００に共通の構成として、以下のものがある。
パイプライン稼働状況管理モジュール１１８、パイプライン稼働状況管理モジュール２１８は、処理サーバー自身（メインサーバー１００、各サブサーバー２００）のパイプラインの処理情報（空き情報と処理速度）を取得し、更新の都度メインサーバー１００に（パイプライン稼働状況管理モジュール１１８はメインサーバー処理情報管理モジュール１６４に、パイプライン稼働状況管理モジュール２１８はサブサーバー処理情報管理モジュール１８２に）通知する。なお、パイプライン空き情報及び処理速度の更新は、パイプラインへの予約が入ったタイミング、実際に処理を開始するタイミング、処理が完了したタイミングで行う。また、処理速度は処理履歴管理ＤＢ１６０、処理履歴管理ＤＢ２６０の情報をもとに算出した値で、処理履歴管理ＤＢ１６０、処理履歴管理ＤＢ２６０内のデータはジョブ処理モジュール１２２、ジョブ処理モジュール２２２からの通知によりパイプライン稼働状況管理モジュール１１８、パイプライン稼働状況管理モジュール２１８が更新する。メインサーバー１００が各処理サーバーの処理速度を把握できるようにするためである。
処理履歴管理ＤＢ１６０、処理履歴管理ＤＢ２６０は、各パイプラインの処理データサイズと処理時間の履歴を保管するデータベースである。パイプライン稼働状況管理モジュール１１８、パイプライン稼働状況管理モジュール２１８によりデータが更新される。保管されている処理データサイズと処理時間を用いることで、各パイプラインの処理速度を把握するためである。
【００５４】
図３は、本実施の形態を利用したシステム構成例を示す説明図である。図３に示す例は、フロー処理の対象データを受け付ける画像処理装置３１０と、フロー処理におけるジョブ処理を行う複数のサブサーバー２００と、ジョブ処理とサブサーバー２００へのジョブの振り分けを行うメインサーバー１００によって構成されているシステムである。
図３（Ａ）に示す例では、メインサーバー１００Ａは、画像処理装置３１０Ａ、画像処理装置３１０Ｂ、画像処理装置３１０Ｃ、サブサーバー２００Ａ、サブサーバー２００Ｂ、サブサーバー２００Ｃ、サブサーバー２００Ｄと接続されている。メインサーバー１００Ｂは、画像処理装置３１０Ｄ、画像処理装置３１０Ｅ、画像処理装置３１０Ｆ、サブサーバー２００Ａ、サブサーバー２００Ｂ、サブサーバー２００Ｇ、サブサーバー２００Ｈと接続されている。ユーザー１９７の操作によって、画像処理装置３１０で文書１０２が読み込まれ、処理の選択が行われ、画像処理装置３１０からメインサーバー１００に対して指示が行われる。そして、メインサーバー１００では、その処理を分割して、分割後の処理を複数のサブサーバー２００に割り振る。割り振られたサブサーバー２００で処理が行われる。
図３（Ｂ）に示す例では、メインサーバー１００Ａ、メインサーバー１００Ｂ、画像処理装置３１０Ａ、画像処理装置３１０Ｂ、画像処理装置３１０Ｃ、サブサーバー２００Ａ、サブサーバー２００Ｂ、サブサーバー２００Ｃ、サブサーバー２００Ｄは、通信回線３９０を介してそれぞれ接続されている。通信回線３９０は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、メインサーバー１００、サブサーバー２００による機能は、クラウドサービスとして実現してもよい。
例えば、前述した文字認識処理の例では、画像処理装置３１０で、文字認識の対象となる文書（複数ページ）を読み込み、その文書画像をメインサーバー１００が受け取って、複数のサブサーバー２００で文字認識処理を行わせる処理が行われる。
【００５５】
図４は、第１の実施の形態の処理例を示すフローチャートである。
ステップＳ４０２では、ユーザー１９７は、文書１０２を投入する。ジョブ投入に該当する。
ステップＳ４０４では、ジョブ管理モジュール１０４は、ジョブを生成する。
ステップＳ４０６では、フロー文書ＤＢ１０８は、文書を格納する。
ステップＳ４０８では、処理依頼判定モジュール１６８は、処理依頼を判定する。
ステップＳ４１０では、ジョブ管理モジュール１０４は、判定結果を取得する。
【００５６】
ステップＳ４１２では、ジョブ解析モジュール１２８は、ジョブを解析する。
ステップＳ４１４では、ジョブ管理モジュール１０４は、解析結果を取得する。
ステップＳ４１６では、ジョブ管理モジュール１０４は、処理依頼を判断し、必要である場合はステップＳ４１８へ進み、不要である場合はステップＳ４４０へ進む。
ステップＳ４１８では、処理サーバー選定モジュール１１２は、サーバー情報を要求する。
ステップＳ４２０では、メインサーバー処理情報管理モジュール１６４は、稼働情報を取得する。
【００５７】
ステップＳ４２２では、サーバー情報管理ＤＢ１７６は、稼働情報を参照する。
ステップＳ４２４では、サブサーバー処理情報管理モジュール１８２は、稼働情報を取得する。
ステップＳ４２６では、サーバー情報管理ＤＢ１７６は、稼働情報を参照する。
ステップＳ４２８では、ネットワーク情報管理モジュール１８０は、通信情報を取得する。
ステップＳ４３０では、サーバー情報管理ＤＢ１７６は、通信情報を参照する。
【００５８】
ステップＳ４３２では、処理サーバー選定モジュール１１２は、サーバー情報を取得する。
ステップＳ４３４では、処理サーバー計算モジュール１８６は、処理完了時間を計算する。
ステップＳ４３６では、処理サーバー選定モジュール１１２は、処理サーバーを決定する。
ステップＳ４３８では、処理サーバー選定モジュール１１２は、処理サーバーを判断し、メインサーバー１００である場合はステップＳ４４０へ進み、サブサーバー２００である場合はステップＳ４４２へ進む。
ステップＳ４４０では、ジョブ管理モジュール１０４は、ジョブを取得する。
【００５９】
ステップＳ４４２では、ジョブ管理モジュール２０４は、ジョブを取得する。
ステップＳ４４４では、パイプライン稼働状況管理モジュール２１８は、予約情報を取得する。
ステップＳ４４６では、ジョブ処理モジュール２２２は、ジョブを処理する。
ステップＳ４４８では、パイプライン稼働状況管理モジュール１１８は、予約情報を取得する。
ステップＳ４５０では、ジョブ処理モジュール１２２は、ジョブを処理する。
【００６０】
ステップＳ４５２では、ジョブ処理状況管理モジュール１５６は、処理状況を取得する。
ステップＳ４５４では、メインサーバー処理情報管理モジュール１６４は、稼働情報を取得する。
ステップＳ４５６では、サーバー情報管理ＤＢ１７６は、稼働情報を更新する。
ステップＳ４５８では、サブサーバー処理情報管理モジュール１８２は、稼働情報を取得する。
ステップＳ４６０では、サーバー情報管理ＤＢ１７６は、稼働情報を更新する。
ステップＳ４５０からステップＳ４５４へ、そして、ステップＳ４４６からステップＳ４５８へ処理を移す場合に、ジョブの予約時と処理の開始時・完了時に通知する。
【００６１】
以下に、パイプラインＡ、パイプラインＢを用いた場合の処理例を説明する。なお、パイプラインＡ、パイプラインＢという記載は、例えば文字認識処理、文書名設定などの具体的な処理のパイプラインを表す。また、ここではパイプラインＡ、パイプラインＢの２つしか記載しないが、実際にはプラグインの数だけ存在する。
（１）関連するジョブを抽出する。
（２）ジョブ投入
（３）メインサーバー１００の全てのパイプラインが空いていた場合の処理完了時間を、以下のように算出する。
パイプラインＡ処理完了時間＝（データサイズ÷パイプラインＡ処理速度）
パイプラインＢ処理完了時間＝パイプラインＡ処理完了時間＋（データサイズ÷パイプラインＢ処理速度）
【００６２】
（４）メインサーバー１００で処理する場合の処理完了時間を、以下のように算出する。
パイプラインＡ’処理完了時間＝パイプラインＡ空き情報から（データサイズ÷パイプラインＡ処理速度）の時間分を確保した時間
パイプラインＢ’処理完了時間＝パイプラインＡ’処理完了時間＋パイプラインＢ空き情報から（データサイズ÷パイプラインＢ処理速度）の時間分を確保した時間
（５）全てのパイプラインが空いていた場合の各パイプラインの処理完了時間と、実際にメインサーバー１００で処理する場合の各パイプラインの処理完了時間を、以下のように比較する。なお、閾値は処理するパイプラインごとに比例する閾値と、１つのパイプラインでの差分における閾値の２つを用意する。
「（パイプラインＡ’処理完了時間）−（パイプラインＡ処理完了時間）」と「処理するパイプラインごとに比例する閾値」とを比較する。
「（パイプラインＢ’処理完了時間）−（パイプラインＢ処理完了時間）」と「処理するパイプラインごとに比例する閾値」とを比較する。
「（（パイプラインＢ’処理完了時間）−（パイプラインＡ’処理完了時間））−（（パイプラインＢ処理完了時間）−（パイプラインＡ処理完了時間））」と「１つのパイプラインでの差分における閾値」とを比較する。
どのプラグインも閾値以内だった場合、メインサーバー１００で処理する。そして、振り分け処理は完了させる。
また、閾値外だった場合は（６）の処理に進む。
【００６３】
（６）閾値を超えたプラグインについて、関連するプラグイン情報をフロー情報管理ＤＢ１３２より取得する。
なお、フローを登録する際にフローを解析して関連するプラグイン情報をもっているものとする。
例えば、文字認識処理をするには前段のイメージ加工も一緒に行う必要がある場合、文字認識処理に関連するプラグインとして、イメージ加工を取得することになる。
（７）処理サーバー選定モジュール１１２に文書情報とフロー情報を渡して処理を依頼する。
【００６４】
図５は、第１の実施の形態（処理依頼判定モジュール１６８）による処理例を示す説明図である。
図５の例を用いて、メインサーバー１００におけるプラグインＡ、プラグインＢ、プラグインＣ、プラグインＤの処理依頼の判定処理を説明する。
全て空きの状態で処理する場合（図５の例では上段）、パイプラインＡではジョブ処理時間５１２、パイプラインＢではジョブ処理時間５１４、パイプラインＣではジョブ処理時間５１６、パイプラインＤではジョブ処理時間５１８に割りあてる。
実際に処理する場合（図５の例では下段）、パイプラインＡでは別ジョブの予約・処理時間５３２、パイプラインＢでは別ジョブの予約・処理時間５３４、パイプラインＣでは別ジョブの予約・処理時間５３６、パイプラインＤでは別ジョブの予約・処理時間５３８、別ジョブの予約・処理時間５４０があるので、パイプラインＡではジョブ処理時間５２２、パイプラインＢではジョブ処理時間５２４、パイプラインＣではジョブ処理時間５２６、パイプラインＤではジョブ処理時間５２８のように割りあてることとなる。
【００６５】
プラグインごとに、関連するプラグインがあれば、一連の処理としてまとめて切出し、メインサーバー１００のパイプライン（パイプラインＡ、パイプラインＢ、パイプラインＣ、パイプラインＤ）が全て空いている場合の処理完了時間と、メインサーバー１００で実際に処理する場合の処理完了時間を比較する。予め定められた閾値よりも大きいプラグインについて、関連するプラグインとともに処理を切り出して、サブサーバー２００で処理した場合との比較を行う。
図５に示す例では、プラグインＣ（パイプラインＣ）の処理完了時間（ジョブ処理時間５２６の右端）は、メインサーバー１００で処理するときに、他ジョブ（別ジョブの予約・処理時間５３６等）の予約により完了時間が遅くなり、閾値オーバー５１０となってしまっているので、それらを処理するサーバーの選定を行う。
なお、図５に示す例のように、別ジョブの予約に抜けがあるのは、前段の処理に時間がかかるために、間を開けて予約しているケースがあるからである。
【００６６】
図６は、第１の実施の形態（処理サーバー計算モジュール１８６）による処理例を示す説明図である。図６の例を用いて、メインサーバー１００、各サブサーバー２００においてプラグインＡ、プラグインＢの処理を行う場合の概要を説明する。
処理サーバー計算モジュール１８６では、以下の計算式を用いて、処理完了時間を算出する。
処理完了時間（メインサーバー１００）＝Σ（他ジョブ処理・待ち時間＋処理データサイズ÷処理速度）
処理完了時間（サブサーバー２００）＝Σ（他ジョブ処理・待ち時間＋処理データサイズ÷処理速度）＋処理データサイズ÷サイズあたりの通信速度×２
そして、メインサーバー１００よりも早く処理できるサブサーバー２００のうち、最も早く処理が完了するサブサーバー２を依頼先に決定する。
【００６７】
メインサーバー１００において、パイプラインＡでは別ジョブの予約・処理時間６２８、パイプラインＢでは別ジョブの予約・処理時間６３０があるので、パイプラインＡではジョブ処理時間６１２、パイプラインＢではジョブ処理時間６１４のように割りあてることとなる。
サブサーバー１において、パイプラインＡでは別ジョブの予約・処理時間６３２、パイプラインＢでは別ジョブの予約・処理時間６３４、別ジョブの予約・処理時間６３６があり、パイプラインＡではデータ転送時間６４８が必要であるので、ジョブ処理時間６１６のように割りあてることとなり、パイプラインＢでは、ジョブ処理時間６１８のように割りあてることとなり、その後、データ転送時間６５０が必要となる。
サブサーバー２において、パイプラインＡでは別ジョブの予約・処理時間６３８、パイプラインＢでは別ジョブの予約・処理時間６４０があり、パイプラインＡではデータ転送時間６５２が必要であるので、ジョブ処理時間６２０のように割りあてることとなり、パイプラインＢでは、ジョブ処理時間６２２のように割りあてることとなり、その後、データ転送時間６５４が必要となる。
サブサーバー３において、パイプラインＡでは別ジョブの予約・処理時間６４２、パイプラインＢでは別ジョブの予約・処理時間６４４、別ジョブの予約・処理時間６４６があり、パイプラインＡではデータ転送時間６５６が必要であるので、ジョブ処理時間６２４（図６では２つに分かれている）のように割りあてることとなり、パイプラインＢでは、ジョブ処理時間６２６（図６では２つに分かれている）のように割りあてることとなり、その後、データ転送時間６５８が必要となる。
なお、図６に示す例のように別ジョブの予約に抜けがあるケースは、以下の２つがある。
・サブサーバー２００へのジョブの転送に時間がかかるため、間を空けて予約している。
・処理サーバー（メインサーバー１００、サブサーバー２００）までジョブが届いているが、前段の処理に時間がかかるために、間を空けて予約している。
【００６８】
図７は、第１の実施の形態による処理例を示す説明図である。図７の例を用いて、各処理サーバーにおいてプラグインＡ、プラグインＢの処理を行う場合の概要を説明する。
サブサーバー２に対しての予約の結果として、図７の対象７１０内で、図６の例に示したジョブ処理時間６２０を当該ジョブの予約７２０とし、図６の例に示したジョブ処理時間６２２を当該ジョブの予約７２２としたものである。
【００６９】
次に、図１１〜図１４を用いて、処理サーバー計算モジュール１８６による処理例を説明する。
処理サーバー計算モジュール１８６は、処理にあたって、前提データテーブル１１００を用いる。図１１は、前提データテーブル１１００のデータ構造例を示す説明図である。前提データテーブル１１００は、サブサーバー台数欄１１０２、データサイズ欄１１０４、パイプライン空き情報欄１１０６、パイプライン処理速度欄１１０８、当該フローにおけるプラグインのリスト欄１１１０、通信速度欄１１１２を記憶している。
サブサーバー台数欄１１０２内のサブサーバー台数は、サブサーバーの台数を、例えば、「○○台」の形式で登録される。
データサイズ欄１１０４内のデータサイズは、サブサーバーに依頼する処理対象のデータサイズを、例えば、「○○ｂｙｔｅ」の形式で登録される。
パイプライン空き情報欄１１０６内のパイプライン空き情報は、開始空き時間と終了空き時間のリストであり、サブサーバー２００のパイプラインごとに存在する。
パイプライン処理速度欄１１０８内のパイプライン処理速度は、例えば、「○○ｂｙｔｅ／ｓ」の形式で登録される。サブサーバー２００のパイプラインごとに存在する。
当該フローにおけるプラグインのリスト欄１１１０内の当該フローにおけるプラグインのリストは、例えば、「文字認識処理」→「イメージ加工処理」→・・のような形式で登録される。
通信速度欄１１１２内の通信速度は、例えば、「○○ｂｙｔｅ／ｓ」の形式で登録される。
【００７０】
図１２は、第１の実施の形態の処理例を示すフローチャートである。
ステップＳ１２０２では、ステップＳ１２０６までのループを始める。変数ｉ＝０とし、ｉ＜Ｎの間はステップＳ１２０６までの処理を行い、ｉをインクリメント（１加算）する。なお、Ｎはメインサーバー１００と依頼可能なサブサーバー２００の合計台数である。具体的には、サブサーバー台数欄１１０２の値に１（メインサーバー１００の台数）を加算した値である。
ステップＳ１２０４では、サーバー（メインサーバー１００、各サブサーバー２００）の処理時間を算出する。ステップＳ１２０４の詳細については、図１３に示すフローチャートを用いて後述する。
ステップＳ１２０６は、ループの終わりである。
ステップＳ１２０８では、処理完了時間の比較を行う。
ステップＳ１２１０では、処理サーバーを決定する。具体的には、最も早い処理完了時間であるサーバーを選択する。
【００７１】
図１３は、第１の実施の形態の処理例を示すフローチャートである。
ステップＳ１３０２では、処理完了時間：Ｔ＝０とする。
ステップＳ１３０４では、メインサーバーであるか否かを判断し、メインサーバーである場合はステップＳ１３１０へ進み、それ以外の場合はステップＳ１３０６へ進む。
ステップＳ１３０６では、データ転送時間を算出する（データサイズ÷通信速度）。
ステップＳ１３０８では、Ｔ＝データ転送時間とする。
ステップＳ１３１０では、ステップＳ１３１８までのループを始める。変数ｉ＝０とし、ｉ＜Ｍの間はステップＳ１３１８までの処理を行い、ｉをインクリメント（１加算）する。なお、Ｍは処理するプラグインの数である。
ステップＳ１３１２では、パイプラインの処理時間を算出する（データサイズ÷パイプライン処理速度）。
【００７２】
ステップＳ１３１４では、Ｔ以降のパイプラインの空き情報から、処理時間分のスペースを確保する。
例えば、処理時間を４０ｓとした場合について説明する。図１４の例に示すように、開始空き時間が１５ｓ、終了空き時間が３０ｓなので、１５ｓから３０ｓまでの間を確保する。この時点で、残りの２５ｓである。また、開始空き時間が４５ｓなので、４５ｓから７０ｓまでの間（残りの２５ｓ分）を確保する。
【００７３】
ステップＳ１３１６では、処理の確保したスペースの終了時間をＴとする。
ステップＳ１３１８は、ループの終わりである。
ステップＳ１３２０では、メインサーバーであるか否かを判断し、メインサーバーである場合はステップＳ１３２６へ進み、それ以外の場合はステップＳ１３２２へ進む。
ステップＳ１３２２では、データ転送時間を算出する。具体的には、データサイズ÷通信速度によって、データ転送時間を算出する。
ステップＳ１３２４では、Ｔ＝Ｔ＋データ転送時間とする。
ステップＳ１３２６では、サーバーの処理完了時間＝Ｔとする。
【００７４】
次に、パイプラインの再スケジュールにおける予約について、図１５〜図１７の例を用いて説明する。
図１５の例を用いて、プラグインＡ、プラグインＢの処理の再スケジュールについて説明する。
図１５の上段の例に示すように、パイプラインＢを使用していた別ジョブが想定したよりも早く完了した（別ジョブの予約時間１５１８、別ジョブの処理時間１５２２を参照）。自ジョブ（ジョブ予約時間１５１４を参照）の前段処理（ジョブ処理時間１５１２を参照）が既に完了しているので（別ジョブの処理時間１５２２を参照）、ジョブ予約時間１５１６のように前倒しで処理を開始し、処理の予約完了時間の再スケジュールを行う（ジョブ予約時間１５１６を参照）。また、パイプラインＢでは、自ジョブ（ジョブ予約時間１５１６を参照）の完了直後に別ジョブ（別ジョブの予約時間１５２０を参照）の予約が入っている。この場合は、自ジョブを再スケジュールするときと同じタイミングで予約を前倒しにする（別ジョブの予約時間１５２４を参照）。
また、図１５の下段の例に示すように、パイプラインＢを使用していた別ジョブ（別ジョブの予約時間１５３８を参照）が想定したよりも早く完了したが（別ジョブの処理時間１５４２を参照）、自ジョブ（ジョブ予約時間１５３４を参照）の前段処理（ジョブ処理時間１５３２を参照）が完了していないので、再スケジュールを行わない。
【００７５】
パイプラインの予約方法として、プラグインＩＤと予約時間を用いて、プラグインＩＤの順に予約を行う。予約時間リストの時間が空いていれば、正常に予約を行い終了する。もし、他の処理が長引いた場合（予約した終了時間には終わらない場合）、又は、他の処理が想定よりも早く完了した場合には、図１７の例に示す再スケジューリング方法テーブル１７００内の再スケジューリング方法にしたがって、予約の調整を行う。また、実際に処理を開始するタイミング、完了するタイミングにおいても予約にずれが発生する場合には、図１７の例に示す再スケジューリング方法テーブル１７００内の再スケジューリング方法にしたがって、予約の調整を行う。
なお、図１６の例に示す予約時の前提データテーブル１６００は、メインサーバー１００から受け取り、処理を行っているサブサーバー２００での処理が全て完了するまで、そのサブサーバー２００に保持される。
図１６は、予約時の前提データテーブル１６００のデータ構造例を示す説明図である。予約時の前提データテーブル１６００は、データ転送完了時間欄１６０２、ジョブＩＤ欄１６０４、プラグインＩＤ欄１６０６、予約時間欄１６０８を記憶している。データ転送完了時間欄１６０２内の値（Ｔ）は、データ転送が完了する時間を示す。ジョブＩＤ欄１６０４内の値は、ジョブを識別するために使用する。例えば、ＵＵＩＤを用いてもよい。プラグインＩＤ欄１６０６内の情報は、処理する順番に並んだプラグインのリストである。予約時間欄１６０８内の値は、プラグインＩＤと対応した処理の予約時間（ｔ１，ｔ２）である。途中で別処理が入る場合は（ｔ１，ｔ２），（ｔ３，ｔ４）のように予約時間を複数有することとなる。
なお、プラグインＩＤ欄１６０６と予約時間欄１６０８の組み合わせは、処理するプラグインの数だけ存在する。
【００７６】
図１７は、再スケジューリング方法テーブル１７００のデータ構造例を示す説明図である。
再スケジューリング方法テーブル１７００は、再スケジュールのタイミング欄１７１０のパイプライン処理開始時とパイプライン処理完了時に対して、予約した時間より早く処理可能欄１７２０、予約した時間に処理不可（処理が遅れている）欄１７３０を有している。再スケジュールのタイミング欄１７１０は、再スケジュールのタイミングを記憶している。予約した時間より早く処理可能欄１７２０は、予約した時間より早く処理可能の場合の処理を記憶している。予約した時間に処理不可（処理が遅れている）欄１７３０は、予約した時間に処理不可の（処理が遅れている）場合の処理を記憶している。再スケジュールの処理は、予約した時間より早く処理可能欄１７２０、予約した時間に処理不可（処理が遅れている）欄１７３０のいずれに該当するかによって処理が異なる。
再スケジュールのタイミングとして、パイプライン処理開始時の場合は、予約した時間より早く処理可能のときは、「既に処理データを受け取っていれば、そのまま処理を開始する。前倒しによって処理を早めた分だけ、後工程の予約時間を早めるように変更する。また、予約の変更をした場合は、予約時間リストを更新する。」、そして、予約した時間に処理不可（処理が遅れている）のときは、「予約を後ろ倒しに変更する。もし後工程の処理予約開始時間と本プラグインの予約完了時間に、遅れ分だけの差があれば予約は変更しない。もし差がなければその分、後ろ倒しで予約を変更する。また、予約の変更をした場合は、予約時間リストを更新する。」。
再スケジュールのタイミングとして、パイプライン処理完了時の場合は、予約した時間より早く処理可能のときは、「処理完了後に時間が空いて、次の処理が実行される場合は何もしない。処理完了した直後に次のジョブが実行されるスケジュールの場合は、次のジョブが実行できるかを確認する。ジョブＩＤから予約時間の情報を取得し、前段工程が先に終わっている場合は、次の処理の予約を早める。」、そして、予約した時間に処理不可（処理が遅れている）のときは、「処理完了しても次の処理が実行されない場合は何もしない。処理完了した直後に処理が実行される場合は、次のジョブの処理完了時間を確認し、後ろ倒しになった分だけ予約を変更する。また、予約の変更をした場合は、予約時間リストを更新し、後工程のジョブも再スケジュールを行う。」。
なお、早く処理可能、又は処理が遅れているというのは、予め定められた閾値を用いて判断する。例えば、予約した時間よりも５秒以上離れた場合は再スケジュールを行うが、５秒以内の場合は誤差と判断して再スケジュールしない処理としてもよい。
【００７７】
＜＜第２の実施の形態＞＞
図１８は、第２の実施の形態（メインサーバー１８００）の構成例についての概念的なモジュール構成図である。
メインサーバー１８００は、ジョブ管理モジュール１０４、フロー文書ＤＢ１０８、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、ジョブ処理モジュール１２２、ジョブ解析モジュール１２８、フロー情報管理ＤＢ１３２、フロー登録モジュール１４０、フロー解析モジュール１４４、ワーク文書ＤＢ１５２、ジョブ処理状況管理モジュール１５６、処理履歴管理DB１６０、メインサーバー処理情報管理モジュール１６４、処理依頼判定モジュール１６８、サブサーバー登録モジュール１７２、サーバー情報管理ＤＢ１７６、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６、データ取得モジュール１８１０、ジョブ生成モジュール１８２０、ジョブ処理依頼モジュール１８３０を有している。メインサーバー１８００は、図１の例に示すメインサーバー１００にデータ取得モジュール１８１０、ジョブ生成モジュール１８２０、ジョブ処理依頼モジュール１８３０を付加したものである。なお、第１の実施の形態と同種の部位には同一符号を付し重複した説明を省略する。
【００７８】
ジョブ管理モジュール１０４は、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、ジョブ処理モジュール１２２、ジョブ解析モジュール１２８、処理依頼判定モジュール１６８、ジョブ生成モジュール１８２０、ジョブ処理依頼モジュール１８３０と接続されている。ジョブ管理モジュール１０４は、処理サーバー選定モジュール１１２からパイプライン情報（予約）１１４を受け取り、ジョブ処理モジュール１２２からジョブ処理状況１２４を受け取り、ジョブ解析モジュール１２８から切り取りデータ１３０を受け取り、パイプライン稼働状況管理モジュール１１８にパイプライン予約情報１１６を渡し、ジョブ処理依頼モジュール１８３０と切り取りデータ、プラグイン・ジョブ情報１８３４のやり取りをし、ジョブ処理モジュール１２２に切り取りデータフロー・ジョブ情報１２０を渡す。
ジョブ管理モジュール１０４は、受け取ったジョブを管理する。役割としては以下の６つがある。
（１）ジョブ解析モジュール１２８を使用することで、ジョブの切り取りデータを取得する。
（２）ジョブ処理依頼モジュール１８３０を使用することで、サブサーバー１９００へジョブを依頼する必要があるプラグインがあるかを判定する。
（３）ジョブの依頼を託すために、ジョブの情報や切り取りデータをジョブ処理依頼モジュール１８３０に渡す。
（４）メインサーバー１８００自身で処理することが決定したら、メインサーバー１８００自身のパイプライン稼働状況管理モジュール１１８がジョブの予約を行う。
（５）処理先としてジョブが到着後、予約した時間にジョブ処理モジュール１２２に処理を依頼する。
（６）ジョブ処理状況を取得し、必要に応じて予約の再スケジューリングを行う。
【００７９】
フロー文書ＤＢ１０８は、データ取得モジュール１８１０と接続されており、データ取得モジュール１８１０からオリジナル文書１０６を受け取る。フロー文書ＤＢ１０８は、データ取得モジュール１８１０で受け付けたオリジナル文書を保存しておくためのデータベースである。
【００８０】
処理サーバー選定モジュール１１２は、ジョブ管理モジュール１０４、メインサーバー処理情報管理モジュール１６４、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６、ジョブ処理依頼モジュール１８３０と接続されている。処理サーバー選定モジュール１１２は、メインサーバー処理情報管理モジュール１６４からパイプライン空き情報、処理速度１４８を受け取り、ジョブ処理依頼モジュール１８３０からフロー・ジョブ情報、データサイズ１８３２を受け取り、処理サーバー計算モジュール１８６とデータサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４のやり取りをし、ジョブ管理モジュール１０４にパイプライン情報（予約）１１４を渡し、ジョブ処理依頼モジュール１８３０に処理サーバー情報１８２８を渡す。
フロー情報管理ＤＢ１３２は、ジョブ解析モジュール１２８、フロー解析モジュール１４４、ジョブ生成モジュール１８２０と接続されている。フロー情報管理ＤＢ１３２は、フロー解析モジュール１４４からフロー情報・プラグイン情報１４６を受け取り、ジョブ生成モジュール１８２０にフロー・プラグイン・ジョブ情報１８１８を渡す。
【００８１】
データ取得モジュール１８１０は、フロー文書ＤＢ１０８、ジョブ生成モジュール１８２０と接続されており、ユーザー１９７からの文書１０２を受け付け、フロー文書ＤＢ１０８にオリジナル文書１０６を渡し、ジョブ生成モジュール１８２０に文書データ１８１２を渡す。データ取得モジュール１８１０は、定期的に共有フォルダや画像処理装置３１０内の記憶装置を監視したり、ユーザー１９７からの文書投入を受け付けたりする。データを受け取ったタイミングで、フロー文書ＤＢ１０８にオリジナル文書１０６を保存し、ジョブ生成モジュール１８２０にジョブの生成を依頼する。
【００８２】
ジョブ生成モジュール１８２０は、ジョブ管理モジュール１０４、フロー情報管理ＤＢ１３２、データ取得モジュール１８１０と接続されており、フロー情報管理ＤＢ１３２からフロー・プラグイン・ジョブ情報１８１８を受け取り、データ取得モジュール１８１０から文書データ１８１２を受け取る。ジョブ生成モジュール１８２０は、データ取得モジュール１８１０から受け取った文書データ１８１２と、フロー情報管理ＤＢ１３２から受け取った登録済みのフロー情報からジョブを生成する。生成したジョブはジョブ管理モジュール１０４に渡す。
ジョブ処理依頼モジュール１８３０は、ジョブ管理モジュール１０４、処理サーバー選定モジュール１１２と接続されており、処理サーバー選定モジュール１１２から処理サーバー情報１８２８を受け取り、ジョブ管理モジュール１０４と切り取りデータ、プラグイン・ジョブ情報１８３４のやり取りをし、処理サーバー選定モジュール１１２にフロー・ジョブ情報、データサイズ１８３２を渡す。ジョブ処理依頼モジュール１８３０は、ジョブ処理をサーバーに依頼する。ジョブ管理モジュール１０４よりジョブを受け取ったタイミングで処理サーバー選定モジュール１１２に処理サーバーの選定を依頼する。処理サーバーとして返ってきたサーバーにジョブを依頼する。
【００８３】
図１９は、第２の実施の形態（メインサーバー１８００とサブサーバー１９００）の構成例についての概念的なモジュール構成図である。
メインサーバー１８００は、ジョブ管理モジュール１０４、フロー文書ＤＢ１０８、処理サーバー選定モジュール１１２、ジョブ解析モジュール１２８、フロー情報管理ＤＢ１３２、フロー登録モジュール１４０、フロー解析モジュール１４４、ジョブ処理状況管理モジュール１５６、メインサーバー処理情報管理モジュール１６４、処理依頼判定モジュール１６８、サブサーバー登録モジュール１７２、サーバー情報管理ＤＢ１７６、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６、データ取得モジュール１８１０、ジョブ生成モジュール１８２０、ジョブ処理依頼モジュール１８３０を有している。
ジョブ管理モジュール１０４は、ジョブ解析モジュール１２８、処理依頼判定モジュール１６８、ジョブ生成モジュール１８２０、ジョブ処理依頼モジュール１８３０と接続されている。ジョブ管理モジュール１０４は、ジョブ生成モジュール１８２０からフロー・プラグイン・ジョブ情報１８１８を受け取り、ジョブ解析モジュール１２８と切り取りデータ１３０のやり取りをする。
フロー文書ＤＢ１０８は、データ取得モジュール１８１０と接続されており、データ取得モジュール１８１０からオリジナル文書１０６を受け取る。
処理サーバー選定モジュール１１２は、メインサーバー処理情報管理モジュール１６４、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６、ジョブ処理依頼モジュール１８３０、サブサーバー１９００のジョブ管理モジュール２０４と接続されている。処理サーバー選定モジュール１１２は、メインサーバー処理情報管理モジュール１６４からパイプライン空き情報、処理速度１４８を受け取り、ジョブ処理依頼モジュール１８３０からフロー・ジョブ情報、データサイズ１８３２を受け取り、処理サーバー計算モジュール１８６にデータサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４を渡し、ジョブ処理依頼モジュール１８３０に処理サーバー情報１８２８を渡し、ジョブ管理モジュール２０４にパイプライン情報（予約）１９１４を渡す。
ジョブ解析モジュール１２８は、ジョブ管理モジュール１０４、フロー情報管理ＤＢ１３２と接続されており、フロー情報管理ＤＢ１３２から関連プラグイン情報１３６を受け取り、ジョブ管理モジュール１０４と切り取りデータ１３０のやり取りをする。
フロー情報管理ＤＢ１３２は、ジョブ解析モジュール１２８、フロー解析モジュール１４４、ジョブ生成モジュール１８２０と接続されており、フロー解析モジュール１４４からフロー情報・プラグイン情報１４６を受け取り、ジョブ解析モジュール１２８に関連プラグイン情報１３６を渡す。
フロー登録モジュール１４０は、フロー解析モジュール１４４と接続されており、フロー管理者１９９からのフロー情報１３８を受け付け、フロー解析モジュール１４４にフロー情報１４２を渡す。
フロー解析モジュール１４４は、フロー情報管理ＤＢ１３２、フロー登録モジュール１４０と接続されており、フロー登録モジュール１４０からフロー情報１４２を受け取り、フロー情報管理ＤＢ１３２にフロー情報・プラグイン情報１４６を渡す。
ジョブ処理状況管理モジュール１５６は、サブサーバー１９００のジョブ処理モジュール２２２と接続されており、ジョブ処理モジュール２２２からジョブ処理状況１５４を受け取る。
メインサーバー処理情報管理モジュール１６４は、処理サーバー選定モジュール１１２、処理依頼判定モジュール１６８、サーバー情報管理ＤＢ１７６と接続されており、処理サーバー選定モジュール１１２にパイプライン空き情報、処理速度１４８を渡す。
処理依頼判定モジュール１６８は、ジョブ管理モジュール１０４、メインサーバー処理情報管理モジュール１６４と接続されている。
サブサーバー登録モジュール１７２は、サーバー情報管理ＤＢ１７６と接続されており、システム管理者１９８からのサブサーバー情報１７０を受け付け、サーバー情報管理ＤＢ１７６にサブサーバー情報１７４を渡す。
サーバー情報管理ＤＢ１７６は、メインサーバー処理情報管理モジュール１６４、サブサーバー登録モジュール１７２、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２と接続されている。サーバー情報管理ＤＢ１７６は、サブサーバー登録モジュール１７２からサブサーバー情報１７４を受け取り、ネットワーク情報管理モジュール１８０と通信速度１７８のやり取りをする。
ネットワーク情報管理モジュール１８０は、処理サーバー選定モジュール１１２、サーバー情報管理ＤＢ１７６と接続されており、サーバー情報管理ＤＢ１７６と通信速度１７８のやり取りをする。
サブサーバー処理情報管理モジュール１８２は、処理サーバー選定モジュール１１２、サーバー情報管理ＤＢ１７６、サブサーバー１９００のパイプライン稼働状況管理モジュール２１８と接続されている。サブサーバー処理情報管理モジュール１８２は、パイプライン稼働状況管理モジュール２１８からパイプライン空き情報、処理速度１９６８を受け取る。
処理サーバー計算モジュール１８６は、処理サーバー選定モジュール１１２と接続されており、処理サーバー選定モジュール１１２からデータサイズ、通信速度、フロー情報、処理速度、パイプライン空き情報１８４を受け取る。
データ取得モジュール１８１０は、フロー文書ＤＢ１０８、ジョブ生成モジュール１８２０と接続されており、ユーザー１９７からの文書１０２を受け付け、フロー文書ＤＢ１０８にオリジナル文書１０６を渡し、ジョブ生成モジュール１８２０に文書データ１８１２を渡す。
ジョブ生成モジュール１８２０は、ジョブ管理モジュール１０４、フロー情報管理ＤＢ１３２、データ取得モジュール１８１０と接続されている。ジョブ生成モジュール１８２０は、データ取得モジュール１８１０から文書データ１８１２を受け取り、ジョブ管理モジュール１０４にフロー・プラグイン・ジョブ情報１８１８を渡す。
ジョブ処理依頼モジュール１８３０は、ジョブ管理モジュール１０４、処理サーバー選定モジュール１１２、サブサーバー１９００のジョブ受付モジュール１９０４と接続されている。ジョブ処理依頼モジュール１８３０は、処理サーバー選定モジュール１１２にフロー・ジョブ情報、データサイズ１８３２を渡し、処理サーバー選定モジュール１１２から処理サーバー情報１８２８を受け取り、ジョブ受付モジュール１９０４に切り取りデータ、フロー・ジョブ情報１９３４を渡す。
【００８４】
サブサーバー１９００は、ジョブ管理モジュール２０４、パイプライン稼働状況管理モジュール２１８、ジョブ処理モジュール２２２、ワーク文書ＤＢ２５２、処理履歴管理ＤＢ２６０、外部サーバー登録モジュール２７２、外部サーバー情報管理ＤＢ２７６、ジョブ受付モジュール１９０４を有している。
ジョブ管理モジュール２０４は、パイプライン稼働状況管理モジュール２１８、ジョブ処理モジュール２２２、ジョブ受付モジュール１９０４、メインサーバー１８００の処理サーバー選定モジュール１１２と接続されている。ジョブ管理モジュール２０４は、処理サーバー選定モジュール１１２からパイプライン情報（予約）１９１４を受け取り、パイプライン稼働状況管理モジュール２１８にパイプライン予約情報２１４を渡し、ジョブ処理モジュール２２２と切り取りデータフロー・ジョブ情報２２０のやり取りをする。
パイプライン稼働状況管理モジュール２１８は、ジョブ管理モジュール２０４、ジョブ処理モジュール２２２、処理履歴管理ＤＢ２６０、外部サーバー情報管理ＤＢ２７６、メインサーバー１８００のサブサーバー処理情報管理モジュール１８２と接続されている。パイプライン稼働状況管理モジュール２１８は、ジョブ管理モジュール２０４からパイプライン予約情報２１４を受け取り、ジョブ処理モジュール２２２からパイプライン稼働情報２２６を受け取り、サブサーバー処理情報管理モジュール１８２にパイプライン空き情報、処理速度１９６８を渡す。
ジョブ処理モジュール２２２は、ジョブ管理モジュール２０４、パイプライン稼働状況管理モジュール２１８、ワーク文書ＤＢ２５２、メインサーバー１８００のジョブ処理状況管理モジュール１５６と接続されており、ジョブ管理モジュール２０４と切り取りデータフロー・ジョブ情報２２０のやり取りをし、パイプライン稼働状況管理モジュール２１８にパイプライン稼働情報２２６を渡し、ワーク文書ＤＢ２５２に処理文書２５０を渡し、ジョブ処理状況管理モジュール１５６にジョブ処理状況１５４を渡す。
ワーク文書ＤＢ２５２は、ジョブ処理モジュール２２２と接続されており、ジョブ処理モジュール２２２から処理文書２５０を受け取る。
処理履歴管理ＤＢ２６０は、パイプライン稼働状況管理モジュール２１８と接続されている。
外部サーバー登録モジュール２７２は、外部サーバー情報管理ＤＢ２７６と接続されている。
外部サーバー情報管理ＤＢ２７６は、パイプライン稼働状況管理モジュール２１８、外部サーバー登録モジュール２７２と接続されている。
【００８５】
ジョブ受付モジュール１９０４は、ジョブ管理モジュール２０４、メインサーバー１８００のジョブ処理依頼モジュール１８３０と接続されており、ジョブ処理依頼モジュール１８３０から切り取りデータ、フロー・ジョブ情報１９３４を受け取る。ジョブ受付モジュール１９０４は、メインサーバー１８００からのジョブ処理を受け付けるサブサーバー１９００特有の部分である。ここではジョブの受け付けを行うのみで、その後の処理はジョブ管理モジュール２０４に依頼する。
【００８６】
図２０は、第２の実施の形態の処理例を示すフローチャートである。
ステップＳ２００２では、フロー管理者１９９は、フロー登録モジュール１４０に対し、フローを登録する。
ステップＳ２００４では、フロー登録モジュール１４０は、フロー解析モジュール１４４に対し、フロー解析を要求する。
ステップＳ２００６では、フロー解析モジュール１４４は、フロー情報管理ＤＢ１３２に対し、フロー情報を登録する。
ステップＳ２００８では、システム管理者１９８は、サブサーバー登録モジュール１７２に対し、サブサーバーを登録する。
ステップＳ２０１０では、サブサーバー登録モジュール１７２は、サーバー情報管理ＤＢ１７６に対し、サブサーバー情報を登録する。
【００８７】
ステップＳ２０１２では、ユーザー１９７は、データ取得モジュール１８１０に対し、文書データを投入する。
ステップＳ２０１４では、データ取得モジュール１８１０は、フロー文書ＤＢ１０８に対し、オリジナル文書を保管する。
ステップＳ２０１６では、データ取得モジュール１８１０は、ジョブ生成モジュール１８２０に対し、ジョブ生成を要求する。
ステップＳ２０１８では、ジョブ生成モジュール１８２０は、フロー情報管理ＤＢ１３２に対し、フロー情報を要求する。
ステップＳ２０２０では、フロー情報管理ＤＢ１３２は、ジョブ生成モジュール１８２０に対し、応答する。
【００８８】
ステップＳ２０２２では、ジョブ生成モジュール１８２０は、ジョブ管理モジュール１０４に対し、ジョブの依頼要求を行う。
ステップＳ２０２４では、ジョブ管理モジュール１０４は、処理依頼判定モジュール１６８に対し、ジョブ依頼を判定する。
ステップＳ２０２６では、ジョブ管理モジュール１０４は、ジョブ解析モジュール１２８に対し、ジョブ解析を要求する。
ステップＳ２０２８では、ジョブ解析モジュール１２８は、フロー情報管理ＤＢ１３２に対し、関連フロー情報を要求する。
ステップＳ２０３０では、処理依頼判定モジュール１６８は、ジョブ管理モジュール１０４に対し、応答する。
【００８９】
ステップＳ２０３２では、フロー情報管理ＤＢ１３２は、ジョブ解析モジュール１２８に対し、応答する。
ステップＳ２０３４では、ジョブ解析モジュール１２８は、ジョブ管理モジュール１０４に対し、応答する。
ステップＳ２０３６では、ジョブ管理モジュール１０４は、ジョブ処理状況管理モジュール１５６に対し、ジョブ処理の依頼を行う。
ステップＳ２０３８では、ジョブ処理状況管理モジュール１５６は、処理サーバー選定モジュール１１２に対し、処理サーバー選定を要求する。
ステップＳ２０４０では、処理サーバー選定モジュール１１２は、メインサーバー処理情報管理モジュール１６４に対し、メインサーバー処理情報を要求する。
【００９０】
ステップＳ２０４２では、メインサーバー処理情報管理モジュール１６４は、サーバー情報管理ＤＢ１７６に対し、メインサーバー処理情報を要求する。
ステップＳ２０４４では、サーバー情報管理ＤＢ１７６は、メインサーバー処理情報管理モジュール１６４に対し、応答する。
ステップＳ２０４６では、メインサーバー処理情報管理モジュール１６４は、処理サーバー選定モジュール１１２に対し、応答する。
ステップＳ２０４８では、処理サーバー選定モジュール１１２は、サブサーバー処理情報管理モジュール１８２に対し、サブサーバー処理情報を要求する。
ステップＳ２０５０では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対し、サブサーバー処理情報を要求する。
【００９１】
ステップＳ２０５２では、サーバー情報管理ＤＢ１７６は、サブサーバー処理情報管理モジュール１８２に対し、応答する。
ステップＳ２０５４では、サブサーバー処理情報管理モジュール１８２は、処理サーバー選定モジュール１１２に対し、応答する。
ステップＳ２０５６では、処理サーバー選定モジュール１１２は、ネットワーク情報管理モジュール１８０に対し、ネットワーク情報を要求する。
ステップＳ２０５８では、ネットワーク情報管理モジュール１８０は、サーバー情報管理ＤＢ１７６に対し、ネットワーク情報を要求する。
ステップＳ２０６０では、サーバー情報管理ＤＢ１７６は、ネットワーク情報管理モジュール１８０に対し、応答する。
【００９２】
ステップＳ２０６２では、ネットワーク情報管理モジュール１８０は、処理サーバー選定モジュール１１２に対し、応答する。
ステップＳ２０６４では、処理サーバー選定モジュール１１２は、処理サーバー計算モジュール１８６に対し、サーバー処理時間の算出を要求する。
ステップＳ２０６６では、処理サーバー計算モジュール１８６は、処理サーバー選定モジュール１１２に対し、応答する。
ステップＳ２０６８では、処理サーバー選定モジュール１１２は、ジョブ管理モジュール１０４に対し、パイプラインの予約を行う。
ステップＳ２０７０では、処理サーバー選定モジュール１１２は、ジョブ処理状況管理モジュール１５６に対し、応答する。
【００９３】
ステップＳ２０７２では、ジョブ管理モジュール１０４は、パイプライン稼働状況管理モジュール１１８に対し、パイプライン予約情報を通知する。
ステップＳ２０７４では、パイプライン稼働状況管理モジュール１１８は、メインサーバー処理情報管理モジュール１６４に対し、パイプライン予約情報を通知する。
ステップＳ２０７６では、メインサーバー処理情報管理モジュール１６４は、サブサーバー登録モジュール１７２に対し、パイプライン空き情報を更新する。
ステップＳ２０７８では、ジョブ処理状況管理モジュール１５６は、ジョブ管理モジュール１０４に対し、ジョブ処理依頼を行う。
ステップＳ２０８０では、ジョブ管理モジュール１０４は、ジョブ処理モジュール１２２に対し、ジョブ処理依頼を行う。
【００９４】
ステップＳ２０８２では、ジョブ処理モジュール１２２は、ワーク文書ＤＢ１５２に対し、処理文書を保管する。
ステップＳ２０８４では、ジョブ処理モジュール１２２は、パイプライン稼働状況管理モジュール１１８に対し、処理開始を通知する。
ステップＳ２０８６では、パイプライン稼働状況管理モジュール１１８は、メインサーバー処理情報管理モジュール１６４に対し、処理開始を通知する。
ステップＳ２０８８では、メインサーバー処理情報管理モジュール１６４は、サブサーバー登録モジュール１７２に対し、パイプライン空き情報を更新する。
ステップＳ２０９０では、ジョブ処理モジュール１２２は、ジョブ処理依頼モジュール１８３０に対し、ジョブ処理状況を通知する。
【００９５】
ステップＳ２０９２では、ジョブ処理モジュール１２２は、パイプライン稼働状況管理モジュール１１８に対し、処理完了を通知する。
ステップＳ２０９４では、パイプライン稼働状況管理モジュール１１８は、メインサーバー処理情報管理モジュール１６４に対し、処理完了を通知する。
ステップＳ２０９６では、メインサーバー処理情報管理モジュール１６４は、サブサーバー登録モジュール１７２に対し、パイプライン空き情報を更新する。
【００９６】
図２１は、第２の実施の形態の処理例を示すフローチャートである。
ステップＳ２１０２では、フロー管理者１９９は、フロー登録モジュール１４０に対して、フローを登録する。
ステップＳ２１０４では、フロー登録モジュール１４０は、フロー解析モジュール１４４に対して、フロー解析を要求する。
ステップＳ２１０６では、フロー解析モジュール１４４は、フロー情報管理ＤＢ１３２に対して、フロー情報を登録する。
ステップＳ２１０８では、システム管理者１９８は、サブサーバー登録モジュール１７２に対して、サブサーバーを登録する。
ステップＳ２１１０では、サブサーバー登録モジュール１７２は、サーバー情報管理ＤＢ１７６に対して、サブサーバー情報を登録する。
【００９７】
ステップＳ２１１２では、システム管理者１９８は、サブサーバー登録モジュール１７２に対して、外部サーバーを登録する。
ステップＳ２１１４では、サブサーバー登録モジュール１７２は、サーバー情報管理ＤＢ１７６に対して、外部サーバー情報を登録する。
ステップＳ２１１６では、ユーザー１９７は、データ取得モジュール１８１０に対して、文書データを投入する。
ステップＳ２１１８では、データ取得モジュール１８１０は、フロー文書ＤＢ１０８に対して、オリジナル文書を投入する。
ステップＳ２１２０では、データ取得モジュール１８１０は、ジョブ生成モジュール１８２０に対して、ジョブ生成を要求する。
【００９８】
ステップＳ２１２２では、ジョブ生成モジュール１８２０は、フロー情報管理ＤＢ１３２に対して、フロー情報を要求する。
ステップＳ２１２４では、フロー情報管理ＤＢ１３２は、ジョブ生成モジュール１８２０に対して、応答する。
ステップＳ２１２６では、ジョブ生成モジュール１８２０は、ジョブ管理モジュール１０４に対して、ジョブを投入する。
【００９９】
ステップＳ２１２８では、ジョブ管理モジュール１０４は、ジョブ解析モジュール１２８に対して、ジョブ解析を要求する。
ステップＳ２１３０では、ジョブ解析モジュール１２８は、フロー情報管理ＤＢ１３２に対して、関連フロー情報を要求する。
ステップＳ２１３２では、フロー情報管理ＤＢ１３２は、ジョブ解析モジュール１２８に対して、応答する。
ステップＳ２１３４では、ジョブ管理モジュール１０４は、処理依頼判定モジュール１６８に対して、ジョブ依頼判定を行う。
ステップＳ２１３６では、処理依頼判定モジュール１６８は、ジョブ管理モジュール１０４に対して、応答する。
ステップＳ２１３８では、ジョブ解析モジュール１２８は、ジョブ管理モジュール１０４に対して、応答する。
ステップＳ２１４０では、ジョブ管理モジュール１０４は、ジョブ処理状況管理モジュール１５６に対して、ジョブ処理の依頼要求を行う。
【０１００】
ステップＳ２１４２では、ジョブ処理状況管理モジュール１５６は、処理サーバー選定モジュール１１２に対して、処理サーバー選定を要求する。
ステップＳ２１４４では、処理サーバー選定モジュール１１２は、メインサーバー処理情報管理モジュール１６４に対して、メインサーバー処理情報を要求する。
ステップＳ２１４６では、メインサーバー処理情報管理モジュール１６４は、サーバー情報管理ＤＢ１７６に対して、メインサーバー処理情報を要求する。
ステップＳ２１４８では、サーバー情報管理ＤＢ１７６は、メインサーバー処理情報管理モジュール１６４に対して、応答する。
ステップＳ２１５０では、メインサーバー処理情報管理モジュール１６４は、処理サーバー選定モジュール１１２に対して、応答する。
【０１０１】
ステップＳ２１５２では、処理サーバー選定モジュール１１２は、サブサーバー処理情報管理モジュール１８２に対して、サブサーバー処理情報を要求する。
ステップＳ２１５４では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対して、サブサーバー処理情報を要求する。
ステップＳ２１５６では、サーバー情報管理ＤＢ１７６は、サブサーバー処理情報管理モジュール１８２に対して、応答する。
ステップＳ２１５８では、サブサーバー処理情報管理モジュール１８２は、処理サーバー選定モジュール１１２に対して、応答する。
ステップＳ２１６０では、処理サーバー選定モジュール１１２は、ネットワーク情報管理モジュール１８０に対して、ネットワーク情報を要求する。
【０１０２】
ステップＳ２１６２では、ネットワーク情報管理モジュール１８０は、サーバー情報管理ＤＢ１７６に対して、ネットワーク情報を要求する。
ステップＳ２１６４では、サーバー情報管理ＤＢ１７６は、ネットワーク情報管理モジュール１８０に対して、応答する。
ステップＳ２１６６では、ネットワーク情報管理モジュール１８０は、処理サーバー選定モジュール１１２に対して、応答する。
ステップＳ２１６８では、処理サーバー選定モジュール１１２は、処理サーバー計算モジュール１８６に対して、サーバー処理時間の算出を要求する。
ステップＳ２１７０では、処理サーバー計算モジュール１８６は、処理サーバー選定モジュール１１２に対して、応答する。
【０１０３】
ステップＳ２１７２では、処理サーバー選定モジュール１１２は、ジョブ処理状況管理モジュール１５６に対して、応答する。
ステップＳ２１７４では、処理サーバー選定モジュール１１２は、ジョブ管理モジュール２０４に対して、パイプライン予約を行う。
ステップＳ２１７６では、ジョブ管理モジュール２０４は、パイプライン稼働状況管理モジュール２１８に対して、パイプライン予約情報を通知する。
ステップＳ２１７８では、パイプライン稼働状況管理モジュール２１８は、サブサーバー処理情報管理モジュール１８２に対して、パイプライン予約情報を通知する。
ステップＳ２１８０では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対して、パイプライン空き情報を更新する。
【０１０４】
ステップＳ２１８２では、ジョブ処理状況管理モジュール１５６は、ジョブ受付モジュール１９０４に対して、サブサーバーへのジョブ処理依頼を行う。
ステップＳ２１８４では、ジョブ受付モジュール１９０４は、ジョブ管理モジュール２０４に対して、ジョブ処理を依頼する。
ステップＳ２１８６では、ジョブ管理モジュール２０４は、ジョブ処理モジュール２２２に対して、ジョブ処理を依頼する。
ステップＳ２１８８では、ジョブ処理モジュール２２２は、ワーク文書ＤＢ２５２に対して、処理文書を保管する。
ステップＳ２１９０では、ジョブ処理モジュール２２２は、パイプライン稼働状況管理モジュール２１８に対して、処理開始を通知する。
【０１０５】
ステップＳ２１９２では、パイプライン稼働状況管理モジュール２１８は、サブサーバー処理情報管理モジュール１８２に対して、処理開始を通知する。
ステップＳ２１９４では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対して、パイプライン空き情報を更新する。
ステップＳ２１９６では、ジョブ処理モジュール２２２は、パイプライン稼働状況管理モジュール２１８に対して、処理完了を通知する。
ステップＳ２１９８では、パイプライン稼働状況管理モジュール２１８は、サブサーバー処理情報管理モジュール１８２に対して、処理完了を通知する。
【０１０６】
ステップＳ２２００では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対して、パイプライン空き情報を更新する。
ステップＳ２２０２では、パイプライン稼働状況管理モジュール２１８は、サブサーバー処理情報管理モジュール１８２に対して、一定間隔で処理速度情報を通知する。
ステップＳ２２０４では、サブサーバー処理情報管理モジュール１８２は、サーバー情報管理ＤＢ１７６に対して、処理速度情報を更新する。
ステップＳ２２０６では、ネットワーク情報管理モジュール１８０は、サーバー情報管理ＤＢ１７６に対して、一定間隔でネットワーク情報を更新する。
【０１０７】
以下に、図２０、図２１の例に示したフローチャート内の処理について、主要な処理について説明する。
・サブサーバー情報登録処理（サブサーバー登録モジュール１７２→サーバー情報管理ＤＢ１７６）
システム管理者１９８によって登録されたサブサーバー情報をサーバー情報管理ＤＢに保存する。
渡すデータは、サブサーバー情報（ＩＰアドレス・ＩＤ／パスワード）であり、戻り値はＮＵＬＬである。
・外部サーバー情報登録（外部サーバー登録モジュール２７２→サーバー情報管理ＤＢ）
システム管理者１９８によって登録された外部サーバー情報を外部サーバー情報管理ＤＢ２７６に保存する。
渡すデータは、サブサーバー情報（ＩＰアドレス・ＩＤ／パスワード）であり、戻り値はＮＵＬＬである。
【０１０８】
・ジョブ解析要求（ジョブ管理モジュール１０４→ジョブ解析モジュール１２８）
受け取ったジョブから処理を行うデータ部の切り取りを依頼する。
渡すデータは、ジョブデータ、プラグイン情報であり、戻り値は、ジョブの切り取りデータである。
・処理サーバー選定要求（ジョブ処理依頼モジュール１８３０→処理サーバー選定モジュール１１２）
ジョブを処理するサーバーを選定する。
渡すデータは、データサイズ、フロー・プラグイン情報であり、戻り値は、処理サーバー情報である。
【０１０９】
・メインサーバー処理情報要求（処理サーバー選定モジュール１１２→メインサーバー処理情報管理モジュール１６４）
処理完了時間を計算するために必要な情報として、メインサーバー１８００のパイプラインの空き情報及び処理速度情報を要求する。
渡すデータはＮＵＬＬであり、戻り値は、処理速度、パイプライン空き情報である。
・サブサーバー処理情報要求（処理サーバー選定モジュール１１２→サブサーバー処理情報管理モジュール１８２）
処理完了時間を計算するために必要な情報として、サブサーバー１９００のパイプラインの空き情報及び処理速度情報を要求する。なお、サーバー情報管理ＤＢ１７６に登録されているサブサーバー全てに情報を要求する。
渡すデータはＮＵＬＬであり、戻り値は、処理速度、各パイプライン空き情報である。
【０１１０】
・ネットワーク情報要求（処理サーバー選定モジュール１１２→ネットワーク情報管理モジュール１８０）
各サブサーバー１９００にデータを転送するのにかかる時間を計算するために、ネットワークの通信状況を要求する。
渡すデータはＮＵＬＬであり、戻り値は、ネットワーク情報である。
・サーバー処理時間の算出要求（処理サーバー選定モジュール１１２→処理サーバー計算モジュール１８６）
全サーバーでのジョブの処理完了の算出時間を取得する。
渡すデータは、パイプラインの稼働状況、ネットワーク情報、データサイズであり、戻り値は、ジョブ処理完了時間が最短のサーバー情報である。
【０１１１】
・パイプライン予約（処理サーバー選定モジュール１１２→ジョブ管理モジュール１０４）
パイプラインを確保するために、ジョブを転送する前に転送先のパイプラインを予約する。
渡すデータは、パイプライン予約情報であり、戻り値はＮＵＬＬである。
・パイプライン稼働状況通知（メインサーバー情報管理モジュール１６４・サブサーバー情報管理モジュール１８２→パイプライン稼働状況管理１１８）
自身のサーバーのパイプラインの稼働状況（パイプラインの処理状況及び予約状況から算出）を渡す。
渡すデータは、パイプラインの稼働状況である。
【０１１２】
図２２を参照して、本実施の形態の情報処理装置のハードウェア構成例について説明する。図２２に示す構成は、例えばパーソナルコンピュータ（ＰＣ）等によって構成されるものであり、スキャナ等のデータ読み取り部２２１７と、プリンタ等のデータ出力部２２１８を備えたハードウェア構成例を示している。
【０１１３】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２２０１は、前述の実施の形態において説明した各種のモジュール、すなわち、ジョブ管理モジュール１０４、処理サーバー選定モジュール１１２、パイプライン稼働状況管理モジュール１１８、ジョブ処理モジュール１２２、ジョブ解析モジュール１２８、フロー登録モジュール１４０、フロー解析モジュール１４４、ジョブ処理状況管理モジュール１５６、メインサーバー処理情報管理モジュール１６４、処理依頼判定モジュール１６８、サブサーバー登録モジュール１７２、ネットワーク情報管理モジュール１８０、サブサーバー処理情報管理モジュール１８２、処理サーバー計算モジュール１８６、ジョブ管理モジュール２０４、パイプライン稼働状況管理モジュール２１８、ジョブ処理モジュール２２２、外部サーバー登録モジュール２７２、データ取得モジュール１８１０、ジョブ生成モジュール１８２０、ジョブ受付モジュール１９０４等の各モジュールの実行シーケンスを記述したコンピュータ・プログラムにしたがった処理を実行する制御部である。
【０１１４】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２２０２は、ＣＰＵ２２０１が使用するプログラムや演算パラメータ等を格納する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２２０３は、ＣＰＵ２２０１の実行において使用するプログラムや、その実行において適宜変化するパラメータ等を格納する。これらはＣＰＵバス等から構成されるホストバス２２０４により相互に接続されている。
【０１１５】
ホストバス２２０４は、ブリッジ２２０５を介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バス等の外部バス２２０６に接続されている。
【０１１６】
キーボード２２０８、マウス等のポインティングデバイス２２０９は、操作者により操作される入力デバイスである。ディスプレイ２２１０は、液晶表示装置又はＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）等があり、各種情報をテキストやイメージ情報として表示する。
【０１１７】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２２１１は、ハードディスク（フラッシュメモリ等であってもよい）を内蔵し、ハードディスクを駆動し、ＣＰＵ２２０１によって実行するプログラムや情報を記録又は再生させる。ハードディスクは、フロー文書ＤＢ１０８、フロー情報管理ＤＢ１３２、ワーク文書ＤＢ１５２、処理履歴管理ＤＢ１６０、サーバー情報管理ＤＢ１７６、ワーク文書ＤＢ２５２、処理履歴管理ＤＢ２６０、外部サーバー情報管理ＤＢ２７６等としての機能を実現させる。さらに、その他の各種データ、各種コンピュータ・プログラム等が格納される。
【０１１８】
ドライブ２２１２は、装着されている磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体２２１３に記録されているデータ又はプログラムを読み出して、そのデータ又はプログラムを、インタフェース２２０７、外部バス２２０６、ブリッジ２２０５、及びホストバス２２０４を介して接続されているＲＡＭ２２０３に供給する。リムーバブル記録媒体２２１３も、ハードディスクと同様のデータ記録領域として利用可能である。
【０１１９】
接続ポート２２１４は、外部接続機器２２１５を接続するポートであり、ＵＳＢ、ＩＥＥＥ１３９４等の接続部を有する。接続ポート２２１４は、インタフェース２２０７、及び外部バス２２０６、ブリッジ２２０５、ホストバス２２０４等を介してＣＰＵ２２０１等に接続されている。通信部２２１６は、通信回線に接続され、外部とのデータ通信処理を実行する。データ読み取り部２２１７は、例えばスキャナであり、ドキュメントの読み取り処理を実行する。データ出力部２２１８は、例えばプリンタであり、ドキュメントデータの出力処理を実行する。
【０１２０】
なお、図２２に示す情報処理装置のハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図２２に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図２２に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器（携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む）、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【０１２１】
また、前述の実施の形態の説明において、予め定められた値との比較において、「以上」、「以下」、「より大きい」、「より小さい（未満）」としたものは、その組み合わせに矛盾が生じない限り、それぞれ「より大きい」、「より小さい（未満）」、「以上」、「以下」としてもよい。
【０１２２】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、ブルーレイ・ディスク（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリーカード等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。
【符号の説明】
【０１２３】
１００…メインサーバー
１０４…ジョブ管理モジュール
１０８…フロー文書ＤＢ
１１２…処理サーバー選定モジュール
１１８…パイプライン稼働状況管理モジュール
１２２…ジョブ処理モジュール
１２８…ジョブ解析モジュール
１３２…フロー情報管理ＤＢ
１４０…フロー登録モジュール
１４４…フロー解析モジュール
１５２…ワーク文書ＤＢ
１５６…ジョブ処理状況管理モジュール
１６０…処理履歴管理ＤＢ
１６４…メインサーバー処理情報管理モジュール
１６８…処理依頼判定モジュール
１７２…サブサーバー登録モジュール
１７６…サーバー情報管理ＤＢ
１８０…ネットワーク情報管理モジュール
１８２…サブサーバー処理情報管理モジュール
１８６…処理サーバー計算モジュール
２００…サブサーバー
２０４…ジョブ管理モジュール
２１８…パイプライン稼働状況管理モジュール
２２２…ジョブ処理モジュール
２５２…ワーク文書ＤＢ
２６０…処理履歴管理ＤＢ
２７２…外部サーバー登録モジュール
２７６…外部サーバー情報管理ＤＢ
３１０…画像処理装置
１８００…メインサーバー
１８１０…データ取得モジュール
１８２０…ジョブ生成モジュール
１８３０…ジョブ処理依頼モジュール
１９００…サブサーバー
１９０４…ジョブ受付モジュール
【図１】
2017049685.tif 000003
【図２】
2017049685.tif 000004
【図３】
2017049685.tif 000005
【図４】
2017049685.tif 000006
【図５】
2017049685.tif 000007
【図６】
2017049685.tif 000008
【図７】
2017049685.tif 000009
【図８】
2017049685.tif 000010
【図９】
2017049685.tif 000011
【図１０】
2017049685.tif 000012
【図１１】
2017049685.tif 000013
【図１２】
2017049685.tif 000014
【図１３】
2017049685.tif 000015
【図１４】
2017049685.tif 000016
【図１５】
2017049685.tif 000017
【図１６】
2017049685.tif 000018
【図１７】
2017049685.tif 000019
【図１８】
2017049685.tif 000020
【図１９】
2017049685.tif 000021
【図２０】
2017049685.tif 000022
【図２１】
2017049685.tif 000023
【図２２】
2017049685.tif 000024