(57)【要約】【課題】情報処理装置上の仮想プリンタが処理を実行中でも、その仮想プリンタを別の情報処理装置に移動させ、移動前に実行していた処理を移動後に続行できるようにする。【解決手段】サーバ１００Ａ上の物理プリンタ１１４ａをサーバ１００Ｂに移動させる場合、配置管理装置１０４はサーバ１００Ａに対して物理プリンタ１１４ａの停止を指示し、サーバ１００Ｂに対して物理プリンタ１１４ａの起動指示を送る。停止指示を受けたサーバ１００Ａは、物理プリンタ１１４ａのジョブの途中の処理結果をデータ記憶装置１０２に格納する。サーバ１００Ｂは、起動指示に応じ、物理プリンタ１１４ａの定義情報をデータ記憶装置１０２から取得し、その定義情報に従い物理プリンタ１１４ａを起動する。起動した物理プリンタ１１４ａは、データ記憶装置１０２に記憶されている自分の移動前のジョブの途中の処理結果を取得し、その処理結果を用いてジョブの処理を続行する。【選択図】図２
2015179477.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置のうちのいずれかでそれぞれ動作する１以上の仮想プリンタと、
前記１以上の仮想プリンタと通信可能であり、前記１以上の仮想プリンタにより共用されるデータ記憶装置と、
前記情報処理装置上で動作する前記仮想プリンタを他の前記情報処理装置に移動するための制御を行う制御装置と、
を有し、
前記仮想プリンタは、対応する実プリンタに印刷を実行させるための印刷制御処理を実行すると共に、実行中の前記印刷制御処理のための処理情報を当該仮想プリンタに対応づけて前記データ記憶装置に記憶させ、
前記制御装置は、前記複数の情報処理装置のうちの第１の情報処理装置上で動作する第１の仮想プリンタを第２の情報処理装置に移動させる場合に、前記第１の情報処理装置上で動作する前記第１の仮想プリンタを停止させると共に、前記第１の仮想プリンタを規定する情報に基づいて前記第２の情報処理装置上で前記第１の仮想プリンタを起動する制御を実行し、
前記第２の情報処理装置上で起動された前記第１の仮想プリンタは、当該第１の仮想プリンタに対応づけて記憶された前記処理情報を前記データ記憶装置から取得し、取得した前記処理情報に従って、前記移動の前に前記第１の情報処理装置上で動作していた前記第１の仮想プリンタが実行していた前記印刷制御処理を続行する、
ことを特徴とする印刷制御システム。
【請求項２】
前記複数の情報処理装置の各々の稼働状態を監視し、この監視によりいずれかの情報処理装置に過負荷の懸念があると判定した場合に、当該過負荷の懸念があると判定した情報処理装置上で動作していた仮想プリンタを他の情報処理装置に移動するよう前記制御装置に指示する手段、を更に備える請求項１に記載の印刷制御システム。
【請求項３】
前記制御装置は、前記第１の情報処理装置上で動作する前記第１の仮想プリンタを停止させる前に、前記第１の仮想プリンタのその停止までの時点の処理結果を前記処理情報として前記第１の仮想プリンタから前記データ記憶装置に記憶させる、ことを特徴とする請求項１又は２に記載の印刷制御システム。
【請求項４】
前記仮想プリンタは、実行している印刷制御処理におけるあらかじめ定められた段階ごとに、当該段階での当該印刷制御処理の処理結果の情報により、前記データ記憶装置内にある当該印刷制御処理に対応する前記処理情報を更新する、ことを特徴とする請求項１又は２に記載の印刷制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷制御システムに関する。
【背景技術】
【０００２】
複数の印刷装置を１つの印刷制御装置で集中管理するシステムでは、対応可能な印刷装置の数に限りがある。そのため、印刷制御装置を複数設けることで、より多くの印刷装置を管理可能なシステムが開発されている。
【０００３】
特許文献１には、プリンタを管理するプリンタ管理サーバを複数持つシステムにおいて、プリンタとプリンタ管理サーバの対応付け情報の管理及び更新を別サーバ（システム管理サーバ）で行うシステムが開示されている。このシステムでは、各プリンタ管理サーバはシステム管理サーバ上の対応付け情報を非同期に参照することで、自分が管理すべきプリンタの変更を認識する。参照の結果、それまで自分が管理していたプリンタが自分の管理下から外れたことを認識した場合、そのプリンタ管理サーバはそのプリンタが印刷を実行中かどうか確認し、実行中でなければそのプリンタを管理下から削除する。そのプリンタが印刷を実行中の場合、そのプリンタの削除は行わない。そして、所定時間後に対応付け情報を再び参照した際に、そのプリンタが印刷を完了しており、別の印刷を実行していなければ、プリンタ管理サーバはそのプリンタを管理下から削除する（同文献の例えば段落００５１）。
【０００４】
特許文献２には、情報処理装置群が生成した印刷情報を複数の印刷制御装置に分散することで、１つの印刷制御装置に印刷情報が集中することによる効率低下を避けるシステムが開示される。ユーザから蓄積済みの印刷情報のリストを要求されると、印刷制御装置は、自分が蓄積している印刷情報のリストと他の印刷制御装置に蓄積されている印刷情報のリストとを１つのリストに合成し、ユーザに提供する。ユーザがそのリストから印刷対象を指定すると、指定を受けた印刷制御装置は、指定された印刷対象の印刷情報が他の印刷制御装置に蓄積されている場合、当該他の印刷制御装置に印刷実行を指示する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１２３７７４号公報
【特許文献２】特開２００８−２５７５６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、ある情報処理装置上で動作している仮想プリンタが印刷のための処理を実行中であっても、その仮想プリンタを別の情報処理装置に移動させ、移動前に実行していた処理を移動後の仮想プリンタで続行できるシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
請求項１に係る発明は、複数の情報処理装置のうちのいずれかでそれぞれ動作する１以上の仮想プリンタと、前記１以上の仮想プリンタと通信可能であり、前記１以上の仮想プリンタにより共用されるデータ記憶装置と、前記情報処理装置上で動作する前記仮想プリンタを他の前記情報処理装置に移動するための制御を行う制御装置と、を有し、前記仮想プリンタは、対応する実プリンタに印刷を実行させるための印刷制御処理を実行すると共に、実行中の前記印刷制御処理のための処理情報を当該仮想プリンタに対応づけて前記データ記憶装置に記憶させ、前記制御装置は、前記複数の情報処理装置のうちの第１の情報処理装置上で動作する第１の仮想プリンタを第２の情報処理装置に移動させる場合に、前記第１の情報処理装置上で動作する前記第１の仮想プリンタを停止させると共に、前記第１の仮想プリンタを規定する情報に基づいて前記第２の情報処理装置上で前記第１の仮想プリンタを起動する制御を実行し、前記第２の情報処理装置上で起動された前記第１の仮想プリンタは、当該第１の仮想プリンタに対応づけて記憶された前記処理情報を前記データ記憶装置から取得し、取得した前記処理情報に従って、前記移動の前に前記第１の情報処理装置上で動作していた前記第１の仮想プリンタが実行していた前記印刷制御処理を続行する、ことを特徴とする印刷制御システムである。
【０００８】
請求項２に係る印刷制御システムは、前記複数の情報処理装置の各々の稼働状態を監視し、この監視によりいずれかの情報処理装置に過負荷の懸念があると判定した場合に、当該過負荷の懸念があると判定した情報処理装置上で動作していた仮想プリンタを他の情報処理装置に移動するよう前記制御装置に指示する手段、を更に備える請求項１に記載の印刷制御システムである。
【０００９】
請求項３に係る印刷制御システムは、前記制御装置は、前記第１の情報処理装置上で動作する前記第１の仮想プリンタを停止させる前に、前記第１の仮想プリンタのその停止までの時点の処理結果を前記処理情報として前記第１の仮想プリンタから前記データ記憶装置に記憶させる、ことを特徴とする請求項１又は２に記載の印刷制御システムである。
【００１０】
請求項４に係る印刷制御システムは、前記仮想プリンタは、実行している印刷制御処理におけるあらかじめ定められた段階ごとに、当該段階での当該印刷制御処理の処理結果の情報により、前記データ記憶装置内にある当該印刷制御処理に対応する前記処理情報を更新する、ことを特徴とする請求項１又は２に記載の印刷制御システムである。
【発明の効果】
【００１１】
請求項１に係る発明によれば、ある情報処理装置上で動作している仮想プリンタが印刷のための処理を実行中であっても、その仮想プリンタを別の情報処理装置に移動させ、移動前に実行していた処理を移動後の仮想プリンタで続行することができる。
【００１２】
請求項２に係る発明によれば、過負荷の懸念がある情報処理装置から仮想プリンタを除くことでその負荷を軽減し、その仮想プリンタを別の情報処理装置に移動させることで、その仮想プリンタがそれまで実行していた処理を続行することができる。
【００１３】
請求項３に係る発明によれば、移動後の仮想プリンタが、移動前の仮想プリンタによる途中の処理結果から処理を再開することができる。
【００１４】
請求項４に係る発明によれば、ある情報処理装置が障害等により停止し、その情報処理装置上で動作していた仮想プリンタが途中の処理結果をデータ記憶装置に記憶できない場合でも、その仮想プリンタを別の情報処理装置に移動させれば、移動後の仮想プリンタは、その停止の直前の段階で格納した処理結果から処理を続行することができる。
【図面の簡単な説明】
【００１５】
【図１】実施形態のシステム構成の一例を示す図である。
【図２】実施形態における物理プリンタのサーバ間移動の流れを概説するための図である。
【図３】印刷サービス及びデータ記憶装置の内部構成の例を示す図である。
【図４】論理プリンタテーブルのデータ内容の一例を示す図である。
【図５】物理プリンタテーブルのデータ内容の一例を示す図である。
【図６】対応づけテーブルのデータ内容の一例を示す図である。
【図７】サーバテーブルのデータ内容の一例を示す図である。
【図８】配置テーブルのデータ内容の一例を示す図である。
【図９】ジョブテーブルのデータ内容の一例を示す図である。
【図１０】トリガーテーブルのデータ内容の一例を示す図である。
【図１１】トリガーのデータ内容の一例を示す図である。
【図１２】ポリシーテーブルのデータ内容の一例を示す図である。
【図１３】コマンド／イベントテーブルのデータ内容の一例を示す図である。
【図１４】印刷指示を受け取った印刷サービスが行う処理手順の例を示す図である。
【図１５】印刷指示の解析結果の一例を示す図である。
【図１６】サーバ間通信制御部が印刷指示を他サーバへと転送する際のメッセージの例を示す図である。
【図１７】転送された印刷指示に対して転送元に返す応答メッセージの例を示す図である。
【図１８】ジョブ更新イベントを通知するメッセージの例を示す図である。
【図１９】仮想プリンタに割当可能なジョブを問い合わせるメッセージの例を示す図である。
【図２０】仮想プリンタを停止させる停止要求コマンドのデータ内容の一例を示す図である。
【図２１】仮想プリンタを実体化（起動）する実体化要求コマンドのデータ内容の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明の実施形態を説明する。
【００１７】
図１に、実施形態の印刷制御システムの一例を示す。図１に例示するシステムは、複数のサーバ１００Ａ，１００Ｂ，・・・、データ記憶装置１０２、配置管理装置１０４、ロードバランサ１０６、及び複数の実プリンタ１０８，・・・を有する。
【００１８】
サーバ１００Ａ，１００Ｂ，・・・（以下、区別の必要がない場合は「サーバ１００」と総称）は、プログラムを実行可能なコンピュータである。ここでいうコンピュータは、物理的に存在する装置に限定されるものではなく、仮想マシンであってもよい。例えば、サーバ１００は、クラウドコンピューティングサービス（以下単に「クラウド」と呼ぶ）が提供する仮想マシン（ＶＭ：Virtual Machine）であってもよい。以下では、サーバ１００がクラウド上の仮想マシンである場合を代表例にとって説明する。ただし、本実施形態の仕組みは、サーバ１００が物理的に実在する装置である場合にも適用可能である。
【００１９】
サーバ１００は、ユーザ（クライアント）に対して印刷サービスを提供するプログラムを実行する。サーバ１００Ａ，１００Ｂ、・・・がこのプログラムを実行することにより実現される装置を、図１では印刷サービス１１０Ａ、１１０Ｂ、・・・（以下、区別の必要がない場合は「印刷サービス１１０」と総称）として示している。
【００２０】
図示の例では、印刷サービス１１０は、１以上の論理プリンタ１１２及び１以上の物理プリンタ１１４を生成し、動作させることが可能である。論理プリンタ１１２及び物理プリンタ１１４は、印刷システムの業界標準の１つであるＤＰＡ（Document Printing Application）（ISO/IEC 10175）に規定された仮想プリンタのオブジェクトである。これら２種類のプリンタ・オブジェクトにより印刷のための制御処理を分担する。大略的には、論理プリンタ１１２はユーザからの印刷指示の受付処理を行い、物理プリンタ１１４は、その印刷指示に応じた印刷のために実プリンタ１０８に印刷データを送信し印刷処理させる。実プリンタ１０８は受信した印刷データに基づき用紙等の媒体に対して実際に印刷処理を行う、物理的に実在するプリンタである。論理プリンタ１１２と物理プリンタ１１４の機能分担は、実施形態の制御にとって本質的なことではないので、これ以上の説明は省略する。なお、以下では、論理プリンタ１１２と物理プリンタ１１４の区別の必要がない場合は、それらを仮想プリンタと総称する。
【００２１】
物理プリンタ１１４は、１以上の実プリンタ１０８に対応づけられており、それら対応する１以上の実プリンタ１０８を制御して印刷処理を実現する。図示例では各物理プリンタ１１４はそれぞれ１つの実プリンタ１０８に対応づけられているが、これはあくまで一例にすぎない。
【００２２】
論理プリンタ１１２は、１以上の物理プリンタ１１４に対応づけられている。図１では、互いに対応する論理プリンタ１１２と物理プリンタ１１４との間を線で結ぶことで、その対応関係を示している。ここでいう「対応関係」は、一方が他方を制御又は管理するといった主従関係があることまでは要求しない（もちろんそのような主従関係がある実装形態も考え得る）。この「対応関係」は、論理プリンタ１１２が受け付けた印刷指示に応じた印刷処理をその論理プリンタ１１２と線でつながる物理プリンタ１１４が担当するという、同じ印刷指示についてのジョブを担当するという意味での対応関係である。なお、ここでいうジョブとは、印刷制御システム又はその各構成要素が、クライアントから受けた印刷指示に応じて行う処理のことである。
【００２３】
なお、印刷サービス１１０は、図１に示した論理プリンタ１１２及び物理プリンタ１１４の他に、論理プリンタ１１２及び物理プリンタ１１４による印刷制御処理を管理するための各種機能を有するが、これについては後で説明する。
【００２４】
データ記憶装置１０２は、サーバ１００Ａ，１００Ｂ，・・・上の印刷サービス１１０Ａ、１１０Ｂ、・・・によって共用される記憶装置である。各印刷サービス１１０（及び当該サービスが管理する論理プリンタ１１２，物理プリンタ１１４等のオブジェクト）は、クライアントからの印刷指示に応じた印刷を実現するために必要なデータをデータ記憶装置１０２に格納する。また各印刷サービス１１０は、データ記憶装置１０２に記憶されたデータを必要に応じて参照し、印刷を実現するための処理を実行する。
【００２５】
データ記憶装置１０２に記憶されるデータには、各論理プリンタ１１２や各物理プリンタ１１４を定義する定義情報（後述するプリンタテーブル）が含まれる。
【００２６】
また、データ記憶装置１０２に記憶されるデータには、論理プリンタ１１２や物理プリンタ１１４が実行しているジョブの処理情報が含まれる。ジョブの処理情報とは、論理プリンタ１１２又は物理プリンタ１１４が当該ジョブのための一連の処理の中で処理の対象とする情報、処理の途中又は最終の結果として出力する情報、及びそれら一連の処理の管理のための情報等の総称である。なお、一連の処理の途中の処理結果は、その一連の処理の中の後の処理での処理対象となる場合もある。
【００２７】
例えば、クライアントから印刷指示に付随して受け取った印刷データ（印刷すべき文書をＰＤＬ等で記述したデータ）は、ジョブにおける処理の対象となるデータであり、ジョブの処理情報に含まれる。なお、ＰＤＬとはPage Description Languageの略であり、ページ記述言語を意味する。ＰＤＦ（Portable Document Format）もＰＤＬの一種として用いられる。
【００２８】
また、印刷サービス１１０がＰＤＬで記述された印刷データを解釈することにより生成される印刷可能データは、ジョブの一連の処理のうちの解釈処理の結果のデータであると共に、実プリンタ１０８での印刷処理の対象となるデータであり、ジョブの処理情報に含まれる。この印刷可能データは、実プリンタ１０８で印刷処理が可能なデータ形式であればよく、実プリンタ１０８で解釈可能なＰＤＬ形式のデータやラスター画像データ等のデータである。また、印刷サービス１１０がＰＤＬの印刷データをいったん中間形式のデータに変換し、その中間形式データをラスター画像データに変換する方式を採用している場合、中間形式データもジョブの処理情報の一例である。なお、中間形式とは、印刷対象の文書をＰＤＬとラスター画像の中間の粒度で表現するデータ形式であり、例えばディスプレイリストがその一例である。
【００２９】
また、クライアントから印刷指示に伴って受け取った印刷属性（印刷部数、用紙サイズ、片面印刷か両面印刷か、カラー印刷かモノクロ印刷か等）及びその印刷指示のためのジョブに付与した一意なジョブＩＤ（識別情報）等を含むジョブの管理情報も、データ記憶装置１０２に記憶される処理情報の一例である。
【００３０】
データ記憶装置１０２に記憶されるジョブの処理情報は、ジョブの進捗に合わせて更新されるようにしてもよい。データ記憶装置１０２内のジョブの処理情報の更新は、例えば、別のサーバ１００へと移動（配置換え）されるために論理プリンタ１１２や物理プリンタ１１４等の仮想プリンタが停止される際に実行される。例えば、仮想プリンタが上位の管理装置（例えば配置管理装置１０４）からの命令に応じて停止する場合に、それまで実行していた処理の結果のデータ（例えば停止指示を受けた時点でＰＤＬデータを中間形式データへ変換し終わっていればその中間形式のデータ）をデータ記憶装置１０２に格納する等である。
【００３１】
また、ジョブを構成する各処理が完了するごとに、完了した処理の処理結果を反映するようデータ記憶装置１０２内の当該ジョブの処理情報を更新するという方式も可能である。例えば、クライアントからＰＤＬデータを受け付ける処理が完了した段階、ＰＤＬデータを中間形式データに変換する処理が完了した段階、及び中間形式データを（またはＰＤＬデータを直接）印刷可能データに変換する処理が完了した段階等といった段階ごとに、データ記憶装置１０２に対してそれら各段階の処理結果のデータ（ＰＤＬ、中間形式、ラスター画像その他の印刷可能データなど）を格納する等である。また、既に受付済みのジョブについての印刷属性の変更指示をクライアントから受け取った場合に、その指示に応じて、データ記憶装置１０２内の当該ジョブの管理情報を変更するようにしてもよい。
【００３２】
データ記憶装置１０２は、１つの例では、クラウド上のＶＭ（仮想マシン）又は、クラウド上のストレージサービスとして実現される。また、データ記憶装置１０２は、物理的に実在する装置であってももちろんよい。データ記憶装置１０２としては、冗長化技術等により高い故障耐性を持つものを用いてもよい。
【００３３】
配置管理装置１０４は、各サーバ１００に対する仮想プリンタ（すなわち論理プリンタ１１２及び物理プリンタ１１４）の配置を管理する。例えば、配置管理装置１０４は、各サーバ１００の負荷状況を監視し、過負荷が懸念されるサーバ１００を検知した場合に、そのサーバ１００上で動作する仮想プリンタを、過負荷の懸念がない別のサーバ１００に移動させる処理を行う（詳細は後述）。
【００３４】
また、配置管理装置１０４は、各仮想プリンタがどのサーバ１００上に存在するかに関する問合せに応答する機能を有していてもよい。
【００３５】
配置管理装置１０４は、各サーバ１００とは独立したＶＭ（仮想マシン）上に構成してもよいし、それらサーバ１００のいずれかに同居させてもよい。また、配置管理装置１０４は、物理的に実在する装置であってももちろんよい。
【００３６】
ロードバランサ１０６は、クライアントから本システムに対して到来する各種の要求を、本システム内の複数の印刷サービス１１０に振り分けることで、それら複数の印刷サービス１１０（ひいてはそれら印刷サービス１１０をホストするサーバ１００）の間の負荷分散を実現する。ロードバランサ１０６が用いる振り分け方式には、特に限定はない。ラウンドロビン方式等の単純な方式を用いてもよいし、より高度な方式を用いてもよい。
【００３７】
例えば、クラウドサービスが提供する一般的なロードバランサは、クラウド上に実現される個別のアプリケーションシステム（本実施形態では、印刷制御システム）に依存しない振り分け方式を採用している。すなわち、そのような一般的なロードバランサは、アプリケーションシステムにおいてやりとりされる要求の中身を考慮せずに、ラウンドロビン等の単純な方式で振り分けを行う。例えば、クライアントから到来する印刷指示のデータは、その指示の宛先である論理プリンタ１１２を特定する情報を含んでいるが、そのような一般的なロードバランサは、印刷指示の中身である宛先の情報を見ず、その宛先情報とは無関係にその印刷指示の転送先を決定する。したがって、印刷サービス１１０（又はその中の論理プリンタ１１２等の要素）が受け取った要求が自分宛ではなく、他の印刷サービス１１０等に宛てたものである場合もある。自分宛でない要求を受け取った印刷サービス１１０は、配置管理装置１０４への問合せによりその要求の宛先が存在するサーバ１００を特定し、特定したサーバ１００に対してその要求を転送する。
【００３８】
次に、図２を参照して、本実施形態のシステムでの仮想プリンタの移動処理について説明する。
【００３９】
前述の通り、いずれかのサーバ１００が過負荷になりそうになった場合、本実施形態では、配置管理装置１０４がその事態を検知し、過負荷になりそうなサーバ１００上にある仮想プリンタ（論理プリンタ１１２又は物理プリンタ１１４）を別のサーバ１００に移動させる。
【００４０】
図２の例において、サーバ１００Ａに過負荷の懸念が発生したとする。配置管理装置１０４は、各サーバ１００の負荷を監視しており、この負荷監視によりその懸念の発生を検知すると、サーバ１００Ａの処理負荷を軽減するよう、仮想プリンタ群の再配置を計算する。再配置の計算方式は特に限定されない。仮想プリンタを移動させる処理は、再配置の計算にどのような方式を用いるかに依存しない。図２の例では、再配置の計算により、過負荷の懸念が生じたサーバ１００Ａ上の物理プリンタ１１４ａを別のサーバ１００Ｂに移動させるという再配置が決定されたものとする。
【００４１】
（１）この場合、配置管理装置１０４は、まずサーバ１００Ａ上の物理プリンタ１１４ａに対して停止指示を送る。この停止指示には、物理プリンタ１１４ａを特定する識別情報（プリンタ名又はプリンタＩＤ）が含まれる。（２）停止指示を受けた物理プリンタ１１４ａは、現在実行中のジョブがあれば、そのジョブについてそれまでに完了した処理の結果の情報を、当該ジョブの処理情報としてデータ記憶装置１０２に格納（又はその処理結果を、データ記憶装置１０２内のそのジョブ処理情報に反映）する。（３）このデータ格納処理の後、物理プリンタ１１４ａは停止し、それまで使用していたリソース（メモリ領域等）を解放する。なお、印刷サービス１１０がジョブ中の各処理が完了するごとに処理結果をデータ記憶装置１０２に格納又は反映していく構成の場合、停止指示を受けた際のデータ記憶装置１０２への処理情報の格納又は反映は省略してよい。停止指示の際に実行している処理段階の直前の処理段階までの処理結果がデータ記憶装置１０２に記憶されているので、それを参照することで停止の直前の処理の完了時点の状態から処理を再開できるからである。
【００４２】
（４）物理プリンタ１１４ａへ停止指示を発した後（例えば、更に印刷サービス１１０Ａ上の物理プリンタ１１４ａの停止及びリソース解放を確認した後）、配置管理装置１０４は、物理プリンタ１１４ａの移動先であるサーバ１００Ｂ上の印刷サービス１１０Ｂに対し、物理プリンタ１１４ａの起動を指示する。この指示には、物理プリンタ１１４ａの識別情報が含まれる。印刷サービス１１０Ｂは、その起動指示に従い、その物理プリンタ１１４ａの定義情報をデータ記憶装置１０２から取得し、取得した定義情報に従って物理プリンタ１１４ａを実体化（すなわち物理プリンタ１１４ａとして機能できる状態とすること）する。（５）実体化された物理プリンタ１１４ａは、データ記憶装置１０２から、自分が停止前に実行していたジョブの処理情報（停止までの処理結果を反映したもの）を取得し、その処理情報を用いることで、停止前まで実行していたジョブの処理を続行する。なお、サーバ１００Ａ上の論理プリンタ１１２ａは、物理プリンタ１１４ａがサーバ１００Ｂに移動した後、サーバ間での通信を介して、サーバ１００Ｂ上の物理プリンタ１１４ａに対して印刷実行を指示することができるので、物理プリンタ１１４ａ（及びそれに対応する実プリンタ１０８）を出力先とするジョブの受付を止める必要がない。
【００４３】
以上に説明したように、本実施形態のシステムでは、あるサーバ１００Ａ上の物理プリンタ１１４ａがジョブを実行中でも、その物理プリンタ１１４ａを別のサーバ１００Ｂに移動させ、移動先でそのジョブを続行させることができる。
【００４４】
図２の例では、物理プリンタ１１４を移動させる場合を説明したが、論理プリンタ１１２をサーバ間で移動させる場合でも同様のことが可能である。
【００４５】
次に、図３を参照して、印刷サービス１１０及びデータ記憶装置１０２の内部構成の一例を説明する。
【００４６】
印刷サービス１１０は、論理プリンタ管理部１１０２、論理プリンタ１１２、物理プリンタ管理部１１０４、物理プリンタ１１４、ジョブ管理部１１０６、ジョブスケジューリング部１１０８、イベント通知部１１１０、サーバ間通信制御部１１１２、及びクライアント通信部１１１４を有する。
【００４７】
論理プリンタ管理部１１０２は、個々の論理プリンタ１１２の実体化処理、解放処理を行うと共に、それら論理プリンタ１１２を管理する。論理プリンタ管理部１１０２は、データ記憶装置１０２に記憶されている論理プリンタテーブル１０２１に従い、各サーバ１００（印刷サービス１１０）上の各論理プリンタ１１２を管理する。
【００４８】
論理プリンタ管理部１１０２に実体化された各論理プリンタ１１２は、例えば、ジョブの受付処理を行う。すなわち、クライアントから送られてくる印刷指示は、宛先の論理プリンタ１１２の指定を含んでおり、宛先の論理プリンタ１１２は、その印刷指示を受け取り、その印刷指示に対応するジョブを生成する。ジョブの生成では、ジョブ管理部１１０６と協働して、そのジョブのＩＤや印刷属性などを含むジョブの管理情報を生成してデータ記憶装置１０２に格納し、その管理情報がこの印刷制御システム内（他の印刷サービスも含む）の様々な要素（当該論理プリンタ１１２自身や、関連する物理プリンタ１１４、ジョブ管理部１１０６等）から参照できるようにする。
【００４９】
物理プリンタ管理部１１０４は、個々の物理プリンタ１１４の実体化処理、解放処理を行うと共に、それら物理プリンタ１１４を管理する。物理プリンタ管理部１１０４はデータ記憶装置１０２に記憶されている物理プリンタテーブル１０２２に従い、各サーバ１００上の各物理プリンタ１１４を管理する。
【００５０】
物理プリンタ管理部１１０４により実体化された各物理プリンタ１１４は、この例では、対応する実プリンタ１０８の状態の監視、その実プリンタ１０８の制御、印刷対象のＰＤＬデータの中間データや印刷可能データへの変換、ジョブの状態管理等を行う。
【００５１】
ジョブ管理部１１０６は、ジョブＩＤを発行したり、クライアントからの更新指示に応じてジョブ管理情報を更新したり、削除指示に応じてジョブを削除したりする等、ジョブ全般に関する管理を行う。
【００５２】
ジョブスケジューリング部１１０８は、物理プリンタ１１４が印刷可能となった時に、データ記憶装置１０２内のジョブテーブル１０２６に登録されているジョブ群から、物理プリンタ１１４に対してジョブを割り当てる。物理プリンタ１１４にジョブを割り当てるのは、その物理プリンタ１１４が管理する実プリンタ１０８が次のジョブを印刷可能な状態であり、かつそのジョブが割り当て待ち状態である時である。
【００５３】
イベント通知部１１１０は、印刷サービス１１０の内部で発生したイベントを、サーバ間通信制御部１１１２を介して、他のサーバ１００内の印刷サービス１１０に通知する。イベントの通知先とするサーバ１００の範囲は、イベントの種類に応じて決まる。
【００５４】
サーバ間通信制御部１１１２は、サーバ１００間、及び、サーバ１００と配置管理装置１０４その他の情報処理装置との間、の通信（メッセージング）を制御する。
【００５５】
クライアント通信部１１１４は、クライアントからの各種指示、例えば印刷指示、印刷状態取得指示、サーバ制御指示等、をネットワーク経由で受け付け、プロトコル解析を行う。クライアントから受け付ける指示データは、LPR（Line PRinter daemon protocol）やIPP（Internet Printing Protocol）等の一般的な印刷プロトコルや、独自の管理プロトコルに従ったものでよい。クライアント通信部１１１４は、プロトコル解析の結果に従い、サーバ１００（印刷サービス１１０）内の各要素に対して指示を割り当てる。
【００５６】
データ記憶装置１０２は、論理プリンタテーブル１０２１、物理プリンタテーブル１０２２、対応づけテーブル１０２３、サーバテーブル１０２４、配置テーブル１０２５、ジョブテーブル１０２６、及び印刷データ１０２７を記憶している。以下、図４〜図９を参照して、それら各テーブルの具体例を説明する。
【００５７】
論理プリンタテーブル１０２１は、印刷制御システム内の各論理プリンタ１１２の定義情報を保持する表である。図４に論理プリンタテーブル１０２１のデータ内容の一例を示す。図４に示すように、論理プリンタテーブル１０２１には、論理プリンタごとに、その論理プリンタのプリンタ名（識別情報）、アクセス制御情報、受付プロトコル、配置先サーバ、及び状態といった項目が登録される。項目「アクセス制御情報」は、その論理プリンタに対するユーザからのアクセスを制御するために用いる情報である。アクセス制御情報としては様々な形の情報を用いることができる。例えばその論理プリンタを利用可能なユーザやグループの識別情報（ＩＤ）のリスト（アクセス制御リスト）であってもよいし、その論理プリンタにアクセス可能なユーザを認証する認証方法（例えばパスワード認証）を規定する情報であってもよい。図示例では、アクセス制御情報として、論理プリンタを利用可能なグループのＩＤのリストが登録されている。項目「受付プロトコル」は、その論理プリンタが受け付け可能なプロトコルを示す情報である。なお、１つの論理プリンタが受付可能なプロトコルは１つに限られるものではなく、複数であってもよい。項目「配置先サーバ」は、その論理プリンタが現在配置されているサーバ１００の識別情報である。項目「状態」は、その論理プリンタの状態を示す情報である。論理プリンタの状態には、例えば「Ready」（サーバ上に実体化された状態）、「Stand-by」（停止してリソースを解放した状態）がある。
【００５８】
物理プリンタテーブル１０２２は、印刷制御システム内の各物理プリンタ１１４の定義情報を保持する表である。図５に物理プリンタテーブル１０２２のデータ内容の一例を示す。図５に示すように、物理プリンタテーブル１０２２には、物理プリンタごとに、その物理プリンタのプリンタ名、実プリンタ、プロトコル、配置先サーバ、及び状態といった項目が登録される。項目「実プリンタ」は、その物理プリンタが管理している実プリンタ１０８を特定する情報である。図示例では、実プリンタ１０８を特定する情報として、その実プリンタ１０８のＩＰアドレスが用いられている。物理プリンタが複数の実プリンタ１０８を管理する場合、項目「実プリンタ」には、それら複数の実プリンタの情報が登録される。項目「プロトコル」は、その物理プリンタが受け付け可能なプロトコルを示す情報である。なお、１つの物理プリンタが受付可能なプロトコルは１つに限られるものではなく、複数であってもよい。項目「配置先サーバ」は、その物理プリンタが現在配置されているサーバ１００の識別情報である。項目「状態」は、その物理プリンタの状態を示す情報である。物理プリンタの状態には、論理プリンタの場合と同様、「Ready」、「Stand-by」等がある。なお、物理プリンタの状態の種類と論理プリンタの状態の種類は、必ずしも同じでなくてよい。
【００５９】
対応づけテーブル１０２３は、論理プリンタ１１２と物理プリンタ１１４の対応関係の情報を保持する。対応付けテーブル１０２３のデータ内容の一例を図６に示す。図に例示した対応付けテーブル１０２３には、論理プリンタ１１２のプリンタ名（ＩＤ）に対応づけて、その論理プリンタ１１２に対応づけられた物理プリンタ１１４のリストが登録されている。論理プリンタ１１２と物理プリンタ１１４との対応関係は一対一対応に限らない。１つの論理プリンタ１１２に対して複数の物理プリンタ１１４が対応づけられる場合もあるし、その逆もある。ジョブスケジューリング部１１０８は、対応付けテーブル１０２３を参照し、論理プリンタ１１２が受け付けた印刷ジョブを、その論理プリンタ１１２に対応する物理プリンタ１１４に割り当てる。
【００６０】
サーバテーブル１０２４は、印刷制御システム内の利用可能なサーバ１００の情報を管理するテーブルである。図７に示すように、サーバテーブル１０２４には、サーバ１００毎に、そのサーバの識別情報（サーバＩＤ）、ＩＰアドレス、状態、ＣＰＵ性能、メインメモリ容量が登録されている。
【００６１】
ＩＰアドレスの情報は、サーバ１００間での通信を行う場合に利用される。ＩＰアドレスは、そのサーバと通信するために用いられる情報の一例であり、同様の役割を果たす別の情報に代えてもよい。項目「状態」は、当該サーバの現在の状態を示す情報である。サーバの状態としては、例えば「稼働中」、「停止中」がある。ＣＰＵ性能の項目は、当該サーバが有するＣＰＵの性能（例えばクロック数、コア数）を示す。メインメモリ容量の項目は、当該サーバが持つメインメモリの容量を示す。ＣＰＵ性能及びメインメモリ容量は、当該サーバの処理能力を表す指標値の一例である。配置管理装置１０４にて論理プリンタ１１２や物理プリンタ１１４の再配置が計算される際、これら処理能力の情報が利用される。ＣＰＵ性能及びメインメモリ容量に代えて、サーバの処理能力を示す別の種類の情報を用いてもよい。例えばＩａａＳ（Infrastructure as a Service）タイプのクラウドサービスが提供する仮想マシン（ＶＭ）をサーバ１００として用いる場合、クラウドサービスが設定している仮想マシンの性能レベルの情報を用いることもできる。仮想マシンの性能レベルに応じて課金が設定されている場合には、性能レベルの情報は、印刷制御システムを構成するための仮想マシン群のコストを計算するのに用いたり、処理負荷の増減に応じてどの性能レベルの仮想マシンを追加又は削除（停止）するかを判定するのに用いたりすることもできる。
【００６２】
配置テーブル１０２５は、仮想プリンタ（論理プリンタ１１２及び物理プリンタ１１４）がどのサーバ１００に配置されているかを管理するテーブルである。配置テーブル１０２５のデータ内容の一例を図８に示す。図に例示した配置テーブル１０２５には、プリンタタイプ、プリンタＩＤ及びサーバＩＤの項目がある。プリンタタイプは、当該仮想プリンタが論理プリンタ、物理プリンタのどちらのタイプであるかを示す。プリンタ名は、当該仮想プリンタの名前（ＩＤ）である。サーバＩＤは、当該仮想プリンタが配置されているサーバの識別情報である。配置テーブル１０２５は、後述する配置管理装置１０４によるサーバ配置の決定に従って更新される。なお、この配置テーブル１０２５の更新に合わせて、論理プリンタテーブル１０２１及び物理プリンタテーブル１０２２における配置先サーバの情報も更新される。
【００６３】
ジョブテーブル１０２６は、印刷指示に応じて生成されたジョブの管理情報を保持するテーブルである。図９に例示するジョブテーブル１０２６は、ジョブＩＤ、ジョブ名、状態、受付プリンタ、データパス、部数、ステープル、カラーの項目を含んでいる。
【００６４】
項目「ジョブＩＤ」は、ジョブ管理部１１０６により付与された当該ジョブの識別情報である。項目「ジョブ名」は、当該ジョブの名称であり、例えば印刷指示を発行したユーザやクライアントが付与したものである。
【００６５】
項目「状態」は、当該ジョブの状態を示す情報である。ジョブの状態には、例えば、「受付中」、「アサイン（割当）待ち」、「アサイン済み」、「処理中」、「処理済み」等がある。「受付中」は、論理プリンタ１１２が印刷指示を受け付けてから、受付処理（印刷指示に応じたジョブの管理情報をジョブテーブル１０２６に登録する処理）を完了するまでの状態である。「アサイン待ち」は、論理プリンタによる印刷指示の受付処理（ジョブの作成）が終わってから、そのジョブが物理プリンタ１１４に割り当てられるまでの間の状態である。「アサイン済み」は、ジョブが物理プリンタ１１４に割り当てられた後、物理プリンタ１１４によりそのジョブの処理が開始されるまでの状態である。「処理中」は、物理プリンタ１１４がそのジョブを処理している状態である。なお、この「処理中」の状態を、更に細分化してもよい。例えば、中間形式に変換中の状態、中間形式への変換が完了した後ラスター形式や実プリンタが解釈できるＰＤＬ形式の印刷可能データへ変換しつつ実プリンタ１０８にて印刷している状態、等に分割する等である。「処理済み」は、物理プリンタ１１４によるそのジョブの処理が完了した後の状態である。
【００６６】
ジョブテーブル１０２６の項目「データパス」は、当該ジョブの印刷データ１０２７の記憶装置１０２内での保存場所を示す情報である。図示例では項目「データパス」には、この印刷制御システムにおける印刷データの保存場所に対する相対パスが登録されている。例えば、この印刷制御システムにおける印刷データの保存場所が、データ記憶装置１０２内のディレクトリ「\\fileservere\c$datapath\」であるとする場合、「ジョブ１」の印刷データは「\\fileservere\c$datapath\0000001」に格納されている。
【００６７】
項目「部数」、「ステープル」、「カラー」は、当該ジョブに対する印刷部数、ステープル止めの有無、及びカラー／白黒のモードの指定値を示す。これらは、そのジョブに対して指定された印刷属性の一例として図示したものであり、他の印刷属性がジョブテーブル１０２６に登録されてももちろんよい。
【００６８】
データ記憶装置１０２に記憶される印刷データ１０２７は、例えば、クライアントから印刷指示と共に受け取ったＰＤＬデータである。また、物理プリンタ１１４によるＰＤＬデータの中間形式データや印刷可能データへの変換が行われる毎に、データ記憶装置１０２に記憶される印刷データ１０２７をその変換結果のデータ（中間形式又は印刷可能データ）に置き換えてもよい。また、このように置き換える代わりに、各段階の変換結果のデータをデータ記憶装置１０２に追加記憶してもよい。
【００６９】
以上、データ記憶装置１０２内に記憶される情報の例について説明した。印刷サービス１１０や配置管理装置１０４等のシステム構成要素は、データ記憶装置１０２及びその中の各情報の所在場所を示す情報（ＩＰアドレスやＵＲＬ等）を有しており、処理を進める際、必要に応じてデータ記憶装置１０２内の情報を参照したり、データ記憶装置１０２内の情報を更新したり、データ記憶装置１０２内に新規情報を登録したりする。
【００７０】
図３の例では、論理プリンタテーブル１０２１〜印刷データ１０２７のすべての情報が１つのデータ記憶装置１０２に記憶されているが、これは必須のことではない。それら各情報が印刷サービス１１０や配置管理装置１０４により共有されている形であれば、それら個々の情報がネットワーク又はクラウド内の別々の場所に格納されていてもよい。
【００７１】
次に、配置管理装置１０４の機能について説明する。配置管理装置１０４は、サーバ状態監視機能及び仮想プリンタ再配置機能を有する。なお、これら２つの機能が一体となっている必要は必ずしもなく、それら２つの機能を別々の装置として構成するようにしてもよい。
【００７２】
サーバ状態監視機能は、本システム内の各サーバ１００の死活（稼働中か停止中か）や処理負荷状態を監視する機能である。配置管理装置１０４は、例えば定期的に通信パケットが届いているかを確認するpingコマンドを発行する等により、サーバテーブル１０２４（図７）に登録されている各サーバ１００の稼働状態を監視し、サーバテーブル１０２４の「状態」項目を更新する。各サーバ１００の状態監視のための手段には、pingに限らず、従来公知の様々な手法を用いることができる。例えば、各サーバ１００のCPU使用率やメモリ使用率、ディスクIO（入出力）状況、ネットワークIO状況等の情報を取得し、これらから各サーバ１００の負荷状況を判断してもよい。
【００７３】
この状態監視により、サーバ１００の状態に特定の条件を満たす変化が生じたことを検知した場合、配置管理装置１０４（状態監視機能）は、仮想プリンタの再配置処理のトリガーを発生させる。このトリガー発生は、配置管理装置１０４が有するトリガーテーブル（図１０参照）に従って行われる。
【００７４】
トリガーテーブルには、トリガーの種類毎に、そのＩＤ、トリガー名、トリガー条件、トリガー通知データの各項目を含む。ＩＤ、トリガー名は、それぞれそのトリガーの識別情報、名称である。トリガー条件は、そのトリガーを発生させるための条件である。トリガー通知データは、そのトリガーと共に通知するパラメータ情報である。例えば、トリガー名「ＶＭ負荷増」というトリガーは、ＶＭ（仮想マシンすなわちサーバ１００）のＣＰＵ使用率が８０％を越える状態が１分（「１ｍｉｎ」）以上続いた場合に生成される。このトリガーには、そのＶＭ（サーバ）のサーバＩＤがパラメータとして付随する。また、「ＶＭ状態変更」というトリガーは、ＶＭの状態変更が発生した場合、すなわちそのＶＭが稼働中から停止中、又はその逆、に変化した場合に生成される。このトリガーには、そのＶＭのサーバＩＤと、変更後の状態（例えば前回の監視時は稼働中であったＶＭが今回の監視で停止中であることが分かった場合には「停止中」）がパラメータとして付随する。
【００７５】
図１０に例示したトリガーはあくまで一例にすぎない。他のトリガーを用いてももちろんよい。
【００７６】
図１１に、発行されたトリガーのデータ内容の例を示す。この例は、サーバＩＤが「サーバ１」であるＶＭが停止したことを検知した場合に生成されるトリガーを示す。このトリガーデータは、トリガー名「ＶＭ状態変更」を含むと共に、サーバＩＤ「サーバ１」及び状態「停止中」というパラメータを含む。なお、トリガーデータに含まれる項目「要求者」は、このトリガーの生成を要求した要求者（ユーザ、又はシステム中のいずれかの管理機能）を示す項目である。トリガーの発生は、（システム管理者等があらかじめ定めた）トリガー条件に応じて自動的に行われるので、この例では「要求者」の値は「Ａｄｍｉｎｉｓｔｒａｔｏｒ」（管理者）となっている。
【００７７】
次に、配置管理装置１０４の再配置機能について説明する。再配置機能は、システムを構成するサーバ１００群に対して仮想プリンタ群を再配置（すなわち配置の変更）する機能である。あるサーバ１００上にある論理プリンタ１１２又は物理プリンタ１１４を別のサーバ１００に移動させる処理は、この再配置機能により実行される。再配置機能は、配置ポリシー情報を参照して、仮想プリンタ群の再配置を行う。
【００７８】
配置ポリシー情報の一例であるポリシーテーブルを図１２に例示する。ポリシーテーブルには、ポリシー毎に、そのポリシーのＩＤ、そのポリシーに対応するトリガーの名称及びトリガー条件、及びそのポリシーの内容が登録される。同じトリガーについては、ポリシーテーブルとトリガーテーブルとで同じトリガー名（及びトリガー条件）が用いられる。ポリシーは、仮想プリンタ群の再配置の方針を示す情報である。ポリシーテーブルは、印刷制御システム内のサーバ状態監視機能以外の要素が発するトリガーに対応するポリシー（例えば「論理プリンタ作成」、「物理プリンタ作成」、「プリンタ削除」も登録されている。
【００７９】
例えばＩＤ「１」に対応するポリシーは、システム管理者やユーザから配置管理装置１０４に対して論理プリンタ１１２の新規作成（すなわち新たな論理プリンタ１１２の追加）が指示された場合に用いられる。このポリシーでは、印刷制御システム内にある稼働中の各サーバ１００（ＶＭ）が持つ論理プリンタ１１２の数ができるだけ「均等」になるよう、新たに追加された論理プリンタ１１２の配置先とするサーバ１００を決める。例えば、各サーバ１００の性能が同等である場合、配置されている論理プリンタ１１２の数が最も少ないサーバ１００に対してその新たな論理プリンタ１１２を配置する。この配置決定の際、配置管理装置１０４は、配置テーブル１０２５を参照することで、稼働中の各サーバ１００に配置されている論理プリンタ１１２の数を取得する。なお、論理プリンタ１１２の新規作成時には、システム管理者やユーザは、その論理プリンタ１１２に対応づける１以上の物理プリンタ１１４を指定する。サーバ１００毎に性能が異なる場合には、各サーバ１００の性能に例えば比例した数ずつ論理プリンタ１１２を配置することを、ポリシーにおける「均等」配置としてもよい。
【００８０】
ＩＤ「３」のポリシーは、システム管理者やユーザから特定の仮想プリンタ（論理又は物理）の削除を指示された場合のポリシーである。この場合、特別のポリシーはなく、指示通りに削除対象の仮想プリンタを削除する。
【００８１】
ＩＤ「４」のポリシーは、トリガー「ＶＭ負荷増」が発せられた場合に用いられる。このポリシーに従った再配置処理では、印刷制御システムに対して新たにＶＭを１つ追加する。そして、この新規追加されたＶＭを含む現在稼働中のすべてのＶＭ群に対して、各ＶＭが有する論理プリンタ１１２及び物理プリンタ１１４の数がそれぞれ（各ＶＭの性能も考慮して）「均等」になるよう、論理プリンタ１１２群及び物理プリンタ１１４群をＶＭ群に対して再配置する。具体的には、例えば、「均等」の条件に従って、新たに追加するＶＭに対して配置する論理プリンタ１１２及び物理プリンタ１１４のそれぞれの数を求める。そして、既に稼働中の他のＶＭのうち、有する論理プリンタ１１２又は物理プリンタ１１４の数が性能に比して多いＶＭから優先的に、そのＶＭ上の論理プリンタ１１２又は物理プリンタ１１４を新たに追加したＶＭに移動させることで、その新たに追加したＶＭに配置された論理プリンタ１１２及び物理プリンタ１１４の数が、他のＶＭと「均等」になるようにする。
【００８２】
ＩＤ「５」の「ＶＭ負荷減」の場合のポリシーは、「ＶＭ負荷増」の場合とは逆に、稼働中のＶＭのうちの１つを停止させ、残ったＶＭ群に対し、論理プリンタ１１２群及び物理プリンタ１１４群を「均等」に再配置する。具体的には、停止させたＶＭに配置されていた論理プリンタ１１２（又は物理プリンタ１１４）を、配置されている論理プリンタ１１２（又は物理プリンタ１１４）の数が性能に比して最も少ないＶＭから優先的に割り当てていくことで、残ったＶＭにおける論理プリンタ１１２（又は物理プリンタ１１４）が「均等」になるようにする。
【００８３】
図１２に示したポリシーはあくまで一例にすぎない。他のポリシーも考えられる。
【００８４】
例えば、システム管理者が、特定のＶＭの処理負荷を低減させるなどの目的のために、そのＶＭ上の仮想プリンタを別のＶＭに移動するよう明示的な指示を行う場合がある。このＶＭ移動指示を受けた場合のポリシーとして、次のようなものが考えられる。すなわち、移動元のＶＭ上から論理プリンタ１１２（又は物理プリンタ１１４）を１つ削除するために、その削除することになる論理プリンタ１１２（又は物理プリンタ１１４）を、例えばその移動元のＶＭを除く稼働中のＶＭ群の中で論理プリンタ１１２（又は物理プリンタ１１４）の数が（性能に比して）最も少ないＶＭに再配置し、再配置が完了すると移動元のＶＭ上から論理プリンタ１１２を削除する。
【００８５】
また、上述の例ではＶＭの負荷の増加及び減少に応じたトリガーはそれぞれ１つずつであったが、負荷の増加及び減少をそれぞれ複数の段階に分け、段階毎に異なるポリシーに従って仮想プリンタ群の再配置を行うようにしてもよい。例えばＶＭの負荷の増加に関して「低レベル増加」（例えばＣＰＵ使用率が７０％の状態が１分以上続いた場合）と「高レベル増加」（例えばＣＰＵ使用率が８０％の状態が１分以上続いた場合）の２段階のトリガーを設けた場合を考える。この場合、例えば、「高レベル増加」に対応する再配置のポリシーとしては、上記ＩＤ「４」のポリシーと同様新規ＶＭを追加して「均等」再配置を行うというポリシーを用い、「低レベル増加」の場合には、負荷の「低レベル増加」を示したＶＭ上の仮想プリンタを１つ別のＶＭに移動させるというポリシーを用いる。
【００８６】
また、ＶＭが障害等により停止した場合、そのＶＭに配置されていた仮想プリンタを別のＶＭに移動させることが必要になる。この事態は、ＶＭの停止を示す「ＶＭ状態変更」トリガー（図１０参照）の発生により検知できる。この事態が生じた場合の再配置ポリシーは、例えば、残りの稼働中のＶＭ上の論理プリンタ、物理プリンタの数ができるだけ「均等」になるようにそれら仮想プリンタを再配置するというポリシーでよい。より具体的には、例えば、停止したＶＭに配置されていた論理プリンタ及び物理プリンタを、稼働中のＶＭのうち性能に比して論理プリンタ及び物理プリンタの配置数が少ないものから順に移動させるようにすればよい。
【００８７】
次に、図１３を参照して、サーバ間通信制御部１１１２が通知するコマンドやイベントの具体例を説明する。図１３に示すコマンド／イベントテーブルには、通知するコマンド又はイベント毎に、その名称（「通知コマンド／イベント名」）、その通知に付随するパラメータの内容（「送信パラメータの内容」）、通知先サーバ、説明が登録される。項目「通知先サーバ」は、そのコマンド又はイベントの通知先とするサーバ１００（ＶＭ）を特定する情報である。図示例では、この項目の値として「特定」と「全て」が例示されている。「特定」は、そのコマンド又はイベントに対応する特定の１つのサーバ１００にのみそのコマンド又はイベントを通知することを示す。「対応する特定の１以上のサーバ」は、ユーザから指定される場合もあれば、コマンド又はイベント毎にあらかじめ定められている場合もある。また「全て」は、印刷制御システム上の全てのサーバ１００に対して通知を送ることを示す。項目「説明」は、その項目の意味の説明である。
【００８８】
図１３の例において、コマンド「CreateJob」は、クライアントから受け取った印刷指示に応じた新規のジョブの生成を指示するコマンドである。クライアントからの印刷指示は、宛先の論理プリンタ１１２を特定しているので、このコマンドの「通知先サーバ」は、その宛先論理プリンタ１１２を有する特定の１つのサーバ１００である。また、このコマンドは、クライアントから指定された印刷属性と共に通知される。また、イベント「JobUpdated」は、ジョブの情報が更新された時にイベント通知部１１１０により発せられるイベントであり、このイベントは「全て」のサーバに対して通知（いわばブロードキャスト）される。
【００８９】
他のサーバ１００のサーバ間通信制御部１１１２からの通知を受け取ったサーバ間通信制御部１１１２は、その通知を、自サーバ１００内の対象要素（その通知の中で指定されている）に対して振り分ける。
【００９０】
次に、クライアントから印刷指示を受け付けた時の本実施形態の印刷制御システムの動作を説明する。
【００９１】
クライアントから本システム宛に送られてきた印刷指示は、ロードバランサ１０６により受け取られる。ロードバランサ１０６は、ラウンドロビン等のあらかじめ定められた方式で決めた振り分け先のサーバ１００（印刷サービス１１０）に対してその印刷指示を転送する。
【００９２】
転送された印刷指示を受け取った印刷サービス１１０が行う処理手順の例を図１４に示す。この手順では、まずクライアント通信部１１１４が、受け取った印刷指示をプロトコル解析して指示の内容を認識する（Ｓ１０）。印刷指示の解析結果の一例を図１５に示す。印刷指示は、コマンド名が「CreateJob」であり、その指示を発したユーザのＩＤ（「要求者」）、その指示の「宛先」の論理プリンタのＩＤ、印刷データ、及び印刷属性（図１５では「カラー指定」、「コピー部数」を例示）等の項目を含んでいる。なお、印刷指示に含まれる「印刷データ」は、実体的なデータ（ＰＤＬデータ又はそれを符号化したバイナリデータ）であってもよいし、ネットワーク上に保存されているその実体的なデータを指し示すデータ識別子（例えばＵＲＬ）であってもよい。
【００９３】
次にクライアント通信部１１１４は、Ｓ１０のプロトコル解析の結果に従い、その印刷指示を、その印刷サービス１１０内のその指示に対応する要素に割り当てる。印刷指示（コマンド「CreateJob」）の場合、割り当て先は論理プリンタ管理部１１０２である。
【００９４】
割り当てられた印刷指示を受け取った論理プリンタ管理部１１０２は、その印刷指示の「宛先」の論理プリンタ１１２が自印刷サービス１１０内にあるかどうかを判定する（Ｓ１２）。論理プリンタ管理部１１０２は、自らが生成した各論理プリンタ１１２のＩＤを管理しているので、このＩＤ群を参照することで、印刷指示の宛先の論理プリンタ１１２が自サービス内にあるかどうかを判定できる。Ｓ１２の判定結果がＹｅｓの場合、論理プリンタ管理部１１０２は、その宛先の論理プリンタ１１２に対して印刷指示の解析結果を渡し、ジョブの作成を要求する（Ｓ１４）。
【００９５】
ジョブ作成要求を受けた論理プリンタ１１２は、ジョブ管理部１１０６に対して新規のジョブＩＤの発行を依頼する。ジョブ管理部１１０６は、その依頼に応じて新規のジョブＩＤを発行する。その論理プリンタ１１２は、そのジョブＩＤを受け取り、印刷指示の解析結果が示す「要求者」、「宛先」、及び印刷属性の各項目（「コピー部数」など）を、そのジョブＩＤに対応付けてジョブテーブル１０２６に登録する（それぞれ同テーブルの「ユーザ」、「受付プリンタ」、「部数」、・・・の項目に設定される）。また、論理プリンタ１１２は、印刷指示に含まれる印刷データをデータ記憶装置１０２に格納し、その格納場所を示す「データパス」をジョブテーブル１０２６に登録する。なお、印刷指示内で印刷データがデータ識別子で指示されている場合には、論理プリンタ１１２は、そのデータ識別子を解決することで、ネットワーク上の印刷データの保存場所を特定し、その保存場所からその印刷データを取得してデータ記憶装置１０２に格納する。この場合、そのデータ識別子をジョブテーブル１０２６に記録しておいてもよい。
【００９６】
論理プリンタ１１２は、ジョブ作成（すなわちジョブテーブル１０２６へのジョブ情報の登録）が成功したか失敗したかを示す結果情報を、論理プリンタ管理部１１０２に返す。ジョブ作成が成功した場合は、結果情報にはそのジョブのジョブＩＤも組み込まれる。論理プリンタ管理部１１０２は、その結果情報を、要求の割り当て元であるクライアント通信部１１１４に返す。クライアント通信部１１１４は、割り当てた印刷指示に対して論理プリンタ管理部１１０２から応答が到来すると、その応答が「ジョブ作成成功」であるか否（「失敗」）であるかを判定する（Ｓ１６）。判定結果が「成功」の場合、クライアント通信部１１１４は、印刷指示の受付完了を示す通知をクライアントに返す（Ｓ１８）。この通知には、作成されたジョブのジョブＩＤが含まれる。判定結果が「失敗」の場合、クライアント通信部１１１４は、印刷指示の受付が失敗したことを示すエラー通知をクライアントに返す（Ｓ２０）。
【００９７】
Ｓ１２の判定結果がＮｏの場合、すなわち印刷指示の「宛先」の論理プリンタ１１２が自サービス内にない場合、論理プリンタ管理部１１０２は、その印刷指示の解析結果をサーバ間通信制御部１１１２に渡す。サーバ間通信制御部１１１２は、「宛先」の論理プリンタ１１２の配置先サーバを問い合わせる問合せを配置管理装置１０４に送る（Ｓ２２）。その問合せには、その論理プリンタ１１２のＩＤが含まれる。配置管理装置１０４は、その論理プリンタ１１２の配置先のサーバ１００のサーバＩＤを配置テーブル１０２５又は論理プリンタテーブル１０２１から求め、求めたサーバＩＤを問合せ元のサーバ間通信制御部１１１２に応答する。この応答を受け取ったサーバ間通信制御部１１１２は、そのサーバＩＤに対応するサーバ１００に対して、印刷指示の解析結果を含むメッセージを転送する（Ｓ２４）。ここで、転送先のサーバ１００のアドレスは、配置管理装置１０４又はサーバ間通信制御部１１１２がサーバテーブル１０２４から求めればよい。
【００９８】
Ｓ２４でサーバ間通信制御部１１１２が他サーバへと送信するメッセージの例を図１６に示す。この例は、「サーバ２」内にある「論理プリンタ２」を宛先とする印刷指示がロードバランサ１０６により「サーバ１」に振り分けられた場合に、「サーバ１」から「サーバ２」に送信されるメッセージの一例である。このメッセージのうち「通知ＩＤ」は、メッセージに対して一意的に付与される識別情報である。「送信元」及び「送信先」は、それぞれ、このメッセージの送信元及び送信先のサーバのＩＤを示す。ＴＴＬ（Time To Live）はこのメッセージの生存期間（この期間の経過後はこのメッセージは無効となる）を示す。これらの情報の後に、図１５に示したのと同様の印刷指示の解析結果が続く。
【００９９】
このような印刷指示の転送メッセージを受け取ったサーバ１００（図１６の例では「サーバ２」）のサーバ間通信制御部１１１２は、受け取ったメッセージ内のコマンドが「CreateJob」であることを認識し、そのメッセージ中の印刷指示の解析結果の部分を自印刷サービス１１０内の論理プリンタ管理部１１０２に割り当てる。この場合、その印刷指示の宛先は自印刷サービス１１０内に存在するので、論理プリンタ管理部１１０２はその解析結果をその宛先の論理プリンタ１１２に渡し、新たなジョブの作成を要求する（Ｓ２６）。その論理プリンタ１１２は、その要求に応じてジョブの作成処理を行う。論理プリンタ１１２は、ジョブ作成が成功したか失敗したかを示す結果情報（成功の場合はジョブＩＤを含む）を、論理プリンタ管理部１１０２に返す。論理プリンタ管理部１１０２は、その結果情報を、要求の割り当て元であるサーバ間通信制御部１１１２に返す。サーバ間通信制御部１１１２は、割り当てた印刷指示に対して論理プリンタ管理部１１０２から結果情報が到来すると、その結果情報を含むメッセージその印刷指示の転送元のサーバ１００（図１６の例では「サーバ１」）に返す。このとき「サーバ２」から「サーバ１」に返されるメッセージの例を図１７に示す。図１７の例では、メッセージには、通知ＩＤ、送信元、送信先、ＴＴＬの後に、コマンド名、処理結果が続く。図１７の例はジョブ作成が「成功」した場合なので、メッセージには、そのジョブのジョブＩＤも含まれている。この結果情報を受け取った転送元のサーバ１００（「サーバ１」）のサーバ間通信制御部１１１２は、その結果情報を当該サーバ１００内の論理プリンタ管理部１１０２に返し、論理プリンタ管理部１１０２はその結果情報をクライアント通信部１１１４に返す。そして、この結果情報を受け取ったクライアント通信部１１１４が前述のＳ１６からＳ２０の処理を実行する。
【０１００】
以上では、クライアントから印刷指示を受けた場合の処理を説明したが、クライアントからの指示コマンドにはこのほかにもいくつかのものがある。これらコマンドには、論理プリンタ管理部１１０２に振り分けるコマンド(前述したジョブ作成:CreateJobの他に、論理プリンター属性更新:SetLogicalPrinterAttributes等)、物理プリンタ管理部１１０４に振り分けるコマンド(物理プリンタ属性更新:SetPhysicalPrinterAttributes等)、ジョブ管理部１１０６に振り分けるコマンド(ジョブキャンセル:CancelJob、ジョブ属性更新:SetJobAttributes)などがある。クライアント通信部１１１４は、クライアントから受け取った指示コマンドを、自印刷サービス１１０内の、対応する振り分け先の要素に振り分ける。
【０１０１】
次に、本実施形態の印刷制御システムにおけるジョブスケジューリングの流れを説明する。新たなジョブを発行した印刷サービス１１０内のジョブ管理部１１０６は、イベント通知部１１１０に対しジョブ更新イベント（「JobUpdated」）の発生を依頼する。この依頼を受けたイベント通知部１１１０は、サーバ間通信制御部１１１２を通して全てのサーバ１００のイベント通知部１１１０に対してジョブ更新イベントを通知する。この通知のデータ内容の一例を図１８に示す。図１８の例は、「サーバ２」のイベント通知部１１１０が発したジョブ更新イベント通知メッセージの例である。図１３に例示したように、ジョブ更新イベント（「JobUpdated」）の場合の通知の宛先は「全て」のサーバなので、この通知メッセージの宛先は全サーバを表す「ＡＬＬ」となっている。このメッセージで通知されるコマンド（イベント）は「JobUpdated」である。このメッセージには、コマンド「JobUpdated」のパラメータとして、ジョブの更新内容を示すコード（この場合は新規ジョブの発行）（図示省略）と、そのジョブのジョブＩＤとが更に含まれる。
【０１０２】
各サーバ１００上の印刷サービス１１０内のジョブスケジューリング部１１０８は、その印刷サービス１１０内のイベント通知部１１１０に対してジョブ更新イベント通知が到来するのを監視している。ジョブスケジューリング部１１０８は、ジョブ更新イベント通知の到来を検知すると、ジョブスケジューリング処理、すなわちその印刷サービス１１０内の物理プリンタ１１４に対して割当可能なジョブを探して割り当てる処理、を行う。
【０１０３】
ジョブスケジューリング処理では、ジョブスケジューリング部１１０８は、自印刷サービス１１０内の物理プリンタ１１４のうち、次のジョブを受付可能な物理プリンタ１１４を特定する。「次のジョブを受付可能」な状態の定義はシステムの運用次第である。物理プリンタ１１４がジョブを実行していない場合のみを「次のジョブを受付可能」な状態としてもよいし、物理プリンタ１１４が持つキュー（待ち行列）内の処理待ちのジョブの数があらかじめ定めた数以下である場合を「次のジョブを受付可能」な状態としてもよい。各物理プリンタ１１４が「次のジョブを受付可能」か否かは、例えば、ジョブスケジューリング部１１０８から各物理プリンタ１１４へ問い合わせることで判定すればよい。またこの代わりに、各物理プリンタ１１４が自律的にジョブ更新イベント通知を検知し、この検知に応じてそれぞれ「次のジョブを受付可能」か否かを判定し、その判定結果をジョブスケジューリング部１１０８に通知するようにしてもよい。
【０１０４】
また、ジョブスケジューリング部１１０８は、データ記憶装置１０２内のジョブテーブル１０２６に対して、自印刷サービス１１０内の「次のジョブを受付可能」な各物理プリンタ１１４に割当可能なジョブを問い合わせる。
【０１０５】
図１９に、ジョブスケジューリング部１１０８がデータ記憶装置１０２に対して送る問合せの一例を示す。図１９の例は、ＳＱＬで記述した問合せの例であり、ジョブテーブル１０２６（図９参照）の中から、「受付プリンタ」が「論理プリンタＡ」であり、「状態」が「アサイン待ち」であるジョブのジョブＩＤ（「jobid」）を求める問合せを示している。新たに作成されたジョブは、ジョブ作成処理が完了した時点で「アサイン（割当）待ち」の状態になっているので、この「アサイン待ち」状態のジョブの中から、「次のジョブを受付可能」な物理プリンタ１１４に割当可能なジョブを探すわけである。「受付プリンタ」が「論理プリンタＡ」であるという絞り込み条件は、自印刷サービス１１０内の「次のジョブを受付可能」な物理プリンタ１１４に対応する論理プリンタ１１２（この場合は「論理プリンタＡ」）を対応付けテーブル１０２３（図６）から検索することにより作成される。
【０１０６】
自印刷サービス１１０内に「次のジョブを受付可能」な物理プリンタ１１４が複数ある場合、ジョブスケジューリング部１１０８は、それら物理プリンタ１１４毎に同様の問合せを行えばよい。
【０１０７】
データ記憶装置１０２は、ジョブスケジューリング部１１０８からの問合せに示される条件に合致するジョブをジョブテーブル１０２６から検索し、そのようなジョブが見つかれば、そのジョブのジョブＩＤをジョブスケジューリング部１１０８に返す。このとき、データ記憶装置１０２は、ジョブテーブル１０２６（図９参照）におけるそのジョブＩＤに対応する「状態」を「アサイン待ち」から「アサイン済み」へと更新する。なお、「アサイン済み」への状態更新をこの段階で行う代わりに、この後、例えばそのジョブＩＤの割当を受けた物理プリンタ１１４がジョブテーブル１０２６へ状態更新を指示した際に行ってもよい。
【０１０８】
一方、問合せの条件に合致するジョブが見つからなければ、データ記憶装置１０２は、問合せに係るジョブが「ない」ことを示す応答をジョブスケジューリング部１１０８に返す。この例では物理プリンタ１１４へのジョブの割当は早い者勝ちなので、新たに作成されたジョブが既に他のサーバ１００上の物理プリンタ１１４に割り当てられてしまった場合、「ない」という応答が返ってくることになる。
【０１０９】
問合せに対してデータ記憶装置１０２から、割当可能なジョブＩＤが返されてきた場合、ジョブスケジューリング部１１０８は、そのジョブＩＤを、その問合せに対応する「次のジョブを受付可能」な物理プリンタ１１４、に対して割り当てる。すなわち、そのジョブＩＤをその物理プリンタ１１４に渡す。ジョブＩＤの割当を受けた物理プリンタ１１４は、ジョブテーブル１０２６からそのジョブＩＤに対応する印刷データや印刷属性を取得し（このときそのジョブＩＤの「状態」を「アサイン済み」に更新してもよい）、これら取得したデータを用いて印刷のための処理を実行する。例えば、取得した印刷データをラスター形式等の印刷可能データに変換し、変換結果の印刷可能データを印刷属性と対応づけて、対応する実プリンタ１０８に送り、印刷を実行させる。物理プリンタ１１４は、対応する実プリンタ１０８に対してジョブを発行してからそのジョブの全ページの印刷結果の排紙が完了するまで、ＳＮＭＰ（Simple Network Management Protocol）等のプロトコルを用いて実プリンタ１０８での印刷処理の実行状況を監視する。
【０１１０】
データ記憶装置１０２から問合せに係るジョブが「ない」ことを示す応答を受けた場合、ジョブスケジューリング部１１０８は、次回のジョブ更新イベントまで待機する。
【０１１１】
なお、ジョブ更新イベントの通知を検知した時点で自印刷サービス１１０内に「次のジョブを受付可能」な物理プリンタ１１４が存在しない場合、ジョブスケジューリング部１１０８は、上述のジョブスケジューリング処理を中止し、次回のジョブ更新イベントまで待機する。
【０１１２】
次に、この印刷制御システムにおける仮想プリンタ（論理プリンタ、物理プリンタ）のサーバ間移動の流れを詳しく説明する。
【０１１３】
仮想プリンタのサーバ間移動は、配置管理装置１０４による仮想プリンタの「再配置」の一つの態様である。再配置の計算の結果、あるサーバ１００上のある仮想プリンタを別のサーバ１００に移動させることを決定した場合、配置管理装置１０４は、その仮想プリンタの移動元のサーバ１００に対してその仮想プリンタの停止を要求する停止要求コマンドを送り、その仮想プリンタの移動先のサーバ１００に対してその仮想プリンタの実体化を要求する実体化要求コマンドを送る。
【０１１４】
例えば、「サーバ１」内の「物理プリンタ２」を「サーバ２」に移動させる場合、配置管理装置１０４は、図２０に例示する停止要求コマンドを「サーバ１」に送り、その後図２１に例示する実体化要求コマンドを「サーバ２」に送る。以下、図２０及び図２１の例に沿って説明する。
【０１１５】
図２０の例において、物理プリンタ１１４の停止を要求する停止要求コマンドは「StandbyPhysicalPrinter」であり、停止の対象となる物理プリンタ１１４のＩＤが「宛先」パラメータとして示される。一方、図２１に例示するように、物理プリンタ１１４の実体化（起動）を要求する実体化要求コマンドは「LoadPhysicalPrinter」であり、実体化の対象となる物理プリンタ１１４のＩＤが「宛先」パラメータとして示される。仮想プリンタの「移動」の際に対になって発せられる停止要求コマンド及び実体化要求コマンドの「宛先」は同じ値（図示例では「物理プリンタ２」）である。
【０１１６】
配置管理装置１０４から図２０の停止要求コマンドを受け取ったサーバ１００（「サーバ１」）の印刷サービス１１０は、その停止要求コマンドを物理プリンタ管理部１１０４に割り当てる。物理プリンタ管理部１１０４は、その停止要求コマンドの「宛先」の物理プリンタ１１４（「物理プリンタ２」）がその時点でジョブを処理中であれば、その物理プリンタ１１４に対してその処理の停止を指示し、その時点でのそのジョブの途中の処理結果をデータ記憶装置１０２内のジョブテーブル１０２６及び印刷データ１０２７に反映するよう指示する。例えば、物理プリンタ１１４が、ＰＤＬの印刷データを中間形式データへ変換する処理を完了し、その中間形式データを印刷可能データに変換する処理を完了しない段階で停止要求コマンドを受けた場合、データ記憶装置１０２の当該ジョブのＩＤに対応する印刷データ１０２７をその中間形式データに置き換える（または、ＰＤＬデータに加えてその中間形式データをジョブＩＤに対応づけて格納する）。また、別の例として、ジョブの途中のページまで実プリンタ１０８で印刷済みである場合、その状態をジョブテーブル１０２６等に反映させることも可能である。例えば、物理プリンタ１１４がそのジョブの第ｋページ（ｋは正の整数）までの印刷可能データの生成を完了し、対応する実プリンタ１０８が第ｍページ（ｍはｋ以下の正の整数）までの印刷出力を完了している場合、そのジョブＩＤに対応する印刷データ１０２７に対して、第（ｋ−ｍ＋１）ページから第ｋページの印刷可能データを追加すると共に、ジョブテーブル１０２６の当該ジョブＩＤに対応するエントリに、第ｋページまで印刷可能データの生成済み、第ｍページまで印刷出力済み、を表す途中経過情報を登録する。
【０１１７】
このようにして処理途中の情報のデータ記憶装置１０２への格納が終わると、物理プリンタ管理部１１０４は、その物理プリンタ１１４（「物理プリンタ２」）を停止させ、それまでその物理プリンタ１１４が用いていたリソース（メモリ領域等）を解放する。このリソース解放の後、物理プリンタ管理部１１０４は、物理プリンタテーブル１０２２（図５参照）のその「物理プリンタ２」の「状態」を、（それまでの「Ready」から）「Stand-by」へと更新する。
【０１１８】
配置管理装置１０４から図２１の実体化（起動）要求コマンドを受け取ったサーバ１００（「サーバ２」）の印刷サービス１１０は、その実体化要求コマンドを物理プリンタ管理部１１０４に割り当てる。物理プリンタ管理部１１０４は、その実体化要求コマンドの「宛先」の物理プリンタ１１４（「物理プリンタ２」）の情報を物理プリンタテーブル１０２２から取得し、その情報に従って、「サーバ２」内にその「物理プリンタ２」を実体化する。この実体化が成功すると、物理プリンタ管理部１１０４は、物理プリンタテーブル１０２２内のその「物理プリンタ２」の「状態」を、（それまでの「Stand-by」から）「Ready」へと更新し、「配置先サーバ」の値を（それまでの「サーバ１」から）「サーバ２」に変更する。
【０１１９】
また、このようにして実体化要求コマンドの実行が成功した場合、物理プリンタ管理部１１０４は、配置管理装置１０４に対し、「成功」の旨を応答する。この応答を受け取った配置管理装置１０４は、データ記憶装置１０２内の配置テーブル１０２５における「物理プリンタ２」の配置先の「サーバＩＤ」を（それまでの「サーバ１」から）「サーバ２」に変更する。
【０１２０】
以上のようにして「サーバ２」上に移動した「物理プリンタ２」は、ジョブスケジューリング部１１０８に対してジョブの割当を要求する。ジョブスケジューリング部１１０８は、その要求に応じて、その「物理プリンタ２」が受け入れ可能なジョブをジョブテーブル１０２６に問い合わせる。この問合せの結果、移動前にその「物理プリンタ２」が処理していたジョブが、再び移動後の「物理プリンタ２」に対して再び割り当てられることになる。この割当を受けた「物理プリンタ２」は、データ記憶装置１０２内のジョブテーブル１０２６等から、そのジョブの処理途中の情報を取得し、その情報を用いることで、移動前に処理を停止した段階からジョブ処理を再開する。
【０１２１】
以上では、物理プリンタ１１４を移動させる場合を例にとって説明したが、論理プリンタ１１２を移動させる場合も同様の処理を行えばよい。
【０１２２】
なお、再配置計算の結果移動すると決定された仮想プリンタがジョブを処理していない場合は、単に移動元のサーバ１００上のその仮想プリンタを停止させ、リソースを解放させた上で、移動先のサーバ１００上にその仮想プリンタを実体化すればよい。
【０１２３】
以上の例では、配置管理装置１０４がサーバ１００に対して移動対象の仮想プリンタの停止を指示し、その仮想プリンタの処理途中の情報をデータ記憶装置１０２に格納させた。しかし、サーバ１００が障害等で停止した場合は、サーバ１００に配置されている仮想プリンタは既に停止しており、その仮想プリンタの処理途中の情報をデータ記憶装置１０２に格納させることはできない。この場合でも、例えば仮想プリンタが、あらかじめ定めた当該仮想プリンタの行う処理の段階毎に、その段階の処理結果をデータ記憶装置１０２に反映させるようにすれば、データ記憶装置１０２は、サーバ１００やその上で動作している仮想プリンタが障害等で停止した場合でも、その停止の前の最新の処理段階の処理結果がデータ記憶装置１０２に保持されていることになる。したがって、サーバ１００の停止を検知した後でそのサーバ１００上の仮想プリンタを他のサーバ１００に移動させたとしても、移動した仮想プリンタは、その最新の処理段階の処理結果から処理を再開することができる。
【０１２４】
以上の例では、仮想プリンタが論理プリンタ１１２と物理プリンタ１１４とに機能分割されていたが、それら両者の機能を併せ持つ仮想プリンタを用いる場合にも、上述の仮想プリンタのサーバ間移動処理方式は適用可能である。
【０１２５】
以上に例示した印刷サービス１１０、データ記憶装置１０２及び配置管理装置１０４は、例えば、汎用のコンピュータに当該装置の各機能モジュールの処理を表すプログラムを実行させることにより実現してもよい。ここで言うコンピュータは、例えば、ハードウエアとして、ＣＰＵ等のマイクロプロセッサ、ランダムアクセスメモリ（ＲＡＭ）およびリードオンリメモリ（ＲＯＭ）等のメモリ（一次記憶）、ＨＤＤ（ハードディスクドライブ）やＳＳＤ（ソリッドステートドライブ）、フラッシュメモリ等の二次記憶を制御する二次記憶コントローラ、各種Ｉ／Ｏ（入出力）インタフェース、無線又は有線のネットワークとの接続のための制御を行うネットワークインタフェース等が、たとえばバスを介して接続された回路構成を有する。また、そのバスに対し、例えばＩ／Ｏインタフェース経由で、ＣＤやＤＶＤ、ブルーレイディスクなどの可搬型ディスク記録媒体に対する読み取り及び／又は書き込みのためのディスクドライブ、フラッシュメモリなどの各種規格の可搬型の不揮発性記録媒体に対する読み取り及び／又は書き込みのためのメモリリーダライタ、などが接続されてもよい。上に例示した各機能モジュールの処理内容が記述されたプログラムがＣＤやＤＶＤ等の記録媒体を経由して、又はネットワーク等の通信手段経由で、フラッシュメモリ等の二次記憶装置に保存され、コンピュータにインストールされる。二次記憶装置に記憶されたプログラムがＲＡＭに読み出されＣＰＵ等のマイクロプロセッサにより実行されることにより、上に例示した機能モジュール群が実現される。また、コンピュータは、仮想マシンであってもよい。
【符号の説明】
【０１２６】
１００，１００Ａ，１００Ｂ  サーバ、１０２  データ記憶装置、１０４  配置管理装置、１０６  ロードバランサ、１０８  実プリンタ、１１０，１１０Ａ，１１０Ｂ  印刷サービス、１１２，１１２ａ  論理プリンタ、１１４，１１４ａ  物理プリンタ、１０２１  論理プリンタテーブル、１０２２  物理プリンタテーブル、１０２３  対応づけテーブル、１０２４  サーバテーブル、１０２５  配置テーブル、１０２６  ジョブテーブル、１０２７  印刷データ、１１０２  論理プリンタ管理部、１１０４  物理プリンタ管理部、１１０６  ジョブ管理部、１１０８  ジョブスケジューリング部、１１１０  イベント通知部、１１１２  サーバ間通信制御部、１１１４  クライアント通信部。
【図１】
2015179477.tif 000003
【図２】
2015179477.tif 000004
【図３】
2015179477.tif 000005
【図４】
2015179477.tif 000006
【図５】
2015179477.tif 000007
【図６】
2015179477.tif 000008
【図７】
2015179477.tif 000009
【図８】
2015179477.tif 000010
【図９】
2015179477.tif 000011
【図１０】
2015179477.tif 000012
【図１１】
2015179477.tif 000013
【図１２】
2015179477.tif 000014
【図１３】
2015179477.tif 000015
【図１４】
2015179477.tif 000016
【図１５】
2015179477.tif 000017
【図１６】
2015179477.tif 000018
【図１７】
2015179477.tif 000019
【図１８】
2015179477.tif 000020
【図１９】
2015179477.tif 000021
【図２０】
2015179477.tif 000022
【図２１】
2015179477.tif 000023