(57)【要約】【課題】ソフトウェアの実行中に、動的にソフトウェアを更新するシステム、方法、およびコンピュータ読み取り可能記憶媒体を提供する。【解決手段】１本のソフトウェアまたはデータ構造を更新するためにクライアントの要求の処理が停止される時間が延びるのを回避するため、本発明の様々な実施形態が、元の１本のソフトウェアまたはデータ構造を更新する代わりに、その１本のソフトウェアのインスタンスまたはそのデータ構造のインスタンスを更新する。これにより、元の１本のソフトウェアまたはデータ構造は、中断することなくクライアントの要求を処理できる。元の１本のソフトウェアまたはデータ構造は以降の動作を終了し、一方、更新されたインスタンスは、コンテキストを失わずにクライアントの要求を処理し始める。【選択図】図２
2006107500.tif 000002
【特許請求の範囲】
【請求項１】
クライアントの要求を処理するためのサーバとして働くコンピュータシステムであって、
クライアントの要求を処理するために前記コンピュータシステム上で実行され、前記クライアントによって提供されるコンテキストを受け取ることが可能である１本のソフトウェアと、
前記１本のソフトウェアの新しいリリースで更新された、前記１本のソフトウェアのインスタンスと
を含み、前記１本のソフトウェアの前記インスタンスは、テストを実行できるように、前記コンピュータシステム上で前記１本のソフトウェアと同時に実行され、その後、前記１本のソフトウェアの前記インスタンスは実行され、前記１本のソフトウェアは、前記クライアントによって提供された前記コンテキストを失わずに終了することを特徴とするコンピュータシステム。
【請求項２】
前記１本のソフトウェアは、第１のゲストオペレーティングシステム上で稼動しており、前記１本のソフトウェアの前記インスタンスは、第２のゲストオペレーティングシステム上で稼動していることを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記第１のゲストオペレーティングシステムは、第１の仮想マシン上で稼動しており、前記第２のゲストオペレーティングシステムは、第２の仮想マシン上で稼動していることを特徴とする請求項２に記載のコンピュータシステム。
【請求項４】
前記第１のゲストオペレーティングシステム、および前記第２のゲストオペレーティングシステムは、ハードウェアのエミュレーションを提供する仮想サーバによって管理されることを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記仮想サーバは、ハードウェアと直接通信するホストオペレーティングシステムのサービスとして実行されることを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
コンピュータシステムにおいて実行され、あるサービスモードから別のサービスモードへの移行を制御するための複数本のソフトウェアであって、
クライアントの要求を処理するためのサービスであって、ハンドオフロックを取得し、サービスの状態をエクスポートすることができるようにする、複数のモードのうちの１つのモードを含むサービスと、
特定のモードに関連する割り当てられたコールバックルーチンを呼び出すことによって、前記サービスを前記特定のモードに入るようにするためのサービス制御マネージャと
を含み、ある特定のモードは、前記サービスが前記ハンドオフロックを取得し、前記サービスの状態をエクスポートできるようにする、カスタマイズ可能なモードを含むことを特徴とするソフトウェア。
【請求項７】
前記サービスの状態を受け取る、前記サービスのインスタンスをさらに含み、前記サービスに新しい機能を追加し、または前記サービス中のエラーを訂正するように、前記サービスの新しいリリースによって前記サービスの前記インスタンスが更新されることを特徴とする請求項６に記載の複数本のソフトウェア。
【請求項８】
前記モードは、前記サービスがクライアントからさらなる要求を受信するのを止める休止モードを含むことを特徴とする請求項７に記載の複数本のソフトウェア。
【請求項９】
前記モードは、前記サービス管理マネージャによって前記サービスが開始および停止される開始モードおよび停止モードを含むことを特徴とする請求項８に記載の複数本のソフトウェア。
【請求項１０】
前記モードは、前記サービス管理マネージャによって前記サービスがインストールおよびアンインストールされるインストールモードおよびアンインストールモードを含むことを特徴とする請求項９に記載の複数本のソフトウェア。
【請求項１１】
サービスの状態をエクスポートするためにコンピューティングシステムによって使用されるデータ構造が記憶されているコンピュータ読み取り可能記憶媒体であって、前記データ構造は、
クライアントにサービスを提供する際に前記サービスによって生成される内部コンテキストに関する情報を示すサービス内部コンテキストタグと、
サービスの実行を要求する際に前記クライアントによって提供される外部コンテキストに関する情報を示すクライアント外部コンテキストタグと
を含むことを特徴とするコンピュータ読み取り可能記憶媒体。
【請求項１２】
前記データ構造は、カスタマイズ可能なタグベースの言語から形成されることを特徴とする請求項１１に記載のコンピュータ読み取り可能記憶媒体。
【請求項１３】
コンピュータシステム上で実装される方法であって、
前記コンピュータシステム上で稼動する第１のゲストオペレーティングシステム上で稼動している第１のサービスへの更新を受け取ることであって、前記第１のサービスはクライアントの要求を実行すること、
前記第１のサービスの状態を含むファイルを生成するために、前記第１のサービスによって状態ハンドオフを実行することであって、前記コンピュータシステム上で稼動する第２のゲストオペレーティングシステム上で稼動している前記第１のサービスのインスタンスへ前記ファイルはエクスポートされること、および、
クライアントの要求を処理するために、前記受け取られた更新によって更新された、前記第１のサービスの前記インスタンスによって実行し、前記クライアントによって前記第１のサービスに提供された前記コンテキストを失わずに前記第１のサービスを終了すること
を含むことを特徴とする方法。
【請求項１４】
前記状態ハンドオフを実行する前記動作の前に、前記更新で前記第１のサービスの前記インスタンスをテストすることをさらに含むことを特徴とする請求項１３に記載の方法。
【請求項１５】
テストする前記動作の後で、前記状態ハンドオフを実行する前記動作の前に、前記第１のサービスがハンドオフモードに入るようにすることをさらに含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記第１のサービスが、クライアントからさらなる要求を受け取らないようにするために、前記第１のサービスを休止することをさらに含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記第１のサービスの状態を変更しないようにするために、ハンドオフロックを取得することをさらに含み、前記ハンドオフロックを取得する前記動作は、前記第１のサービスの状態を含む前記ファイルを生成する前記動作の前に行われることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記ファイルを生成する前記動作は、前記第１のサービスの内部コンテキストおよび外部コンテキストを含むタグを有する、カスタマイズ可能なタグベースのファイルを生成する動作を含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
クライアントの要求を前記第１のサービスの前記インスタンスにリダイレクトできるように、ネットワーク接続を再マッピングし、前記第１のサービスから前記第１のサービスの前記インスタンスへのポートをリスニングすることをさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記第１のサービスの前記インスタンスが、前記第１のサービスの状態のハンドオフが成功したことを示すとき、前記第１のサービスによって前記ハンドオフロックが解放されることを特徴とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ソフトウェアリリースに関し、より詳細には、ソフトウェアの実行中に、ソフトウェアに新しい機能を追加し、またはソフトウェア内のエラーを修正するために、動的にソフトウェアを更新することに関する。
【背景技術】
【０００２】
大きな企業では、企業が所有するコンピュータシステムのネットワークによってコンピューティング資源が相互接続されており、この資源が企業の様々なコンピューティングの要求を満たしている。このネットワークは、様々は地理的場所にまたがることができる。企業の内部ユーザ（従業員）ならびに外部クライアント（顧客）にとって、企業のコンピューティング資源は、可用性が高く、さらに安全性も高い必要がある。実際には、時々これら２つの要求は、互いに背反することがある。たとえば、コンピューティング資源を安全にするには、セキュリティパッチをインストールするためにそのコンピューティング資源をしばしば停止させる必要がある。一方、コンピューティング資源を継続的に容易に利用可能にしておくには、コンピューティング資源をめったに停止すべきではない。図１に、これらおよびその他の問題がより詳細に示してある。
【０００３】
企業ネットワーク１００はクライアント１０２を含んでおり、クライアント１０２は、ユーザがネットワーク１０４を介して相互接続された共用コンピューティング資源にアクセスするのに用いられるコンピュータである。企業ネットワーク１００のこれらのコンピューティング資源は、サーバＡ  １０６など１つまたは複数のサーバによって提供され、オンラインサービスがその上で稼動している。サーバＡ  １０６上で実行されるオンラインサービスをより安全にするために、企業はしばしば、方針として、管理者１１０が、報告または発見された脆弱性に対するセキュリティフィクス（security fix）を用いてオンラインサービスにパッチを当てるよう決めている。このようなパッチは、テストマシンの役目を果たすサーバＢ  １０８上で稼動しているオンラインサービス（更新対象サービス）のコピーに、パッチをインストールし適用することによって実施される。管理者１１０は、その導入（deployment）の際に更新済みサービスが問題を起こす可能性を低く抑えるために、その企業のコンピューティング方針に従って、更新済みサービスを検査し確認する。更新済みサービスがテストされるサーバＢ  １０８は、オンラインサービスがクライアント１０２にサービスを提供しているサーバＡ  １０６とは物理的に異なるマシンである。更新済みサービスがサーバＢ  １０８上でのテストに合格した後、管理者１１０は、サーバＡ  １０６を一定の時間、停止することによってパッチを導入（deploy）する。その間、オンラインサービスは、クライアント１０２には利用不能になる。次いで、そのパッチがオンラインサービスに適用され、その後、クライアント１０２にサービスを再び提供するためにサーバＡ  １０６が起動される。
【０００４】
パッチをインストールするためにサーバＡ  １０６を停止する際の問題は、サーバＡ  １０６を停止した時点でサービスコンテキスト（service context）が失われ、無効なままとなることである。サービスコンテキストとは、クライアント１０２が、サーバＡ  １０６上で稼動しているオンラインサービスに対して要求または何らかの情報を提供した状態のことである。クライアント１０２は、オンラインサービスがその要求を処理すること、または提供された情報に関して何らかの計算を行うことを期待している。オンラインサービスが停止されたとき、そのようなサービスコンテキストは破棄される。オンラインサービスにパッチを当ててサーバＡ  １０６が再び起動されたとき、サーバＡ  １０６は、クライアント１０２が前に何を提供していたかを思い出すことができる可能性は低い。というのは、多くのサービスは、サービスコンテキストを永続的に記憶せず、あるいはサーバＡ  １０６の再起動によって生じる遅延が長すぎてクライアント１０２には許容できないからである。たとえば、クライアント１０２は、サーバＡ  １０６が停止する直前に、検索照会をオンラインサービスに送信していたかもしれない。オンラインサービスがパッチを当てられて再びアクティブになったとき、オンラインサービスによって先の照会に対する応答が提供されず、その結果クライアント１０２は困惑することになる。別の解決策は、高価ではあるが、サーバ１０６をミラーするための追加の処理能力を付加することによってサーバに冗長性を組み込んだクラスタベースのサーバプラットフォーム上で、オンラインサービスを稼動することである。しかし、これにより、機器を調達するコストだけでなく、機器を運用するコストも増大する。
【０００５】
安全性の高いソフトウェアの、ユーザに対する可用性を高くしながら、安全性の高いソフトウェアに対する高まりつつある要求を満足させるという問題を解決することなくしては、企業ネットワーク１００によって望ましいコンピューティング経験がもたらされるということをユーザは信用しなくなり、そのために、市場において企業ネットワーク１００の縮小を求める要求が生じる恐れがある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
したがって、既存システムに関する上記その他の問題を回避し、または軽減しながら、ソフトウェアを動的に更新するためのシステム、方法、およびコンピュータ読み取り可能記憶媒体が求められている。
【課題を解決するための手段】
【０００７】
本発明によれば、ソフトウェアを動的に更新するためのシステム、方法、およびコンピュータ読み取り可能記憶媒体が提供される。本発明のシステムの形態は、クライアントの要求を処理するサーバとして働くコンピュータシステムを含んでいる。このコンピュータシステムは、コンピュータシステム上で実行される、クライアントの要求を処理する１本のソフトウェアを含んでおり、この１本のソフトウェアは、クライアントによって提供されるコンテキストを受け取ることができる。このコンピュータシステムはさらに、この１本のソフトウェアの新規リリースで更新された、この１本のソフトウェアのインスタンスを含んでいる。テストを実行できるようにするために、この１本のソフトウェアのインスタンスは、コンピュータシステム上でこの１本のソフトウェアと同時に実行され、その後、この１本のソフトウェアのインスタンスは実行され、この１本のソフトウェアはクライアントによって提供されたコンテキストを失わずに終了する。
【０００８】
本発明の他の諸態様によれば、本発明のもう１つのシステムの形態は、あるサービスモードから別のサービスモードへの移行を制御するための（コンピュータシステム内で実行される）複数本のソフトウェアを含んでいる。この複数本のソフトウェアは、クライアントの要求を処理するためのサービスを含む。このサービスは、サービスがハンドオフロック（handoff lock）を取得し、サービスの状態をエクスポートできるようにする複数のモードのうちの１つのモードを含む。この複数本のソフトウェアには、特定のモードに関連する割当コールバックルーチンを呼び出すことにより、サービスがその特定のモードに入るようにするための、サービス制御マネージャが含まれる。特定の１つのモードには、サービスがハンドオフロックを取得し、サービスの状態をエクスポートできるようにするカスタマイズ可能モードが含まれる。
【０００９】
本発明の他の諸態様によれば、本発明のコンピュータ読み取り可能記憶媒体の形態には、サービスの状態をエクスポートするためにコンピュータシステムによって使用されるデータ構造がその上に記憶された、コンピュータ読み取り可能記憶媒体を含んでいる。このデータ構造は、クライアントにサービスを提供する際にサービスによって生成される内部コンテキストに関する情報を示す、サービス内部コンテキストタグを含む。このデータ構造はさらに、サービスの実行を求める要求中にクライアントによって提供される外部コンテキストに関する情報を示す、クライアント外部コンテキストタグを含む。
【００１０】
本発明の他の諸態様によれば、コンピュータシステム上に実装される方法は、コンピュータシステム上で稼動する第１のゲストオペレーティングシステム上で稼動している、クライアントの要求を処理する第１のサービスに対する更新を受け取ることを含む。この方法はさらに、第１のサービスの状態を含むファイルを生成するために、第１のサービスによって状態ハンドオフ（state handoff）を実行することを含む。このファイルは、コンピュータシステム上で稼動する第２のゲストオペレーティングシステム上で稼動している第１のサービスのインスタンスへエクスポートされる。この方法はさらに、クライアントの要求を処理するために、受け取られた更新によって更新された第１のサービスのインスタンスを実行することを含み、クライアントによって第１のサービスに対して提供されたコンテキストを失わずに第１のサービスを終了することを含む。
【００１１】
本発明の上記の諸態様およびそれに付随する利点の多くは、以下の詳細な説明を添付の図面と併せて参照することによってより良く理解されるので、より容易にその価値が認められよう。
【発明を実施するための最良の形態】
【００１２】
１本のソフトウェアまたはデータ構造を更新するためにクライアントの要求の処理が停止される時間が長くなるのを回避するため、本発明の様々な実施形態は、元の１本のソフトウェアまたはデータ構造を更新する代わりに、その１本のソフトウェアのインスタンスまたはデータ構造のインスタンスを更新する。これにより、元の１本のソフトウェアまたはデータ構造は、中断せずにクライアントの要求を処理することができるようになる。この１本のソフトウェアの更新されたインスタンス、またはデータ構造の更新されたインスタンスが検査および確認に満足のゆくように合格すると、本発明の様々な実施形態により、元の１本のソフトウェアまたはデータ構造を一時的に停止して、その状態を更新されたインスタンスにエクスポートできるようになる。元の１本のソフトウェアまたはデータ構造は、さらなる動作によって終了し、更新されたインスタンスは、コンテキストを失わずにクライアントの要求に対する処理を始める。用語「１本のソフトウェア」は、アプリケーションモードで稼動するサービス、特権モードで稼動するサービス、またはアプリケーションモードもしくは特権モードで稼動するサービスの一部（たとえばコードフラグメント（code fragment））を含んでいる。
【００１３】
サービスをその実行中に動的に更新できるシステム２００を図２に示す。システム２００は、ネットワーク２０４を介してサーバ２０６と通信するクライアント２０２を含む。クライアント２０２とサーバ２０６は共に、クライアント／サーバアーキテクチャと呼ばれる一種のコンピュータネットワークアーキテクチャを形成する。クライアント２０２とサーバ２０６から構成されるクライアント／サーバアーキテクチャは、議論の的であるインテリジェンス（disputed intelligence）を利用する構成であり、サーバ２０６と個々のクライアント２０２はいずれもインテリジェンスのあるプログラム可能なデバイスとして扱われ、したがってそれぞれのコンピューティング能力がすべて利用される。これは、２つの別々のコンポーネントである「フロントエンド」クライアント２０２と「バックエンド」サーバ２０６の間で、検索処理などのコンピューティングタスクの処理を分割することによって行われる。クライアント２０２は、（旧アーキテクチャに見られる「ダム」端末と対比して）それ自体が完全なスタンドアロンのパーソナルコンピュータであるが、コンピューティングタスクを開始するためのすべての能力および機能をそのユーザに提供する。サーバ２０６は、別のパーソナルコンピュータ、ミニコン、またはメインフレームとすることができ、データ記憶、データ管理、クライアント間の情報共有、高度なネットワーク管理、セキュリティ機能、クライアント２０２などのクライアントによって要求される様々なコンピューティングタスクの処理など、タイムシェアリング環境でミニコンおよびメインフレームによって提供される従来の能力を提供することによって、クライアント２０２の機能を高める。
【００１４】
ネットワーク２０４は、通信設備によって接続されている、一群のコンピュータおよび関連装置である。ネットワーク２０４は、同軸もしくはその他のケーブルなどの永続的接続、または電話もしくはその他の通信リンクによって行われる一時的接続を含むことができる。ネットワーク２０４は、数台のコンピュータ、プリンタ、およびその他の装置からなるＬＡＮ（ローカルエリアネットワーク）と同じくらい小さくてもよく、あるいは広大な地理的範囲にまたがって分散されている多くの小型および大型のコンピュータ（ＷＡＮすなわちワイドエリアネットワーク）から構成されてもよい。ＷＡＮの例示的な１つの実装はインターネットであり、これは、互いに通信を行うためにＴＣＰ／ＩＰプロトコル群を使用するネットワークおよびゲートウェイの世界的な集合体である。インターネットの中核は、データおよびメッセージを経路指定する数千もの商業用、政府用、教育用、およびその他のコンピュータシステムを含む主要なノード間またはホスト間の、高速データ通信線のバックボーンである。１つまたは複数のインターネットノードは、インターネットを危険に陥らせずに、あるいはインターネット上の通信を停止させずにオフラインになることができる。というのも、単一のコンピュータまたはネットワークがインターネット全体を制御しているわけではないからである。
【００１５】
本発明の様々な実施形態を使用すると、サーバ２０６を停止せずに、オンラインサービスを仮想的に更新して更新済みサービスを生成することができ、したがって、オンラインサービスがクライアント２０２に対して中断せずに引き続きサービスを提供することが可能になる。管理者２０８は、オンラインサービスがクライアント２０２によって要求されるコンピューティングタスクを引き続き実行する間に、更新済みサービスをテストすることができる。更新済みサービスが（導入された場合に）システム２００に問題を発生させる可能性が低いと管理者２０８が納得したとき、管理者２０８は、更新済みサービスにクライアント２０２の要求の処理を開始させることができ、一方、オンラインサービスはアンインストールされるが、クライアント２０２は変更があったとは気づかない。本発明の様々な実施形態により、オンラインサービスによって記憶された状態が、クライアント２０２が依拠しているコンテキストを失わずに、更新済みサービスにシームレスに転送される。
【００１６】
本発明の様々な実施形態の仮想更新機能を使用して、管理者２０８は、オペレーティングシステムのインスタンスとして稼動するオンラインサービスの新規インスタンスを作成し、これ自体は、そのオンラインサービスおよびそのオンラインサービスが稼動しているオペレーティングシステムと並列に稼動する。管理者２０８は、オンラインサービス（更新対象サービス）のインスタンスに更新をインストールし、適用する。次に、管理者２０８はテストを行い、テストが合格であれば、管理者２０８は、更新済みサービスをシステム２００に導入できると判定する。次いで管理者２０８は、オンラインサービスに、オンラインサービスのインスタンスへのコンテキストハンドオフを実行させる。コンテキストハンドオフが完了すると、このコンテキストハンドオフの直前のオンラインサービスが中断した時点で、更新サービスの実行が開始される。
【００１７】
図３Ａには、オンラインサービスと更新済みサービスをどちらも実行できるサーバ２０６をより詳細に示してある。サーバ２０６は、複数個のハードウェア３０２を含み、これはサーバ２０６の物理的構成要素であり、中央処理装置（図示せず）およびメモリ、ならびにプリンタ、モデム、入力デバイスなどの周辺機器を含んでいる。中央処理装置、メモリ、ディスク領域、周辺機器など上述のハードウェア資源の割当ておよび使用を制御するホストオペレーティングシステム３０４が、ハードウェア３０２の上で稼動している。ホストオペレーティングシステム３０４は、ゲストオペレーティングシステムおよび他のアプリケーションが依拠する、核となる１本のソフトウェアである。ホストオペレーティングシステム３０４で稼動しているのは仮想サーバ３０６であり、このサーバは、仮想マシン３１０Ａ、３１０Ｂを管理する仮想化サービスと、ハードウェアエミュレーション用のソフトウェアインフラストラクチャを提供する。
【００１８】
仮想マシン３１０Ａ、３１０Ｂは、各仮想マシン３１０Ａ、３１０Ｂ用の仮想ハードウェアとして働く、仮想のデバイスの組を含む。第１および第２のゲストオペレーティングシステムは、各仮想マシン３１０Ａ、３１０Ｂ中で稼動するが、最終的にはハードウェア３０２によって実行される適切なハードウェア命令に翻訳される様々な命令および通信が、仮想サーバ３０６によってシミュレートされることは、十分に認識されない。仮想サーバ３０６は、本質的に、好ましくは、ホストオペレーティングシステム３０４の特権モードで稼動する、マルチスレッドサービスであり、仮想マシン３１０Ａ、３１０Ｂのそれぞれが独自の実行スレッドで実行される。ホストオペレーティングシステム３０４は、中央処理装置の資源および時間のスケジューリングならびにデバイスドライバを提供すると共に、ハードウェア３０２へのアクセスを提供するが、仮想サーバ３０６は、ゲストオペレーティングシステムを実行できる様々なマシン（仮想マシン３１０Ａ、３１０Ｂ）の錯覚を生み出すソフトウェアインフラストラクチャを保持する。
【００１９】
オンラインサービス３１２Ａは、第１のゲストオペレーティングシステム上で実行され、次に第１のゲストオペレーティングシステムが仮想マシン３１０Ａ上で実行される。更新されたオンラインサービスのインスタンスは、更新済みサービス３１２Ｂであり、これは第２のゲストオペレーティングシステム上で稼動し、次に第２のゲストオペレーティングシステムが仮想マシン３１０Ｂ上で実行される。管理者２０８は、仮想化技術を使用して、クライアント２０２と通信を行うために、オンラインサービス３１２Ａが依拠する同じハードウェア３０２上で、更新済みサービス３１２Ｂをテストすることができる。本発明の様々な実施形態では、内部コンテキストおよび外部コンテキストを含む、オンラインサービス３１２Ａの状態を、第１のゲストオペレーティングシステムによって取得できるようにし、このような状態を、仮想マシン３１０Ａと３１０Ｂの間の適切なプロセス間通信機構（たとえばパイプやキュー）によって第２のゲストオペレーティングシステムに転送できるようにする。その後、オンラインサービス３１２Ａが実行を終了し、更新済みサービス３１２Ｂの実行が開始されたときにコンテキストが失われないように、更新済みサービス３１２Ｂの状態が、オンラインサービスの状態に設定される。
【００２０】
図３Ｂは、インストールモード、開始モード、休止モード、停止モード、アンインストールモードなど、サービス３１８が入り得る様々なモードを管理するサービス制御マネージャ３１６の使用法を示す。各モードに関連するのは、サービス制御マネージャ３１６によって呼び出すことができる割当て可能コールバックルーチンである。サービス制御マネージャ３１６が、コールバックルーチンの１つを使用してサービスを呼び出した後、サービス３１８が各モードに入る。サービス制御マネージャ３１６は、適切な操作制御機構のうちでも、とりわけコンソール３１４または自動化スクリプト（図示せず）によって制御することができる。ＯＮＰＡＵＳＥ（）ルーチン３１８Ａ、ＯＮＨＡＮＤＯＦＦ（）ルーチン３１８Ｂ、ＯＮＳＴＯＰ（）ルーチン３１８Ｃなど、サービス３１８と関連する一部のコールバックルーチンを示してある。たとえば、サービス制御マネージャ３１６がＯＮＰＡＵＳＥ（）ルーチン３１８Ａを呼び出すと、サービス３１８は（クライアント２０２からさらに要求を受信するのを中止し）休止モードに入り、このモードで、ＯＮＰＡＵＳＥ（）ルーチン３１８Ａによって指定される様々な命令が実行される。
【００２１】
一実施形態では、サービス制御マネージャ３１６がカスタムコマンドを呼び出すことができ、そのカスタムコマンド内で任意のどんなコールバックルーチンもそのカスタムコマンドに関連付けできる場合、ＯＮＨＡＮＤＯＦＦ（）ルーチン３１８Ｂをカスタムコマンドと関連付け、その結果、サービス３１８の様々なモードをハンドオフモードを含むように拡張することができる。サービス３１８がハンドオフモードに入ったとき、ＯＮＨＡＮＤＯＦＦ（）ルーチン３１８Ｂに関連する命令を実行して、更新済みサービス３１２Ｂにインポートするために、第１のサービス３１２Ａの状態をエクスポートすることができる。もう１つの実施形態では、カスタムコマンドを使用する代わりに、新しいハンドオフ状態をサービス３１８などのサービスの一部とすることができる場合、ＯＮＨＡＮＤＯＦＦ（）ルーチン３１８Ｂをそのモードに関連付けることができる。この特定の例では、好ましくは、ＯＮＨＡＮＤＯＦＦ（）ルーチン３１８Ｂの命令の１つにより、サービスが休止され、したがって、クライアント２０２からの追加の要求が受信されなくなり、一方、サービスの提供をオンラインサービス３１２Ａから更新済みサービス３１２Ｂに切り換える準備が行われる。
【００２２】
図３Ｃは、上記で論じたハンドオフモードの間に更新済みサービス３１２Ｂにエクスポートされる、オンラインサービス３１２Ａの状態を含むファイルを示す。このファイルは、どんな適切な言語で書いたものでもよい。１つの適切な言語として、ＸＭＬ（拡張可能なマーク付け言語）など、カスタマイズ可能なタグベース言語がある。図３Ｃに示すファイルの生成をもたらす以下の例を検討する。オンラインサービス３１２Ａは、ポート５４５２上で、クライアント２０２からの要求をリスニングする。クライアント２０２は、文字列（「ｈｅｌｌｏ  ｗｏｒｌｄ」）をオンラインサービス３１２Ａに送る。オンラインサービス３１２Ａは、この文字列、現在のタイムスタンプ（ここでは１２：５３）、クライアントＩＰアドレス（ここでは１６．１２．１０．１０）、およびクライアントポート５４５２を、クライアント外部コンテキストとして記憶する。オンラインサービス３１２Ａ内では、内部的に、ワーカスレッド（worker thread）が３５秒おきに起動して、クライアントコンテキストのリストを調査する。クライアントコンテキストが所定の時間よりも長く記憶されている場合、ワーカスレッドは、あらかじめクライアント２０２によってオンラインサービス３１２Ａに提供された文字列「ｈｅｌｌｏ  ｗｏｒｌｄ」をもつパケットをクライアント２０２に送信する。
【００２３】
オンラインサービス３１２Ａの内部コンテキストとクライアントの外部コンテキストはどちらも、図３Ｃに示すファイル中にエクスポートすることができる。このファイルは、開始タグ＜ＳＥＲＶＩＣＥ＿ＩＮＴＥＲＮＡＬ＿ＣＯＮＴＥＸＴ＞３２０Ａ、およびその対となる終了タグ＜／ＳＥＲＶＩＣＥ＿ＩＮＴＥＲＮＡＬ＿ＣＯＮＴＥＸＴ＞３２０Ｂを含む。タグ３２０Ａと３２０Ｂの間には、タグ＜ＷＯＲＫＥＲ＿ＴＨＲＥＡＤ＿ＳＬＥＥＰ＿ＴＩＭＥ＞３２２Ａ、およびその対となる終了タグ＜／ＷＯＲＫＥＲ＿ＴＨＲＥＡＤ＿ＳＬＥＥＰ＿ＴＩＭＥ＞３２２Ｂが含まれる。行３２４に、ワーカスレッドのスリープタイムを示すための数値「３５」が表されている。このファイルはまた、開始タグ＜ＣＬＩＥＮＴ＿ＥＸＴＥＲＮＡＬ＿ＣＯＮＴＥＸＴ＞３２６Ａ、およびその対となる終了タグ＜／ＣＬＩＥＮＴ＿ＥＸＴＥＲＮＡＬ＿ＣＯＮＴＥＸＴ＞３２６Ｂも含む。タグ３２６Ａと３２６Ｂの間に、別の開始タグ＜ＣＯＮＴＥＸＴ＞３２８Ａ、およびその対となる終了タグ＜／ＣＯＮＴＥＸＴ＞３２８Ｂが入れ子になる。行３３０で、タグ３２８Ａと３２８Ｂの間に、タグ＜ＩＰ＞およびその対となる終了タグ＜／ＩＰ＞が含まれる。ＩＰアドレス１６．１２．１０．１０は、タグ＜ＩＰ＞とその終了タグ＜／ＩＰ＞の間に入れられる。行３３２は、タグ＜ＰＯＲＴ＞とその対となる終了タグ＜／ＰＯＲＴ＞の間にあるポート番号５４５２を表す。行３３４で、時間「１２：５３」が、タグ＜ＴＩＭＥＳＴＡＭＰ＞とその対となる終了タグ＜／ＴＴＭＥＳＴＡＭＰ＞の間に入っている。行３３６は、タグ＜ＳＴＲＩＮＧ＞とその対となる終了タグ＜／ＳＴＲＩＮＧ＞の間に入っている、クライアント２０２によって提供される文字列「ｈｅｌｌｏ  ｗｏｒｌｄ」を含む。上記で論じたファイルに関する詳細については、そのファイルがサービスの内部および外部の両コンテキストを取り込む概念を示すために提示されたものであり、サービスの状態の捕捉が図３Ｃに示した特定の種類の情報に限定、または制限されるものではないという点で理解されるべきものである。
【００２４】
図４Ａ〜４Ｈは、サービスが稼動している間にサービスを動的に更新する方法４００を示す。わかりやすくするために、方法４００の以下の説明では、クライアント２０２、サーバ２０６（図２）；ハードウェア３０２、ホストオペレーティングシステム３０４、仮想サーバ３０６、仮想マシン３１０Ａ、３１０Ｂ、オンラインサービス３１２Ａ、および更新済みサービス３１２Ｂ（図３Ａ）；図３Ｃに示すカスタマイズ可能なタグベースファイルなど、システム２００に関して示した様々な構成要素を参照する。方法４００は、開始ブロックから、移行端点（「端点Ａ」）と終了端点（「端点Ｂ」）の間で定義される１組の方法ステップ４０２に進む。この１組の方法ステップ４０２では、オンラインサービス３１２Ａなど、ゲストオペレーティングシステム上で稼動する第１のサービスへの更新が受け取られる。
【００２５】
以下の数ステップでは、本発明の様々な実施形態が実行可能になるように、仮想化技術の開始について論じる。方法４００では、端点Ａ（図４Ｂ）から、ホストオペレーティングシステム３０４を開始する。ブロック４０８を参照のこと。ブロック４１０において、この方法では、ホストオペレーティングシステム３０４内で稼動している仮想サーバ３０６を開始する。方法４００では、ブロック４１２に進み、ここで仮想マシン３１０Ａなど第１の仮想マシンと、この第１の仮想マシンに特有な仮想のデバイスの第１の組を開始する。方法４００では、第１の仮想マシンで稼動する第１のゲストオペレーティングシステムを開始する。ブロック４１４を参照のこと。この方法では、ブロック４１６において、クライアント２０２などのクライアントにサービスを提供するために第１のゲストオペレーティングシステム上で稼動する、オンラインサービス３１２Ａなど第１のサービスを開始する。ブロック４１８において、クライアントは、（要求や要求に関連する情報などの）外部コンテキストを第１のサービスに送信する。方法４００は次いで、別の移行端点（「端点Ａ１」）に進む。
【００２６】
方法４００は、端点Ａ１（図４Ｃ）からブロック４２０に進み、ここでオンラインサービス３１２Ａなど第１のサービスが、各クライアントに対する外部コンテキストを別々に記憶する。図３Ｃのタグ３２８Ａ、３２８Ｂの内容を参照のこと。次に、第１のサービスが、クライアントのサービスに関する内部コンテキストを生成し記憶する。ブロック４２２を参照のこと。また、タグ３２０Ａ、３２０Ｂの内容も参照のこと。ブロック４２４において、第１のサービスへの更新が利用可能なことを示す通知が受け取られる。方法４００では、次いでブロック４２６に進み、ここで仮想マシン３１０Ｂなど第２の仮想マシンと、第２の仮想マシンに特有な仮想化デバイスの第２の組を開始する。この方法では、第２の仮想マシンで稼動する、第２のゲストオペレーティングシステムを開始する。ブロック４２８を参照のこと。この方法では、ブロック４３０において、更新をインストールし、更新された第１のサービスのコピー（更新済みサービス３１２Ｂなど第２のサービス）を実行する。（好ましくは、第２のサービスは、第１のサービスと同時に実行される。）方法４００は、次いで別の移行端点（「端点Ａ２」）に進む。
【００２７】
方法４００では、端点Ａ２（図４Ｄ）からブロック４３２に進み、ここでたとえば管理者２０８によって、第２のゲストオペレーティングシステム上で稼動する第２のサービスがテストされる。判断ブロック４３４において、第２のサービスが導入される用意ができているかどうかを判定するテストが行われる。方法４００では、判断ブロック４３４でのテストの回答がＮＯの場合、ブロック４３２に戻り、ここで上述の処理ステップが繰り返される。方法４００では、判断ブロック４３４でのテストの回答がＹＥＳの場合、続いて終了端点Ｂに進む。
【００２８】
方法４００では、端点Ｂ（図４Ａ）から、移行端点（「端点Ｃ」）と終了端点（「端点Ｄ」）の間に定義される１組の方法ステップ４０４に進む。この１組の方法ステップ４０４は、第１のサービスが、（第２のサービスまたは更新済みサービス３１２Ｂである）第１のサービスのインスタンスへの状態ハンドオフを実行する。方法４００では、端点Ｃ（図４Ｄ）からブロック４３６に進み、ここで第１のサービスがハンドオフモードに入る。この方法では、第１のサービスが、さらなるクライアント要求または外部コンテキストを受け取ることを休止する。ブロック４３８を参照のこと（例示的な一方法は、サービス制御マネージャ３１６に、ＯＮＰＡＵＳＥ（）ルーチン３１８Ａを呼び出させることである）。次いで方法４００では、続いて別の移行端点（「端点Ｃ１」）に進む。
【００２９】
この方法は、端点Ｃ１（図４Ｅ）から始まり、ハンドオフ中に第１のサービスのモードが変化しないようにするために、そのサービスに対する、グローバルロックであるハンドオフロックが取得される。ブロック４４０を参照のこと。この方法では、ブロック４４２において、第２のサービスに引き渡すべき、各クライアントの外部コンテキストを見つける。この方法では、好ましくは、第２のサービスにエクスポートする必要のあるどんなクライアント外部コンテキストも見つけるべきである。方法４００はブロック４４４に進み、ここで第２のサービスに引き渡すべき第１のサービスの内部コンテキストを見つける。この方法は、場合によっては、いくつかのワーカスレッド、内部キュー、サービス管理データ構造などの内部詳細（internal details）を含むことができる。この方法は、外部コンテキストおよび内部コンテキスト（合わせて、状態と呼ぶ）を、カスタマイズ可能なタグベースのファイルにエクスポートする。ブロック４４６を参照のこと。（説明目的でのみ、図３Ｃにおいてファイルが例として示されている。）次に、この方法は、ブロック４４８において、第１のサービス上における既存のネットワーク接続を第２のサービスにマッピングするように、第１のサービスのネットワークスタックを変更する。（既存のネットワーク接続を再マッピングするために、仮想サーバ３０６および仮想マシン３１０Ａ、３１０Ｂを含む仮想化機構が、アプリケーションプログラミングインターフェースを公開することが好ましい。）次に、方法４００は、別の移行端点（「端点Ｃ２」）に進む。
【００３０】
方法４００は、端点Ｃ２（図４Ｆ）からブロック４５０に進み、ここで第２のサービスがクライアントからの要求を受信可能になるように、第１のサービスのリスニングポートが第２のサービスのリスニングポートにリダイレクトされる。第１のサービスが、パイプやキューなどのプロセス間通信により、第２のゲストオペレーティングシステム上で稼動しているサービス管理マネージャ３１６などのサービス管理マネージャに、第２のサービスの状態を消去するよう要求する。ブロック４５２を参照のこと（これは、第２のサービスのＯＮＳＴＯＰ（）ルーチン３１８Ｃを呼び出すことによって実現できることが好ましい）。次に、ブロック４５４において、第１のサービスが、第２のゲストオペレーティングシステム上で稼動するサービス管理マネージャに、第２のサービスをコンテキスト受取りモードに切り替えるよう要求する。次に、方法４００はブロック４５６に進み、ここで第１のサービスが第２のサービスに、第１のサービスの状態を含むカスタマイズ可能なタグベースのファイルを引き渡す。その後、方法４００は別の移行端点（「端点Ｃ３」）に進む。
【００３１】
この方法は端点Ｃ３（図４Ｇ）から始まり、第２のサービスが、カスタマイズ可能なタグベースのファイルを受け取り、そのサービス自体を、カスタマイズ可能なタグベースのファイルによって指定された状態に初期化する。ブロック４６０を参照のこと（ネットワークインターフェースに結び付いたネットワークプロトコルを効果的に初期化するために、第２のサービスが様々なデータ構造を下位のネットワーク層で初期化することが好ましい）。判断ブロック４６２において、第２のサービスが初期化を終了したかどうかを判定するテストが実行される。判断ブロック４６２でのテストの回答がＮＯの場合、方法４００は、ブロック４６０に戻り、ここで上述の処理ステップが繰り返される。そうではない場合、判断ブロック４６２でのテストの回答がＹＥＳであり、第２のサービスは、この第１のサービスに、初期化が成功したことを通知する。ブロック４６４を参照のこと。次にブロック４６６において、第１のサービスは、第２のサービスに動作を開始するようにメッセージを送る。その後、方法４００は別の移行端点（「端点Ｃ４」）に進む。
【００３２】
方法４００は、端点Ｃ４（図４Ｈ）から判断ブロック４６８に進み、ここで第２のサービスが肯定応答を返したかどうかを判定するテストが実行される。判断ブロック４６８でのテストの回答がＮＯの場合、方法４００は、その回答がＹＥＳになるまでループする。判断ブロック４６８でのテストの回答がＹＥＳの場合、第１のサービスは、第１のサービスの更新が成功したことを示す。ブロック４７０を参照のこと。ブロック４７２において、第１のサービスが、ハンドオフロックをリリースする。次いで方法４００では、アンインストールされる準備として、第１のサービスが、それ以降の実行を止める。ブロック４７４を参照のこと。（この方法は、サービス管理マネージャ３１６が、ＯＮＳＴＯＰ（）ルーチン３１８Ｃと、第１のサービスをアンインストールするための別のルーチンを呼び出すことが好ましい。）次いで、第１のサービスがアンインストールされる。ブロック４７６を参照のこと。その後、方法４００は終了端点Ｄに進む。
【００３３】
方法４００は、端点Ｄ（図４Ａ）から、１つの移行端点（「端点Ｅ」）ともう１つの移行端点（「端点Ｆ」）の間で定義される１組の方法ステップ４０６に進む。この１組の方法ステップ４０６により、更新によって修正された、第１のサービスのインスタンス（第２のサービスまたは更新済みサービス３１２Ｂ）が実行され、第１のサービスのクライアントにサービスを提供することができる。その後、方法４００は実行を終了する。
【００３４】
本発明の好ましい実施形態を図示し説明してきたが、これに関して本発明の趣旨および範囲から逸脱せずに様々な変更を行えることが理解されよう。
【図面の簡単な説明】
【００３５】
【図１】１本のソフトウェアが稼動している間にそれにパッチを当てることに関する様々な問題を示す、従来の企業ネットワークシステムを示すブロック図である。
【図２】１本のソフトウェアが、その実行中に更新される、例示的システムを示すブロック図である。
【図３Ａ】本発明の一実施形態による、サービスの実行中にサービスのコピーを更新することをサポートするように、複数のオペレーティングシステムを実行できるようにする、システムの複数の部分を示すブロック図である。
【図３Ｂ】本発明の一実施形態による、サービスを制御するための、システムの複数の部分を示すブロック図である。
【図３Ｃ】本発明の一実施形態による、状態の情報を含むカスタマイズ可能なタグベースファイルの例を、テキストで表した図である。
【図４Ａ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｂ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｃ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｄ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｅ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｆ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｇ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図４Ｈ】サービスが稼動している間にサービスを動的に更新する方法を示すプロセス図である。
【図１】
2006107500.tif 000003
【図２】
2006107500.tif 000004
【図３Ａ】
2006107500.tif 000005
【図３Ｂ】
2006107500.tif 000006
【図３Ｃ】
2006107500.tif 000007
【図４Ａ】
2006107500.tif 000008
【図４Ｂ】
2006107500.tif 000009
【図４Ｃ】
2006107500.tif 000010
【図４Ｄ】
2006107500.tif 000011
【図４Ｅ】
2006107500.tif 000012
【図４Ｆ】
2006107500.tif 000013
【図４Ｇ】
2006107500.tif 000014
【図４Ｈ】
2006107500.tif 000015
【外国語明細書】
2006107500000001.pdf