(57)【要約】【課題】クライアント側を仮想マシン構成とすることで、サーバの負荷低減を実現する。【解決手段】クライアントマシンは仮想マシンを構成し、仮想マシンを管理するための仮想マシン管理と、クライアントが動作するクライアントの仮想マシンと、サーバプログラムを動作させるために必要に応じて起動される仮想マシンとを備える。仮想マシン管理は、仮想マシン内の通信を管理する通信切換部と、通信切換部の転送テーブルと、本発明のクライアント側の管理主体であるクライアント管理プログラムと、クライアント管理プログラムが持つ仮想マシンのリソース情報とを備える。サーバマシンは、サーバプログラムと、本発明のサーバ側の管理主体であるサーバ管理プログラムと、クライアント側に送付するサーバを管理するサーバ管理プログラムのサーバ組み立て部とを備える。【選択図】図４
2008083897.tif 000002
【特許請求の範囲】
【請求項１】
自身のマシンリソースを示すリソース情報を収集し、前記リソース情報に応じたサーバプログラムを取得して実行し、ネットワークとの通信を前記サーバプログラムに基づくサーバとの通信に切り換える第１計算機と、
前記第１計算機から前記リソース情報を取得し、前記リソース情報に基づき前記サーバプログラムを生成して前記第１計算機に提供する第２計算機と
を具備する
負荷低減システム。
【請求項２】
請求項１に記載の負荷低減システムにおいて、
前記第２計算機は、
前記リソース情報に基づいて、前記第１計算機のマシンリソースが利用可能であるかどうか判断するサーバ管理部と、
前記利用可能なマシンリソースに応じて、前記第１計算機で動作する前記サーバプログラムを組み立てるサーバ組み立て部と
を具備する
負荷低減システム。
【請求項３】
請求項１又は２に記載の負荷低減システムにおいて、
前記第１計算機は、
クライアントとして動作する第１処理部と、
サーバとして動作する第２処理部と、
前記第１処理部と前記ネットワークとの通信を、前記第１処理部と前記第２処理部との通信に切り換える通信切換部と、
前記リソース情報を前記第２計算機に提供し、前記第２計算機から取得した前記サーバプログラムを前記第２処理部に提供するクライアント管理部と
を具備する
負荷低減システム。
【請求項４】
請求項３に記載の負荷低減システムにおいて、
前記クライアント管理部は、前記第２計算機の識別情報及び前記第２処理部の識別情報を登録するための転送テーブルに、前記第２計算機の識別情報及び前記第２処理部の識別情報のうち少なくとも一方の識別情報を登録し、
前記通信切換部は、前記第１処理部と前記ネットワークとの通信の際、前記転送テーブルを参照し、前記転送テーブルに前記第２処理部の識別情報が登録されていれば、前記第１処理部と第２処理部との通信に切り換える
負荷低減システム。
【請求項５】
請求項３又は４に記載の負荷低減システムにおいて、
前記クライアント管理部は、前記第１計算機の負荷が基準値を超えた場合、前記第２処理部を停止させ、前記転送テーブル上の前記第２処理部の登録情報を削除し、前記第１処理部に前記第２計算機を利用させるようにする
負荷低減システム。
【請求項６】
請求項３乃至５のいずれか一項に記載の負荷低減システムにおいて、
前記クライアント管理部は、前記第１計算機のマシンリソースが不足した場合、前記第１処理部に、前記第２処理部の利用を中止させて前記第２計算機を利用させ、前記第１計算機のマシンリソースが回復した場合、前記第１処理部に前記第２処理部の利用を再開させるようにする
負荷低減システム。
【請求項７】
請求項３乃至５のいずれか一項に記載の負荷低減システムにおいて、
前記クライアント管理部は、前記第１処理部に、前記第２処理部と前記第２計算機とを並行して利用させるようにする
負荷低減システム。
【請求項８】
仮想マシン内で動作するクライアントプログラムと、
前記仮想マシンのリソース情報をサーバ側に提供し、前記サーバ側からサーバプログラムを取得し、前記サーバプログラムを前記仮想マシン内で実行する仮想マシン管理と、
前記仮想マシン内の通信を管理し、前記クライアントプログラムと前記サーバ側との通信を、前記クライアントプログラムと前記サーバプログラムとの通信に切り換える通信切換部と
を具備する
クライアントマシン。
【請求項９】
請求項８に記載のクライアントマシンにおいて、
前記サーバプログラムは、
前記仮想マシン内で実行される機能を呼び出す局所呼出部と、
他のサーバ上で実行される機能を呼び出す遠隔呼出部と
を具備する
クライアントマシン。
【請求項１０】
クライアント側のマシンリソースを示すリソース情報を取得し、前記リソース情報を参照して前記クライアント側のマシンリソースが利用可能であるかどうか判断するサーバ管理部と、
前記クライアント側のマシンリソースが利用可能である場合、前記リソース情報に基づいて、前記クライアント側に送付するサーバプログラムを生成するサーバ組み立て部と
を具備する
サーバマシン。
【請求項１１】
（ａ１）サーバ側で、クライアント側から取得したリソース情報に基づき、前記クライアント側のマシンリソースが利用可能であるかどうか判断するステップと、
（ａ２）前記クライアント側のマシンリソースが利用可能であると判断すると、使用するリソースとクライアントの権限に基づき、前記クライアント側の仮想マシンで起動するサーバプログラムを作成するステップと、
（ａ３）前記サーバプログラムを前記クライアント側に送付するステップと
を具備する
負荷低減方法。
【請求項１２】
請求項１１に記載の負荷低減方法において、
（ｂ１）第１処理部からの送信で、前記第１処理部からの送信に含まれる識別情報が転送テーブルに登録されているかどうか確認するステップと、
（ｂ２）前記識別情報が前記転送テーブルに登録されていなければ、前記第１処理部からの送信をネットワークへ転送するステップと、
（ｂ３）前記識別情報が前記転送テーブルに登録されているならば、代替識別情報が設定されているかどうか確認するステップと、
（ｂ４）前記代替識別情報が設定されているならば、識別情報を前記代替識別情報に書き換えるステップと、
（ｂ５）前記第１処理部からの送信を第２処理部に転送するステップと
を更に具備する
負荷低減方法。
【請求項１３】
請求項１２に記載の負荷低減方法において、
（ｃ１）前記第２処理部からの送信が、前記第１処理部への送信かどうか確認するステップと、
（ｃ２）前記第１処理部への送信であれば、送信元の識別情報が前記代替識別情報として設定されているかどうか確認するステップと、
（ｃ３）前記代替識別情報が設定されているならば、送信元の識別情報を前記代替識別情報に書き換えるステップと、
（ｃ４）前記第２処理部からの送信を前記第１処理部に転送するステップと、
（ｃ５）前記第２処理部からの送信が、前記第１処理部以外への送信であれば、前記第２処理部の送信元の識別情報として前記代替識別情報を使用しているかどうか確認するステップと、
（ｃ６）前記代替識別情報を使用していなければ、前記第２処理部から送信されたパケットを廃棄するステップと
を更に具備する
負荷低減方法。
【請求項１４】
（Ａ１）クライアントが第１識別情報を持つ第１サーバに接続してサービスを要求するステップと、
（Ａ２）マシン管理機器が前記第１サーバからの接続用にサービスポートを開けるステップと、
（Ａ３）前記第１サーバが前記マシン管理機器のサービスポートに接続を試みるステップと、
（Ａ４）前記サービスポートへの接続に失敗した場合は、第１サーバが前記クライアントに対してサービスを提供し続けるステップと、
（Ａ５）前記サービスポートへの接続に成功した場合は、前記第１サーバが前記クライアント環境の仮想マシン上で利用可能な資源を確認して、必要な資源を利用できるならば、前記クライアントに対してサービスを提供しながら、同時に前記マシン管理機器に対してサービスを提供するプログラムと必要な環境情報を送信するステップと、
（Ａ６）前記マシン管理機器が、前記第１サーバから受信したプログラムと環境情報を、サーバ動作用の仮想マシン上に格納するステップと、
（Ａ７）受信が完了したら、前記サーバ動作用の仮想マシンに前記第１識別情報を与えて、第２サーバとして動作を開始させるステップと、
（Ａ８）前記第１サーバは前記マシン管理機器を利用して、前記第２サーバとの間で同期を取り、前記マシン管理機器に対して、前記第２サーバへの切替えを通知するステップと、
（Ａ９）前記マシン管理機器が、前記クライアントから前記第１サーバへの通信を、前記第２サーバへ転送するステップと、
（Ａ１０）前記第２サーバから前記クライアント以外への通信がある場合は、ネットワークアドレス変換により適当なアドレスへの変換を行うステップと、
（Ａ１１）一定時間以上、前記クライアントから前記第２サーバへの通信がなくなった場合、前記マシン管理機器が、前記第２サーバを停止して、前記第２サーバを動作させていた環境を解放するステップと
を具備する
負荷低減方法。
【請求項１５】
請求項１１乃至１４のいずれか一項に記載の負荷低減方法を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、負荷低減システムに関し、特にクライアントを利用したサーバの負荷低減のための負荷低減システムに関する。
【背景技術】
【０００２】
年々処理能力が向上するＰＣサーバを有効利用するため、ＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ：仮想マシン）ソフトウェアを利用したサーバ統合、クライアント統合といったソリューションが流行の兆を見せている一方で、処理の多くがサーバサイドで実行されることで、サーバの中にはより負荷が集中しているものもある。
【０００３】
こうした中、普通のＰＣでも処理能力は相当に向上し、クライアントＰＣにおいてリソースが余剰になってきており、クライアント側で処理の一部を分担する動きが出てきている。
【０００４】
クライアント・サーバ方式は、サービスを提供するノードであるサーバと処理を要求するノードであるクライアントをネットワークで接続し、クライアントからの処理要求を受信することでサーバがその処理を開始し、結果をクライアントに送信する仕組みである。
【０００５】
サーバが提供するサービスには多くの種類があるが、インターネットの急速な発展に伴い、その内容は高度化し、かつサーバに接続するクライアントの要求数も増加している。また、ネットワークのブロードバンド化に伴い、処理すべきデータ量が増加すると共に、クライアントが要求する応答時間（レスポンスタイム）も厳しくなる傾向にある。サーバマシンの処理能力も向上しているが、サーバマシンへの負荷の増加がそれを上回ることで、サーバの処理が著しく遅くなったり、更にはクライアントから処理を受け付けない状態となったりして、サーバがボトルネックと化している。
【０００６】
サーバのボトルネックを解決する手段として、まず第一にサーバマシンをより処理能力の高いものに交換するという方法がある。この場合、一時的にはボトルネックは解消するが、更に負荷が増加した場合、サーバマシンを再び交換するか、もしくはそれ以上の処理能力をマシンを持ったサーバマシンがないと、解決できない場合があるという問題がある。また、処理能力の高いマシンは一般的に高価である。
【０００７】
他の解決手段として、サーバマシンの負荷の高い処理部分をそのサーバマシンとは別の専用装置で処理する方法がある。この場合、サーバが受け付けた処理要求に対して、サーバは計算量の多い部分を別の専用装置に処理依頼を行い、そしてその結果を使用して、サーバ処理を継続する。この場合の問題点は、このような分離可能な場合が限られること、また、そうした専用装置は高価になることが挙げられる。
【０００８】
更に他の解決手段として、サーバマシンを複数台使用する方法がある。この解決手段では、一般的には負荷分散装置という特別なノードを導入して、その配下に複数台のサーバマシンを置く構成となる。負荷分散装置は、なるべく負荷が均一となるように、クライアントからの要求を、各サーバマシンに振り分ける役割を果たす。そして、全体の負荷が高くなり、サーバがボトルネックとなってきたならば、新たにサーバマシンを負荷分散装置の配下に追加することで、それを解消することができる。この場合の問題点は、負荷分散装置が高価であることや、負荷分散装置自体がボトルネックとなる可能性、負荷を分散するための高度な管理が必要となること等が挙げられる。
【０００９】
関連する技術として、特開２００４−２２０１５１号公報（特許文献１）に新旧モジュールの切り換え機能を有するサーバ装置が開示されている。
この従来技術では、サーバ装置は、ファイル起動指示に基づいて、記憶装置に記憶された起動対象モジュール毎に仮想クライアントＯＳを生成する仮想サーバ制御部と、起動対象モジュールをメインメモリにローディングして、当該起動対象モジュールを起動するブート制御部と、各起動対象モジュールにＩＰアドレスの付与を制御し、当該モジュールのモジュール名とＩＰアドレスとの関係を第１テーブルに登録し、モジュール名とＩＰアドレスとの間の変換をするＩＰアドレス／モジュール名変換ＤＢ管理部と、異なる仮想クライアントＯＳにより起動されたモジュール宛てのメッセージを当該モジュールの第１テーブルに登録されているＩＰアドレスに基づいてルーティングをするルーティング制御部とを具備する。すなわち、サーバ上に仮想サーバと仮想クライアントを両立し、仮想サーバ制御部（ハイパバイザ）がＩＰアドレスを仲介する。
【００１０】
また、特開平１１−０５３３２６号公報（特許文献２）に分散処理システムが開示されている。
この従来技術では、クライアントノードは、ユーザーの操作に応じて、サーバノードに対して処理要求信号を送信する。サーバノードは、処理要求信号を受信すると、オペレーションシステムからＣＰＵ使用率を取得し、ＣＰＵ使用率が設定値以下である場合には、要求された処理を行い、処理結果をクライアントノードに対して送信する。逆に、ＣＰＵ使用率が設定値以上である場合には、サーバノードは、要求された処理をクライアントノードに実行させる旨の応答信号を送信する。応答信号に対して、クライアントノードがアプリケーションプログラムの送信を要求すると、サーバノードは、要求された処理を行うためのアプリケーションプログラムをクライアントノードに送信する。クライアントノードは、アプリケーションプログラムを実行して処理結果を得る。すなわち、クライアント機能に相当するクライアントノードの処理要求部の検索要求を受け、サーバノードは検索プログラムをクライアントノードに送信し、クライアントノードは検索プログラムを受信して実行する。なお、クライアント機能及び検索プログラムはＶＭ（仮想マシン）上で動作するものではない。
【００１１】
【特許文献１】特開２００４−２２０１５１号公報
【特許文献２】特開平１１−０５３３２６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
特開２００４−２２０１５１号公報（特許文献１）に記載の従来技術は、そもそも、プロセッサ切り替えを伴わないファイル更新を行うことのできるサーバ装置を提供することを目的としている。具体的には、サーバ装置において、ファイル起動指示に基づいて、起動対象モジュール毎に仮想クライアントＯＳを生成し、新旧ファイル間で変更しているモジュールのみを入れ替えている。当然、全ての処理はサーバ装置上で完結しており、サーバ装置にのみ負荷がかかる。
特開平１１−０５３３２６号公報（特許文献２）に記載の従来技術は、クライアントＰＣ側のマシンリソースを考慮することなく、サーバが提供していた一部のサービスをクライアントＰＣ側に肩代わりさせている。また、ＶＭ（仮想マシン）を使用しておらず、単にサーバ側で実行されていたアプリケーションプログラムをクライアントＰＣ側で実行させているため、実行中にクライアントＰＣ側とサーバ側とで通信を行う必要があるアプリケーションプログラムの場合には適さない。
本発明の目的は、アクセスが集中するサーバの負荷を、クライアントＰＣを利用して低減し、その際、セキュリティを低下させない負荷低減システムを提供することである。
本発明の他の目的は、クライアント側を仮想マシン構成とすることで、サーバの負荷低減を実現する負荷低減システムを提供することである。
【課題を解決するための手段】
【００１３】
本発明の負荷低減システムは、自身のマシンリソースを示すリソース情報を収集し、リソース情報に応じたサーバプログラム（２２２）を取得して実行し、ネットワークとの通信をサーバプログラム（２２２）に基づくサーバとの通信に切り換える第１計算機（１００）と、
第１計算機（１００）からリソース情報を取得し、リソース情報に基づきサーバプログラム（２２２）を生成して第１計算機（１００）に提供する第２計算機（２００）とを具備する。
【００１４】
第２計算機（２００）は、リソース情報に基づいて、第１計算機（１００）のマシンリソースが利用可能であるかどうか判断するサーバ管理部（２２０）と、利用可能なマシンリソースに応じて、第１計算機（１００）で動作するサーバプログラム（２２２）を組み立てるサーバ組み立て部（２２１）とを具備する。
【００１５】
第１計算機（１００）は、クライアントとして動作する第１処理部（１２０）と、サーバとして動作する第２処理部（１３０）と、第１処理部（１２０）とネットワークとの通信を、第１処理部（１２０）と第２処理部（１３０）との通信に切り換える通信切換部（１１１）と、リソース情報を第２計算機（２００）に提供し、第２計算機（２００）から取得したサーバプログラム（２２２）を第２処理部（１３０）に提供するクライアント管理部（１１２）とを具備する。
【００１６】
クライアント管理部（１１２）は、第２計算機（２００）の識別情報及び第２処理部（１３０）の識別情報を登録するための転送テーブルに、第２計算機（２００）の識別情報及び第２処理部（１３０）の識別情報のうち少なくとも一方の識別情報を登録する。通信切換部（１１１）は、第１処理部（１２０）とネットワークとの通信の際、転送テーブルを参照し、転送テーブルに第２処理部（１３０）の識別情報が登録されていれば、第１処理部（１２０）と第２処理部（１３０）との通信に切り換える。
【００１７】
クライアント管理部（１１２）は、第１計算機（１００）の負荷が基準値を超えた場合、第２処理部（１３０）を停止させ、転送テーブル上の第２処理部（１３０）の登録情報を削除し、第１処理部（１２０）に第２計算機（２００）を利用させるようにする場合もある。
【００１８】
クライアント管理部（１１２）は、第１計算機（１００）のマシンリソースが不足した場合、第１処理部（１２１）に、第２処理部（２２２）の利用を中止させて第２計算機（２００）を利用させ、第１計算機（１００）のマシンリソースが回復した場合、第１処理部（１２１）に第２処理部（２２２）の利用を再開させるようにする場合もある。
【００１９】
クライアント管理部（１１２）は、第１処理部（１２１）に、第２処理部（２２２）と第２計算機（２００）とを並行して利用させるようにする場合もある。
【００２０】
また、本発明のクライアントマシン（１００）は、仮想マシン内で動作するクライアントプログラム（１２１）と、仮想マシンのリソース情報をサーバ側に提供し、サーバ側からサーバプログラム（２２２）を取得し、サーバプログラム（２２２）を仮想マシン内で実行する仮想マシン管理（１１０）と、仮想マシン内の通信を管理し、クライアントプログラム（１２１）とサーバ側との通信を、クライアントプログラム（１２１）とサーバプログラム（２２２）との通信に切り換える通信切換部（１１１）とを具備する場合もある。
【００２１】
サーバプログラム（２２２）は、仮想マシン内で実行される機能を呼び出す局所呼出部（２２３１，２２３３）と、他のサーバ上で実行される機能を呼び出す遠隔呼出部（２２３２）とを具備する。
【００２２】
また、本発明のサーバマシン（２００）は、クライアント側のマシンリソースを示すリソース情報を取得し、リソース情報を参照してクライアント側のマシンリソースが利用可能であるかどうか判断するサーバ管理部（２２０）と、クライアント側のマシンリソースが利用可能である場合、リソース情報に基づいて、クライアント側に送付するサーバプログラム（２２２）を生成するサーバ組み立て部（２２１）とを具備する場合もある。
【００２３】
本発明の負荷低減方法及びプログラムは、（ａ１）サーバ側で、クライアント側から取得したリソース情報に基づき、クライアント側のマシンリソースが利用可能であるかどうか判断するステップと、（ａ２）クライアント側のマシンリソースが利用可能であると判断すると、使用するリソースとクライアントの権限に基づき、クライアント側の仮想マシンで起動するサーバプログラム（２２２）を作成するステップと、（ａ３）サーバプログラム（２２２）をクライアント側に送付するステップとを具備する。
【００２４】
本発明の負荷低減方法及びプログラムは、（ｂ１）第１処理部（１２０）からの送信で、第１処理部（１２０）からの送信に含まれる識別情報が転送テーブルに登録されているかどうか確認するステップと、（ｂ２）識別情報が転送テーブルに登録されていなければ、第１処理部（１２０）からの送信をネットワークへ転送するステップと、（ｂ３）識別情報が転送テーブルに登録されているならば、代替識別情報が設定されているかどうか確認するステップと、（ｂ４）代替識別情報が設定されているならば、識別情報を代替識別情報に書き換えるステップと、（ｂ５）第１処理部（１２０）からの送信を第２処理部（１３０）に転送するステップとを更に具備する。
【００２５】
本発明の負荷低減方法及びプログラムは、（ｃ１）第２処理部（１３０）からの送信が、第１処理部（１２０）への送信かどうか確認するステップと、（ｃ２）前記第１処理部（１２０）への送信であれば、送信元の識別情報が前記代替識別情報として設定されているかどうか確認するステップと、（ｃ３）前記代替識別情報が設定されているならば、送信元の識別情報を前記代替識別情報に書き換えるステップと、（ｃ４）前記第２処理部（１３０）からの送信を前記第１処理部（１２０）に転送するステップと、（ｃ５）前記第２処理部（１３０）からの送信が、前記第１処理部（１２０）以外への送信であれば、前記第２処理部（１３０）の送信元の識別情報として前記代替識別情報を使用しているかどうか確認するステップと、（ｃ６）前記代替識別情報を使用していなければ、前記第２処理部（１３０）から送信されたパケットを廃棄するステップとを更に具備する。
【００２６】
本発明の他の負荷低減方法及びプログラムは、（Ａ１）クライアント（１２１）が第１識別情報を持つ第１サーバ（２１０）に接続してサービスを要求するステップと、（Ａ２）マシン管理機器（１１０）が前記第１サーバ（２１０）からの接続用にサービスポートを開けるステップと、（Ａ３）前記第１サーバ（２１０）が前記マシン管理機器（１１０）のサービスポートに接続を試みるステップと、（Ａ４）前記サービスポートへの接続に失敗した場合は、第１サーバ（２１０）が前記クライアント（１２１）に対してサービスを提供し続けるステップと、（Ａ５）前記サービスポートへの接続に成功した場合は、前記第１サーバ（２１０）が前記クライアント（１２１）環境の仮想マシン（１３０）上で利用可能な資源を確認して、必要な資源を利用できるならば、前記クライアント（１２１）に対してサービスを提供しながら、同時に前記マシン管理機器（１１０）に対してサービスを提供するプログラムと必要な環境情報を送信するステップと、（Ａ６）前記マシン管理機器（１１０）が、前記第１サーバ（２１０）から受信したプログラムと環境情報を、サーバ動作用の仮想マシン（１３０）上に格納するステップと、（Ａ７）受信が完了したら、前記サーバ動作用の仮想マシン（１３０）に前記第１識別情報を与えて、第２サーバ（２２２）として動作を開始させるステップと、（Ａ８）前記第１サーバ（２１０）は前記マシン管理機器（１１０）を利用して、前記第２サーバ（２２２）との間で同期を取り、前記マシン管理機器（１１０）に対して、前記第２サーバ（２２２）への切替えを通知するステップと、（Ａ９）前記マシン管理機器（１１０）が、前記クライアント（１２１）から前記第１サーバ（２１０）への通信を、前記第２サーバ（２２２）へ転送するステップと、（Ａ１０）前記第２サーバ（２２２）から前記クライアント（１２１）以外への通信がある場合は、ネットワークアドレス変換により適当なアドレスへの変換を行うステップと、（Ａ１１）一定時間以上、前記クライアント（１２１）から前記第２サーバ（２２２）への通信がなくなった場合、前記マシン管理機器（１１０）が、前記第２サーバ（２２２）を停止して、前記第２サーバ（２２２）を動作させていた環境を解放するステップとを具備する。
【発明の効果】
【００２７】
利用するサーバをサーバマシン側からクライアントマシン側に移行するため、サーバマシンの負荷を低減させることができる。この移行は、クライアントに対してシームレスに行われるため、クライアントはサーバのサービスを継続して利用し続けることができる。例えば、暗号化を伴うサービスのように、負荷の高いサーバ処理を必要に応じてクライアント側で代行することで、サーバの負荷を低減することが可能となる。
【発明を実施するための最良の形態】
【００２８】
以下に本発明の第１実施形態について添付図面を参照して説明する。
図１を参照すると、本発明の負荷低減システムは、クライアントマシン１００と、サーバマシン２００と、ネットワーク３００を備えている。
【００２９】
クライアントマシン１００は、仮想マシン管理１１０と、仮想マシン１２０を有する。サーバマシン２００は、サーバ２１０を有する。ネットワーク３００は、クライアントマシン１００とサーバマシン２００とを接続する電気通信回線である。なお、ネットワーク３００は、有線、無線を問わない。
【００３０】
この時、クライアントマシン１００上では、仮想マシン管理１１０と仮想マシン１２０が動作している。仮想マシン管理１１０は、仮想マシンモニタ、ＶＭＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）、ハイパーバイザと呼ばれるものであったり、仮想マシンを実現するアプリケーションであっても良い。なお、仮想マシン管理１１０は、事前にクライアントマシン１００に搭載されているものとする。但し、実際には、クライアントマシン１００がサーバマシン２００にアクセスした際に、サーバマシン２００から仮想マシン管理１１０に相当するアプリケーションプログラムや環境設定情報を取得（ダウンロード）するようにしても良い。
【００３１】
仮想マシン管理１１０は、通信切換部１１１と、クライアント管理１１２を有する。通信切換部１１１は、クライアントとサーバの通信を中継する。クライアント管理１１２は、クライアント側（クライアントマシン１００）の管理を行う。
【００３２】
通信切換部１１１は、仮想マシン１２０からのパケットに対して、通常はネットワーク３００へのパススルー通信を行うが、条件によりクライアントマシン１００上の他の仮想マシンへの通信へと変更することができる。ここで、他の仮想マシンとは、クライアントマシン１００上で動作する、仮想マシン１２０以外の仮想マシンを示す。
【００３３】
クライアント管理１１２は、仮想マシン上で使用可能なＯＳ、ＣＰＵ、メモリ、ストレージ、ネットワーク等のリソース情報１１３を保持している。すなわち、クライアント管理１１２は、クライアントマシン１００のマシンリソースの内で、仮想マシン用に使用しても良いマシンリソースを管理している。
【００３４】
仮想マシン１２０は、クライアント１２１を有する。仮想マシン１２０は、クライアントＯＳの動作環境で、クライアントＯＳ自身、もしくはクライアントＯＳ上のアプリケーションとしてクライアント１２１が動作している。本実施例では、クライアント１２１は本発明による改造はされていない通常のクライアントである。但し、サーバ２１０を利用するために専用のクライアント（クライアント１２１）が必要な場合、サーバマシン２００からクライアント１２１に相当するアプリケーションプログラムや環境設定情報を取得（ダウンロード）するようにしても良い。
【００３５】
サーバマシン２００上ではサーバ２１０が動作している。このサーバ２１０は、サーバ側（サーバマシン２００）の管理を行うサーバ管理２２０を持つ。サーバ管理２２０の中には、クライアントマシン１１０上に必要に応じて作成される仮想マシン１３０上で動作するサーバ２２２を組み立てるサーバ組み立て２２１を含む。なお、サーバ２２２は、仮想マシン上で動作するサーバプログラムである。図２に示すように、サーバ組み立て２２１は、クライアント管理部１１２から得た利用可能なリソース情報とクライアントの権限に基づいて、サーバ２２２に搭載する機能（モジュール）と設定情報を決定し、サーバ２２２を組み立てる。リソース情報としては、ＯＳ，ＣＰＵ，メモリ，ネットワーク，ディスクが例として挙げられる。この時、サーバ組み立て２２１は、サーバ２２２に組み込まれる各機能のプログラム及び設定情報を格納するための記憶部（例：メモリ）と、リソース情報に基づきサーバ２２２に組み込む機能を決定する処理部（例：ＣＰＵ）を組み合わせたものと考えることができる。図２では、サーバ組み立て２２１は、機能１〜５のうち、機能１，３，５を選択し、これらと設定情報を含むサーバ２２２を組み立てている。機能１，３，５は、リソース情報から判断して、クライアント側で実行することが可能と考えられる機能である。
なお、サーバマシン２００側からクライアント１２１を提供する場合には、サーバ２２２と同様に、クライアント１２１も、利用可能なリソース情報とクライアントの権限に基づいて、サーバ組み立て２２１が組み立てるようにしても良い。
【００３６】
サーバ組み立て２２１が、複数からなるサーバ機能のうち、どの機能をサーバ２２２に組み込むかの判断は、以下のような条件に基づいて行う。
（１）クライアント管理から得た利用可能なリソース情報（ＯＳ，ＣＰＵ，メモリ、ネットワーク、ディスク他）
（２）クライアントの権限
（３）機能実行に必要なデータの在り処：機能実行に必要なデータをサーバマシンからクライアントマシンに移せない場合は、これらのデータを使用する機能をサーバ２２２に組み込まない。
（４）共有資源に対する処理：排他制御のため、単一のサーバから処理をする場合であって、既に他にサーバが起動している場合は、このサーバで使用されている機能をサーバ２２２に組み込まない。
【００３７】
なお、サーバ２２２に組み込まなかった機能の実行は、サーバマシン２００上のサーバ２１０で行う場合や、既に他のクライアントマシン１００で動作する他のサーバ２２２で行う場合が考えられる。
【００３８】
ネットワーク３００はＩＰネットワークで、通信３０１及び通信３０２はネットワーク３００上の通信を表す。
【００３９】
以下に、本発明の詳細を説明する。
図１では、クライアント１２１がサーバ２１０にサービスを要求するために通信３０１を開始する。サービスの要求を受けたサーバ２１０では、サーバ管理２２０が通信３０２により送信元（クライアント）のクライアント管理１１２に接続する。実際には、クライアント１２１がサービスを要求した時に限らず、サーバ２１０（サーバマシン２００）がクライアント１２１（クライアントマシン１００）の起動を検出した時、又はサーバ２１０の負荷が大きくなった時に、サーバ管理２２０がクライアント管理１１２に接続するようにしても良い。クライアント管理１１２は、接続時に適当な認証を行った後、仮想マシン環境で利用可能なリソース情報１１３を、サーバ管理２２０に送付する。なお、この間にクライアント１２１はサーバ２１０から継続してサービスを受けている。
【００４０】
図３を参照して、本発明の動作について説明する。
（１）ステップＳ１０１
サーバ管理２２０は、クライアント管理１１２から取得したリソース情報１１３に基づいて、サーバ２２２を動作させるためにクライアント側のマシンリソースが利用可能であるかどうか判断する。クライアント側のマシンリソースに余裕が無ければサーバ２２２を十分に動作させることができないためである。ここでは、クライアント側のマシンリソースに応じて、サーバ２２２に組み込む機能の数及び種類を決定する。この時、予めサーバ２２２に全ての機能を組み込むように設定しておき、クライアント側のマシンリソースに応じて、負荷の大きい機能や重要度の低い機能を除外するようにしても良い。
（２）ステップＳ１０２
クライアント側のマシンリソースが利用可能であると判断すると、サーバ組み立て２２１が、使用するリソースとクライアントの権限から、クライアント側の仮想マシンで起動するサーバ２２２を作成する。
（３）ステップＳ１０３
サーバ管理２２０が、サーバ２２２（使用するリソース情報を含む）をクライアント管理１１２に送付する。
【００４１】
次に、図４に示すように、クライアント管理１１２は、サーバ管理２２０から受け取ったサーバ２２２の環境を含めた動作環境である仮想マシン１３０を起動する。なお、この間にクライアント１２１はサーバ２１０から継続してサービスを受けている。
【００４２】
サーバ管理２２０はクライアント管理１１２との間で同期点を決める。そして、同期点で、クライアント管理１１２は、通信切換部１１１が保持する転送テーブル１１４に、サーバ２１０のＩＰアドレス、プロトコル、ポート番号と仮想マシン１３０を登録する。図５に、転送テーブル１１４の例を示す。
【００４３】
同期点は、サービスの内容により異なる。ステートレスのサービスの場合、設定情報でステートレスであることを通知されれば、同期点通知は不要で、クライアント管理１１２が任意のタイミングで設定する。例えば、準備完了ならばすぐに通知するようにする。ステートがある、すなわち、ステートフルのサービスの場合、基本的にはセッションの区切りをサーバ管理２２０が同期点通知で連絡し、クライアント管理１１２はそれを同期点とする。なお、ステートレスは、要求がそれぞれ閉じていることを示し、ステートフルは、要求に対する応答が内部の状態により異なる場合があることを示している。すなわち、ステートレスのサービスでは、要求が過去の情報に依存せず、要求毎に独立している。逆に、ステートフルのサービスでは、要求が過去の情報に依存することがある。
同期点では、設定情報に基づいた内容を、転送マシンに登録することにより、以降の通信の流れを切り換える。すなわち、通信の流れをサーバ２１０から、利用する可能マシン１３０のサーバ２２２に変更する。クライアントから見れば、同期点前は元のサーバを、同期点後は仮想マシン１３０のサーバ２２２を利用することになるが、この切換えをクライアント１２１が意識する必要は無く、透過的である。
【００４４】
ここでは、図６に示すように、サーバ２２２は、ＡＰ（アプリケーション）サーバとしての役割を果たしている。通常、クライアント１２１からの要求に対して、サーバ２１０の代わりに、サーバ２２２が情報を処理し、クライアントに応答する。この時、サーバ２２２は、クライアント１２１以外とは通信しない。なお、ここでは、クライアント１２１はＩＰアドレス（ＩＰ−Ａ）、サーバ２１０はＩＰアドレス（ＩＰ−Ｂ）を使用する。
【００４５】
上記のように、サーバ２２２の処理が、クライアント１２１とサーバ２２２間の通信のみで完結する場合、図７に示すように、転送テーブル１１４には、サーバ２１０のＩＰアドレス（ＩＰ−Ｂ）、プロトコル（Ｐｒ）、ポート番号（Ｐｏ）、仮想マシンの識別情報（ＶＭ１３０）を登録する。ＶＭ１３０は、サーバ２２２が動作している仮想マシン１３０の識別情報である。なお、仮想マシンの識別情報は、通信の際に、通信切換部１１１が仮想マシンを特定することができる情報であれば良い。サーバ２２２は、サーバ２１０と同じＩＰアドレス（ＩＰ−Ｂ）を使用する。サーバ２２２のＩＰアドレス（ＩＰ−Ｂ）は、この仮想化環境でのみ有効であり、外部との通信には用いられない。この場合、代替アドレスは無く、ＩＰアドレスの書換えは発生しない。
【００４６】
他の実施例として、図８に示すように、クライアント１２１からの要求に対して、サーバ２１０の代わりに、仮想マシン１３０上のサーバ２２２が、サーバ２１０と通信可能な外部のＤＢサーバ４００にアクセスして情報を処理し、クライアントに応答する場合について説明する。このＤＢサーバ４００は、サーバ２１０に接続されているものとする。サーバ２１０とＤＢサーバ４００は同一のサーバでも良い。なお、ここでは、クライアント１２１はＩＰアドレス（ＩＰ−Ａ）、サーバ２１０はＩＰアドレス（ＩＰ−Ｂ）、ＤＢサーバ４００はＩＰアドレス（ＩＰ−Ｃ）を使用する。
【００４７】
この場合、図９に示すように、転送テーブル１１４には、サーバ２１０のＩＰアドレス（ＩＰ−Ｂ）、プロトコル（Ｐｒ）、ポート番号（Ｐｏ）を登録する。サーバ２２２は、サーバ２１０とは異なるＩＰアドレス（ＩＰ−Ｄ）を使用する。このＩＰアドレス（ＩＰ−Ｄ）が代替ＩＰアドレスとなる。
転送テーブル１１４により、クライアント１２１のＩＰアドレス（ＩＰ−Ａ）からＩＰアドレス（ＩＰ−Ｂ）、プロトコル（Ｐｒ）、ポート番号（Ｐｏ）への通信は、ＩＰアドレス（ＩＰ−Ａ）からＩＰアドレス（ＩＰ−Ｄ）、プロトコル（Ｐｒ）、ポート番号（Ｐｏ）への通信に切り換えとなる。なお、切り換えの際、転送テーブル１１４に登録されているＩＰアドレスの書き換えを行う。逆に、ＩＰアドレス（ＩＰ−Ｄ）からＩＰアドレス（ＩＰ−Ａ）への通信は、ＩＰアドレス（ＩＰ−Ｂ）からＩＰアドレス（ＩＰ−Ａ）への通信に切り換えとなる。サーバ２２２がクライアント１２１ではなく外部（この例ではＤＢサーバ４００）と通信する場合、ＩＰアドレス（ＩＰ−Ｄ）のまま切り換えは行わない。
【００４８】
更に他の実施例として、図１０に示すように、サーバ２１０がＶＰＮ（ＩＰｓｅｃ）サーバの場合の例について説明する。なお、ＶＰＮ（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ）とは、通信事業者の保有する広域通信網を経由して構築される仮想私設通信網のことである。
仮想マシン１３０上のサーバ２２２が、サーバ２１０（ＶＰＮサーバ）の代わりに、パケットの暗号化と復号化を行う。サーバ２１０が有する別サーバ代替一覧２３０は、仮想マシン１３０により代替しているＶＰＮサーバ（サーバ２２２）の一覧である。パケットの送信元又は宛先がこの別サーバ代替一覧２３０に含まれる場合、サーバ２１０は、暗号化や復号化を行う必要が無い。サーバ２２２は、サーバ２１０の代わりに暗号化と復号化を行うが、そのために必要な鍵情報等を元のサーバ２１０（ＶＰＮサーバ）から受け取る必要がある。サーバ２１０（ＶＰＮサーバ）からのクライアント管理１１２への「リソース情報要求」は、送信元がクライアントであるときか、宛先がクライアントの最初のパケットを（一定時間内で）処理したときに行う。なお、ここでは、クライアント１２１はＩＰアドレス（ＩＰ−Ａ）、サーバ２１０はＩＰアドレス（ＩＰ−Ｂ）を使用する。
【００４９】
この時、図１１に示すように、転送テーブル１１４には、ＩＰアドレスとしてＶＰＮを利用するネットワークアドレス又はホストアドレスを登録する。この場合は、デフォルトであるため、「Ｄｅｆａｕｌｔ」とする。また、ローカルネットワークでは転送しないようにするために「（Ｌｏｃａｌ）」を登録する。サーバ２２２に該当するＶＰＮサーバは、サーバ２１０に該当するＶＰＮサーバとは異なるＩＰアドレス（ＩＰ−Ｃ）を使用するが、これは代替ＩＰアドレスとはならない。これは、クライアントの通信先がＶＰＮサーバではないためである。
【００５０】
更に他の実施例として、図１２に示すように、サーバ２１０がパケットインスペクション（ＰＩ）サーバの場合の例について説明する。なお、この場合のパケットインスペクションは、パケットのデータを読み取り、内容を判断して、通過、破棄、記録、管理者への通知等の処置を行う機能のことを示す。
仮想マシン１３０上のサーバ２２２が、ＰＩサーバ（サーバ２１０）の代わりに、クライアント１２１へのパケットのインスペクションを実行する。サーバ２１０が有する別サーバ代替一覧２３０は、仮想マシン１３０によりインスペクションを代替するＰＩサーバ（サーバ２２２）を持つクライアント１２１の一覧である。宛先がこの別サーバ代替一覧２３０に含まれる場合、サーバ２１０ではインスペクションを行わない。クライアント１２１へのパケットは、通信切換部１１１によりクライアント１２１に渡す前に、ＰＩサーバ（サーバ２２２）に渡され、インスペクションが実行される。
サーバ２１０（ＰＩサーバ）からのクライアント管理１１２への「リソース情報要求」は、送信元がクライアントである時か、宛先がクライアントの最初のパケットを（一定時間内で）処理した時に行う。
【００５１】
この場合は、宛先がクライアントのＩＰアドレス（ＩＰ−Ａ）の通信であり、図１３に示すように、転送テーブル１１４には、そのＩＰアドレス（ＩＰ−Ａ）を登録する。サーバ２２２は、ここではパケットの検査を行うもので、サーバ２２２自身はＩＰアドレスを必要としない。但し、管理情報をやり取りするためにはＩＰアドレスを必要とする。通信の送信元は、ファイアウォール等にあるＰＩサーバ（サーバ２１０）ではないため、代替ＩＰアドレスは必要としない。
【００５２】
図１４及び図１５を参照して、転送テーブル１１４登録後の通信について説明する。
通信切換部１１１はクライアント１２１からのサーバ２１０への通信を、サーバ２１０の代わりにサーバ２２２に転送する。図１４は、サーバ２２２はクライアント１２１とのみ通信を行う場合で、サーバ２２２はサーバ２１０と同じアドレスを持つ。これに対して、図１５は、サーバ２２２がクライアント１２１以外とも通信を行う場合で、これにはサーバ２１０との通信３０４やそれ以外の通信３０５がある。図１５の場合には、仮想マシン１３０環境のＩＰアドレスは仮想マシン１２０環境のものとは別に設定して、図５の通信切換部１１１の転送テーブル１１４には、仮想マシン１３０環境のＩＰアドレスを代替ＩＰアドレスとして登録する。なお、代替ＩＰアドレスは、ネットワーク３００に対して、サーバマシン２００（サーバ２１０）と、仮想マシン１３０（サーバ２２２）とを区別するために使用する。
【００５３】
図１６は、通信切換部１１１が転送テーブル１１４を使用して、図１４と図１５での仮想マシン１２０（クライアント１２１）からの通信を処理するフローチャートを示している。
（１）ステップＳ２０１
仮想マシン１２０（クライアント１２１）からのパケットの送信で、その宛先ＩＰアドレスが転送テーブル１１４に登録されているかどうか確認する。すなわち、仮想マシン１２０（クライアント１２１）の送信先のＩＰアドレスが転送テーブル１１４に登録されているかどうか確認する。
（２）ステップＳ２０２
その宛先ＩＰアドレスが転送テーブル１１４に登録されていなければ、ネットワーク３００へ転送する。
（３）ステップＳ２０３
その宛先ＩＰアドレスが転送テーブル１１４に登録されているならば、その宛先ＩＰアドレスに対応する代替ＩＰアドレスが設定されているかどうか確認する。
（４）ステップＳ２０４
代替ＩＰアドレスが設定されているならば、宛先ＩＰアドレスを代替ＩＰアドレスに書き換える。
（５）ステップＳ２０５
仮想マシン１２０（クライアント１２１）からのパケットを、仮想マシン１３０（サーバ２２２）に転送する。
【００５４】
図１７は、通信切換部１１１が転送テーブル１１４を使用して、図１４と図１５での仮想マシン１３０（サーバ２２２）からの通信を処理するフローチャートを示している。
（１）ステップＳ３０１
仮想マシン１３０（サーバ２２２）からのパケットの送信が、仮想マシン１２０（クライアント１２１）への送信かどうか確認する。
（２）ステップＳ３０２
仮想マシン１２０（クライアント１２１）への送信であれば、代替ＩＰアドレスが使用されているかどうか確認する。
（３）ステップＳ３０３
代替ＩＰアドレスが使用されているならば、送信元ＩＰアドレスを、プロトコル（Ｐｒ）、ポート番号（Ｐｏ）、仮想マシンの情報が一致するところにある元のＩＰアドレスに書き換える。
（４）ステップＳ３０４
仮想マシン１３０（サーバ２２２）からのパケットを仮想マシン１２０（クライアント１２１）に転送する。
（５）ステップＳ３０５
仮想マシン１３０（サーバ２２２）からの送信が、仮想マシン１２０（クライアント１２１）以外への送信であれば、代替ＩＰアドレスを使用しているかどうか確認する。
（６）ステップＳ３０６
代替ＩＰアドレスを使用していれば、仮想マシン１３０（サーバ２２２）からのパケットをネットワーク３００へ転送する。
（７）ステップＳ３０７
代替ＩＰアドレスを使用していなければ、仮想マシン１３０（サーバ２２２）からのパケットを廃棄する。
【００５５】
以下に本発明の第２実施形態について説明する。
第２実施形態は、ユーザが能動的にサーバ２２２をクライアントマシン１００側にダウンロードして動作させるものである。
【００５６】
図１８では、ユーザはクライアント環境の仮想マシン１２０から、クライアント管理１１２に対して、直接サーバプログラムをダウンロードすることを要求する。ダウンロードを要求する手段として、ユーザによる所定の機器に対する所定の操作、クライアントマシン１００に設けられた所定のボタンの押下、或いは、クライアントマシン１００に表示されたＷｅｂページやアプリケーション画面に対する操作が考えられる。例えば、サーバマシン２００の負荷が大きくなったと感じたユーザが、上記のいずれかの操作により、クライアント管理１１２に対して、サーバプログラムのダウンロードを指示すると、クライアント管理１１２がサーバ管理２２０にクライアントマシン１００のリソース情報を提供し、サーバマシン２００が、そのリソース情報に応じたサーバプログラムをクライアント２００側に提供するようにする。この場合、第１実施形態とは逆に、クライアント管理１１２からサーバ管理２２０に接続することで通信３０２が開始される。以降、同様の手順でサーバ２２２はクライアントマシン側に転送される。
【００５７】
図１９では、クライアントマシン１００がネットワークから切り離されたオフライン状態を示している。このように、第２実施形態では、オフライン状態でもクライアントはサーバを利用することもできる。
【００５８】
その他の工夫としては、図２０に示すように、クライアント管理１１２がディスク上にプログラムキャッシュ１１５を持ち、プログラムキャッシュ１１５にサーバ２２２のプログラムを一定期間保存することで、サーバ２２２のダウンロードを不要とすることがある。
【００５９】
更に、本発明の第３実施形態として、図１４や図１５において、クライアント側の負荷が基準値を超えた等の理由により、クライアント管理１１２が仮想マシン１３０を停止させ、クライアント１２１に再び元のサーバ２１０を利用させるようにするというものがある。これは、通信切換部１１１上の転送テーブル１１４における、仮想マシン１３０に対するエントリー（仮想マシン１３０の登録情報）を削除することで行われる。
【００６０】
更に、本発明の第４実施形態として、図１４や図１５において、サーバ２２２起動中にリソースが不足した場合、クライアント管理１１２が、クライアント１２１にサーバ２２２の利用を一時的に中止させて、サーバ２１０を利用させるようにするというものがある。そして、リソース回復後、サーバ２２２の利用を再開する。なお、リソースが不足した場合に限らず、クライアントマシン１００の処理能力が低下した場合にサーバ２２２の利用を停止してサーバ２１０の利用に切り換えるようにしても良い。
或いは、サーバ２２２を停止させずに、クライアント１２１にサーバ２１０とサーバ２２２を並行利用させることで、分散処理をすることも可能である。サーバ２１０及びサーバ２２２への処理の振り分けは、例えば、各々のサーバの負荷状況や、各々のサーバのマシンリソースに応じて決定する。
【００６１】
図２１を参照して、本発明の全体の動作について以下に示す。
（１）ステップＳ４０１
クライアント１２１は、サーバ２１０にサービスを要求する。但し、実際には、サービスを要求した場合に限らず、クライアント１２１がサーバ２１０にアクセスしていれば良い。
（２）ステップＳ４０２
サーバ２１０上のサーバ管理２２０は、クライアント１２１からサービスの要求があった場合、クライアント１２１内の仮想マシン管理１１０にリソース情報を要求する。なお、仮想マシン管理１１０は、クライアント１２１と外部で接続されていても良い。例えば、仮想マシン管理１１０が、クライアント１２１とサーバ２１０との間の中継装置である場合が考えられる。
（３）ステップＳ４０３
仮想マシン管理１１０は、サーバ２１０上のサーバ管理２２０に、クライアント１２１側で利用可能なマシンリソースを示すリソース情報を提供する。この時、仮想マシン管理１１０では、利用可能なリソース情報が設定されている。
（４）ステップＳ４０４
サーバ２１０上のサーバ管理２２０に含まれるサーバ組み立て２２１は、仮想マシン管理１１０から提供されたリソース情報により、サーバ２２２を組み立てるかどうかを判断する。リソースが十分であれば、リソース情報に基づいて、仮想マシン管理１１０で利用可能なサーバ２２２を組み立てる。リソースが不足していれば、サーバ２２２を組み立てずに処理を終了する。なお、サーバ組み立て２２１は、サーバ管理２２０から独立していても良い。
（５）ステップＳ４０５
サーバ２１０は、仮想マシン管理１１０にサーバ２２２を提供する。この時、サーバ２１０上のサーバ管理２２０は、サーバ２２２の設定情報も合わせて仮想マシン管理１１０に提供する。
（６）ステップＳ４０６
仮想マシン管理１１０は、クライアント１２１上の仮想マシン１３０で、サーバ２２２を起動する。
（７）ステップＳ４０７
仮想マシン管理１１０は、サーバ２１０のサーバ管理２２０に、サーバ２２２の起動が完了したことを通知する。
（８）ステップＳ４０８
サーバ２１０のサーバ管理２２０は、仮想マシン管理１１０に、サーバ管理２２０と仮想マシン管理１１０との間の同期点において通信切換えを行うための情報を通知する。
（９）ステップＳ４０９
仮想マシン管理１１０は、同期点において通信切換えを行うための情報を転送テーブルに登録する。
（１０）ステップＳ４１０
クライアント１２１は、サーバ２２２にサービスを要求する。すなわち、クライアント１２１は、サーバ２２２へアクセスする。
【００６２】
図２２を参照して、一定時間サーバの利用がない場合の動作について以下に示す。
（１）ステップＳ５０１
クライアント１２１が、サーバ２２２の提供するサービスを一定時間利用していない場合、すなわち、クライアント１２１とサーバ２２２の間の通信が一定時間行われていない場合、又は、クライアント１２１のリソース不足でサーバ２２２に不具合が発生した場合、クライアント１２１の通信を監視する仮想マシン管理１１０が、この状態を検出する。
（２）ステップＳ５０２
仮想マシン管理１１０は、一定時間サーバ２２２の利用なし、或いはクライアント１２１のリソース不足を検出した時、サーバ２２２の停止を決定する。
（３）ステップＳ５０３
仮想マシン管理１１０は、サーバ２１０上のサーバ管理２２０に、サーバ２２２の終了を通知する。なお、サーバ２２２を停止する前に、サーバ２１０とサーバ２２２を同期させる必要があれば、この時に同期させる。
（４）ステップＳ５０４
仮想マシン管理１１０は、同期点において通信切換えを行うための情報を転送テーブルから削除する。
（５）ステップＳ５０５
仮想マシン管理１１０は、サーバ２２２を停止する。
【００６３】
以下に本発明の第５実施形態について説明する。
本実施形態では、サーバ２２２の組み立て例について説明する。
例えば、図２３に示すように、サーバ機能を実現するために機能１乃至３が必要な場合、機能１乃至３に加えて、これらの遠隔呼出部である機能１Ａ乃至３Ａが用意されている。ここでは、サーバ組み立て２２１は、サーバ２２２に、機能１，３を組み込むと共に、他のマシンで実行される機能２を呼び出す遠隔呼出部である機能２Ａを組み込む。また、これらの機能の呼び出し順序やＩＦを記録する機能呼出部２２３も組み込む。なお、呼び出し順序やＩＦについては、設定情報２２４に格納されていても良い。
【００６４】
ここでは、機能呼出部２２３は、機能１呼出部２２３１と、機能２呼出部２２３２と、機能３呼出部２２３３を備える。機能１呼出部２２３１は、サーバ２２２に組み込まれた機能１又は機能１Ａを実行する。機能２呼出部２２３２は、サーバ２２２に組み込まれた機能２又は機能２Ａを実行する。機能３呼出部２２３３は、サーバ２２２に組み込まれた機能３又は機能３Ａを実行する。
【００６５】
サーバ組み立て２２１により組み立てられたサーバ２２２は、仮想マシン１３０上で実行する。機能呼出部２２３は、機能１から機能３を順次呼び出す。図２４に示すように、機能呼出部２２３２で呼び出された機能２Ａは、サーバマシン２００上で動作するサーバ２１０に対して、機能２の実行を依頼する。サーバ２１０は、この実行結果を機能２Ａに通知すると、機能２Ａは更にその結果を機能２呼出部２２３２に返却する。
【００６６】
図２５に、図２３と異なる他の組み立て例を示す。
図２５では、サーバ機能を実現するために機能１乃至３が必要な場合、図２３と異なり、機能１Ａ乃至３Ａが部品として存在せず、その代わりに、機能呼出部２２３を生成する際に、機能呼出部２２３の中に、組み込んだ機能については局所呼出部を、組み込まなかった機能については遠隔呼出部を、それぞれ作成する。ここでは、機能１呼出部２２３１と機能３呼出部２２３３が、それぞれ機能１局所呼出部２２３１ａと機能３局所呼出部２２３３ａとなり、機能２呼出部２２３２が、機能２遠隔呼出部２２３２ａとなる。なお、動作の詳細は図２３の場合と同様である。
【００６７】
図２６を参照して、ＶＰＮ（ＩＰＳｅｃ）サーバの組み立て例について説明する。
ＶＰＮの方式として以下の３通りが考えられる。
（ａ）トンネリングのみ
（ｂ）トンネリング＋暗号化
（ｃ）データのみ暗号化
【００６８】
図２６に示すように、ＶＰＮ（ＩＰＳｅｃ）サーバの機能一覧には、暗号化２２２１と、復号化２２２２と、カプセリング２２２３と、デカプセリング２２２４と、設定情報交換部２２２５が含まれる。暗号化２２２１は、データを暗号化する機能である。復号化２２２２は、暗号化されたデータを復号化する機能である。カプセリング２２２３は、パケットをカプセル化する機能である。デカプセリング２２２４は、カプセル化されたデータから元のデータを復元する機能である。設定情報交換部２２２５は、暗号化及び復号化に用いられる鍵に関する鍵情報をサーバ間で交換する機能である。
【００６９】
（ａ）の場合、サーバ２２２は、カプセリング２２２３と、デカプセリング２２２４と、設定情報２２４を備える。（ｂ）の場合、サーバ２２２は、暗号化２２２１と、復号化２２２２と、カプセリング２２２３と、デカプセリング２２２４と、設定情報交換部２２２５と、設定情報２２４を備える。ここでは、暗号化２２２１とカプセリング２２２３がグループ化又は一体化しており、復号化２２２２とデカプセリング２２２４がグループ化又は一体化している。また、設定情報２２４は、鍵情報を含んでいる。（ｃ）の場合、サーバ２２２は、暗号化２２２１と、復号化２２２２と、設定情報交換部２２２５と、設定情報２２４を備える。また、設定情報２２４は、鍵情報を含んでいる。
【００７０】
また、図２７を参照して、パケットインスペクションサーバ（ＰＩサーバ）の組み立て例について説明する。
パケットインスペクションサーバの機能一覧には、パケットフィルター２２２６と、ステートフルパケットインスペクション２２２７と、アプリケーションフィルター２２２８と、ポリシー制御部２２２９が含まれる。パケットフィルター２２２６は、パケットの一部（例えばヘッダ）を見て、そのパケットの通過を許可するか拒否するかを決定する機能である。ステートフルパケットインスペクション２２２７は、通過しようとするパケットのデータを読み取り、内容を判断して動的にポートを開放又は閉鎖する機能である。アプリケーションフィルター２２２８は、アプリケーション毎に通信を許可するか遮断するかを設定する機能である。ポリシー制御部２２２９は、ネットワークシステムの運用方針（ポリシー）を管理制御する機能である。
サーバ組み立て２２１は、これらの機能のうち、少なくとも一つの機能を選択してサーバ２２２を組み立てる。ここでは、サーバ２２２は、ステートフルパケットインスペクション２２２７と、ポリシー制御部２２２９と、設定情報２２４を備える。
【００７１】
また、図２８を参照して、アプリケーションサーバ（ＡＰサーバ）の組み立て例について説明する。
ＡＰサーバの機能一覧には、機能呼出部２２３が含まれる。機能呼出部２２３は、ＡＰ処理１呼出部２２３４と、ＤＢサーバコール呼出部２２３５と、ＡＰ処理２呼出部２２３６を備える。ＡＰ処理１呼出部２２３４は、ＡＰ処理１又はＡＰ処理１Ａを呼び出し実行する。ＡＰ処理１は図２３の機能１に該当する。ＤＢサーバコール呼出部２２３５は、ＤＢ（データベース）サーバコールを呼び出し実行する。ＤＢサーバコールは、ＤＢサーバにアクセスするための機能である。また、ＤＢサーバコールは図２３の機能２に該当する。
ＡＰ処理２呼出部２２３６は、ＡＰ処理２又はＡＰ処理２Ａを呼び出し実行する。ＡＰ処理２は図２３の機能２に該当する。
ここでは、サーバ２１０において、サーバ組み立て２２１が、ＡＰサーバの機能一覧から必要な機能を選択してサーバ２２２をＡＰサーバとして作成する。ＡＰサーバの処理フローは、ＡＰ処理１→ＤＢサーバコール→ＡＰ処理２である。サーバの組み立て処理では、これらの処理が順次呼び出されるように、機能呼出部２２３でこれらの処理の呼び出し順序を規定する。また、各々の処理につき、局所的に処理をするか、遠隔呼出によって処理をするかを選択し、機能部品を組み立てる。局所的に処理する場合はサーバ２２２に組み込んだ機能を実行する。遠隔呼出によって処理する場合は他のサーバ上にある機能を呼び出して実行する。
【００７２】
図２９に示すように、ＡＰ処理１は局所的に実行し、ＡＰ処理２は遠隔で他のＡＰサーバマシンで実行するようにサーバを組み立てる場合、サーバ２２２には、機能呼出部２２３と、ＡＰ処理１と、ＤＢサーバコールと、ＡＰ処理２Ａを組み込む。
【００７３】
ここでは、ＡＰ処理１はローカルに実行し、ＡＰ処理２Ａは遠隔呼出するよう組み立てる。局所的に実行するか、遠隔実行するかの選択は、その機能部品を実行するための計算機資源要件（メモリサイズ等）をクライアントマシン１００が満たすか、又は、クライアントマシン１００側での負荷状況に応じて決定する。
例えば、ＡＰ処理１を実行するためには１２８ＭＢのメモリサイズが必要、ＡＰ処理２を実行するためには５１２ＭＢのメモリサイズが必要という情報が事前に与えられているとする。なお、これらの情報はＡＰサーバ機能一覧に付属する情報として記憶する。
サーバ組み立て処理では、クライアント側からクライアントマシン１００の計算機情報を入手し、これらのメモリ諸元情報と比較する。クライアントマシン１００の利用可能なメモリが２５６ＭＢである場合、ＡＰ処理１はクライアントマシン１００上で実行できるが、ＡＰ処理２はクライアントマシン１００上では実行できない。従って、ＡＰ処理１は局所的に実行、ＡＰ処理２Ａは遠隔処理を実行するよう、サーバ２２２を組み立てる。
【００７４】
上記の例では、ＡＰ処理１及びＡＰ処理２の実行について、局所的に実行するか、遠隔呼び出しで実行するかの判断基準を、その機能部品が必要とする計算機の諸元（メモリ等）におく例を述べた。それ以外には、その機能部品を実行するために必要な環境（ＯＳ、データ等）の所在と、その環境をクライアントに移して実行するのが良いのか、或いはその環境があるサーバ上で実行するのが良いのかをトレードオフで判断する例がある。
例えば、ＡＰ処理２を実行するために必要なデータがサーバＡ上にあり、そこからデータを取り寄せてクライアントで実行するのが良いのか、或いはクライアントからサーバＡに処理を依頼し、その結果のみを受領するのが良いのか、という判断である。
【００７５】
最後に、本発明の概要について以下に詳述する。
本発明の物理構成は、クライアント／サーバ構成である。クライアントマシンは仮想マシンを構成し、仮想マシンを管理するための仮想マシン管理とクライアントが動作するクライアントの仮想マシンと、サーバプログラムを動作させるために必要に応じて起動される仮想マシンとで構成される。
【００７６】
仮想マシン管理は、仮想マシン内の通信を管理する通信切換部と、通信切換部の転送テーブル、本発明のクライアント側の管理主体であるクライアント管理プログラム、クライアント管理プログラムが持つ仮想マシンのリソース情報を有する。
【００７７】
サーバマシンは、サーバプログラムと、本発明のサーバ側の管理主体であるサーバ管理プログラムと、クライアント側に送付するサーバを管理するサーバ管理プログラムのサーバ組み立て部を有する。
【００７８】
クライアントＰＣは、マシン管理機器の管理下で動作して、ネットワークに接続されている。前述の仮想マシン管理も、マシン管理機器の一つである。なお、クライアントが、ＰＣのＶＭ（仮想マシン）上で動作する場合、マシン管理機器は、この仮想マシンを監視する仮想マシンモニタでも良い。
このマシン管理機器は、条件に応じて、このクライアント専用の第２サーバを稼働させることができる。そして、外部にはあるサービスを提供する第１サーバが稼働している。なお、第２サーバが、ＰＣのＶＭ（仮想マシン）上で動作する場合、マシン管理機器は、この第２サーバを動作させるためのＶＭ（仮想マシン）を稼働させる。
【００７９】
本発明の動作の概要について説明する。
（１）クライアントＰＣは第１サーバ（ＩＰアドレスＡ）に接続して、サービスを要求する。クライアントＰＣと第１サーバが相互に必要な認証を行った後、マシン管理機器は第１サーバからの接続用にサービスポートを開ける。
（２）第１サーバはマシン管理機器のサービスポートに接続を試みる。サービスポートへの接続に失敗した場合は、以降、そのままクライアントに対してサービスを提供し続ける。
（３）サービスポートへの接続に成功した場合、クライアント環境のＶＭ（仮想マシン）上で利用可能な資源を確認して、必要な資源を利用できるならば、第１サーバは、クライアントに対してサービスを提供しながら、同時にマシン管理機器に対してサービスを提供するプログラムと必要な環境情報を送信する。
（４）マシン管理機器は第１サーバから受信したプログラムと環境情報を、サーバ動作用のＶＭ（仮想マシン）上に格納する。そして、受信が完了したら、サーバ動作用のＶＭ（仮想マシン）にＩＰアドレスＡ又はＩＰアドレスＢを与えて、第２サーバとして動作を開始させる。この時、第２サーバはまだ、実際のネットワークとは接続していない。
（５）第１サーバはマシン管理機器を利用して、第２サーバとの間で同期を取り、それからマシン管理機器に対して、第２サーバへの切替えを通知する。
（６）以降、マシン管理機器は、クライアントからＩＰアドレスＡの第１サーバへの通信を、第２サーバへフォワードする。これはクライアントに対してはシームレスに行われる。なお、第２サーバからクライアント以外への通信がある場合は、この時点で、ネットワークアドレス変換により第２サーバのＩＰアドレスＢへの変換を行う。
（７）一定時間以上、クライアントから第２サーバへの通信がなくなった場合、マシン管理機器は第２サーバを停止して、第２サーバを動作させていた環境を解放する。
【００８０】
その他の実施例として、クライアントの代わりに、クライアント側ＬＡＮでアプリケーションゲートウェアを動作させ、その上で同じようにＶＭ（仮想マシン）を利用したサーバ切替えを行う方法も考えられる。
【００８１】
なお、仮想マシン構成のクライアント側では、通常のクライアントＯＳが動作する仮想マシンの他に、条件が適合すれば、このクライアント専用のサーバを動作させる仮想マシンを起動する。クライアントは始め、ネットワーク経由でサーバを利用するが、途中から、クライアント側の仮想マシン上で起動した、このクライアント専用のサーバの利用へとシームレスに移行する。
【００８２】
また、仮想マシンは、仮想マシンを動作させるためのソフトウェア（プログラム）と、このソフトウェア（プログラム）を読み出して実行する処理装置とにより成り立っていることが多い。従って、ここで言う「仮想マシン」は、このソフトウェア（プログラム）と処理装置との総称としてとらえることが可能である。
【００８３】
更に、本発明は、仮想マシンを物理マシンに置き換えても実施可能である。例えば、図１の仮想マシン１２０，仮想マシン１３０を処理装置や機能ブロックとしても良い。クライアントマシン１００がＬＡＮを始めとするネットワークシステムであれば、仮想マシン１２０及び仮想マシン１３０はシステム内に設置された端末装置とすることも考えられる。
すなわち、クライアント１２１とサーバ２２２は、個別の端末において実行するようにしても良い。この場合、仮想マシン管理１１０は、端末装置の通信を監視する監視装置又は中継装置である。
【００８４】
本発明の説明において、クライアント及びサーバの識別情報（宛先情報）としてＩＰアドレスを使用しているが、実際には、ＩＰアドレスに限定されない。ＩＰアドレスの代わりに、クライアント及びサーバを一意に特定できる他の情報を使用しても良い。例えば、クライアント及びサーバが所属するネットワークのドメイン内におけるＩＤ又は識別名を使用することも考えられる。
【００８５】
以上のように、本発明では、クライアント側をＶＭ（仮想マシン）構成として、必要に応じて、これまでのクライアントの他に、このクライアント専用のサーバをＶＭ上で動作させることを特徴とする。クライアントとＶＭ上のサーバは、仮想マシン管理が提供するＶＭ間の仮想ネットワークにより通信するが、クライアントは元のサーバと同じ宛先アドレスを使用したまま、シームレスにＶＭ上のサーバを利用する。また、この際、ＶＭ上のサーバはクライアント環境からは切り離されている（別ＶＭで動作する）ため、クライアント側でサーバプログラムを動作させても、セキュリティ低下のリスクは回避することができる。
【図面の簡単な説明】
【００８６】
【図１】図１は、本発明の構成を示すブロック図である。
【図２】図２は、サーバ部品の組み立てを示す図である。
【図３】図３は、本発明の動作を示すフローチャートである。
【図４】図４は、サーバの環境を含めた動作環境である仮想マシンを起動した場合の概要図である。
【図５】図５は、転送テーブルの例を示す図である。
【図６】図６は、一般的なアプリケーション（ＡＰ）サーバの場合１の例を示す概要図である。
【図７】図７は、ＡＰサーバの場合１の転送テーブルの例を示す図である。
【図８】図８は、一般的なアプリケーション（ＡＰ）サーバの場合２の例を示す概要図である。
【図９】図９は、ＡＰサーバの場合２の転送テーブルの例を示す図である。
【図１０】図１０は、ＶＰＮ（ＩＰＳｅｃ）サーバの場合の例を示す概要図である。
【図１１】図１１は、ＶＰＮ（ＩＰＳｅｃ）サーバの場合の転送テーブルの例を示す図である。
【図１２】図１２は、パケットインスペクション（ＰＩ）サーバの場合の例を示す概要図である。
【図１３】図１３は、ＰＩサーバの場合の転送テーブルの例を示す図である。
【図１４】図１４は、転送テーブル登録後の通信を示す第１の図である。
【図１５】図１５は、転送テーブル登録後の通信を示す第２の図である。
【図１６】図１６は、通信切換部が転送テーブルを使用して、仮想マシン（クライアント）からの通信を処理するフローチャートである。
【図１７】図１７は、通信切換部が転送テーブルを使用して、仮想マシン（サーバ）からの通信を処理するフローチャートである。
【図１８】図１８は、ユーザがクライアント環境の仮想マシンから、クライアント管理に対して直接サーバプログラムをダウンロードすることを要求する場合の概要図である。
【図１９】図１９は、クライアントマシンがネットワークから切り離されたオフライン状態を示す図である。
【図２０】図２０は、クライアント管理がディスク上にプログラムキャッシュを持つ場合を示す図である。
【図２１】図２１は、本発明の全体の動作を示すシーケンス図である。
【図２２】図２２は、仮想マシンのサーバを停止する動作を示すシーケンス図である。
【図２３】図２３は、サーバ部品の組み立てを示す図である。
【図２４】図２４は、遠隔呼出の場合の例を示す概要図である。
【図２５】図２５は、サーバ部品の組み立てを示す図である。
【図２６】図２６は、ＶＰＮ（ＩＰＳｅｃ）サーバの場合のサーバ部品の組み立てを示す図である。
【図２７】図２７は、インスペクションサーバの場合のサーバ部品の組み立てを示す図である。
【図２８】図２８は、アプリケーションサーバ（ＡＰサーバ）の場合の例を示す概要図である。
【図２９】図２９は、サーバ部品の組み立てを示す図である。
【符号の説明】
【００８７】
１００…  クライアントマシン
１１０…  仮想マシン管理
１１１…  通信切換部
１１２…  クライアント管理
１１３…  リソース情報
１１４…  転送テーブル
１１５…  プログラムキャッシュ
１２０…  仮想マシン（クライアント用）
１２１…  クライアント
１３０…  仮想マシン（サーバ用）
２００…  サーバマシン
２１０…  サーバ
２２０…  サーバ管理
２２１…  サーバ組み立て
２２２…  サーバ（プログラム）
２２３…  機能呼出部
２２３１…  機能１呼出部（局所呼出部）
２２３２…  機能２呼出部（遠隔呼出部）
２２３３…  機能３呼出部（局所呼出部）
２２４…  設定情報
２３０…  別サーバ代替一覧
３００…  ネットワーク
３０１〜３０５…  通信
４００…  ＤＢサーバ
【図１】
2008083897.tif 000003
【図２】
2008083897.tif 000004
【図３】
2008083897.tif 000005
【図４】
2008083897.tif 000006
【図５】
2008083897.tif 000007
【図６】
2008083897.tif 000008
【図７】
2008083897.tif 000009
【図８】
2008083897.tif 000010
【図９】
2008083897.tif 000011
【図１０】
2008083897.tif 000012
【図１１】
2008083897.tif 000013
【図１２】
2008083897.tif 000014
【図１３】
2008083897.tif 000015
【図１４】
2008083897.tif 000016
【図１５】
2008083897.tif 000017
【図１６】
2008083897.tif 000018
【図１７】
2008083897.tif 000019
【図１８】
2008083897.tif 000020
【図１９】
2008083897.tif 000021
【図２０】
2008083897.tif 000022
【図２１】
2008083897.tif 000023
【図２２】
2008083897.tif 000024
【図２３】
2008083897.tif 000025
【図２４】
2008083897.tif 000026
【図２５】
2008083897.tif 000027
【図２６】
2008083897.tif 000028
【図２７】
2008083897.tif 000029
【図２８】
2008083897.tif 000030
【図２９】
2008083897.tif 000031