図1は、本実施形態のシステムの構成例を示す図である。図1に示すシステムは、文書処理システム101と、PC(Personal Computer )103と、MFP(Multi Function Peripheral )102とを備える。文書処理システム101は、サーバ群を含んでおり、インターネット等のネットワーク120に接続されている。また、ユーザが操作するユーザ装置であるPCとMFP102は、LAN110を介してネットワーク120に接続されている。
本実施形態においては、LAN110は、ネットワーク120からファイアウォールで遮断されている。すなわち、MFP102とPC103は、外部からのアクセスが制限されたローカルエリアに配置されている。また、文書処理システム101は、クラウドに設けられているクラウドコンピューティングシステムである。クラウドとは、クラウドコンピューティング環境におけるサーバ群が配置される領域のことである。クラウドコンピューティング環境においては、ユーザはコンピュータ処理をネットワーク経由でサービスとして利用する。クラウドに設けられた文書処理システム101から発する要求によりファイアウォール内部にアクセスすることはできない。従って、文書処理システム101は、MFP102又はPC103からの要求の応答を返すことによって、MFP102又はPC103に対して通信を行う。本実施形態の文書処理方法は、図1に示すシステムによって実現される。また、本実施形態のコンピュータプログラムは、この文書処理方法をコンピュータに実行させる。
図2は、文書処理システムが備えるサーバ群に含まれるサーバのハードウェア構成図の例である。制御部210は、サーバの動作を制御する。制御部210は、CPU(Central Processing Unit )211、ROM(Read Only Memory)212、RAM(Random Access Memory)213を備える。また、制御部210は、HDD(Hard Disk Drive )214、ネットワークI/F(Interface )215を備える。制御部210が備える各処理部は、バス216に接続されている。
CPU211は、制御部210全体を制御する。CPU211は、ROM212やHDD214に予め記憶された制御プログラムを読み出して読取制御や送信制御などの各種制御処理を実行する。RAM213は、CPU211の主メモリ、ワークエリアなどの一時記憶領域として用いられる。HDD214は、画像データや、各種プログラムを記憶する。ネットワークI/F215は、制御部210をネットワーク120に接続し、ネットワーク120上の外部装置との間で情報の送受信を行う。
図3は、文書処理システムが備えるサーバ群が提供するプラットフォームシステム(オペレーティングシステム)の例である。このプラットフォームシステムは、サーバ群を構成する各サーバのCPU211が、ROM212またはHDD214に記憶されている制御プログラムを、RAM213を一時記憶領域として使用しながら実行することにより実現される。また、このプラットフォームシステムは、記憶領域としてRAM213やHDD214を利用する。このプラットフォームの利用者は、サーバ群101内にある物理ハードウェア・リソースをコンピューティングリソースとして使用できる。
図3に示すプラットフォームシステムは、複数のVM301、302、ファブリック・コントローラ303、ロード・バランサ304、キュー・サービス311、ブロブ・ストア312、テーブル・ストア313、管理VM307を有する。VMは、Virtual Machineの略称である。VMは、文書処理システム101が備える物理的なサーバ群101上において、仮想化技術によって独立したオペレーティングシステムで動作する論理的なコンピュータである。この論理的なコンピュータの単位をインスタンスという。本実施形態においては、1つのインスタンスは、サーバ群を構成する一つのサーバ上で動作する。
VM301は、要求受信部(Web Roleインスタンス)3011と要求受信部エージェント3012とを備える。要求受信部3011は、ロード・バランサ304を介してユーザ装置からの処理依頼を受信する。また、要求受信部3011は、キュー・サービス311を介してバックエンド処理部3021への処理依頼を送信する。要求受信部エージェント3012は、VM301の使用状況、要求受信部3011の稼動状態、VM301のリソースの使用状況および要求受信部3011のエラーを含む各種情報を収集して、ファブリック・コントローラ303に定期的に送信する。
VM302は、バックエンド処理部(Worker Roleインスタンス)3021とバックエンド処理部エージェント3022とを備える。バックエンド処理部3021は、キュー・サービス311を介して要求受信部3011からの処理依頼を受信する。バックエンド処理部3021は、キュー・サービス311を介して要求受信部3011から受信した処理依頼を実行する。また、バックエンド処理部3021は、スケールアウトが可能である。スケールアウトとは、VM302が増加し、バックエンド処理部3021のインスタンスが増加することをいう。バックエンド処理部3021のインスタンスが増加することによって、処理能力が向上し、ユーザ装置からの複数の処理依頼に対する結果をより早く返すことができる。
ファブリック・コントローラ303は、要求受信部3011、バックエンド処理部3021の各インスタンスを管理している。これにより、各インスタンスの拡張性と可用性が保証される。例えば、要求受信部3011またはバックエンド処理部3021において、ある特定のインスタンスがサーバの故障によって停止した場合を想定する。この場合、ファブリック・コントローラ303が、停止したインスタンスに対応する要求受信部エージェント3012またはバックエンド処理部エージェント3022から定期通知を受け取らなくなる。これにより、ファブリック・コントローラ303は、停止したインスタンスに対応するVMに対して、新しいインスタンスに処理を委譲するように指示する。この結果、処理を実行しているインスタンス数が一定に保たれるため、処理の遅延を抑えることができる。
ロード・バランサ304は、外部ネットワークからの要求(ここではHTTPによる通信)を一元的に管理し、同等な要求受信部の機能を有する複数のVMに対し、選択的に要求を転送する。これによって、要求受信部3011の高い可用性が確保される。管理VM307は、要求受信部3011と要求受信部エージェント3012とを備える。VM301との違いは、管理VM307が、管理ユーザのみが利用できる要求受信部3011のインスタンスを持つVMである点である。
キュー・サービス311は、各インスタンスが非同期でデータ通信するためのサービスを提供する。例えば、要求受信部3011が、バックエンド処理部3021に実行させたいジョブに関する情報を、メッセージとしてキューに書き込みむ。バックエンド処理部3021は、キューに書き込まれたメッセージを読み出し、その読み出した情報に基づいて処理を実行する。ブロブ・ストア312は、バイナリ形式のデータを保存する機能を提供する。テーブル・ストア313は、表形式でデータを保存する機能を提供する。
図4は、実施例1のユーザ装置と文書処理システムの機能ブロックの例を示す図である。ユーザ装置102(103)は、ブラウザ部451と文書記憶部452とを備える。ブラウザ部451は、文書処理システム101にアクセスして、文書処理システム101にリクエスト(要求)すると共に、そのリクエストに対するレスポンスを受け取る。具体的には、ブラウザ部451は、文書処理システム101に対して、文書記憶部452に保存されている文書データの処理要求である文書処理リクエストを送信する。また、ブラウザ部451は、文書処理システム101に対して処理結果取得リクエストを送信して、処理された文書データを受信する。処理結果取得リクエストは、文書処理システム101が処理した文書データの送信を求める要求である。
文書記憶部452は、ユーザ装置が例えば記録メディアから読み込んだ文書データ、ブラウザ部451が文書サービス400から受信した処理結果の文書データを保存する。なお、ユーザ装置がMFPである場合には、ユーザ装置が、文書記憶部452に保存されている文書を印刷する処理部や、印刷物をスキャンして電子化し文書記憶部452に保存する処理部等を備えるようにしてもよい。
図4に示す文書処理システム101は、受信処理部411、分割処理部412、文書処理部413、結合処理部414、リソース管理部415、分割キュー421、文書処理キュー422、結合キュー423を備える。また、文書処理システム101は、処理データ記憶部431、リクエスト・テーブル441、文書処理テーブル442を備える。図4に示す文書処理システム101の機能は、図3を参照して説明したプラットフォームシステムによって実現される。
分割キュー421、文書処理キュー422、結合キュー423は、処理対象のジョブをメッセージとして格納するキューである。分割キュー421は、分割処理部412に対応するキューである。文書処理キュー422は、文書処理部413に対応するキューである。結合キュー423は、結合処理部414に対応するキューである。
受信処理部411は、ユーザ装置が備えるブラウザ部451から、文書処理リクエストまたは処理結果取得リクエストを受信する。受信処理部411は、図3に示すWeb Roleインスタンス3011によって実現される。このWeb Roleインスタンス3011は、ユーザ装置からジョブの処理依頼を受信したことに応じて、上記ジョブに対応するメッセージを記憶手段(キュー)に格納する。具体的には、受信処理部411は、文書処理リクエストを受信すると、分割処理部412に処理を行わせるために、リクエスト・テーブル441、処理データ記憶部431に必要な情報を書き込む。また、受信処理部411は、分割キュー421にリクエストが示すジョブに対応するメッセージを格納する。そして、受信処理部411は、リクエスト元に対してリクエストIDを返す。このリクエストIDは、受信処理部411が文書リクエスト毎に割り当てる識別子である。リクエストIDは、処理結果取得リクエストにおいて、結果を取得する処理の識別に使用される。受信処理部411が処理結果取得リクエストを受信した場合は、そのリクエストに含まれるリクエストIDの処理が完了していれば、その処理結果のデータを処理データ記憶部431から取得してリクエスト元に返す。すなわち、受信処理部411は、ユーザ装置(例えば画像形成装置102)からジョブの処理依頼を受信したことに応じて、上記ジョブに対応するメッセージを記憶手段(分割キュー421)に格納する要求受信部として機能する。この要求受信部は、要求受信プログラムを実行することにより実現される。
分割処理部412、文書処理部413、結合処理部414は、バックエンド処理部である。バックエンド処理部は、図3のWorker Roleインスタンス3021によって実現される。バックエンド処理部は、Web Rollインスタンス3011によるメッセージの格納対象となる記憶手段に対しメッセージの取得要求を定期的に行う。バックエンド処理部は、この記憶手段からメッセージを取得した場合は、該取得したメッセージに基づく処理を行う。バックエンド処理部は、バックエンド処理プログラムを実行することにより実現される。
分割処理部412は、受信処理部411が受信した処理依頼(文書処理リクエスト)に対応する文書データを分割して分割文書データ(以下、ピースと記述)を生成する分割処理バックエンド処理部として機能する。分割処理部412の機能は、図3中のWorker Roleインスタンス3021によって実現される。分割処理部412は、分割キュー421からメッセージを取り出し、さらに、リクエスト・テーブル441および処理データ記憶部431から必要な情報を取得して、処理対象となる文書データに対して分割処理を行う。そして、分割処理結果であるピースを文書処理部413に処理させるために、リクエスト・テーブル441、文書処理テーブル442、処理データ記憶部431、文書処理キュー422に必要な情報を書き込む。
文書処理部413は、ピースを文書処理する文書処理バックエンド処理部として機能する。文書処理部413の機能は、図3のWorker Roleインスタンス3021によって実現される。文書処理部413は、文書処理キュー422からメッセージを取り出し、さらに、文書処理テーブル442および処理データ記憶部431から必要な情報を取得して、ピースに対して処理を実行する。そして、ピースに対する処理結果のデータ(以下、処理済みピースと呼ぶ)を結合処理部414に処理させるために、文書処理テーブル442および処理データ記憶部431に必要な情報を書き込む。なお、文書処理部413は、ピースを複数のインスタンスで一斉に処理することを想定している。従って、文書処理部413に対しては、通常、他の処理部よりも多くのインスタンスが割り当てられる。
結合処理部414は、文書処理された分割文書データすなわち処理済みピースを結合する結合処理バックエンド処理部として機能する。結合処理部414の機能は、図3中のWorker Roleインスタンス3021によって実現される。結合処理部414は、結合キュー423からメッセージを取り出すと共に、リクエスト・テーブル441、文書処理テーブル442、処理データ記憶部431から必要な情報を取得する。そして、結合処理部414は、処理済みピースを、順番どおり1つに結合する処理を行う。また、結合処理部414は、結合結果を処理データ記憶部431に保存すると共に、リクエスト・テーブル441の内容を更新する。
リソース管理部415は、分割処理部412、文書処理部413、または結合処理部414の夫々の処理状況に応じて、該夫々の処理部(バックエンド処理部)の数を増減させる管理部として機能する。リソース管理部415の機能は、図3中のWorker Roleインスタンス3021によって実現される。具体的には、リソース管理部415は、予め決められた時間間隔で、分割キュー421、文書処理キュー422、結合キュー423のそれぞれに格納されている未処理のメッセージ数(ジョブの数)またはキューへのメッセージの格納時間を監視する。リソース管理部415は、当該監視結果に応じて、分割処理部412、文書処理部413、又は結合処理部414に割り当てられているインスタンスの数を増減させる。すなわち、リソース管理部415は、キューに格納されているジョブの数、または該キューへのジョブの格納時間に基づいて、該キューに対応する処理部の数を増減させる。具体的には、リソース管理部415は、キューに格納されているジョブの数が所定の閾値以下(例えば0以下)である場合に、該キューに対応する処理部の数を減少させる。また、リソース管理部415は、キューに格納されているジョブの数が所定の閾値を超える場合に、該キューに対応する処理部の数を増加させる。リソース管理部415が、キューへのジョブの格納時間が所定の閾値以上であるかを判断し、該判断結果に基づいて、該キューに対応する処理部の数を減少させるかまたは増加させるかを決定するようにしてもよい。
分割キュー421、文書処理キュー422、結合キュー423は、図3中のキュー・サービス311上に実装される。分割キュー421は、受信処理部411から分割処理部412に処理を受け渡すために利用される。キューに入れられるメッセージは、リクエストIDを含む。リクエストIDは、リクエスト・テーブル441から情報を取り出すために用いられる。文書処理キュー422は、分割処理部412から文書処理部413に処理を受け渡すのに利用される。キューに入れられるメッセージは、リクエストIDおよびピース番号を含む。このリクエストID及びピース番号は、文書処理テーブル442から情報を取り出すために用いられる。結合キュー423は、分割処理部412が分割処理を行ったことを結合処理部414に伝達するために使用される。この伝達により、結合処理部414は、ピースに対する処理が完了したかを確認できる。結合キュー423に入れられるメッセージは、リクエストIDを含む。このリクエストIDは、後述するステータスを確認するために用いられる。
処理データ記憶部431の機能は、図3中のブロブ・ストア312によって実現される。処理データ記憶部431は、受信処理部411が受け取った文書データや、分割処理部412が分割したデータ(ピース)、文書処理部413が処理したデータ(処理済みピース)、結合処理部414が結合したデータを保存する。リクエスト・テーブル441は、図3中のテーブル・ストア313上に実装される。リクエスト・テーブル441は、受信処理部411が受信した文書処理リクエストの情報を保持する。文書処理テーブル442は、テーブル・ストア313上に実装される。文書処理テーブル442は、分割処理部412による文書データの分割処理状況を示す情報を保持する。
図5は、リクエスト・テーブルと文書処理テーブルの例を示す図である。図5(A)は、リクエスト・テーブル441の例を示す。リクエスト・テーブル441は、リクエストID、文書データURI(Uniform Resource Identifier )、ステータス、ピース数といったデータ項目を有する。リクエストIDは、受信処理部411が受信した文書処理リクエストを一意に識別するための識別子である。受信処理部411がリクエストIDを発行する。文書データURIは、受信処理部411が受信した文書処理リクエストに含まれている文書データの、処理データ記憶部431上での保存場所を示す。ステータスは、文書処理リクエストが、文書処理システム上でどのような処理状態にあるかを示す。ステータスの初期値は「分割前」であり、分割処理部412が分割処理を行うと分割処理部412によって「分割済み」に更新される。結合処理部414が分割データの処理結果を結合すると、ステータスの値が「完了」に更新される。ピース数は、分割処理部412が文書データを何個のデータに分割したかを示す。ピース数の値は、分割処理部412が分割処理を行った際に、分割処理部412によって書き込まれる。
図5(B)は、文書処理テーブル442の例である。文書処理テーブル442は、リクエストID、ピース番号、ピースURI、ステータスといった項目を持つ。リクエストIDは、リクエスト・テーブル441の同名の項目と親子関係にあり、分割処理対象のリクエストを示す。ピース番号は、分割処理部412がピースに対して順番に割り当てる自然数である。文書処理テーブル442の各レコードは、リクエストIDおよびピース番号によって一意に識別される。ピースURIは、処理データ記憶部431上におけるピースの保存場所を示す。文書処理部413は、ピースに対して処理を実行した後に、ピースURIが示すデータを処理済みピースに上書き更新する。ステータスは、ピースに対する文書処理部413の処理が完了しているか否かを示す。ステータスの初期値は、「未完」であり、文書処理部413によって処理が完了すると、文書処理部413によって「完了」に更新される。
図6は、実施例1の文書処理システムが備える受信処理部の動作処理を説明するフローチャートである。図6のフローチャートに示す各ステップの処理は、文書処理システム101が備えるサーバ群のCPU211がWeb Roleインスタンス3011を稼動させて制御プログラムを実行することにより実現される。
まず、受信処理部411が、文書処理リクエストを受信したかを判断する(ステップS1)。受信処理部411が、文書処理リクエストを受信したと判断した場合は、ステップS2に進む。受信処理部411が、文書処理リクエストを受信していないと判断した場合は、ステップS7に進む。
次に、受信処理部411が、受信したリクエストを一意に識別するリクエストIDを発行する(ステップS2)。続いて、受信処理部411が、文書処理リクエストに含まれる処理対象となる文書データを、処理データ記憶部431に保存する(ステップS3)。保存時に指定するURI(文書データURI)は、リクエストIDに対応付けられる。次に、受信処理部411が、リクエスト・テーブル441にレコード(1行分のデータ)を挿入する(ステップS4)。レコードの各項目のうち、リクエストIDの値は、ステップS2で発行されたリクエストIDである。文書データURIの値は、ステップS3でリクエストIDに対応付けられたURIである。ステータスの値は、「分割前」である。ピース数はこの時点では空である。
次に、受信処理部411が、分割処理部412に処理を受け渡すために、分割キュー421にメッセージを投入する(ステップS5)。分割処理部412が、処理に必要な情報にアクセスできるように、メッセージにはリクエストIDを入れる。続いて、受信処理部411が、文書処理リクエストの送信元に対して、発行したリクエストIDを返送し(ステップS6)、ステップS1に戻る。文書処理リクエストの送信元は、返送されたリクエストIDを用いることで、処理結果を取得するためのリクエスト(処理結果取得リクエスト)を、文書処理システム101に対して送信することができる。
ステップS7においては、受信処理部411が、処理結果取得リクエストを受信したかを判断する(ステップS7)。受信処理部411が、処理結果取得リクエストを受信していないと判断した場合は、ステップS1に戻る。受信処理部411が、処理結果取得リクエストを受信したと判断した場合は、受信処理部411が、処理結果取得リクエストに含まれるリクエストIDを抽出する。そして、受信処理部411が、リクエスト・テーブル441の当該リクエストIDに対応するレコードのステータスを確認し、対象リクエストの処理が完了しているかを判断する(ステップS8)。ステータスが「完了」である場合、受信処理部411が、対象リクエストの処理が完了していると判断して、ステップS9に進む。ステータスが「完了」でない場合、受信処理部411が、対象リクエストの処理が完了していないと判断して、ステップS10に進む。
次に、受信処理部411が、リクエスト・テーブル441の当該リクエストIDに対応するレコードに含まれる文書データURIに基づいて、処理データ記憶部431から処理結果のデータを取り出す。そして、受信処理部411が、処理結果のデータを処理結果取得リクエストのリクエスト元に返送し(ステップS9)、ステップS1に戻る。ステップS10においては、受信処理部411が、処理結果取得リクエストのリクエスト元に、処理中であることを示すメッセージを返送し(ステップS10)、ステップS1に戻る。
図7は、実施例1の文書処理システムが備える分割処理部の動作処理を説明するフローチャートである。図7のフローチャートに示す各ステップの処理は、文書処理システム101が備えるサーバ群のCPU211がWorker Roleインスタンス3021を稼動させて制御プログラムを実行することにより実現される。
まず、分割処理部412が、分割キュー421にメッセージがあるかを判断する(ステップS21)。分割処理部412が、分割キュー421にメッセージがないと判断した場合は、ステップS21に戻る。分割処理部412が、分割キュー421にメッセージがあると判断した場合は、分割処理部412が、分割キュー421からメッセージを一つ取得する(ステップS22)。そして、分割処理部412が、メッセージに含まれるリクエストIDを処理対象のリクエストに対応するリクエストIDとして抽出する。
次に、分割処理部412が、抽出したリクエストIDに基づいて、リクエスト・テーブル441および処理データ記憶部431から、文書データを含む分割処理に必要な情報を取得する。そして、取得した情報に基づき、文書データをピースに分割する(ステップS23)。本実施例では、分割処理部412は、文書データを予め定められたデータ単位(例えばページ毎)に分割するものとする。
次に、分割処理部412が、ピースを処理データ記憶部431に保存する(ステップS24)。ステップS24においては、分割処理部412は、各ピースに対して1から順番に番号(ピース番号)を割り当てる。そして、分割処理部412が、例えばリクエストIDとピース番号とを組み合わせてピースを識別する一意のURI(ピースURI)を生成し、生成したURIを各ピースの保存場所として指定する。
次に、分割処理部412が、文書処理テーブル442にレコードを挿入する(ステップS25)。レコードのデータ項目のうち、リクエストIDの値は、ステップS22で抽出されたリクエストIDである。ピース番号は、ステップS24においてピースに対して割り当てられた番号である。ピースURIの値は、ステップS24で生成されたURIである。ステータスの値は、「未完」である。
次に、分割処理部412が、リクエスト・テーブル441における処理対象のリクエストに対応するリクエストIDを持つレコードを更新する。具体的には、当該レコードのステータスを「分割済み」に変更し、ピース数に、文書データを何個のピースに分割したかを書き込む。続いて、分割処理部412が、文書処理部413に処理を受け渡すため、ピースに対応する、ピースと同数のメッセージを文書処理キュー422に投入する(ステップS27)。文書処理部413が処理に必要な情報にアクセスできるように、分割処理部412は、メッセージにリクエストIDとピース番号を入れる。
次に、分割処理部412が、結合処理部414に処理を受け渡すため、結合キュー423にメッセージを投入する(ステップS28)。結合処理部414が処理に必要な情報にアクセスできるように、分割処理部412は、メッセージにリクエストIDを入れる。そして、処理がステップS21に戻る。
図8は、実施例1の文書処理システムが備える文書処理部の動作処理を説明するフローチャートである。図8のフローチャートに示す各ステップの処理は、文書処理システム101が備えるサーバ群のCPU211がWorker Roleインスタンス3021を稼動させて制御プログラムを実行することにより実現される。
まず、文書処理部413が、文書処理キュー422にメッセージがあるかを判断する(ステップS31)。文書処理部413が、文書処理キュー422にメッセージがないと判断した場合は、ステップS31に戻る。文書処理部413が、文書処理キュー422にメッセージがあると判断した場合は、文書処理部413が、文書処理キュー422からメッセージを一つ取得し(ステップS32)、メッセージに含まれるリクエストIDとピース番号を抽出する。
次に、文書処理部413が、抽出したリクエストIDとピース番号に基づき、文書処理テーブル442、処理データ記憶部431から、ピースを含む処理に必要な情報を取得する。そして、取得した情報に基づき、ピースに対して所定の処理を実行する(ステップS33)。続いて、文書処理部413が、処理結果のデータ(処理済みピース)を、処理前のデータが保存されていたピースURIに上書き保存する(ステップS34)。そして、文書処理部413が、処理対象のピースに対応する、文書処理テーブル442のレコードを更新する(ステップS35)。具体的には、当該レコードのステータスを「完了」に変更する。そして、処理がステップS31に戻る。
図9は、実施例1の文書処理システムが備える結合処理部の動作処理を説明するフローチャートである。図9のフローチャートに示す各ステップの処理は、文書処理システム101が備えるサーバ群のCPU211がWorker Roleインスタンス3021を稼動させて制御プログラムを実行することにより実現される。
まず、結合処理部414が、結合キュー423にメッセージがあるかを判断する(ステップS41)。結合処理部414が、結合キュー423にメッセージがないと判断した場合は、ステップS41に戻る。結合処理部414が、結合キュー423にメッセージがあると判断した場合、結合処理部414が、結合キュー423からメッセージを一つ取得し(ステップS42)、メッセージに含まれるリクエストIDを抽出する。
次に、結合処理部414が、抽出したリクエストIDに基づき、文書処理テーブル442の当該リクエストIDを持つ全レコード(対象レコード)のステータスが「完了」となっているかを判断する(ステップS43)。結合処理部414が、対象レコードのうち、ステータスが「完了」となっていないレコードがあると判断した場合は、ステップS43に戻る。結合処理部414が、対象レコードのステータスが「完了」となっていると判断した場合は、以下の処理を行う。結合処理部414は、上記ステップS42において抽出したリクエストIDに対応するピース番号を文書処理テーブル442から抽出する。結合処理部414は、抽出したピース番号に対応するピース(処理済みピース)を処理データ記憶部431から取得し、ピース番号順に結合する(ステップS44)。
次に、結合処理部414が、結合したデータを、リクエスト・テーブル441における当該リクエストIDに対応する文書データURIに上書き保存する(ステップS45)。そして、結合処理部414が、リクエスト・テーブル441における、上記リクエストIDに対応するレコードに含まれるステータスを「完了」に更新し(ステップS46)、ステップS41に戻る。
図10は、実施例1の文書処理システムが備えるリソース管理部の動作処理を説明するフローチャートである。図10のフローチャートに示す各ステップの処理は、文書処理システム101が備えるサーバ群のCPU211がWorker Roleインスタンス3021を稼動させて制御プログラムを実行することにより実現される。
まず、リソース管理部415が、予め定められた監視間隔時間待機する。監視間隔時間経過後、リソース管理部415が、分割キュー421、文書処理キュー422、結合キュー423のそれぞれに入っている未処理のメッセージ数を取得する(ステップS51)。リソース管理部415は、所定の取得回数分のメッセージ数をキュー毎に記憶する。続いて、リソース管理部415が、所定の取得回数の間、メッセージ数が0であったキューがあるかを判断する(ステップS52)。
所定の取得回数の間、メッセージ数が0であったキューがない場合は、ステップS56に進む。所定の取得回数の間、メッセージ数が0であったキューがある場合は、リソース管理部415が、所定の取得回数の間、メッセージ数が0であったキューに対応する処理部のインスタンス数をファブリック・コントローラ303から取得する(ステップS53)。具体的には、リソース管理部415は、メッセージ数が0であったキューが分割キュー421の場合は分割処理部412のインスタンス数を取得する。リソース管理部415は、メッセージ数が0であったキューが文書処理キュー422の場合は文書処理部413のインスタンス数を取得する。また、リソース管理部415は、メッセージ数が0であったキューが結合キュー423の場合は結合処理部414のインスタンス数を取得する。なお、上記ステップS52において、所定取得回数の間、メッセージ数が0であったと判断されたキューが複数あった場合は、リソース管理部415は、メッセージ数が0であったと判断されたキューの数に応じてインスタンス数を複数取得する。
次に、リソース管理部415が、ステップS53において取得されたインスタンス数が2以上であるかを判断する(ステップS54)。ステップS53において取得されたインスタンス数が2以上でない場合は、ステップS56に進む。ステップS53において取得されたインスタンス数が2以上である場合は、ステップS55に進む。続いて、リソース管理部415が、ファブリック・コントローラ303に対して、インスタンス数が2以上あると判断された全ての処理部のインスタンスを1に削減するように指示する(ステップS55)。
次に、リソース管理部415が、所定取得回数の間、メッセージ数が1以上であったキューがあるかを判断する(ステップS56)。所定取得回数の間、メッセージ数が1以上であったキューがない場合は、ステップS51に戻る。所定取得回数の間、メッセージ数が1以上であったキューがある場合は、リソース管理部415が、各処理部のインスタンス数をファブリック・コントローラ303から取得する(ステップS57)。
続いて、リソース管理部415が、起動可能なインスタンス数に余裕があるかを判断する(ステップS58)。具体的には、リソース管理部415が、ステップS57において取得した各処理部のインスタンス数の合計が、処理部全体で起動可能なインスタンス数より少ないかを判断する。各処理部のインスタンス数の合計が、処理部全体で起動可能なインスタンス数より少なくない場合は、リソース管理部415が、起動可能なインスタンス数に余裕がないと判断して、ステップS51に戻る。各処理部のインスタンス数の合計が、処理部全体で起動可能なインスタンス数より少ない場合、リソース管理部415が、起動可能なインスタンス数に余裕があると判断して、ステップS59に進む。そして、リソース管理部415が、ステップS56において所定取得回数の間、メッセージ数が1以上であったと判断されたキューに対応する処理部のインスタンスを一つ増加させるように、ファブリック・コントローラ303に指示する(ステップS59)。そして、処理がステップS51に戻る。
実施例1の文書処理システムによれば、予め定められた、文書処理システム内で起動可能なインスタンス数の範囲で、各処理部の遅滞状況や遊休状況に応じて、各処理部のインスタンスを増減することができる。これにより、無駄にインスタンス数を多く起動してしまうことを避けながら、効率良くインスタンスを配分させることが可能となる。従って、起動しているVMのインスタンス数に応じた課金形態のクラウド環境を利用する際には特に有益である。
なお、本実施例では、リソース管理部415の処理をWorker Roleインスタンス3021が実行するが、リソース管理部415の処理をWeb Roleインスタンス3011が実行するようにしてもよい。この場合、リソース管理部415が、図3に示すプラットフォームシステムの外部のプログラムから一定間隔で監視用のリクエストを受信することで、図10に示すフローチャートの動作を実現することができる。このリソース管理部415の機能は、管理VM307に持たせても良いし、VM301に持たせても良い。
また、図10のステップS55におけるインスタンスの削減数やステップS59におけるインスタンスの増加数を、起動しているインスタンス数などに応じて可変にしてもよい。また、インスタンス増減の条件として、メッセージがキューに格納されている期間または時間を用いてもよい(後述する実施例2乃至5においても同様である)。また、各処理部はキューにメッセージを入れるタイミングについても、上述したタイミングでなくてもよい。例えば、分割処理部412が分割直後に結合キュー423にメッセージを入れるのではなく、各ピースの処理が完了した(文書処理テーブル442の各ピースのステータスが完了となった)時点で、結合キュー423にメッセージを入れるようにしてもよい。この場合、結合処理部414は、結合キュー423からメッセージを取り出した後、即座に結合処理を開始する。
また、各キューに入れるメッセージの内容についても、リクエスト・テーブル441や文書処理テーブル442の内容を、より多く含めるようにしてもよい。これにより、キューを取得した処理部によるテーブル参照の処理を削減することができる。また、各インスタンスが、複数の処理部の機能を実行するようにしてもよい。例えば、受信処理部411が分割処理部412の役割を果たしてもよい。この場合、分割キュー421を不要とすることができる。また、文書データのデータ量に応じて、分割処理部412が文書データを分割しないようにしてもよい。
また、処理の設定情報をリクエスト・テーブル441に持っていてもよい。その場合、文書処理部413がリクエスト・テーブル441にアクセスしてその情報を参照し、自身の処理に反映する。また、結合処理部414による処理データ記憶部431への上書き保存は、エラー時のデータ消失を避けるために、別名保存でもよい。その場合、テーブルに結果データURIの項目を持つことで、結果データを受け渡すことが可能となる。
また、処理部が、テーブルのレコードを削除するようにしても良い。例えば、文書処理テーブル442のレコードについては、結合処理部414が結合処理を完了した後で結合したデータに関連するレコードを削除してもよい。また、定期的に起動するバッチ処理を用意し、その中で、所定の処理部が、リクエスト・テーブル441のステータスが完了となっているリクエストIDを持つレコードを削除するようにしてもよい。これにより、保存しているデータ量に応じた課金形態のクラウド環境を利用する際のコストを削減することができる。
次に、本発明の第2の実施例について説明する。実施例2では、分割処理部412の動作のみが実施例1と異なる。従って、以下では分割処理部412の動作についてのみ説明する。実施例2の文書処理システムが備える分割処理部412は、稼動している文書処理部413のインスタンスの数や文書処理キューのメッセージ残数に応じて、分割サイズ、分割個数を決定する。
図11は、実施例2の文書処理システムが備える分割処理部の動作処理を説明するフローチャートである。図11のステップS61、S62は、図7のステップS21、S22と同様である。また、図11のステップS69乃至S73は、図7のステップS24乃至S28と同様である。
実施例2では、ステップS63において、分割処理部412が、リクエスト・テーブル441および処理データ記憶部431から、文書データを含む分割処理に必要な情報を取得する(ステップS63)。続いて、分割処理部412が、図3に示すプラットフォームシステムのファブリック・コントローラ303から、文書処理部413として稼動しているWorker Roleインスタンスの数を取得する(ステップS64)。分割処理部412が、分割キュー421と文書処理キュー422に入っているメッセージのうち、未処理のメッセージの数を取得する(ステップS65)。
次に、分割処理部412が、ステップS65において取得された各キューのメッセージ数が、閾値を超えているかを判断する(ステップS66)。閾値は、予め定義した固定値であってもよいし、ステップS64において取得された文書処理部413のWorker Roleのインスタンス数に応じて変動するようにしてもよい。いずれかのキューのメッセージ数が閾値を超えていた場合、ステップS67に進む。各キューのメッセージ数が閾値を超えていない場合は、ステップS68に進む。
ステップS67において、分割処理部412が、文書データを不均等なサイズで分割し(ステップS67)、ステップS69に進む。具体的には、分割処理部412が、ピース数がステップS64において取得された文書処理部413のWorker Roleのインスタンス数を超えないように、文書データをピースに分割する。分割処理部412は、ピースのサイズに差をつける(あるピースは他のピースよりもデータ量が小さくなる)ようにし、文書処理部413での処理が短時間で済むようなピースを作る。分割処理部412が、文書データを、文書処理部413のインスタンス数よりも少ない数に分割するようにしてもよい。ステップS68においては、分割処理部412が、文書データをステップS64において取得された文書処理部413のWorker Roleのインスタンス数と同数に均等分割して(ステップS68)、ステップS69に進む。
実施例2の文書処理システムは、キューの状態(すなわち処理の遅滞状況)に応じてピースのデータサイズを不均等にすることで、あるリクエストの処理については、早く処理を終えることのできるインスタンスを生じさせる。これによって、複数のリクエストを早く文書処理開始状態にさせることができるため、特に、短時間で処理できるような文書データのサイズが小さいリクエストの処理の遅滞を軽減することができる。
次に、本発明の実施例3について説明する。実施例3は、実施例1の変形例である。従って、以下では実施例1との違いについて説明する。
図12は、実施例3の文書処理システムの機能ブロックと、初期インスタンス数管理テーブルの例を示す図である。図12(A)は、実施例3の文書処理システムの機能ブロックの例を示す。図12(A)に示す文書処理システム104は、図4に示す文書処理システム101が備えるリソース管理部415に代えて、リソース管理部416を備える。また、文書処理システム104は、初期インスタンス数管理テーブル443を備える。初期インスタンス数管理テーブル443は、各処理部のVMのタイプ(Web Roleか、またはWorker Role)と、初期インスタンス数の情報を有する。初期インスタンス数は、文書処理システム104を開始した直後に起動するインスタンスの数である。
図12(B)は、初期インスタンス数管理テーブル443の例を示す。初期インスタンス数管理テーブル443は、処理部、VMのタイプ、初期インスタンス数といったデータ項目を有する。処理部は、文書処理システム104が備える処理部である。VMのタイプは、処理部に割り当てられているVMのタイプである。初期インスタンス数は、処理部に対応する初期インスタンス数である。各処理部のインスタンスは、インスタンスが起動した際に、自分の処理部のレコードがあるかどうかを確認し、レコードがない場合は自身の処理部のレコードを生成する。初期インスタンス数は、各々の処理部が所有している設定ファイルに記述されている。各々の処理部のインスタンスは起動時に上記設定情報を読み込んで保持しているものとする。
図13は、実施例3の文書処理システムが備えるリソース管理部の動作処理を説明するフローチャートである。図13のステップS81乃至S89は、図10のステップS51乃至59と同様である。実施例3では、ステップS88における判断処理の結果、リソース管理部416が、起動可能なインスタンス数に余裕がないと判断した場合に、以下の処理を行う。リソース管理部416は、各処理部の初期インスタンス数を、初期インスタンス数管理テーブル443から取得する(ステップS90)。リソース管理部416が、ステップS87において取得された各処理部のインスタンス数と、ステップS90において取得された各処理部の初期インスタンス数とを比較して、以下の処理を行う。リソース管理部416が、対応するインスタンス数が初期インスタンス数を超えている処理部があるかを判断する(ステップS91)。
対応するインスタンス数が初期インスタンス数を超えている処理部がない場合は、ステップS81に戻る。対応するインスタンス数が初期インスタンス数を超えている処理部がある場合は、ステップS92に進む。そして、リソース管理部416が、対応するインスタンス数が初期インスタンス数を超えていると判断された処理部のインスタンスを一つ削減するように、ファブリック・コントローラ303に指示して(ステップS92)、ステップS89に進む。なお、ステップS92におけるインスタンスの削減数は、複数であってもよいし、起動しているインスタンス数などに応じて可変であってもよい。
実施例3の文書処理システム104によれば、起動可能なインスタンス数がない状況において、初期インスタンス数を超えてインスタンスが起動している処理部のインスタンスを減じて、処理が遅滞している処理部のインスタンスを起動させることができる。これにより、インスタンスが特定の処理部に偏ってしまうことを抑制できる。
次に、本発明の実施例4について説明する。実施例4の文書処理システムは、図12(A)に示す実施例3の文書処理システムの構成と同様の構成を有する。実施例4の文書処理システムは、リソース管理部の動作と初期インスタンス数管理テーブル443のデータ構成が実施例3の文書処理システム104と異なる。なお、本実施例では、VMの種類は、VMの性能に応じて異なる低性能VMと高性能VMという2種類があるものとする。
図14は、実施例3における初期インスタンス数管理テーブルの例を示す図である。図14に示す初期インスタンス数管理テーブル443は、図12(B)に示す初期インスタンス数管理テーブル443が有するデータ項目に加えて、性能というデータ項目を有する。性能は、VMの性能が低性能であるか、または高性能であるかを示す。
図15は、実施例4の文書処理システムが備えるリソース管理部の動作処理を説明するフローチャートである。図15のステップS101乃至S104は、図13のステップS81乃至S84と同様である。実施例4では、リソース管理部416が、ファブリック・コントローラ303に対して、インスタンス数が2以上あると判断された全ての処理部(ステップS104を参照)のインスタンス数の削減を指示する。本実施例では、リソース管理部416が、高性能VMのインスタンス数を0、低性能VMのインスタンス数を1に削減するように指示する(ステップS105)。
次に、リソース管理部416が、所定の取得回数の間、メッセージ数が1以上であったキューがあるかを判断する(ステップS106)。所定の取得回数の間、メッセージ数が1以上であったキューがない場合は、ステップS101に戻る。所定の取得回数の間、メッセージ数が1以上であったキューがある場合は、ステップS107に進む。続いて、リソース管理部416が、全処理部の低性能VMおよび高性能VMのインスタンス数をファブリック・コントローラ303から取得する(ステップS107)。
次に、リソース管理部416が、起動可能な低性能VMのインスタンス数に余裕があるかを判断する(ステップS108)。具体的には、リソース管理部416が、ステップS107で取得された各処理部の低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能VMインスタンス数より少ないかを判断する。各処理部の低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能VMインスタンス数より少ない場合、リソース管理部416は、起動可能な低性能VMのインスタンス数に余裕があると判断して、ステップS109に進む。各処理部の低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能VMインスタンス数より少なくない場合、リソース管理部416は、起動可能な低性能VMのインスタンス数に余裕がないと判断して、ステップS110に進む。
ステップS109において、リソース管理部416が、ファブリック・コントローラ303に対して、以下のように指示する。リソース管理部416は、所定の取得回数の間、メッセージ数が1以上であったと判断されたキュー(ステップS106を参照)に対応する処理部の低性能VMのインスタンスを一つ増加させるように指示する。そして、処理がステップS101に戻る。
ステップS110においては、リソース管理部416が、起動可能な高性能VMのインスタンス数に余裕があるかを判断する(ステップS110)。具体的には、リソース管理部416が、ステップS107で取得された各処理部の高性能VMのインスタンス数の合計が、処理部全体で起動可能な高性能VMインスタンス数より少ないかを判断する。各処理部の高性能VMのインスタンス数の合計が、処理部全体で起動可能な高性能VMインスタンス数より少ない場合、リソース管理部416は、起動可能な高性能VMのインスタンス数に余裕があると判断して、ステップS111に進む。各処理部の高性能VMのインスタンス数の合計が、処理部全体で起動可能な高性能VMインスタンス数より少なくない場合、リソース管理部416は、起動可能な高性能VMのインスタンス数に余裕がないと判断して、ステップS112に進む。
ステップS111において、リソース管理部416が、ファブリック・コントローラ303に対して、以下のように指示する。リソース管理部416が、所定の取得回数の間、メッセージ数が1以上であったと判断されたキュー(ステップS106を参照)に対応する処理部の高性能VMのインスタンスを一つ増加させるように指示する。そして、処理がステップS101に戻る。
ステップS112においては、リソース管理部416が、各処理部の低性能VMおよび高性能VMの初期インスタンス数を、初期インスタンス数管理テーブル443から取得する(ステップS112)。続いて、リソース管理部416が、ステップS107で取得された各処理部の高性能VMのインスタンス数と、ステップS112で取得された各処理部の高性能VMの初期インスタンス数とを比較する。そして、リソース管理部416が、対応する高性能VMのインスタンス数が、高性能VMの初期インスタンス数を超えている処理部があるかを判断する(ステップS113)。対応する高性能VMのインスタンス数が、高性能VMの初期インスタンス数を超えている処理部がある場合は、ステップS114に進む。対応する高性能VMのインスタンス数が、高性能VMの初期インスタンス数を超えている処理部がない場合は、ステップS115に進む。ステップS114において、リソース管理部416が、ファブリック・コントローラ303に対して、以下のように指示する。リソース管理部416が、対応する高性能VMのインスタンス数が初期インスタンス数を超えていると判断された処理部(ステップS113を参照)の高性能VMのインスタンスを一つ削減するように指示する。そして、処理がステップS111に進む。
ステップS115においては、リソース管理部416が、ステップS107で取得された各処理部の低性能VMのインスタンス数と、ステップS112で取得された各処理部の低性能VMの初期インスタンス数とを比較する。そして、リソース管理部416が、対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部があるかを判断する(ステップS115)。対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部がない場合は、ステップS101に戻る。対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部がある場合は、ステップS116に進む。そして、リソース管理部416が、ファブリック・コントローラ303に対して、対応する低性能VMのインスタンス数が初期インスタンス数を超えていると判断された処理部(ステップS115を参照)の低性能VMのインスタンスを一つ削減するように指示する。そして、処理がステップS109の処理に進む。
本実施例の文書処理システムは、起動可能なインスタンスの数に余裕がある場合に、低性能VMの起動を優先するようにしている。これは、通常、低性能のVMを稼動するほうが安価であることを考慮したためである。ただし、処理速度を重視する場合には、文書処理システムが、高性能VMの起動を優先するようにしてもよい。また、文書処理システムが、キューのメッセージ数の数に応じてどの能力のVMを起動するかを判断するようにしてもよい。また、本実施例では、VMの性能が2種類である場合を例にとって説明したが、VMが2以上の種類であってもよい。実施例4の文書処理システムによれば、起動可能な低性能VMのインスタンス数、高性能VMのインスタンス数に余裕があるか否かについての判断結果に基づいて、VMのインスタンス数を増減させることができる。
次に、本発明の実施例5について説明する。実施例5においては、高性能VMは文書処理部413でのみ稼動する。また、低性能VMは全処理部で稼動する。すなわち、文書処理部413が、第1の処理性能を有する第1文書処理バックエンド処理部(低性能VM)と、第1の処理性能より処理性能が高い第2の処理性能を有する第2文書処理バックエンド処理部(高性能VM)とを含む。実施例5では、分割処理部412が、VMの能力を考慮して分割処理を行う。
図16は、実施例5の文書処理システムの機能ブロックと、初期インスタンス数管理テーブルの例を示す図である。図16(A)は、実施例5の文書処理システム105の機能ブロックを示す。文書処理システム105は、図12(A)に示す文書処理システム104が備える文書処理キュー422に代えて、低性能VM用文書処理キュー4221と、高性能VM用文書処理キュー4222とを備える。低性能VM用文書処理キュー4221は、文書処理部413として稼動している低性能VMのインスタンスに対応するキューである。低性能VM用文書処理キュー4221には、この低性能VMのインスタンスに処理させるピースの情報を含むメッセージが格納される。高性能VM用文書処理キュー4222は、文書処理部413として稼動している高性能VMのインスタンスに対応するキューである。高性能VM用文書処理キュー4222には、この高性能VMのインスタンスに処理させるピースの情報を含むメッセージが格納される。
図16(B)は、文書処理システム105が備える初期インスタンス数管理テーブル443の例を示す。この初期インスタンス数管理テーブル443には、文書処理部413に対応するレコード(一行分のデータ)にのみ高性能VMのレコードが存在する。
図17は、実施例5の文書処理システムが備える分割処理部の動作処理を説明するフローチャートである。図17(A)のステップS121乃至S123は、図11のステップS61乃至S63と同様である。実施例5では、図17(A)のステップS124において、分割処理部412が、文書処理部413として稼動しているWorker Roleの低性能VMと高性能VMのインスタンス数をファブリック・コントローラ303から取得する(ステップS124)。続いて、分割処理部412が、文書データをステップS124で取得された低性能VMのインスタンス数と同数に分割した場合のピースのサイズを算出する(ステップS125)。そして、分割処理部412が、ステップS125で算出されたピースのサイズが予め定められた閾値より大きいかを判断する(ステップS126)。ステップS125で算出されたピースのサイズが予め定められた閾値より大きい場合、分割処理部412が、文書データをステップS124で取得された高性能VMのインスタンス数と同数のピースに分割する(ステップS127)。そして、分割処理部412が、各ピースに対し、順番にピース番号を割り当てる。
次に、分割処理部412が、必要な情報の保存処理を行う(ステップS128)。必要な情報の保存処理については、図17(B)を参照して後述する。続いて、分割処理部412が、文書処理部413の高性能VMのインスタンスに処理を受け渡すため、ピースに対応する、ピースと同数のメッセージを高性能VM用文書処理キュー4222に投入し(ステップS129)、ステップS133に進む。ステップS129において高性能VM用文書処理キュー4222に投入されるメッセージは、リクエストIDとピース番号とを含む。このリクエストIDとピース番号は、文書処理部413が処理に必要な情報にアクセスするために用いられる。
ステップS125で算出されたピースのサイズが予め定められた閾値より大きくない場合、分割処理部412が、文書データをステップS124で取得された低性能VMのインスタンス数と同数のピースに分割する(ステップS130)。そして、分割処理部412が、各ピースに対し、順番にピース番号を割り当てる。続いて、分割処理部412が、必要な情報の保存処理を行う(ステップS131)。続いて、分割処理部412が、文書処理部413の低性能VMのインスタンスに処理を受け渡すため、ピースに対応する、ピースと同数のメッセージを低性能VM用文書処理キュー4221に投入し(ステップS132)、ステップS133に進む。ステップS132において低性能VM用文書処理キュー4221に投入されるメッセージは、リクエストIDとピース番号とを含む。このリクエストIDとピース番号は、文書処理部413が処理に必要な情報にアクセスするために用いられる。
次に、分割処理部412が、結合処理部414に処理を受け渡すため、結合キュー423にメッセージを投入し(ステップS133)、ステップS121に戻る。ステップS133において投入されるメッセージは、リクエストIDを含む。このリクエストIDは、結合処理部414が処理に必要な情報にアクセスするために用いられる。
図17(B)は、図17(A)のステップS128、S131における必要情報の保存処理を説明するフローチャートである。まず、分割処理部412が、ピースを処理データ記憶部431に保存する(ステップS201)。ステップS201においては、分割処理部412は、例えばリクエストIDとピース番号とを組み合わせて、各ピースの保存場所を一意に識別するURI(ピースURI)を生成し、生成したピースURIを各ピースの保存場所として指定する。
次に、分割処理部412が、文書処理テーブル442(図5(B)を参照)にレコードを挿入する(ステップS202)。分割処理部412は、挿入するレコードのリクエストIDの項目に、図17(A)のステップS122において取得されたメッセージに含まれるリクエストID(処理対象のリクエストID)を格納する。また、分割処理部412は、挿入するレコードのピース番号の項目に、ステップS127またはステップS130において各ピースに対して割り当てたピース番号を格納する。また、分割処理部412は、挿入するレコードのピースURIの項目に、ステップS201で指定したピースURIを格納する。また、分割処理部412は、挿入するレコードのステータスの項目に、「未完」を格納する。
次に、分割処理部412が、リクエスト・テーブル441(図5(A)を参照)における処理対象のリクエストIDを持つレコードを更新する(ステップS203)。具体的には、分割処理部412は、当該レコードのステータスを「分割済み」に変更し、ピース数に文書データを何個に分割したかを書き込む。実施例5における分割処理部412は、ピースのサイズが閾値を超えるか否かに応じて、処理させるVMを変更する。これは、サイズが大きいピースを高性能VMで処理させるためである。
図17(A)、(B)を参照して説明したように、分割処理部412は文書データを第1文書処理バックエンド処理部(低性能VM)の数に分割した場合に生成される分割文書データ(ピース)のサイズが所定の閾値を超えるかを判断する(ステップS126)。分割処理部412は、該分割文書データのサイズが該閾値を超える場合に、第2文書処理バックエンド処理部(高性能VM)に対応するキューに、高性能VMの数の分のジョブを格納する(ステップS129を参照)。分割処理部412は、分割文書データのサイズが閾値を超えない場合に、低性能VMに対応するキューに、低性能VMの数の分のジョブを格納する(ステップS132を参照)。
図18は、実施例5の文書処理システムが備えるリソース管理部の動作処理を説明するフローチャートである。まず、リソース管理部416が、予め定められた監視間隔時間待機する。監視間隔時間経過後、リソース管理部416が、分割キュー421、低性能VM用文書処理キュー4221、高性能VM用文書処理キュー4222、結合キュー423のそれぞれに入っている未処理のメッセージ数を取得する(ステップS301)。リソース管理部416は、所定の取得回数分のメッセージ数をキュー毎に記憶する。続いて、リソース管理部416が、所定の取得回数の間、メッセージ数が0であったキューがあるかを判断する(ステップS302)。所定の取得回数の間、メッセージ数が0であったキューがない場合は、ステップS306に進む。所定の取得回数の間、メッセージ数が0であったキューがある場合は、リソース管理部416が、所定の取得回数の間、メッセージ数が0であったキューに対応する処理部のインスタンス数をファブリック・コントローラ303から取得する(ステップS303)。具体的には、リソース管理部416は、メッセージ数が0であったキューが分割キュー421の場合は分割処理部412のVMのインスタンス数を取得する。リソース管理部416は、メッセージ数が0であったキューが低性能VM用文書処理キュー4221の場合は文書処理部413の低性能VMのインスタンス数を取得する。リソース管理部416は、メッセージ数が0であったキューが高性能VM用文書処理キュー4222の場合は文書処理部413の高性能VMのインスタンス数を取得する。また、リソース管理部416は、メッセージ数が0であったキューが結合キュー423の場合は結合処理部414のVMのインスタンス数を取得する。
次に、リソース管理部416が、ステップS303において取得されたVMのインスタンス数が2以上であるかを判断する(ステップS304)。ステップS304の判断処理においては、リソース管理部416は、文書処理部413の低性能VMと高性能VMとを別々のものとして扱う。ステップS303において取得されたVMのインスタンス数が2以上でない場合は、ステップS306に進む。ステップS303において取得されたVMのインスタンス数が2以上である場合は、ステップS305に進む。続いて、リソース管理部416が、ファブリック・コントローラ303に対して、インスタンス数が2以上あると判断されたVMのインスタンスを1に削減するように指示する(ステップS305)。
次に、リソース管理部416が、所定取得回数の間、メッセージ数が1以上であったキューがあるかを判断する(ステップS306)。所定取得回数の間、メッセージ数が1以上であったキューがない場合は、ステップS301に戻る。所定取得回数の間、メッセージ数が1以上であったキューがある場合は、ステップS307に進む。
次に、リソース管理部416が、所定取得回数の間、メッセージ数が1以上であったと判断されたキュー(ステップS306を参照)の中に、高性能VM用文書処理キュー4222が含まれるかを判断する(ステップS307)。所定取得回数の間、メッセージ数が1以上であったと判断されたキューの中に、高性能VM用文書処理キュー4222が含まれる場合は、ステップS314に進む。所定取得回数の間、メッセージ数が1以上であったと判断されたキューの中に、高性能VM用文書処理キュー4222が含まれない場合は、ステップS308に進む。
ステップS308において、リソース管理部416が、全処理部の低性能VMのインスタンス数をファブリック・コントローラ303から取得する(ステップS308)。続いて、リソース管理部416が、起動可能な低性能VMのインスタンス数に余裕があるかを判断する(ステップS309)。具体的には、リソース管理部416が、ステップS308において取得した低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能VMのインスタンス数より少ないかを判断する。取得した低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能VMのインスタンス数より少なくない場合は、リソース管理部416が、起動可能な低性能VMのインスタンス数に余裕がないと判断して、ステップS310に進む。
取得した低性能VMのインスタンス数の合計が、処理部全体で起動可能な低性能インスタンス数より少ない場合は、リソース管理部416が、起動可能な低性能VMのインスタンス数に余裕があると判断して、ステップS313に進み、以下の処理を行う。リソース管理部416が、所定取得回数の間、メッセージ数が1以上であったと判断されたキュー(ステップS306)に対応する処理部の低性能VMのインスタンスを一つ増加させるように、ファブリック・コントローラ303に指示する。そして、処理がステップS301に戻る。
ステップS310においては、リソース管理部416が、各処理部の低性能VMの初期インスタンス数をファブリック・コントローラ303から取得する(ステップS310)。続いて、リソース管理部416が、ステップS308で取得された各処理部の低性能VMのインスタンス数と、ステップS310で取得された各処理部の低性能VMの初期インスタンス数とを比較する。そして、リソース管理部416が、対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部があるかを判断する(ステップS311)。対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部がない場合は、ステップS301に進む。対応する低性能VMのインスタンス数が、低性能VMの初期インスタンス数を超えている処理部がある場合は、ステップS312に進む。リソース管理部416が、ファブリック・コントローラ303に対して、対応する低性能VMのインスタンス数が低性能VMの初期インスタンス数を超えている処理部の低性能VMのインスタンスを一つ削減するように指示する(ステップS312)。そして、処理がステップS313に進む。
ステップS314においては、リソース管理部416が、文書処理部413の高性能VMのインスタンス数の調節処理を行う(ステップS314)。そして、リソース管理部417が、所定取得回数の間、メッセージ数が1以上であったキュー(ステップS306を参照)の中に、高性能VM用文書処理キュー4222以外のキューが含まれるかを判断する(ステップS315)。所定取得回数の間、メッセージ数が1以上であったキューの中に、高性能VM用文書処理キュー4222以外のキューが含まれる場合は、ステップS308に進む。所定取得回数の間、メッセージ数が1以上であったキューの中に、高性能VM用文書処理キュー4222以外のキューが含まれない場合は、ステップS301に戻る。
図19は、図18のステップS314における文書処理部の高性能VMのインスタンス数の調節処理を説明するフローチャートである。まず、リソース管理部416が、文書処理部413の高性能VMのインスタンス数をファブリック・コントローラ303から取得する(ステップS401)。続いて、リソース管理部416が、起動可能な高性能VMのインスタンス数に余裕があるかを判断する(ステップS402)。具体的には、リソース管理部416が、ステップS401で取得された高性能VMのインスタンス数が、起動可能な高性能VMのインスタンス数より少ないかを判断する。取得された高性能VMのインスタンス数が、起動可能な高性能VMのインスタンス数より少ない場合、リソース管理部416が、起動可能な高性能VMのインスタンス数に余裕があると判断して、ステップS403に進む。取得された高性能VMのインスタンス数が、起動可能な高性能VMのインスタンス数より少なくない場合、リソース管理部416が、起動可能な高性能VMのインスタンス数に余裕がないと判断して、ステップS404に進む。
ステップS403において、リソース管理部416が、ファブリック・コントローラ303に対して、文書処理部413の高性能VMのインスタンス数を一つ増加するように指示して(ステップS403)、処理を終了する。ステップS404においては、リソース管理部416が、全処理部の低性能VMのインスタンス数と、処理部全体で起動可能な低性能VMのインスタンス数とを、ファブリック・コントローラ303から取得する(ステップS404)。続いて、リソース管理部416が、未起動の低性能VMを振替えて高性能VMを起動可能であるかを判断する(ステップS405)。具体的には、リソース管理部416が、処理部全体で起動可能な低性能VMのインスタンス数から、ステップS404で取得された全処理部の低性能VMのインスタンス数を引いた結果得られる低性能VMのインスタンス数の値を第1の基準値として算出する。そして、リソース管理部416が、予め決められた高性能VMのインスタンスに対して要求されるコスト(例えば料金)と、予め決められた低性能VMに対して要求されるコストと、第1の基準値とに基づいて、以下の処理を行う。リソース管理部416が、第1の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上であるかを判断する。第1の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上でない場合、リソース管理部416が、未起動の低性能VMを振替えて高性能VMを起動可能でないと判断して、ステップS407に進む。第1の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上である場合、リソース管理部416が、未起動の低性能VMを振替えて高性能VMを起動可能であると判断して、ステップS406に進む。
ステップS406において、リソース管理部416が、ファブリック・コントローラ303に対して、起動可能な高性能VMのインスタンス数を一つ増やすように指示し(ステップS406)、ステップS403に進む。ステップS406においては、リソース管理部416は、更に、増やす高性能VMのインスタンスの数に応じた数だけ起動可能な低性能VMのインスタンスを削減するように指示する。
ステップS407においては、リソース管理部416が、各処理部の低性能VMの初期インスタンス数をファブリック・コントローラ303から取得する(ステップS407)。続いて、リソース管理部416が、初期インスタンス数を超過して起動している低性能VMのインスタンスを振替えて高性能VMのインスタンスを起動できるかを判断する(ステップS408)。具体的には、リソース管理部416が、各々の処理部について、初期インスタンスを超過して起動している低性能VMのインスタンスの数を算出する。リソース管理部416が、各々の処理部について算出した上記低性能VMのインスタンスの数の合計値を算出する。また、リソース管理部416が、算出された低性能VMのインスタンスの数の合計値と、未起動の低性能VMインスタンス数とを足し合わせた値を第2の基準値として算出する。そして、リソース管理部416が、第2の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上であるかを判断する。
第2の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上である場合、リソース管理部416が、以下の処理を行う。リソース管理部416が、初期インスタンス数を超過して起動している低性能VMのインスタンスを振替えて高性能VMのインスタンスを起動できると判断し、ステップS409に進む。第2の基準値が高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数以上でない場合、リソース管理部416が、以下の処理を行う。リソース管理部416が、初期インスタンス数を超過して起動している低性能VMのインスタンスを振替えて高性能VMのインスタンスを起動できないと判断し、処理を終了する。
ステップS409において、リソース管理部416が、ファブリック・コントローラ303に対して、初期インスタンス数を最も多く超過している低性能VMインスタンスに対応する処理部を特定する。リソース管理部416が、ファブリック・コントローラ303に対して、起動可能な高性能VMのインスタンス数を一つ増やし、増やした分に対応する低性能VMインスタンスの数だけ上記特定した処理部の低性能VMインスタンスを停止するように指示する。リソース管理部416は、停止した低性能VMのインスタンスの数と上記第1の基準値とを足し合わせて得られる値が、高性能VMのインスタンスを起動するのに必要な低性能VMのインスタンス数になるまで指示を繰り返す。そして、処理がステップS403に進む。
なお、実施例5では、文書処理部413についてのみ、性能差があるVMを持たせたが、分割処理部412や結合処理部414についても、性能差があるVMを持たせてもよい。分割処理部412や結合処理部414について性能差があるVMを持たせる場合には、キュー(分割キュー421や結合キュー423)をVMの性能毎に分け、キューに対応する処理部の処理を変更する。実施例5によれば、VMの能力の違いに応じた文書データの分割処理を行うことができる。また、能力の異なるVMのコスト(例えば料金)に応じて、当該能力の異なるVMのインスタンス数を調整することができる。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。