JP6849642B2 - 要求処理技術 - Google Patents

要求処理技術 Download PDF

Info

Publication number
JP6849642B2
JP6849642B2 JP2018191339A JP2018191339A JP6849642B2 JP 6849642 B2 JP6849642 B2 JP 6849642B2 JP 2018191339 A JP2018191339 A JP 2018191339A JP 2018191339 A JP2018191339 A JP 2018191339A JP 6849642 B2 JP6849642 B2 JP 6849642B2
Authority
JP
Japan
Prior art keywords
request
application
instance
computer
computer system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018191339A
Other languages
English (en)
Other versions
JP2019023915A (ja
Inventor
ニコラス アレクサンダー アレン
ニコラス アレクサンダー アレン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US13/964,977 external-priority patent/US10346148B2/en
Priority claimed from US13/964,941 external-priority patent/US9348634B2/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of JP2019023915A publication Critical patent/JP2019023915A/ja
Application granted granted Critical
Publication of JP6849642B2 publication Critical patent/JP6849642B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45541Bare-metal, i.e. hypervisor runs directly on hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/4555Para-virtualisation, i.e. guest operating system has to be modified
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

<関連出願の相互参照>
本出願は、それぞれ2013年8月12日に出願された同時係属中の、「PER REQUEST COMPUTER SYSTEM INSTANCES」と題する米国特許出願第13/964,977号、「APPLICATION BOOT IMAGE」と題する同第13/964,941号、及び「REQUEST PROCESSING TECHNIQUES」と題する同第13/964,889号の優先権を主張し、当該の内容を引用により本明細書の一部として援用するものである。
様々なリソース量を電子要求サービスすることができる。例えば、要求サービスの規模は、わずかなステートレス計算から、長期間動作する大規模並列アプリケーションまで幅広い。要求サービスは、限られた数の計算リソースしか必要としない場合も多く、要求サービスに使用されるコンピュータシステムより遥かに少ない場合も多い。その結果、計算リソースが十分活用されないことも多く、概して、従来の要求処理技術では非常に無駄が多い。多くの場合、仮想化により計算リソースの利用方法を改善でき、例えば、単一の物理的コンピュータシステムが、複数の仮想コンピュータシステムを同時に実施することができ、それによって容量の変更が可能になり、デベロッパは容易にしかも柔軟に規模を拡大することが可能になった。
しかし、従来の仮想化技術では、仮想コンピュータシステム(インスタンス)の稼働を急激に上下させるための、要求サービスに必要なリソースや償却コストが原因で、デベロッパが下げて見積もることには根本的な制約がある。実際のサービスの仮想化では、一般的に、ワークロードを数分、数時間またはそれ以上の期間、占有可能であるとの期待に依存している。例えば、アプリケーションが多くある場合、仮想コンピュータシステムを使用する頻度は、比較的少ない。仮想コンピュータシステムが要求をサービス出来るようにするには、仮想コンピュータシステムを継続して動作状態にしておく必要があり、そのため、コンピュータシステムのオペレーティングシステム用計算リソース及びその他リソース(例えば、ネットワークリソース)が必要となる。そのようなコンピュータシステムが十分利用されない場合、それらのコンピュータシステムに割当てられた、少なくとも一部のリソースを、一般的には別の用途に利用できない。
本発明は、要求処理技術に関する。コンピュータシステムはハイパーバイザを実施し、ハイパーバイザは1つまたは複数のコンピュータシステムインスタンス及びコントローラを実施する。コントローラ及びコンピュータシステムインスタンスは、メモリを共有する。要求は、コンピュータシステムインスタンス及びコントローラの双方の施設を用いて処理される。要求処理の一部として、コンピュータシステムインスタンスとコントローラとの間を、共有メモリを介して情報を渡す。
本開示において、多様な実施形態を、以下の図を参照し説明する。
本開示の多様な態様を示す例示的な実施例を示す。 本開示の多様な態様を示す例示的な実施例を示す。 本開示の多様な態様を示す例示的な実施例を示す。 多様な実施形態の実施が可能な環境の例示的な実施例を示す。 汎用コンピュータシステムインスタンスと要求インスタンスとの比較を図に示す。 本開示の多様な実施形態の実施に使用されるコンピュータシステム構成の例示的な実施例を示す。 多様な実施形態の実施を可能にする環境の例示的な実施例を示す。 少なくとも1つの実施形態において、要求処理プロセスの例示的な実施例を示す。 少なくとも1つの実施形態において、要求処理プロセスの例示的な実施例を示す。 少なくとも1つの実施形態において、要求処理プロセスの例示的な実施例を示す。 多様な実施形態の実施を可能にする環境の例示的な実施例を示す。 少なくとも1つの実施形態において、アプリケーションイメージビルドプロセスの例示的な実施例を示す。 少なくとも1つの実施形態において、アプリケーションコード実行時の、セーフポイント特定プロセスの例示的な実施例を示す。 少なくとも1つの実施形態において、アプリケーションコード実行時の、セーフポイント特定プロセスの例示的な実施例を示す。 少なくとも1つの実施形態において、ワーカハイパーバイザ及びワーカハイパーバイザのコンポーネントの例示的な実施例を示す。 少なくとも1つの実施形態において、要求処理プロセスの例示的な実施例を示す。 多様な実施形態の実施を可能にする環境を示す。
以下に、多様な実施形態を記述する。本実施形態を十分把握できるよう説明するために、具体的な構成及び詳細を明確にする。しかし、当業者であれば、具体的な詳細説明が無くても実施形態を実施できることは明らかであろう。また、実施形態の説明が不明瞭にならないよう、周知の特徴を省略または簡略化するものである。
本明細書に記述し提案する技術は、仮想コンピュータシステムによる要求処理に関する。仮想コンピュータシステムでは、計算の効率化、レイテンシの低減、及び/またはその他の優位性を目的として、従来のアプリケーションスタックから数層分の不足がある。そのような仮想コンピュータシステムは、実質的に少ないリソースで実施可能であり、それにより、起動時間の短縮、計算オーバヘッドの低減、及び、物理的計算デバイス(ホストコンピュータシステム)を使った数多くの仮想マシンの実施が可能になるなど、技術的な優位性がもたらされる。
ある実施形態において、ハイパーバイザは、処理リソース、メモリリソース、ネットワークリソースなど、コンピュータシステムの多様な計算リソースの仮想化を目的として、コンピュータシステムにより動作される。全体的な例示にするために、基礎となっているコンピュータシステムの物理的な計算リソースを仮想化するハイパーバイザを使用しているが、ハイパーバイザは、複数ある仮想化層のうちの一層であってもよく、ハイパーバイザがそれ自体で、ハイパーバイザから見て別のハイパーバイザによる仮想化となる計算リソースを仮想化してもよい。一般的に、ハイパーバイザは、コンピュータシステム上でワーカコントローラ、及び1つまたは複数の仮想コンピュータシステムインスタンス(インスタンスとする)を実施するために使用されてもよい。特定のインスタンスでは、インスタンスの実施に従来使用されるアプリケーションスタックから複数層分の不足があってもよい。例えば、インスタンスに、オペレーティングシステム及び関連リソースの不足があってもよい。ある実施例において、オペレーティングシステムのカーネル、各種のプロセス、言語仮想マシン、全ネットワークスタック、及び/またはその他コンポーネントなど、多様なコンポーネントが不足したハイパーバイザ上で直接、インスタンスが言語ランタイムを実行する。ワーカコントローラは、ハイパーバイザ内で実行するプロセスとして実施されてもよく、インスタンスに不足し得る特権機能を利用できる。ある実施形態において、インスタンスは、プロトコルスタックの1つまたは複数の層(例えば、開放型システム間相互接続(OSI)モデルプロトコルスタックの第1層から第6層)の実施に不足があり、コントローラはその1つまたは複数層の実施を有する。さらに、コントローラ及びインスタンスはそれぞれ、プロトコルスタックの少なくとも1層の共有層を実施してもよい(例えば、コントローラ及びインスタンスの双方が、OSIプロトコルスタックの第7層(アプリケーション層)を実施してもよい)。1つまたは複数の共有層は、以下で論じる共有メモリ領域を用いて、コントローラとインスタンスとの間の情報送信に使用されてもよい。
ある実施形態において、インスタンスは、多様な要求を処理するために、ワーカコントローラの各種のコンポーネントを利用する。ワーカコントローラの能力を利用可能にするため、ハイパーバイザは、インスタンス及びワーカコントローラの双方が共有する共有メモリ領域を実施してもよい。以下で詳述するが、要求処理に係わるデータ(例えば、要求に対する応答データ)を、共有メモリ領域を介してワーカコントローラに転送してもよい。多様な技術の利用により、共有メモリ領域を通した効率的な要求処理、及び、効率的なデータトラッキングを可能にしてもよい。
ある実施形態において、インスタンスの実行アプリケーションコードは、HTTPオブジェクトモデルを用いてHTTP要求を作成する。アプリケーションコードは、HTTP要求の受送信用HTTP要求オブジェクトをインスタンス化し構成してもよい。HTTPに関連する多様な技術を記述するが、本開示の多様な実施形態は、ファイル転送プロトコル(FTP)、ドメインネームサービス(DNS)、及びその他プロトコルなど、別のプロトコルでの使用にも適合する。この特定の具体例において、HTTPオブジェクトモデルは、ハイパーバイザを通した、インスタンスとワーカコントローラとの間の通信を可能にする準仮想HTTPドライバを利用できてもよい。例示のために準仮想HTTPドライバを使用するが、一般的に、共有メモリ領域のデータについてのインスタンスからコントローラへの通知は、準仮想デバイスドライバとの対話により実施されてもよい。
HTTPオブジェクトモードが準仮想HTTPドライバを利用した結果、準仮想HTTPドライバは、インスタンス及びワーカコントローラが共有する共有メモリ領域内の制御空間に要求レコードを作成してもよい。要求レコードは、要求レコードの一意的な識別に適した識別子を含んでもよい。準仮想HTTPドライバは、共有メモリ領域内に、要求レコードに関連付けた要求スロットを割り当ててもよい。この時、準仮想HTTPドライバは、ハイパーコールインタフェースを用いて要求サービスハイパーコールを作成してもよい。HTTPドライバは、要求レコードへのサービスが必要であることを示すハイパーコールを作成してもよい。その結果、ハイパーコールインタフェースは、ワーカコントローラの内部で動作するHTTPハイパーコールハンドラに通知してもよい。HTTPハイパーコールハンドラは、さらに、共有メモリ領域から要求レコードを検索してもよい。HTTPハイパーコールハンドラが要求を使用し、少なくとも一部の検索された要求レコードに基づきネイティブHTTP要求を生成し、準仮想HTTPドライバにより要求レコードが関連付けられた要求スロットに、要求データを配置してもよい。
ハイパーコールハンドラは、第二HTTPオブジェクトモデルを用いて第二HTTP要求を構成してもよい。ハイパーコールハンドラは、要求レコードに関連付けられた要求スロットを利用し、要求スロットのコンテンツに基づき、エンティティボディを構成するかHTTP要求を構成してもよい。構成が終わると、HTTPハイパーコールハンドラは、ネイティブネットワークスタックを用いネイティブHTTP要求を生成してもよい。ハイパーコールハンドラは、要求レコード及び関連要求スロットをアップデートし、データを返すか、第二HTTP要求からの結果を返してもよい。この方法では、インスタンスは、ワーカコントローラのネットワークスタックを利用することができ、自ネットワークスタックを保持する必要がない。

本明細書に記述し提案する技術は、計算リソース要求処理に係わる計算リソースを効率的に使用できる。ある実施形態において、要求を受信した時、要求に応答するために仮想マシンが構成されてもよい。仮想マシンは、従来のオペレーティングシステム、及びネイティブネットワークスタックなど各種のコンポーネントが不足した状態に構成されてもよい。そういったコンポーネントを不足せずに備えた状態では、要求処理がより遅くなってしまうであろう。要求処理が既に必要無い、または後に必要で無くなる場合、仮想マシンを提供しなくてもよい。

ある実施形態において、システムはフロントエンドリスナを備える。フロントエンドリスナは、リスナを2つ備えてもよい。各仮想マシンがそれぞれアプリケーションをサービスするが、第一リスナは、その複数のアプリケーションに向けた要求を待つよう構成されてもよい。第二リスナは、以下で詳述するが、第一リスナが受信した要求の複製要求を待つよう構成されてもよい。第一リスナの機能について、フロントエンドリスナの複製を作成し、様々なホスト名、ポート、アプリケーションパス、ユニフォームリソースロケータ(URL)、及び/またはユニフォームリソース識別子(URI)など、複数のネットワークアドレスで要求を待つようにしてもよい。ある実施形態において、ドメインネームシステム(DNS)は、複数のドメイン名(または、一般的に、情報の複数インスタンス)を、フロントエンドリスナに対応する同一のネットワーク(例えば、IP)アドレスに結び付けるよう構成されてもよい。ドメイン名または情報のインスタンスが違えば、異なるアプリケーションイメージに対応してもよい。

要求を受信すると、フロントエンドリスナは、要求キューにワークトークンをエンキューしてもよい。要求トークンは、要求及び要求関連データの判断を可能にする情報を含んでもよい。ワーカハイパーバイザ内で動作するワーカコントローラは、要求キュー内にある、次に使用可能なメッセージを入手するなどして、要求ワークトークンをデキューしてもよい。あるいは、要求トークンをワーカハイパーバイザにプッシュしてもよい。要求ワークトークンをデキューまたはその他の方法で取得すると、ワーカコントローラは、ワークトークンを用い、利用可能なアプリケーションイメージセットの中から適切なアプリケーションイメージを判断し、ローカルのキャッシュ、または外部のデータストレージシステムであるアプリケーションイメージのリポジトリの中から、判断した適切なアプリケーションイメージを検索してもよい。
適切なアプリケーションを取得した後、ワーカコントローラはワーカハイパーバイザに命令し、少なくとも一部のアプリケーションイメージに基づき要求インスタンスをインスタンス化させてもよい。ワーカコントローラは、要求インスタンスのインスタンス化に係わる多様な動作を行うよう命令してもよい。その命令は、例えば、ワーカハイパーバイザに、要求インスタンス専用ユーザパーティションを新設すること、ワーカハイパーバイザ上で制御APIを用いた、ユーザパーティションへのプロセッサ、メモリ、またはその他リソースの割り当てること、及び/または、その他の方法を命令すること、があり得る。ワーカコントローラは、少なくともアプリケーションイメージを含む、共有メモリ領域も構成してもよく、また、ワーカハイパーバイザに命令し、ユーザパーティションのアドレス空間に、読取専用メモリとして共有メモリ領域をマッピングさせてもよい。
ブートストラッププログラムを使用し、少なくとも一部のアプリケーションイメージを共有メモリ領域から、ユーザパーティション割当メモリにコピーしてもよい。ブートストラッププログラムは、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレスを検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。アプリケーションコードの実行に応じて、要求インスタンスは、要求の入手を試みてもよい。要求インスタンスが要求の入手を試みると、ワーカコントローラは、要求インスタンスに関連する要求ワークトークンを配置し、要求ワークトークンで識別されるフロントエンドリスナへのコネクションを確立してもよい。フロントエンドリスナ(例えば、上記の第二リスナによる)がワークコネクション要求を継続してモニタリングしてもよく、要求ワークトークンに含まれる識別情報に基づき、受信要求を配置してもよい。フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成し、ワークコネクション要求を待つリスナに複製ソケットを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンスに応じて複製ソケットを使い、データの読み出し、書き込みを行ってもよい。データの提供後、要求インスタンスは、受信要求を処理し応答してもよい。多様な実施形態において、応答は、要求に関連し同期して出される。例えば、要求が受信される経路と同一のネットワーク接続、または同一の接続媒体を通して、応答を要求者に返してもよい。
本明細書に記述し提案する技術は、仮想コンピュータシステムのインスタンス化に使用するイメージの作成に関連する。多様な実施形態において、仮想コンピュータシステムは、起動時間の短縮、計算オーバヘッドの低減、及び、物理的計算デバイス(ホストコンピュータシステム)を使った数多くの仮想マシンの実施が可能になるなど、数多くの技術的優位性をもたらせ得るよう構成される。加えて、以下に記載するように、各種の技術を用い、そのような優位性をさらに高める。
ある実施形態において、アプリケーションコードを処理し、仮想マシンインスタンスのインスタンス化に使用可能なアプリケーションイメージを作成する。アプリケーションソースは、ビルドシステムにより受信されてもよい。アプリケーションソースは、デベロッパにより、例えば、ウェブサービス・アプリケーションプログラミングインタフェース(API)またはバージョン管理システムを通して、提供されてもよい。アプリケーションソースは、ソースファイル、構成ファイル、リソースファイル(ウェブページ、グラフィックイメージ、またはその他メディアファイルなど)、バイナリファイル及び/またはその他の情報を含んでもよい。ビルドシステムは、アプリケーションを解析してアノテーション付ソースを作成する、アプリケーション処理を行ってもよい。アプリケーション処理では、アプリケーションソースの実行可能部分を調査し、プログラムの実行に変動が始まる1つまたは複数の先頭位置を判断してもよい。さらに、アプリケーション処理では、アプリケーションソースに付けるアノテーションを作成してもよい。アプリケーションソースを実行する1つまたは複数のエントリポイントを特定して、アノテーションを作成してもよい。エントリポイントの判断では、1つまたは複数のエントリポイントから始め潜在的な変動部分を検出するまで、アプリケーションソースを解析、解釈または分析してもよい。アプリケーションの実行で重要な点は、アプリケーションの実行方法により実行が変動するかもしれないことである。
アノテーション付きのアプリケーションソースを作成した後、ビルドシステムは、アノテーション付きのソースを、ビルドハイパーバイザにより実施されるビルドコントローラに送信してもよい。ビルドコントローラは、アノテーション付きソース用のカーネルを起動するよう構成されたビルドブートストラッププログラムを入手してもよい。ブートストラッププログラムは、メモリにカーネル及びアノテーション付きソースを読み込むルーチンを備えてもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンを備えてもよい。ブートストラッププログラムは、カーネルエントリポイントからカーネルの実行を開始するルーチンを備えてもよい。
ビルドコントローラは、アノテーション付きソース及びビルドブートストラッププログラムの少なくとも一部に基づき、ビルドインスタンスを生成してもよい。アノテーション付きソース及びブートストラッププログラムの入手先である仮想マシン(仮想コンピュータシステム)をインスタンス化して、ビルドインスタンスを生成してもよい。変動ポイントに達するまで、アプリケーションを実行してもよい。変動ポイントに達すると、アプリケーションの実行を停止してもよい。必要に応じ、アプリケーションの実行をセーフポイントに調整してもよい。セーフポイントは、アプリケーションの実行ポイントであってもよく、当該ポイントでは、アプリケーションを実行する仮想マシン状態のスナップショットを、後に同じまたは別の物理的コンピュータシステムでのアプリケーションの実行開始ポイントとすることができる。
よって、多様な実施形態において、仮想マシンのスナップショットは後で使用できるよう格納される。スナップショットは、アプリケーション実行のレジュームが可能なエントリポイントアドレスを含んでもよい。スナップショットは、ワーカハイパーバイザ、及び/または、1つまたは複数の別のワーカハイパーバイザがアクセス可能なアプリケーションイメージのリポジトリに置かれてもよい。ワーカハイパーバイザは、アプリケーションイメージのリポジトリからアプリケーションイメージを検索し、エントリポイントアドレスでアプリケーションの実行をレジュームしてもよい。この方法では、アプリケーションの実行時に変動が無い部分は、アプリケーションがロードされ使用される前に処理される。その結果、処理済みのアプリケーションは、アプリケーションがコンピュータシステムにロードされる度に、アプリケーションの実行時に変動が無い部分も処理するよりも、より迅速にロードされ要求処理に使用され得る。
図1Bは、本開示の多様な実施形態を示す図である。図示したように、アプリケーションソース102bはビルドマシン104bにより処理される。ビルドマシン104bは、アプリケーション命令を実行し、変動ポイントが検出された時にはアプリケーションの実行を停止するよう構成された仮想マシンであってもよい。変動ポイントまたは変動ポイントに近いセーフポイントでビルドマシンのスナップショットを取り、アプリケーションブートイメージ106bを作成してもよい。上で示し、また以下で詳述するように、アプリケーションブートイメージ106bは、要求処理に用いられる仮想マシンのインスタンス化に使用され得る。
図1Cは、本開示の多様な態様を示すダイアグラム100cを表示する。図1Cに示すように、ダイアグラム100cは要求102cの受信を示しており、当該要求は、例えば1つまたは複数の動作を実施する要求であってもよい。要求は、例えば、ハイパーテキスト転送プロトコル(HTTP)またはその他の通信プロトコルに従い提供されてもよい。ある実施形態において、要求は、1つまたは複数のアプリケーションでサービス可能である。当該アプリケーションは、データに対し1つまたは複数の動作を実施し、別のコンピュータシステムと通信し、及び/または、要求の一部であるか要求に関連するデータと連携するなどして、要求をサービスするよう構成された1つまたは複数のプログラミングモジュールを備えてもよい。
図1Aは、上に論じた態様を含め、本開示の多様な態様を示す説明図である。具体的には、図1Aは、上に記述したような能力を限定して有する1つまたは複数のインスタンス102aを実施するハイパーバイザ100aを示す。インスタンス102aがインスタンスに提供された要求を処理できるようにするため、インスタンスは、ハイパーバイザにより実施されるワーカコントローラ104aの各種の能力を利用してもよい。ハイパーバイザは、インスタンス102a及びワーカコントローラ104aの双方がアクセス可能な共有メモリ106aを実施してもよい。データは、インスタンスが特定要求をサービスするのに適するよう、双方向に流れてもよい。インスタンスは、共有メモリ106aにデータを入れ、ワーカコントローラがデータを入手し要求処理を完了できるよう、構成されてもよい。同様に、ワーカコントローラは、共有メモリにデータを置き、適宜データを処理するよう構成されてもよい。ハイパーバイザは、インスタンスとワーカコントローラの通信を調整し、共有メモリに置かれるデータについての通知を行ってもよい。この方法では、データがハイパーバイザにより実施される分離ロジック領域にあったとしても、ワーカコントローラの能力を利用できるよう、要求インスタンスとワーカコントローラとの間でデータ送信を可能にできる。
上で示したように、物理的ホストは、分散計算システム及び/またはデータセンタにおいて、相互接続された複数サーバの一つであってもよいことは評価される。図2は、分散計算及び/またはデータセンタ環境200を示しており、当該環境で多様な実施形態が実行されてもよい。複数のカスタマデバイス202は、パブリックネットワーク204を介してデータセンタ206と通信する。カスタマデバイスは、いずれもがパブリックネットワークなどを介してデータセンタに接続可能なデバイスであってよく、例えばパーソナルコンピュータ、スマートフォン、タブレット計算デバイスなどである。例示的な実施形態において、パブリックネットワークはインターネットであってもよいが、本明細書では、別の公的にアクセス可能なネットワーク(モバイルネットワーク及び/または無線ネットワークなど)を考察する。さらに、例示のためにパブリックネットワーク204を使用するが、別のネットワーク及び/または複数ネットワークを組合せて使用してもよく、必ずしも公的である必要も無い。場合により、カスタマデバイスは直接、光ファイバ接続またはその他接続を通して(例えば、データセンタ206への専用回線を介して)データセンタ206と通信してもよい。データセンタ206は1つまたは複数の管理コンポーネントを備えてもよく、制御プレーン208、ゲートウェイ210及び/またはモニタリングエンティティ212などがあるがこれらに限定されない。当該管理コンポーネントは、一括して内部ネットワーク214を介して複数の内部サーバ216に接続される。制御プレーン208は、データセンタの各種コンポーネントで動作するコードのアップデートを含め、リソースのプロビジョニング、ルート変更またはメンテナンスなど、データセンタの計算リソースを操作する要求を受信してもよい。ゲートウェイ210は、内部ネットワークを介したサーバとの受送信など、データセンタの受送信トラフィックをフィルタにかけルートを特定してもよい。モニタリングエンティティは、内部サーバに関する情報など、データセンタ内の計算リソースの状態に関する情報を受送信してもよい。
各内部サーバは、複数のロジックマシンスロット218により共有されてもよい。当該各スロットは、以下に記載するが、所与のサーバのハードウェアを抜き出して複数の半独立型実行環境にする仮想化システムでの場合のように、1つまたは複数のアプリケーションを実行できる。例えば、各スロットは、1つまたは複数の仮想プロセッサ(VCPU)にアクセス可能であってもよい。前に記載した複数のカスタマデバイスは台数に関係なく、データセンタの(物理的、論理的、または外部的に課せられた)上限までであれば、スロット数に関係なくオペレーティングシステムを必要とせずに、数に関係なくゲストオペレーティングシステムまたはゲストアプリケーションを実行してもよい。スロットは、1つまたは複数の操作基準及び/または業務関連基準に従いカスタマに割り当てられる。当該基準には、地理的近接性、サポート及び/またはユーザへの割当てリソースのレベル、サーバ及び/またはスロットの健全性及び/または即応性などがある。このため、少なくとも図1Aから図1Cを参照して記述した技術は、要求処理を効率的に行うよう調整及び/または適合されてもよい。
論じたように、本開示の多様な実施形態は、より効率的な計算リソースの使用やレイテンシの軽減など、要求処理に関する数多くの技術的優位性をもたらし得る技術を採用している。図3は、所定の優位性を達成するために採用する各種の技術の例示的な実施例を示す。図は、物理的コンピュータシステム(物理的ホストまたは物理的ホストコンピュータシステム)によりインスタンス化された汎用仮想コンピュータシステム(インスタンス)の構成302を示している。図はまた、汎用コンピュータシステムと比較するため、物理的コンピュータシステムによりインスタンス化されたインスタンス304(要求インスタンス)も示している。
図3に示すように、汎用インスタンスは、1つまたは複数の中央処理装置(CPU)、揮発性及び/または非揮発性メモリ、ネットワークインタフェースカード、及び/またはその他の計算リソースを含むコンピュータハードウェアを適宜使用して実施される。ハードウェアは、例えば、「ベアメタル」またはネイティブハイパーバイザなど、ハードウェア上で直接動作する仮想マシンモニタまたはハイパーバイザと、インタフェースで接続する。そのようなハイパーバイザの例に、Xen、Hyper−V(登録商標)などがある。ハイパーバイザは通常、他のソフトウェアと比べ、マシン上で最も特権ある最上位プロセッサ状態で動作し、メモリ管理、並びに、従属層及び/またはドメインのスケジューリングプロセッサなどのサービスを行う。ある実施形態においてdom0とされる、層及び/またはドメインの中で最上位の特権を与えた層及び/またはドメインを、サービスドメイン層に配置する。当該層は、ハイパーバイザの動作及び機能性を構成する管理オペレーティングシステムと、以下に記述するような、従来のオペレーティングシステムを必要とせずに実行するゲストオペレーティングシステム及び/またはアプリケーションを備えるゲストドメインなど、より低位の特権を有するドメインのオペレーティングシステムも備えてもよい。ゲストドメインは、種類が違っていてもよい(例えば、互いに異なるオペレーティングシステム及び/またはアプリケーションを動作する)。サービスドメインは、ユーザドメインとは異なり、サーバ302のハードウェアリソースにハイパーバイザを通して直接アクセスしてもよい。
特定の仮想コンピュータシステムに関し、Linux(登録商標)カーネルなどのオペレーティングシステム(OS)カーネルは、ハードウェアの各種の計算リソースを使用するためにハイパーバイザと対話してもよい。例えば、OSカーネルは、ハイパーバイザが提供する仮想化ハードウェアと対話して、1つまたは複数のユーザプロセスからの入力/出力(I/O)要求を制御するよう構成されてもよい。ユーザプロセスは、スクリプト言語など特定の対応プログラミング言語を実施するために、汎用インスタンス内で論理的に実施される仮想マシン(VM)である、言語仮想マシンを実施してもよい。言語VMにより、言語ランタイムが1つまたは複数のスレッドを作成でき、スレッド動作を可能にしてもよい。アプリケーションコードは、動作のため言語ランタイムを利用してもよい(すなわち、アプリケーションコードが言語ランタイムを参照する場合、ハードウェアがアプリケーションコード及び言語ランタイムの双方に従い動作してもよい)。
要求インスタンスの構成304に関して、要求インスタンスは、計算リソースオーバヘッドを低減するように実施される。特に、汎用インスタンスの構成と同様、要求インスタンスは、ハードウェアリソースを仮想化するハイパーバイザを用いて実施される。しかし、要求インスタンスは、汎用インスタンスの図にあるスタックを通さず、ハイパーバイザの直上で実行されるよう構成された言語ランタイムを使って実施される。この方法では、何百万行もの(汎用インスタンスに関連する)コードで起こるオーバヘッドを低減し、別の用途に使用することができる。
図4は、多様な実施形態における上記のような構成の実施方法を示す。図示したように、コンピュータハードウェア402は、Xenハイパーバイザなどのハイパーバイザ404により仮想化されてもよい。ハイパーバイザ404は、特権を有する管理ドメインDom0、及び特権を持たないドメインDomUに使用されてもよい。ある実施形態において、Dom0はネイティブOS406を備える。当該ネイティブOSは、OSカーネル408(例えばLinux(登録商標)カーネル)及びネイティブドライバ410を備え、アプリケーション及びOSが、ハイパーバイザ404により提供される仮想化ハードウェアと対話できるよう構成されてもよい。ネイティブOSは、要求ルーティングアプリケーション412、読取専用アプリケーションストレージ414、HTTPスタック416など、各種の制御アプリケーションをサポートしてもよい。以下で論じるように、HTTPスタックをDomUが用いて、リソースのオーバヘッドを低減したアプリケーション動作を可能にしてもよい。ある実施形態において、一部または全ての制御機能は、プロセスにより独立スタブドメインで実施されてもよい。当該スタブドメインは特権を持たないが、Dom0のセキュリティを高めるためにサービスプロバイダにより操作される。
ある実施形態において、DomUは、ハイパーバイザ404に対するバイナリ互換インタフェース(ABI)を使って実施され、HTTPスタック416を用いる。例えば、入出力には、ハイパーコールを通して実デバイスドライバスタックと通信するスプリットドライバモデルを用いてもよい。具体的には、図に示しているように、Node.jsのHTTPモジュールは、仮想ネットワークアダプタに対し、より多くのオーバヘッドを要するTCP/IPスタックをビルドするのではなく、Dom0のHTTPドライバを用い、http.createServer及びhttp.requestを実施してもよい。図示したように、例示的な本実施例において、JavaScript(登録商標)エンジン420、仮想ストレージドライバ422及びHTTPドライバ424は、仲介オペレーティングシステムを通さず、ABI418を通してハイパーバイザ404と直接対話する。JavaScript(登録商標)エンジン420、仮想ストレージドライバ422及びHTTPドライバ424は、Node.jsプラットフォーム426及びJavaScript(登録商標)ソフトウェア開発キット(SDK)428をサポートし、またプラットフォーム426及びJavaScript(登録商標)SDK428は、JavaScript(登録商標)で書かれたアプリケーションコード430をサポートする。JavaScript(登録商標)及びサポートコンポーネントは、例示のために本明細書に示しているが、本開示の範囲は、本明細書に明記した本実施形態に限定されない。例えば、本明細書に記述した技術は、他のスクリプト言語でも使用可能であり、通常アプリケーションコードのタイプは複数ある。
図5は、多様な実施形態の実施が可能な環境500の例示的な実施例を示している。図5に示すように、環境は、フロントエンドリスナ502、要求キュー504、ワーカハイパーバイザ506、及びアプリケーションイメージリポジトリ508を備える。環境500のコンポーネントは、単一物理的コンピュータシステムを用い実施されてもよいが、一部のコンポーネントは、ネットワークを通して通信可能な別のコンピュータシステムで実施されてもよい。ある実施形態において、フロントエンドリスナは、コンピュータシステム、またはコンピュータシステム上で実行するプロセス(すなわち、コンピュータプログラムを実行するインスタンス)であり、複数のアプリケーションに出される要求を待つよう構成される。例えば、フロントエンドリスナの複製を作成し、それぞれのホスト名、ポート、アプリケーションパスなど、複数のネットワークアドレス(例えば、パブリック及び/またはプライベートインターネットプロトコル(IP)アドレス)で要求を待つようにしてもよい。仮想コンピュータシステムのインスタンス化に使用可能なアプリケーションイメージはそれぞれ対応するネットワークアドレスを有し、ネットワークアドレス宛の要求を受信した場合、アプリケーションイメージを使用して、要求を処理する仮想コンピュータシステムをインスタンス化できるようにしてもよい。
ある実施形態において、フロントエンドリスナ502は、要求をフィルタにかける、バリデーション用プログラミングロジックを備えてもよい。例えば、フロントエンドリスナは、アプリケーションレジストリサービスを備えて構成され、アプリケーションレジストリサービスによりネットワークアドレスと有効なアプリケーションとの対応関係が示されてもよい。また、フロントエンドリスナは、不適切にフォーマットされた要求、悪質な要求、または受信回数が多すぎる要求を、調整またはブロックするよう構成されてもよい。ある実施形態において、フロントエンドリスナ502は、負荷分散機能を有して構成される。フロントエンドリスナ502は、例えば、要求内の情報及び/または要求に関連した情報をハッシュ化し、どのデバイスにワークトークンを提供するかの判断(例えば、どの要求キューを使用するかの判断)に使用するハッシュ値を判断する。また、フロントエンドリスナ502は、1つまたは複数の負荷分散技術を用いてワークトークンを配分してもよい。当該負荷分散技術では、多くの潜在要求キューそれぞれにあるトークンの、少なくとも一部のトークン数に基づき、トークンを配分してもよい。
要求キュー504は、ワークトークンを格納するよう構成されたキューデータ構造を用いたデータ構造またはプログラミングモジュールであってもよく、当該ワークトークンは、フロントエンドリスナにより受信され、フロントエンドリスナによりエンキューされた要求に対応する。フロントエンドリスナ502は、例えば、受信要求に対応するワークトークンを作成するよう構成されてもよい。ワークトークンは、要求を続きから処理するための再開ポイントとワークトークンとの関連付けを可能にする、プロセス識別子、スロット識別子、またはその他同様の識別情報を含んでもよい。ワークトークンは、リスニングアドレスに基づいた、または要求内に含まれるアドレス情報に基づいたアプリケーションアドレスを含んでもよい。フロントエンドリスナは、例えば、要求ワークトークンをメッセージ形式にシリアル化し、シリアル化されたトークンをメッセージキューに追加するなどして、要求ワークトークンをエンキューしてもよい。ある実施形態において、要求ワークトークンは、期限を設けて構成されてもよい。例えば、フロントエンドリスナは、要求キュー上での要求ワークトークンのエンキュー処理の一部として、要求ワークトークンに有効期限を付けてもよい。要求キューは、有効期限内に要求が満たされなければ、要求ワークトークンを自動的に終了または排出するよう構成されてもよい。
ある実施形態において、ワーカハイパーバイザ506は、受信要求を処理するために要求インスタンスをインスタンス化できるよう構成されたハイパーバイザである。ワーカハイパーバイザは、複数のワーカハイパーバイザとの競争コンシューマ環境の中で動作してもよい。そのような動作の実施には、ワーカハイパーバイザ506は、要求キュー504からのワークトークンを処理するよう構成されたプロセスであるワーカコントローラ510を備えて構成されてもよい。ワーカコントローラは、フロントエンドリスナ502を実施する計算デバイスとは別の計算デバイスにより実施されてもよい。ワーカコントローラは、ハイパーバイザの特権を有するドメインで実施されてもよい(一方、ハイパーバイザにより実施される全ての要求インスタンスが、より低位の特権を有する、または特権を持たないドメインで実施されてもよい)。さらに、本開示では、例示のためワーカコントローラ510を使用したが、ワーカコントローラ510の機能は、複数プロセスにそれぞれ分散されてもよい。つまり、ワーカコントローラ510は、複数プロセスの集合体としてもよい。一般的に、本明細書に示すコンポーネントは、文脈上明確でない限り、多様な方法で実施可能であり(例えば、複数プロセスでそれぞれに多様な機能に対する責任を分散させるなど)、本開示の範囲を必ずしも、本明細書に明記した例示的な実施形態に限定するものではない。図5に戻り、例示的な実施例を説明する。要求キュー504から要求をデキューするため、ワーカコントローラは、要求キューから要求ワークトークンを移動させずに、時間制限制で要求ワークトークンの排他的リースを受けてもよい。ワーカコントローラが制限時間内に要求を満たせなければ、自動的に要求ワークトークンを再度利用可能にするか、要求キューに返してもよい。ある実施形態において、ワーカコントローラ504は、処理中の要求トークン数を調整するよう構成される。ワーカコントローラ504は、例えば、要求処理の空き容量を検出してワークトークンをデキューし、次の要求処理用容量が足りないのにワークトークンをデキューしてしまう状態を回避してもよい。
別の実施例として、ワーカコントローラ510は、アプリケーションイメージリポジトリ508から、要求実行に適したアプリケーションイメージを検索するよう構成されてもよい。ワーカコントローラ510は、例えば、少なくとも一部の要求ワークトークンに基づき、適切なアプリケーションイメージを判断してもよい。例えば、ある実施形態において、ワーカコントローラは、要求ワークトークン内でURIとして要求パスのURIの一部を抜き出してアプリケーションアドレスを解析し、ディレクトリサービスを調べて要求パスのアプリケーションイメージをルックアップしてもよい。ある実施形態において、ワーカコントローラ510は、外部のアプリケーションイメージリポジトリにアクセスするより先に、ワーカハイパーバイザで既に使用可能なアプリケーションイメージ(図略)のキャッシュを調べてもよい。キャッシュは、アプリケーションイメージリポジトリ508にアクセスするより速くアプリケーションイメージにアクセスできるよう構成されてもよい。キャッシュは、例えば、ランダムアクセスメモリ(RAM)で実施されてもよく、一方、アプリケーションリポジトリは、回転磁気媒体を有するハードドライブ、ソリッドステートドライブ、またはその他デバイスなど、低速だが持続性のあるストレージを利用してもよい。
多様な実施形態において、ワーカコントローラ510は、要求インスタンス512をインスタンス化するようにも構成されている。ワーカコントローラ510は、例えば、ワーカハイパーバイザ506と対話し、多様な動作を実施するよう構成されてもよい。多様な動作では、例えば、要求インスタンス専用ユーザパーティションを新設し、ワーカハイパーバイザ506上で制御アプリケーションプログラミンインタフェース(API)を用いてプロセッサ、メモリ、またはその他リソースをユーザパーティションに割り当て、共有メモリ領域を構成し、ワーカハイパーバイザ506に命令し、読取専用メモリとしてユーザパーティションのアドレス空間に共有メモリ領域をマッピングさせる。ワーカコントローラ510は、少なくとも一部のアプリケーションイメージを共有メモリ領域からユーザパーティション割当メモリにコピーするよう構成されたブートストラッププログラムと対話してもよい。ブートストラッププログラムは、例えば、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレス(例えば、アプリケーションイメージ用にスナップショットを使用する際の命令ポインタのポイント先アドレス)を検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。
さらに、上で示したように、ワーカコントローラは、ワークトークンを利用して、フロントエンドリスナ502が受信した対応する要求と論理的コネクションを確立できる。この方法では、要求インスタンス内のアプリケーションコードが要求の入手を試みる場合、ワーカコントローラ510は、要求インスタンスに関連する要求ワークトークンを配置し、要求ワークトークンにより特定されたフロントエンドリスナへのコネクションを確立してもよい。一方、フロントエンドリスナは、要求インスタンスからのワークコネクション要求を待つよう構成されてもよい。フロントエンドリスナは、例えば、要求ワークトークンに含まれる識別情報に基づき、受信要求を配置するよう構成されてもよい。また、フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成するよう構成され、ワークコネクション要求を待つリスナに複製ソケットを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンス512に応じて複製ソケットを使い、データを読み出し書き込みしてもよい。
図6は、要求に対する応答に使用されるプロセス600の例示的な実施例を示す。プロセス600の動作は、例えば、以下で詳述するように、図5を参照して上で論じた環境500での各種コンポーネントにより実施されてもよい。ある実施形態において、プロセス600は、要求を受信すること(602)を含み、要求は、上記のように、ユーザデバイスによりネットワークを介して提供された要求であり得る。要求は、例えば、図5を参照して上に記載したように、フロントエンドリスナにより受信されてもよい。その後、要求インスタンスは、要求を処理するためにインスタンス化されてもよい(604)。ワーカハイパーバイザのワーカコントローラは、例えば、キャッシュまたはアプリケーションイメージリポジトリからアプリケーションイメージを入手してもよい。
適切な要求インスタンスがインスタンス化された後(604)、プロセス600は、インスタンス化された要求インスタンスに要求データを提供すること(606)を含んでもよい。要求データは、要求を満たして処理されるデータ、及び、要求を処理するインスタンス化された要求インスタンスのアプリケーションが必要とするメタデータを含んでもよい。要求データは全てが要求に包含されなくてもよいことに注意すべきである。例えば、要求は、データストリームを開始するよう構成されてもよいが、その時のデータ量は要求自体に収めるには大きすぎるかもしれない。その場合、要求データは、要求インスタンスに対しストリーミングプロセスに提供されてもよい。要求データを要求インスタンスに提供する多様な技術を以下で詳述する。
606で提供された要求データを要求インスタンスが処理した後、プロセス600は、要求インスタンスから応答を受信すること(608)を含んでもよい。以下で詳述するように、要求インスタンスは、要求インスタンス及びワーカコントローラの双方に共有される共有メモリ領域に応答を配置してもよい。さらに、要求データと同様に、応答データも単一通信内に全てが包含されなくてもよく、ストリーミングなど、より複雑なデータ転送形式を伴ってもよい。要求に対する応答が受信された後(608)、プロセス600は、要求者にネットワークを介して応答を送信して、要求者(すなわち、要求の請求元であるコンピュータシステム)に応答を提供すること(610)を含んでもよい。
多様な実施形態において、要求インスタンスにより要求処理が完了すると、次の要求インスタンスが処理すべき要求が受信されるまでは、要求インスタンスを必要としなくてもよい。そのため、図6に示すように、プロセス600は、要求処理完了を検出すること(612)を含んでもよい。例えば、ある実施形態において、受信応答の受信、及び/または要求に対する応答のディスパッチが、要求処理の完了のトリガとなる。ある実施形態において、要求インスタンスは、要求インスタンスで動作するアプリケーションによる通知、タイムアウト、及び/または別の方法など、多様な方法での終了動作中は継続して動作可能であってもよい。ある実施形態において、例えば、別の要求を処理できるよう要求インスタンスを実行可能にしておくことが望ましいかもしれない。要求処理完了のトリガが何であれ、プロセス600は、要求インスタンス用の計算リソースを、別の要求インスタンスを実施するなどの別の目的に使用できるようにする、要求インスタンスを非インスタンス化(すなわち、解体)すること(614)を含んでもよい。
図7は、多様な実施形態における、要求を処理するプロセス700の詳細な実施例を示す。図6を参照して上記したプロセス600と同様に、プロセス700は、以下でより詳細に記載するように、環境500でのコンポーネントにより実行されてもよい。ある実施形態において、要求をフロントエンドリスナなどにより受信されてもよい(702)。ボックス702から矢印で戻されているように、要求を受信したコンポーネントが、所与の要求処理を完了する前に、複数の要求を受信してもよい。プロセス700またはその変形の動作は、そのような要求を受信する毎に実施されてもよい。
要求を受信すると(702)、要求を処理するか否かの判断を行ってもよい(704)。上に示したように、要求を受信するフロントエンドリスナ(または別のコンポーネント)は、アプリケーションレジストリサービスによりネットワークアドレスと有効なアプリケーションとの対応関係が示されるよう構成されてもよい。別の実施例として、フロントエンドリスナまたは別のコンポーネントは、不適切にフォーマットされた要求、悪質な要求、または受信回数が多すぎる要求を、調整またはブロックするよう構成されてもよい。そのため、プロセス700の実行に関連して動作するフロントエンドリスナまたは別のコンポーネントにより実施される、少なくとも一部の基準に基づき、要求を処理するか否かが判断されてもよい。
要求を処理すると判断されれば(704)、プロセス700は、要求ワークトークンを作成すること(706)を含んでもよい。ワークトークンは、例えば、フロントエンドリスナにより多様な情報を含むよう構成されてもよく、当該情報により、ワークトークンと対応する要求との関連付けが可能になる。ワークトークンは、例えば、要求を続きから処理するための再開ポイントとワークトークンとの関連付けを可能にする、プロセス識別子、スロット識別子、またはその他同様の識別情報を含んでもよい。また、ワークトークンは、リスニングアドレスに基づいた、または要求内に含まれるアドレス情報に基づいたアプリケーションアドレスを含むよう構成されてもよい。一般的に、ワークトークンの情報は、実施形態において種類も情報量も多様である。ある実施形態において、ワークトークンは、非同期に構成されてもよい(例えば、要求が受信される(702)以前)ことに注意すべきである。ワークトークンは、例えば、受信要求、及び/または、要求についてのその他関連情報に関連させて事前に作成されてもよい。
構成された(または要求に関連付けられた)後、プロセス700は、上記のように、要求キューにワークトークンをエンキューすること(708)を含んでもよい。また、プロセス700は、ワークトークンをデキューすること(710)を含んでもよく、当該ワークトークンは、要求キューで最も古いワークトークンであってもよく、上記のワークトークンと同じであっても異なっていてもよい(しかし、上で記述したように、上記のようにエンキューされたワークトークンは、プロセス700の一部を繰り返すことでデキューされることになるかもしれない)。ワークトークンは、ワーカハイパーバイザのワーカコントローラなど、コンピュータシステムに適したコンポーネントによりデキューされてもよい。さらに、記載したように、ワークトークンをデキューすることは、要求キューから要求ワークトークンを削除せずに、要求キューから要求ワークトークンの排他的で時間制限制のリースを受けることを含むことができ、ワーカコントローラが制限時間内に要求を満たせなければ(例えば、ワーカコントローラを実施するコンピュータシステムが要求の処理中に正常に作動しない場合など)、要求ワークトークンを再度利用可能にしてもよい。デキューされたトークンが有効か否かを判断してもよい(712)。例えば、上で論じたように、トークンは、有効期限を示す情報を含んでもよい。トークンが有効かどうかを判断する(712)ことは、有効期限を現在時間と比較することを含んでもよく、有効期限が現在時間より前であればトークンは無効であるとみなしてもよい。トークンが有効かどうかの判断に、別の基準を使用してもよい。
トークンが有効であると判断した(712)場合、プロセス700は、要求処理に適したアプリケーションイメージを判断すること(714)を含んでもよい。例えば、トークンに関連する少なくとも一部の情報に基づき、アプリケーションイメージを判断してもよい(714)。トークンは、例えば、適切なアプリケーションの識別子を含んでもよく、要求トークンの情報からアプリケーションを判断してもよい。例えば、アプリケーションを判断する際、要求ワークトークン内でユニフォームリソース識別子(URI)として要求パスのURIの一部を抜き出してアプリケーションアドレスを解析し、ディレクトリサービスを調べて要求パスのアプリケーションイメージをルックアップしてもよい。別の実施例として、ワークトークンからの情報を用いて適切なアプリケーションをルックアップしてもよいが、その際、トークンの外部で格納され、おそらくはネットワークを介して(例えば、ウェブサービス要求を介して)アクセス可能になるテーブル、またはその他のデータ構造内をルックアップしてもよい。一般的に、ワークトークンからアプリケーションを判断する方法は、いずれの方法であってもよい。
適切なアプリケーションを判断した(714)後、判断したアプリケーションを検索してもよい(716)。例えば、アプリケーションイメージを、ローカルキャッシュ、ローカルデータ記憶装置、または外部から取得してもよい。ある実施形態において、ワーカコントローラは、ローカルキャッシュにアプリケーションが無いか確認し、キャッシュに無ければ、外部アプリケーションイメージリポジトリなど別の場所でアプリケーションを検索する。アプリケーションイメージ(または、要求処理の開始に適した、少なくとも一部のアプリケーションイメージ)を入手すると、プロセス700は、検索したアプリケーションイメージを用いて、図3及び4を参照して上記したような構成の要求インスタンスをインスタンス化すること(718)を含んでもよい。例えば、ワーカコントローラは、ワーカハイパーバイザに命じて、少なくとも一部のアプリケーションイメージに基づき、要求インスタンスをインスタンス化させてもよい。例えば、ワーカコントローラは、ワーカハイパーバイザに命じて、要求インスタンス専用ユーザパーティションを新設させ、ワーカハイパーバイザ上で制御APIを用いてプロセッサ、メモリ、またはその他リソースをユーザパーティションに割当てさせてもよい。また、ワーカコントローラは、少なくともアプリケーションイメージを含む共有メモリ領域を構成し、ワーカハイパーバイザに命じて、ユーザパーティションのアドレス空間に、読取専用メモリとして共有メモリ領域をマッピングさせてもよい。さらに、ワーカコントローラは、ブートストラッププログラムを使ってユーザパーティションを構成してもよい。ブートストラッププログラムは、実行されると、共有メモリ領域から得た少なくとも一部のアプリケーションイメージを、ユーザパーティション割当メモリにコピーするよう構成されてもよい。ブートストラッププログラムは、共有メモリ領域からの、アプリケーションイメージのコピー部分に関連するエントリポイントアドレスを検索し、エントリポイントに基づきアプリケーションコードの実行を開始してもよい。
要求インスタンスのインスタンス化後(718)、要求インスタンスに要求を処理させてもよい(720)。例えば、要求インスタンスは、要求ワークトークンを用いて要求へのコネクションを確立し、以下で詳述するように、要求から処理用データを取得してもよい。
図7で示すように、プロセス700は、要求キューから次のトークンの通知を受信したか否かを(通知を出すよう構成されている場合)要求キューに問い合わせるかモニタリングするなどにより、次の処理対象ワークトークンがあるか判断すること(722)を含んでもよい。要求キューに少なくとも1つまたは複数のワークトークンがあると判断すれば、プロセス700は、別のワークトークンをデキューし(710)、上記などのようにワークトークンを使用し別の要求を処理することを含んでもよい。図に示したように、次のワークトークンが無いと判断すれば(722)、プロセス700は、新規要求をサービスできるよう、受信したワークトークンが無いか継続してモニタリングすることを含んでもよい。
要求を受信し、要求を処理しないと判断する(704)か、受信要求に対応するトークンが有効ではないと判断(712)する場合、プロセス700は、要求を拒否すること(724)を含んでもよい。拒否及び/または拒否理由を示すメッセージを送信するか、単に応答を返さないなど、任意の方法で要求を拒否してもよい。
図8は、多様な実施形態における、要求を処理するプロセス800の例示的な実施例を示す。プロセス800は、図5を参照して上記し、以下で詳述するような環境500における1つまたは複数のコンポーネントなど、適切なシステムにより実施されてもよい。ある実施形態において、プロセス800は、ワーカハイパーバイザに命じ、少なくとも一部のアプリケーションイメージに基づき、要求インスタンスをインスタンス化させること(802)を含んでもよい。例えば、アプリケーションイメージが作成されたアプリケーションによりサービス可能な要求を受信したことを受け、ワーカハイパーバイザに要求インスタンスをインスタンス化させるよう命じてもよい(802)。要求インスタンスのインスタンス化後のある時点で、アプリケーションイメージのアプリケーションコードが実行されるが、実行の際、要求を処理するために要求の入手を試みることを含んでもよい。そのため、プロセス700は、アプリケーションコードでの、要求を入手する試み(すなわち、アプリケーションコードを実行するコンピュータシステムによる試み)を検出すること(804)を含んでもよい。要求を入手する試みを検出した(804)ことを受け、ワーカコントローラは、要求インスタンスに関連する対応ワークトークンを配置してもよい(例えば、メモリから、恐らくは格納された複数のワークトークンから選択して入手する)(806)。その後、ワーカコントローラは、配置されたワークトークンを用い、フロントエンドリスナにより格納される要求とワークトークンのコネクションを確立してもよい(808)。例えば、ワークトークンと要求との関連性を少なくとも部分的にはメモリに格納して、コネクションを確立してもよい。
コネクションを確立した(808)後、プロセス800は、トークンを用いて要求を配置し(810)、要求インスタンスにデータを提供すること(812)を含んでもよい。例えば、フロントエンドリスナは、ワーカコントローラからのワークコネクション要求を待ち(すなわち、モニタリングし)、そのようなワークコネクション要求を受信すると、ワーカコントローラから提供されたトークン及び/またはワーカコントローラから得た情報に基づき、受信要求を配置してもよい。フロントエンドリスナは、受信要求の受信に使用するソケットハンドルの複製を作成し、ワークコネクション要求を待つリスナに複製ソケットハンドルを割り当ててもよい。ワークコネクション要求を待つリスナは、要求インスタンスに応じて複製ソケットを用い、データの読み出し、書き込みを行ってもよい。データを要求インスタンスに提供した(812)後、以下で詳述するように、要求インスタンスから応答を受信してもよい(814)。その後、応答を要求者(すなわち、プロセス800の実行のトリガとなった要求を出したコンピュータシステム)に返してもよい(816)。
本明細書の他の箇所でも示したように、本明細に明記した実施形態の数多くの変形は、本開示の範囲内であると考えられる。例えば、上記の例示的な実施形態では、ワーカコントローラは、要求を処理する仮想コンピュータシステムのインスタンス化に適したアプリケーションイメージを判断し取得する。そのような機能を、多様な計算環境における様々なエンティティが実施してもよい。例えば、フロントエンドリスナまたは別のシステムが、どのアプリケーションイメージを入手すべきかを判断し、イメージ、または、イメージを見つけ出せる位置(例えばURIにより)を特定する情報を提供してもよい。同様に、フロントエンドコントローラは、独自にアプリケーションイメージを取得し、アプリケーションイメージをワーカコントローラに転送してもよい。さらに、上記の実施形態は、ワーカコントローラにより処理される要求キューにトークンがエンキューされるような実施形態を含む。一般的に、フロントエンドリスナは、多様な方法でワーカコントローラに通知することができ、例えば、ワーカコントローラに通知を出し、要求インスタンスが要求を取得できるようにするロジックを、ワーカコントローラに処理させる方法がある。他にも本開示の範囲内であると考えられる変形例がある。
上記したように、アプリケーションイメージは、受信要求をサービスするために、仮想コンピュータシステムをインスタンス化(要求インスタンス)できるよう作成される。本開示の多様な技術は、そのようなアプリケーションイメージの作成に関連し、効率的なインスタンス化を可能にし、計算リソースの使用を抑えながら要求に応じてレイテンシを軽減する。図9は、本開示の多様な実施形態を実施する環境900の例示的な実施例を示す。図9の環境900の実施例は、アプリケーションソース902、ビルドシステム904、ビルドハイパーバイザ906、及びワーカハイパーバイザ908を備える。アプリケーションソースは、アプリケーションイメージをビルドする際に使用されるアプリケーションコードを提供するシステムまたはシステムの構成コンポーネントにより、提供されてもよい。アプリケーションコードは、デベロッパが受信したものであってもよい。当該デベロッパとは、例えば、計算リソースサービスプロバイダのカスタマデベロッパ、または、一般的には、アプリケーションインスタンスをビルドするためのアプリケーションコードを提供できるデベロッパなどである。アプリケーションソースは、デベロッパにより、例えば、ウェブサービス・アプリケーションプログラミングインタフェース(API)またはバージョン管理システムを通して、提供されてもよい。アプリケーションソースは、ソースファイル、構成ファイル、リソースファイル(ウェブページ、イメージ、またはその他メディアファイルなど)、及び/またはバイナリファイルなどを含んでもよい。
ビルドシステム904は、下で詳述するが、アプリケーションコードが処理されアプリケーションイメージが作成され、アプリケーションイメージリポジトリ910に配置される前に、プリプロセッサとして動作するよう構成されたシステムまたはシステムの構成コンポーネントであってもよい。ワーカハイパーバイザは、上記のようなワーカハイパーバイザであってもよく、例えば、1つまたは複数のプロセスを有し、当該プロセスがアプリケーションイメージリポジトリ910からアプリケーションイメージを入手し、入手したアプリケーションイメージを用いて、要求を処理する要求インスタンス912をインスタンス化するよう構成される。図9の各種のコンポーネントは、独立した物理的コンピュータシステム上で実施されてもよいが、本開示の多様な実施形態は、同一の物理的コンピュータシステムが、仮想化層を追加するなどして、ビルドハイパーバイザ906もワーカハイパーバイザ908も実施する実施形態を含む。
ある実施形態において、ビルドシステム904は、変動認知パーサ914を用いアプリケーションソースを処理し、アノテーション付きソースを作成するよう構成される。変動認知パーサは、アプリケーションソースの実行可能部分(例えば、ソースコード及び/またはコンパイルしたソースコード)を実行し、プログラムの実行に変動が始まる1つまたは複数の位置(変動ポイント)を判断するよう構成された、システムまたはシステムの構成コンポーネント(例えば、システム上で実行するプロセス)であってもよい。変動が見られるのは、例えば、ネットワークメッセージの受信、ユーザの行った入力の読込み、システムクロックの読込み、乱数ジェネレータの使用、及び/または、アプリケーションソースから確定的でない情報を入手することになるようなその他類似アクションの実施などである。つまり、変動ポイントは、複数回行った実行結果に潜在的に様々な変動が見られるような、1つまたは複数のコンピュータ実行可能命令に対応してもよい。アプリケーション実行結果に変動があるような機能の一覧を保存し、変動認知パーサが、変動が始まる実行位置を特定できるようしてもよい。
また、変動認知パーサ914は、アプリケーションソースにアノテーションを付けるよう構成され、1つまたは複数の特定位置を記録するために、アプリケーションソースに関連付けて、メタデータにアノテーションを格納してもよい。ある実施形態において、変動認知パーサは、プログラムの構造を静的分析し、最初に、アプリケーションソースを実行する1つまたは複数のエントリポイントを特定するよう構成される。変動認知パーサ914は、例えば、1つまたは複数のエントリポイントから始め潜在的な変動を検出するまで、アプリケーションソースを解析、解釈、またはその他分析を行ってもよい。変動認知パーサ914は、例えば、判断した位置に該当するソースコード行、または実行可能マシン命令のリストを記録するなどして、判断した変動位置を格納してもよい。ある実施形態において、変動認知パーサは、アプリケーションソースにデベロッパが付けたアノテーションと相互に作用するよう構成される。例えば、変動認知パーサは、変動を考慮すべきプログラム位置かどうかより優先して、アノテーションを読み出して処理してもよい。そのようなデベロッパのアノテーションは、シンタックスの通りであってもよく、変動認知パーサ914は当該シンタックスを処理するよう構成されている。
ある実施形態において、ビルドシステムは、アノテーション付きアプリケーションソースを、ビルドハイパーバイザ906により実施されるビルドコントローラ916に送信するよう構成される。ビルドコントローラ916は、ビルドハイパーバイザ906上で実行されるプロセスであってもよい。ある実施形態において、ビルドシステム904は、ビルド要求を受信可能な複数のハイパーバイザからビルドハイパーバイザを選択する。ビルドシステム904は、アーカイブフォーマットにアノテーション付きソースをパッケージし、ビルドコントローラが使用可能な位置にアーカイブを格納してもよい。ビルドシステム904は、ビルドコントローラ916と通信し、ビルドコントローラに対し、ビルド要求を開始するアーカイブの位置を含むウェブサービス要求を出すなどして、アプリケーションビルドを起動してもよい。
ある実施形態において、ビルドコントローラ916は、ビルドブートストラッププログラムを入手するよう構成される。ビルドブートストラッププログラムは、ブートストラッププログラムリポジトリ920に格納されてもよく、当該リポジトリ920は、ビルドハイパーバイザ906と同じ物理的コンピュータシステム上にあってもよく、または別の位置でネットワークを介して入手可能になる分散システムにあってもよい。ビルドコントローラは、アノテーション付きソースを分析し、アプリケーションに適したブートストラッププログラムを判断してもよい。例えば、ビルドコントローラは、ブートストラッププログラムの選択に影響を与えるプラットフォーム要件またはその他要因について、アノテーション付きソースを分析してもよい。アプリケーションタイプが異なれば、ブートストラッププログラムは異なってもよい。JavaScript(登録商標)アプリケーション用ブートストラッププログラムもあれば、Ruby(登録商標)アプリケーション用ブートストラッププログラム等であってもよい。さらに、各アプリケーションタイプ(JavaScript(登録商標)、Ruby(登録商標)など)用に、複数のブートストラッププログラムがありそこから選択してもよく、各ブートストラッププログラムは、1つまたは複数のサブタイプアプリケーションに適していてもよい。ある実施形態において、ブートストラッププログラムはそれぞれ、アノテーション付きソース用カーネルをブートするよう構成される。ブートストラッププログラムは、実行時、メモリにカーネル及びアノテーション付きソースを読み込むルーチンに従って動作してもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンも備えてもよい。さらに、ブートストラッププログラムは、カーネルのエントリポイントからカーネルの実行を開始するルーチンを備えてもよい。
ある実施形態において、ビルドコントローラ916は、アノテーション付きソース及びビルドブートストラッププログラムに基づき、ビルドインスタンス918を生成してもよい。ビルドコントローラは、例えば、アノテーション付きソース及びブートストラッププログラムの入手先である仮想マシンをインスタンス化してもよい。ビルドコントローラは、ビルドインスタンスに変動モニタ922を動作可能に装着し、仮想マシンに対する変動イベントを検出し応答してもよい。変動モニタ922は、アプリケーションの実行を分析し、変動イベントを検出するよう構成され、ハイパーバイザ906上で実行されるプロセスであってもよい。また、ビルドコントローラは、インスタンス化仮想マシンに命じてブートストラッププログラムを実行させるよう構成されてもよい。ブートストラッププログラムが実行されると、変動モニタ922は、ビルドインスタンスがアプリケーションの変動ポイントに達したことに応答して、ビルドインスタンスを停止させるよう構成されてもよい。例えば、変動モニタ922は、仮想マシンのブレークポイントを用いて実施されてもよい。この場合、変動モニタ922は、ブレークポイントへの到達を知らせる通知を受信し、通知の受信に応答して仮想マシンを停止させるよう構成されてもよい。変動モニタ922は、ハイパーバイザの機能を利用し、CPUが特定コード命令を実行している時、または、変動ポイントへの到達を示す別のイベントが検出された時には、ハイパーバイザに命じてプログラムを一時停止させてもよい。1つの実施例として、変動モニタは、アプリケーションソース、または、アプリケーションソースを包含するメモリページにある命令を読み出し、変動ポイントの位置を判断してもよい。変動につながる命令を受けた際、変動モニタ922は、アプリケーションコードを実行する仮想マシンの停止に相当する値を有する割り込みを発行してもよい。ハイパーバイザは、その割り込みをトラップし、ビルドインスタンスCPUの割り込みハンドラがアプリケーションの実行を停止させてもよい。
第二の手法として、Intel(登録商標)アーキテクチャを採用しているシステムにより使用される割り込み命令である、ブレークポイント命令を使用する手法がある。割り込み(例えば、値3、または、一般的に実行停止が必要であることを示す割り込み値、を有する割り込み)を検出するよう、ブートストラップの一部として割り込みハンドラを搭載してもよい。割り込みを検出すると、仮想マシン内での割り込みの発生に応答して、割り込みハンドラコードが実行されてもよい。割り込みハンドラの一部として、トラップされた命令を示す変動モニタと通信し、仮想マシンの実行を中止する必要性を示してもよい。つまり、この手法において、まず、ビルドインスタンス内で動作する別のコードに制御を移すが、その後変動モニタと通信し、スナップショットを取ってマシンをシャットダウンさせる。
ビルドプロセスの一部として、ビルドコントローラは、停止されたビルドインスタンスのスナップショットイメージを取るよう構成されてもよい。ビルドコントローラは、例えば、プロセッサレジスタ、フラグ、プログラムカウンタ、及び仮想環境のその他の態様の状態を含む、仮想マシンのメモリ空間のコピーを作成してもよい。スナップショットイメージは、スナップショットイメージの実行がレジュームされ得るエントリポイントアドレスを含んでもよい。ある実施形態において、ビルドコントローラは、ビルドインスタンスの実行を近くの実行セーフポイントに移すよう構成されてもよい。例えば、ビルドコントローラは、所定のカーネルルーチン、クリティカルセクション、またはその他実行が安全でない部分の実行時には、マシン命令ポインタを進めたり戻したりして、スナップショットイメージを取ることを回避してもよい。ビルドコントローラは、実行をレジュームするために、プロセッサレジスタの一部または全てを復元する必要がないような近接ステートに、ビルドインスタンスを移してもよい。ビルドインスタンスを実行セーフポイントに移動させた後、ビルドコントローラ916によりスナップショットを取ってもよい。
上で示したように、こうしてビルドされたアプリケーションイメージは、要求インスタンス(または、一般的に、少なくとも一部のアプリケーションに基づいたインスタンス)のインスタンス化に利用されてもよい。ある実施形態において、ビルドコントローラ916は、1つまたは複数のワーカハイパーバイザがアクセス可能なアプリケーションイメージリポジトリにスナップショットを収めるよう構成される。ワーカハイパーバイザは、アプリケーションイメージリポジトリからアプリケーションイメージを検索し、スナップショットに基づき要求インスタンスを構築し、エントリポイントアドレスでアプリケーションの実行をレジュームしてもよい。
図10は、要求インスタンスなどのインスタンス化など、多様な目的のために使用されるアプリケーションイメージをビルドするプロセス1000の例示的な実施例を示す。プロセス1000の動作は、図9を参照して上で記述し以下で詳述するような、ビルドシステム及び/またはビルドハイパーバイザなどによる適切なシステムにより実施されてもよい。ある実施形態において、プロセス1000は、上記のようなアプリケーションソースコードを受信すること(1002)を含む。例えば、アプリケーションソースコードは、ソースコードを開発したデベロッパから受信してもよい。変動認知パーサを使用して、受信アプリケーションソースコードを処理してもよく(1004)、プログラムの実行における潜在的な変動を判断し記録してもよい(1006)。例えば、上で論じたように、ビルドシステムは、変動認知パーサにアプリケーションソースの実行可能部分を調べさせ、プログラムの実行に変動が始まる1つまたは複数の位置を判断させ、アプリケーションソースにアノテーションを付けてもよい。代わりにまたは追加して、アプリケーションソースに関連付けしたアノテーションをメタデータに格納し、1つまたは複数の判断位置を記録してもよい。潜在的な変動を判断する際、アプリケーションソースを実行する1つまたは複数のエントリポイントを特定し、1つまたは複数のエントリポイントから始めて潜在的な変動部分を検出するまで、アプリケーションソースを解析、解釈または分析してもよい。さらに、示したように、変動認知パーサは、デベロッパによりアプリケーションソースに付されたアノテーションに対応し、例えば、変動を考慮すべきプログラム位置か否か、より優先すべきアノテーションかどうかを判断してもよい。判断した潜在的な変動位置を、判断した位置に該当するソースコード行、または実行可能マシン命令のリストを記録するなど、任意の適切な方法で格納してもよい。
図10に示すように、プロセス1000は、ビルドハイパーバイザを選択すること(1008)を含んでもよい。ビルドハイパーバイザは、例えば、アプリケーションブートイメージの作成における、ビルドハイパーバイザの利用可能性の少なくとも一部に基づき、選択されてもよい。また、ビルドハイパーバイザは、特定タイプ(例えば、JavaScript(登録商標)またはRuby(登録商標))のアプリケーションのビルドに適した構成を有するなど、1つまたは複数のその他要因の少なくとも一部に基づき、選択されてもよい。選択後、アノテーション付きアプリケーションソースは、選択された処理ビルドハイパーバイザに送信されてもよい(1010)。例えば、ビルドハイパーバイザを操作するシステムとは異なるシステム上で、アプリケーションソースにアノテーションを付ける場合、アノテーション付きアプリケーションソースは、ネットワークを経由してビルドハイパーバイザに送信されてもよい。ブートストラッププログラムも選択されてもよい(1012)。上で論じたように、アプリケーションタイプが異なれば、対応するブートストラッププログラムは異なってもよい。例えば、特定のブートストラッププログラムは、特定のアプリケーションタイプに対応して構成されてもよい。しかし、別の実施形態では、ブートストラッププログラムは、複数のアプリケーションタイプでの使用が可能であるなど、より複雑な構成であってもよい。多様な実施形態において、ブートストラッププログラムは、アノテーション付きソースに対応するカーネルをブートするよう構成される。ブートストラッププログラムは、例えば、カーネル及びアノテーション付きソースをメモリに読み出すルーチンを備えてもよい。ブートストラッププログラムは、アノテーション付きソースの判断変動位置にブレークポイントを設定するルーチンを備えてもよい。また、ブートストラッププログラムは、カーネルのエントリポイントからカーネルの実行を開始するルーチンも備えてもよい。
ある実施形態において、プロセス1000は、ブートストラッププログラム及びアノテーション付きソースコードの双方を入手可能な仮想マシンをインスタンス化すること(1014)を含んでもよい。仮想マシンは、例えば、上で論じたビルドコントローラの命令に基づきインスタンス化されてもよい。また、ビルドコントローラは、仮想マシンへの変動イベントを検出し応答する変動モニタを、インスタンス化仮想マシンに装着させてもよい。ビルドコントローラは、インスタンス化仮想マシンに命令し、ブートストラッププログラムを実行させてもよい。その後、アプリケーションを実行し、変動モニタがモニタリングし(1016)、ビルドインスタンスがアプリケーションの変動ポイントに到達すると、変動モニタがビルドインスタンスを停止させてもよい(1018)。例えば、変動モニタは仮想マシンのブレークポイントを用いて実施されてもよい。変動モニタは、ブレークポイントへの到達を知らせる通知を受信し、通知の受信に応答して仮想マシンを停止させるよう構成されてもよい。ビルドインスタンスのスナップショットを取ってもよい(1020)。ある実施形態において、スナップショットを取る際(1020)、ビルドコントローラが、プロセッサレジスタ、フラグ、プログラムカウンタ、及び仮想環境のその他態様の状態を含む、仮想マシンのメモリ空間のコピーを作成する。スナップショットイメージは、スナップショットイメージの実行がレジュームされるエントリポイントアドレスを含んでもよい。以下で論じるように、スナップショットを取る際、近くの実行セーフポイントにビルドインスタンスを移動させてもよい。例えば、ビルドコントローラは、所定のカーネルルーチン、クリティカルセクション、またはその他実行が安全でない部分の実行時には、マシン命令ポンタを進めたり戻したりして、スナップショットイメージを取ることを回避してもよい。また、ビルドコントローラは、実行をレジュームするために、プロセッサレジスタの一部または全てを復元する必要が無いような近接ステートに、ビルドインスタンスを移してもよい。
ある実施形態において、プロセス1000は、後にスナップショットを使用して要求インスタンスなどをインスタンス化できるような場所に、スナップショットを格納することを含む。従って、図10に示すように、プロセス1000は、以下で記述するように、後にスナップショットを使用して要求インスタンスをインスタンス化するなどのため、アプリケーションイメージリポジトリにスナップショットを配置すること(1022)を含む。
本明細書に明確に開示した全ての技術と同様、変形も本開示の範囲内であると考えられる。例えば、いつビルドインスタンスのスナップショットを取るか、及び/または、どのスナップショットを使用するかの判断における変形を使用することで、インスタンスのインスタンス化に使用するスナップショットの信頼性を高くし、不要な処理を必要とせず的確な設定でインスタンス化できるようにしてもよい。
ある実施形態において、アプリケーション実行でのセーフポイントは、上記のように、変動認知パーサにより特定される。図11は、スナップショットを取れるセーフポイントの判断に使用されるプロセス1100の例示的な実施例を示す。プロセス1100は、変動認知パーサ、またはそのような機能を有する別のシステムなど、適切なシステムにより実施されてもよい。ある実施形態において、プロセス1100は、第一命令を入手すること(1102)、その命令が変動ポイントに対応しているかを判断すること(1104)を含む。命令が変動ポイントに対応しているかの判断(1104)を、例えば、上記のとおり実施してもよい。現命令が変動ポイントに対応していないと判断すれば(1104)、プロセス1100は、次の命令の入手動作、及び、入手した命令が変動ポイントに対応しているかの判断動作(1104)を繰り返してもよい。これらの動作を、新しく入手した命令が変動ポイントに対応していると判断する(1104)まで繰り返してもよい。
新規入手命令が変動ポイントに対応していると判断(1104)した場合、プロセス1100は、新規入手命令がセーフポイントに対応しているかどうかを判断すること(1106)を含んでもよい。新規入手命令がセーフポイントに対応しているかどうかの判断(1106)は、適切であればいずれの方法で実施されてもよい。例えば、ある実施形態において、新規入手命令を分析して命令に繋がる機能を判断し、判断した機能が、安全でない(例えば、そのような機能の呼出しにより、マシンへの割り込みが特定状態において設定されるためか、機能の呼出しが、一時停止及びレジュームプロセスでは復元不可能なアクティビティに該当するため)として特定された機能の一覧にあるかどうかを確認する。
新規入手命令がセーフポイントに対応しないと判断した場合(1106)、プロセス1100は、旧命令(例えば、命令シーケンスでの直前の命令)を入手すること(1108)を含んでもよい。再度、新規入手命令がセーフポイントに対応するかどうかの判断を実施してもよい(1106)。このプロセスでは、新規入手命令がセーフポイントに対応していると判断される(1106)まで継続して、旧命令の入手、及びセーフポイントに対応するかの判断を繰り返してもよい。新規入手命令がセーフポイントに対応すると判断した(1106)場合、変動モニタ(または別の適切なシステム)により処理された時にアプリケーションの実行が特定されたポイントで停止されるよう、プロセス1100は、変動ポイント/セーフポイントとして現命令を特定すること(1110)を含んでもよい。この方法において、セーフポイントは、セーフポイントでない実変動ポイントとしてではなく、次回の処理のための変動ポイントとして特定される。
図12は、アプリケーションイメージの作成に使用できるセーフポイントを判断する代替プロセスを示す。プロセス1200は、ビルドインスタンスの一部として動的にセーフポイントを計算するよう実施されてもよい。プロセス1200は、上記したような変動モニタや他のそのようなシステムなど、適切であればいずれのシステムで実施されてもよい。プロセス1200において、スナップショットの取得を開始(1202)し、ビルドインスタンスによるアプリケーションコードの実行中は何度もスナップショットを取るようにしてもよい。例えば、スナップショットの取得を開始し、マイクロ秒毎(またはその他時間毎)、及び/または命令を実行する度など、定期的にスナップショットを取るようにしてもよい。
ある実施形態において、プロセス1200は、第一/次の命令について、命令を実行し、及び/または、処理中の命令を分析する処理を行うこと(1204)を含んでもよい。上記のように、命令が変動ポイントに対応するかどうかの判断を実施してもよい(1206)。命令が変動ポイントに対応しないと判断した(1206)場合、プロセス1200は、処理中の命令が変動ポイントに対応していると判断する(1206)まで、次の命令の処理を繰り返し得る。現命令が変動ポイントに対応すると判断した(1206)場合、プロセス1200は、時間逆進制でのスナップショットシーケンスの第一スナップショットを入手すること(1208)を含んでもよい。第一スナップショットは、例えば、変動ポイントに対応する命令を受ける直前に取られた最新のスナップショットであってもよい。
スナップショットがセーフポイントに対応するかどうかの判断を実施してもよい(1210)。少なくとも一部のスナップショット分析に基づき判断されてもよい(1210)。セーフポイントの基準セットを確認し、基準に合っていれば、スナップショットがセーフポイントに対応するとしてもよい。基準は、少なくとも一部のCPU状態を基にしてもよい。例えば、少なくとも一部のCPUレジスタ状態に基づく基準は、割り込みフラグが設定されているか、CPUが例外を処理している最中か、CPUがページフォルト中か、及び、一般的にはCPUレジスタが復元可能かを含んでもよい。また、基準は少なくとも一部において、例えば、アプリケーションコードではクリティカルセクションにロックが掛けられているために、アプリケーションコードが原因でCPUがアンセーフポイントにあるのではないか、CPUが、CPU命令ポインタにより示された通りに、アンセーフとされた命令を処理している最中か、などに基づいてもよい。スナップショットがセーフポイントに対応していないと判断された(1210)場合、プロセス1200は、繰り返し、次の(時間的に戻る)スナップショットを入手すること(1208)を含み、新規入手スナップショットがセーフポイントに対応すると判断する(1210)まで、入手したスナップショットがセーフポイントに対応するかどうかを判断すること(1210)を含んでもよい。安全だと特定されないスナップショットはいずれも、セーフポイントに対応しないと判断する場合、プロセス1200の完了時などに、破棄されてもよい。スナップショットがセーフポイントに対応していると判断した(1210)場合、スナップショットはアプリケーションイメージに使用されてもよい(1212)。
一般的に、上記の技術は、スナップショットを取った時の、少なくとも一部のCPUの命令ポインタ位置に基づいた、エントリポイントを計算する技術をもたらす。これにより、正確な状態が使用できるので、アプリケーションイメージのブートの一部として再開位置が得られる。さらに、ブートストラップコードを追加してスナップショットポイントに飛ぶ前に実行し、CPUレジスタの値またはマシンの構成情報を格納できるようになどしてもよい。例えば、マシンの起動時、ブートストラッププログラムは、スナップショットイメージに正確に一致した状態を復元してもよい。ハイパーバイザの施設の完全なコピーを作成しなくてもよいが、メモリに状態情報を有しているので、状態情報が追加されてブートストラッププログラムが提供されても、ブートストラッププログラムは、不適切な状態の修正が可能になる。追加状態情報は、メタデータまたは補足アプリケーションイメージとして、ブートストラッププログラムに入手可能であってもよい。ブートストラッププログラムは、追加状態情報を使用し、アプリケーションのエントリポイントに飛ぶ前にアプリケーション状態を復元してもよい。
上に示したように、本開示での多様な実施形態は、本明細書に記述した多様な技術によりインスタンス化されたインスタンスが要する計算オーバヘッドを低減する。その結果、インスタンスプロビジョニングの処理が迅速にでき、リソースの無駄を最小にできる。図13は、要求を処理する要求インスタンスなどのインスタンスを可能にする環境の例示的な実施例を示す。図13に示すように、環境は、ワーカハイパーバイザ1302の内部で実施され、上記のようなワーカハイパーバイザであってもよい。ワーカハイパーバイザ1302はハイパーコールインタフェース1304を実施してもよく、当該ハイパーコールインタフェース1304により、ゲストオペレーティングシステムまたはゲストアプリケーション(例えば、要求インスタンス)はハイパーバイザに要求を出し得る。ハイパーコールインタフェース1304は、ワーカハイパーバイザ1302上で実施される要求インスタンス1308(または、処理を要する要求を受信した結果、必ずしもインスタンス化する必要のないその他のインスタンス)の準仮想ハイパーテキスト転送プロトコル(HTTP)ドライバ1306からハイパーコールを受信するよう構成されてもよい。ハイパーコールインタフェースは、準仮想HTTPドライバ1306から受信したハイパーコールをHTTPハイパーコールハンドラ1320に提供してもよい。例示のためにHTTPを全体的に使用するが、本明細書に記載の多様な技術は、インスタンスにより使用されるその他のプロトコルのサポートに適用されてもよい。
準仮想HTTPドライバ1306は、HTTPオブジェクトモデル1310により提供されるHTTP要求を生成するインタフェースに類似または対応した、HTTP要求を生成するシステムコールインタフェースを提供するよう構成されてもよい。HTTPオブジェクトは、生成されたHTTP要求を解釈し、システムコールインタフェースに適した要求構成にしてもよい。また、準仮想HTTPドライバ1306は、要求インスタンス1308及び上記のようなワーカコントローラ1316(例えば、図5を参照して上記したワーカコントローラ)により共有されるメモリ領域1314内の制御空間1312に要求レコードを作成するよう構成されてもよい。制御空間1312は、要求レコードに格納されたデータの情報格納用に確保された、共有メモリ領域1314の空間であってもよい。準仮想HTTPドライバ1306は、例えば、要求データを配置した共有メモリ領域1314内の位置を示すデータを、制御空間1312に書き込むよう構成されてもよい。含まれ得る情報は、要求スロットの識別子、要求スロットでのデータサイズ、要求スロットのサイズ(サイズが変わる実施形態の場合)、及び、一般的に、要求スロットから得る正確なデータ量の特定を可能にする情報を備えてもよい。
共有メモリ領域は、環状(リング)バッファなど、多様な方法で実施されてもよい。多様な実施形態において、ハイパーバイザで実施される各要求インスタンスには各自の共有メモリバッファが提供されるが、本明細書に記載の多様な実施形態を適用し、複数の要求インスタンスがメモリバッファを共有するようにして(例えば、要求インスタンスに要求が一致できるよう情報を追加しトラッキングして)もよい。HTTPドライバは、制御空間が配置される位置にメモリを有して構成されてもよい。HTTPドライバは、HTTP要求からの構成情報に基づき制御空間内に要求レコードを作成してもよい。
図13に示したように、要求インスタンスは、場合により要求処理に必要な各種のリソースに不足があってもよい。例えば、多様な要求処理では、伝送制御プロトコル/インタネットプロトコル(TCP/IP)スタックや、その他ネットワークスタックなど、ネットワークスタック(プロトコルスタック)を使用してもよく、当該ネットワークスタックは、プロトコルスイートを実施するプログラムであってもよい。要求インスタンス1308はネットワークスタックに不足があり、ネットワークスタックの使用にオーバヘッドを必要としなくてもよい。しかし、要求処理のため、要求インスタンスは、ワーカコントローラ1316により実施されるネットワークスタック1318と対話してもよい。ワーカコントローラ1316は単一ネットワークスタックを動作させてもよいが、当該ネットワークスタックは、ワーカハイパーバイザ1302上で実施される複数のインスタンスに使用される。よって、ハイパーコールインタフェース1304は、準仮想HTTPドライバ1306からHTTPハイパーコールハンドラ1320への所定コールを処理するよう構成されてもよい。当該HTTPハイパーコールハンドラ1320は、準仮想HTTPドライバ1306からハイパーコールインタフェース1304を通るハイパーコールに応答するプログラミングロジックを伴い構成されるワーカコントローラ1316のプロセスであってもよい。HTTPハイパーコールハンドラ1320は、ネットワークスタック1318を用いた要求処理に係わる通信を管理するよう構成されてもよい。以下で詳述するように、要求の実データは、共有メモリ領域1314の1つまたは複数の要求スロット1322を用い、共有メモリ領域1314を通してワーカコントローラに提供されてもよい。例えば、アプリケーションコード1324が実行されると、アプリケーションとの送受信データを、共有メモリ領域1314を介して送信してもよい。準仮想HTTPドライバ1306により制御空間1312に書込まれたデータは、1つまたは複数の要求スロット1322を示してもよい。その際、HTTPハイパーコールハンドラ1320が制御空間1312を読み出し、どの制御スロットからデータを取得するかを判断し得るように、要求データを配置することができる。この方法において、ハイパーコールインタフェース1304は、データの処理量は少ない(管理データ量が少なければリソースを限定できるため、効率的である)が、要求インスタンス1308からワーカコントローラ1316への関連データの転送量は大きくするように構成されることが可能である。
図14は、実施形態における、要求を処理するプロセス1400の例示的な実施例を示す。プロセス1400は、上記のワーカハイパーバイザなどのハイパーバイザにより(すなわち、ハイパーバイザの実施が可能なコードに従ったコンピュータシステムにより)実施されてもよい。プロセス1400は、実施例としてHTTPを使用するが、上に示したように、プロセス1400は、その他プロトコルでの使用にも適合されてもよい。ある実施形態において、プロセスは、アプリケーションからHTTP要求を受信すること(1402)を含む。要求は、HTTPオブジェクトモデルを使用し生成されてもよい。さらに、アプリケーションコードは、要求に対する応答に適したHTTP要求オブジェクトをインスタンス化してもよい。要求オブジェクトは、例えば、JavaScript(登録商標) XmlHttpRequestオブジェクト、または、Node.js createServerオブジェクトであってもよい。アプリケーションコードの実行により、位置、パラメータ、及び/またはデータなどを有するHTTP要求が構成される。
一端HTTPオブジェクトが配置されたら、アプリケーションコードは、配置されたHTTPオブジェクトを利用して、準仮想HTTPドライバに対するシステムコールを作成してもよい。よって、プロセス1400は、準仮想HTTPドライバへのシステムコールを受信すること(1404)を含んでもよい。例えば、HTTPオブジェクトは、カーネルシステムコールを作成し、準仮想HTTPドライバを利用してもよい。当該準仮想HTTPドライバは、HTTPオブジェクトモデルにより提供されるHTTP要求を作成するインタフェースに類似または対応した、HTTP要求を作成するシステムコールインタフェースを提供してもよい。HTTPオブジェクトは、生成されたHTTP要求を解釈し、システムコールインタフェースに適した要求構成にしてもよい。
システムコールを受信すると(1404)、準仮想HTTPドライバは、例えば、上記のような、ワーカコントローラと要求インスタンスが共有するメモリ領域など、共有メモリ領域内の制御空間に要求レコードを作成してもよい。準仮想HTTPドライバは、制御空間が置かれる位置にメモリを有するよう構成されてもよい。準仮想HTTPドライバは、HTTP要求からの構成情報に基づき、制御空間内に要求レコードを作成してもよい(1406)。ある実施形態において、準仮想HTTPドライバは、HTTP要求の構成に基づき、メモリブロックサイズを判断してもよい。HTTPドライバは、判断したサイズに基づき、制御空間からメモリブロックを割り当てるよう試み、割り当てたメモリブロックにHTTP要求構成のコピーを作成してもよい。ある実施形態において、HTTPドライバは、ロックフリー/コンペア・アンド・スワップリンク式リストを実施して使用し、割り当てたメモリへのポインタを有効HTTP要求レコードリストに付ける。要求レコードは、要求レコードの一意的な特定に適した一連の数値、ランダム値及び/またはその他の識別子を含んでもよい。ある実施形態において、識別子はさらに、要求レコードを、1つまたは複数のHTTP要求、HTTP要求オブジェクト、または、HTTP要求を生成するアプリケーションコードと関連付けるよう操作されてもよい。
ある実施形態において、プロセス1400は、共有メモリ領域内に、要求レコードに関連付けた要求スロットを割り当てること(1408)を含んでもよい。例えば、ある実施形態において、共有メモリ領域は、リングバッファを使用して組織された1つまたは複数の固定サイズバッファ領域を備えてもよい。HTTPドライバは、リースレコードのコンペア・アンド・スワップ割り当てを実施するなどして排他制御を使用し、1つのバッファ領域を割り当ててもよい。HTTPドライバは、要求スロットのアドレス及びサイズに要求レコードのフィールドを設定して、要求スロットを要求レコードと関連付けしてもよい。ある実施形態において、1つまたは複数の固定サイズバッファ領域のバッファサイズは、複数種類あってもよく、各バッファサイズは1つまたは複数のバッファ領域のサイズリストに対応する。例えば、第一特定バッファサイズは、要求受信サービス用であり、第二特定バッファサイズは、要求送信サービス用であってもよい。
HTTPオブジェクトモデルの命令に基づき、準仮想HTTPドライバは、ハイパーコールインタフェースを用いて要求サービスハイパーコールを作成してもよい。HTTPドライバは、要求レコードへのサービスが必要であることを示すハイパーコールを作成してもよい。ハイパーコールは、ハイパーコールハンドラが共有メモリ領域内の要求レコードを特定できるよう、要求レコードの識別子を含んでもよい。そのため、ハイパーコールインタフェースは、要求を受信し(1410)、HTTPハイパーコールハンドラにハイパーコールを通知してもよく(1412)、それにより、要求へのサービスが必要であることをハイパーコールハンドラに知らせる。ある実施形態において、HTTPハイパーコールハンドラを実行するワーカコントローラは、ハイパーコールイベントディスパッチャにサブスクライブするなどして、関連ハイパーコールの通知を受信するよう構成されてもよい。ワーカコントローラは、受信した通知を、HTTP要求をサービスするハイパーコールハンドラにディスパッチするよう構成されてもよい。
ハイパーコールハンドラは、ハイパーコールを受信すると、共有メモリ領域から要求レコードを検索してもよい(例えば、要求レコードの識別子を用いるなどして)(1414)。例えば、ハイパーコールハンドラは、有効HTTP要求の関連リストを調べ、ハイパーコールパラメータとして得た識別子に一致する識別子を有する要求レコードを探してもよい。HTTPハイパーコールハンドラが要求レコードを検索した(1414)後、ハイパーコールハンドラは、検索した要求レコード、及び、要求レコードに関連付けられた要求スロットにある要求データ、の双方の少なくとも一部に基づき、ネイティブHTTP要求をビルドしてもよい。ハイパーコールハンドラは、Portable Components (POCO) C++ライブラリまたは、libcurlライブラリを用いたオブジェクトモデルなど、第二HTTPオブジェクトモデルを用いた第二HTTP要求を生成してもよい。例えば、ハイパーコールハンドラは、第二HTTPオブジェクトモデルを用いてHTTP要求をビルドし(1416)、要求レコードに含まれる位置、パラメータまたはその他類似データを用いてHTTP要求を構成してもよい。ハイパーコールハンドラは、要求レコードに関連する要求スロットを利用し、要求スロットのコンテンツに基づき、エンティティボディの構成またはHTTP要求の生成を行ってもよい。
HTTP要求がハイパーコールハンドラによりビルドされると(1416)、HTTPハイパーコールハンドラは、ワーカコントローラにより実施されるネイティブネットワークスタックを用い、ネイティブHTTP要求を生成してもよい(1418)。ハイパーコールハンドラは、要求レコード及び関連要求スロットをアップデートして、第二HTTP要求からのデータまたは結果を返してもよい。ある実施形態において、HTTPドライバは、要求レコードに含まれるセマフォ信号を待つ。ハイパーコールハンドラは、第二HTTP要求に基づき、要求レコード及び要求スロットのコンテンツをアップデートしてもよい。ハイパーコールハンドラは、アップデートが完了すると、セマフォ信号を送ってもよい。アップデートによりHTTP応答ストリーム部分がわかるような場合、アップデートが完了すると、HTTPドライバはリセットし、再度セマフォ信号を待ってもよい。または、HTTPドライバは、アップデートの完了後さらにアップデートを要求されるようであれば、新規にハイパーコール要求を生成してもよい。
プロセス1400の利用方法を示す例示的な実施例として、HTTPハイパーコールハンドラは、ハイパーコールインタフェースからそのような要求通知を受け、ネイティブネットワークスタックにHTTPリスナを作成してもよい。HTTPリスナは、インバウンドHTTP要求を待ち、インバウンド要求用データを受信すると、HTTPハイパーコールハンドラは、共有メモリを使用し、要求インスタンスに対するデータのマーシャリングを行ってもよい。HTTPハイパーコールハンドラは、例えば、準仮想HTTPドライバにデータの受信を知らせ、その後、準仮想HTTPドライバは、HTTPハイパーコールハンドラにより、データを含む1つまたは複数の要求スロットを配置するよう制御空間に書かれた情報等を用い、共有メモリからデータを取得してもよい。データは、処理に備えアプリケーションコードに提供されてもよい。
プロセス1400は、多様な要求タイプを処理するよう適合されてもよい。例えば、データストリーミングでは、受信データの第一チャンクを上記のように処理されてもよい。類似プロセスでは、ハイパーコールハンドラを介して通信し、今現在の要求に対しては別のデータも受信する必要があることを示唆してもよい。上記のように共有メモリを通してデータを渡してもよい。同様に、データの送信では、ハイパーコールハンドラを通して、データを送信する旨の通知を送信してもよい。ワーカコントローラは、通知を受信すると、インスタンスにより共有メモリ内に配置されたデータを取得し、ネイティブHTTP要求をビルドし、データを送信してもよい。
図15は、多様な実施形態における態様を実施する例示的な環境1500の態様を示す。説明のためウェブベース環境を使用するが、多様な実施形態を実施するよう別の環境を適宜使用してもよいことが理解される。環境は、電子クライアントデバイス1502を備えるが、適切なネットワーク1504を介し要求、メッセージ、または情報を送受信でき、デバイスのユーザに情報を返すことが出来る、任意の適切なデバイスを備え得る。そのようなクライアントデバイス実施例として、パーソナルコンピュータ、携帯電話、携帯型メッセージングデバイス、ラップトップコンピュータ、タブレットコンピュータ、セットトップボックス、パーソナルデータアシスタント、組込みコンピュータシステム、電子ブックリーダなどがある。ネットワークは、イントラネット、インターネット、セルラーネットワーク、ローカルエリアネットワーク、またはその他ネットワーク、或いは、それらの組合せなど、適切なネットワークを含み得る。そのようなシステムに使用されるコンポーネントは、少なくとも一部の、選択ネットワークタイプ及び/または選択環境次第で変わる。そのようなネットワークを介した通信用プロトコル及びコンポーネントは、周知であり、本明細書では論じない。有線通信または無線通信、及びそれらの組合せにより、ネットワークを介した通信が可能になる。本実施例において、ネットワークはインターネットを備え、環境は、要求を受信し要求に対する応答でコンテンツをサービスするウェブサーバ1506を備えるが、別のネットワークとして、当業者には明らかなように、同様の目的をサービスする代替デバイスも使用され得る。
図に示す環境では、少なくとも1つのアプリケーションサーバ1508及びデータストア1510を備える。複数のアプリケーションサーバ、層またはその他要素、プロセス、あるいはコンポーネントを連動させまたは構成して、対話が可能になり、適切なデータストアからデータを取得するなどのタスクが実行可能になることを理解すべきである。本明細書で用いるように、サーバは、ハードウェアデバイスまたは仮想コンピュータシステムなど、多様な方法で実施されてもよい。文章中、サーバは、コンピュータシステムで実行されるプログラミングモジュールとしてもよい。本明細書で用いるように、用語「データストア」は、データの格納、入手及び検索が可能であればいずれのデバイス、またはデバイスの組合せとしてもよい。また、標準環境、分散環境またはクラスタ環境にあるデータサーバ、データベース、データ記憶装置、データ記憶媒体のいずれの組合せでもよく、台数も何台であってもよい。アプリケーションサーバは、必要に応じて、一部の(ほとんどであるかもしれないが)入手データやアプリケーション用ビジネスロジックを処理して、1つまたは複数のクライアントデバイス用アプリケーションを実行するが、その際のデータストアとの通信に適したハードウェア及びソフトウェアを含み得る。アプリケーションサーバは、データストアと連携して入手制御サービスを提供してもよく、ユーザに転送するテキスト、グラフ、音声及び/または映像などのコンテンツを作成可能であり、それらコンテンツは、本実施例では、HyperText Markup Language(「HTML」)、Extensible Markup Language(「XML」)またはその他適切な構成言語の形式で、ウェブサーバによりユーザに提供されてもよい。全ての要求及び応答の処理は、クライアントデバイス1502とアプリケーションサーバ1508との間のコンテンツ配信と同様、ウェブサーバを通し得る。本明細書の他の箇所でも論じたように、本明細書で論じた構成コードは、適切であればいずれのデバイスやホストマシン上であっても実行され得るため、ウェブサーバもアプリケーションサーバも必ずしも必要ではなく、単に例示のコンポーネントであることを理解すべきである。さらに、単一デバイスにより実施されると本明細書で記述した動作は、文脈上特段に明示されない限り、分散システムを形成する複数のデバイスにより一括して実施されてもよい。
データストア1510は、本開示の特定の態様に関連する、複数の独立したデータテーブル、データベースまたはその他データ記憶構造、及びデータ格納用媒体を含み得る。例えば、図にあるデータストアは、作成側用のコンテンツを提供するために使用可能な作成データ1512及びユーザ情報1516を格納する構造を備えてもよい。また、図にあるデータストアは、ログデータ1514を格納する構造を備えており、報告、分析またはその他目的に使用され得る。例えば、ページイメージ情報やアクセス権情報などをデータストアに格納する必要があり、その構造は上記で適切であると挙げたいずれであってもよく、また、データストア1510に別の構造を追加した構造であってもよいような、他にも様々な態様があることを理解すべきである。データストア1510は、データストア1510に関連付けられたロジックを通して動作可能となり、アプリケーションサーバ1508から命令を受信し、命令に応答してデータを取得、アップデートまたは処理する。1つの実施例において、ユーザ自身が操作するデバイスを通して、任意の項目タイプを求めるサーチ要求を出す場合を考える。この場合、データストアは、ユーザ情報を入手しユーザの本人確認を行うこともあるかもしれないが、詳細情報リストにアクセスし当該項目タイプの情報を取得し得る。ユーザデバイス1502上でブラウザを介してユーザが閲覧可能なウェブページ上で結果をリスト化するなどして、情報をユーザに渡すことができる。興味のある特定項目の情報は、ブラウザの専用ページまたはウィンドウで閲覧可能にできる。しかし、本開示の実施形態は、必ずしもウェブページのコンテキストに限定されるわけではないが、多くの場合処理要求に適用され、要求は必ずしもコンテンツの要求ではないことに注意すべきである。
一般的に、各サーバは、当該サーバの一般的な管理及び動作に対する実行可能なプログラム命令を提供するオペレーティングシステムを備える。また、一般的に各サーバは、命令を格納するコンピュータ読取可能な記憶媒体(例えば、ハードディスク、ランダムアクセスメモリ、読取専用メモリなど)を備え、当該命令は、サーバのプロセッサにより実行されると、命令が意図する機能をサーバに実行させるものである。オペレーティングシステムに適した実施及びサーバの一般的な機能は、周知でありまたは市販されており、特に本明細書に開示の内容は当業者であれば容易に実施できる。
1つの実施形態において、環境は、1つまたは複数のコンピュータネットワークまたは直接接続を用いて、通信リンクを介して相互接続された複数のコンピュータシステム及びコンポーネントを利用した分散型計算環境である。しかし、そのようなシステムが、図15に示すコンポーネントの数より少なくても多くても、同様にシステムとして動作可能であることについて、当業者には評価されるであろう。このため、図15のシステム1500の描写は、本質的に例示であり、本開示の範囲を限定するものではないと捉えるべきである。
さらに、多様な実施形態が多様な動作環境において実施可能であり、ある動作環境では、1つまたは複数のユーザコンピュータ、計算デバイス、処理デバイスを使用し、多様なアプリケーションのいずれであっても動作可能にできる場合もある。ユーザデバイスまたはクライアントデバイスは、多様な汎用パーソナルコンピュータのいずれであってもよく、セルラーデバイス、無線デバイス及びモバイルデバイスであってもよい。汎用パーソナルコンピュータとは、例えば、標準オペレーティングシステムを実行するデスクトップコンピュータ、ラップトップコンピュータ、またはタブレットコンピュータなどであり、セルラーデバイス、無線デバイス及び携帯デバイスは、携帯用ソフトウェアを実行し、多様なネットワーキングプロトコル及びメッセージングプロトコルのサポートが可能である。また、そのようなシステムは、多様な市販のオペレーティングシステムのいずれであっても実行でき、また開発やデータベース管理などのためにその他周知のアプリケーションを実行する、多様なワークステーションを含み得る。また、これらのデバイスは、ネットワークを介して通信可能な、ダミー端子、シンクライアント、ゲームシステム、及びその他デバイスなど、他の電子デバイスも含み得る。
本開示の多様な実施形態は、当業者であれば精通している少なくとも1つのネットワークを利用し、多様な市販プロトコルのいずれかのプロトコルを用いて通信をサポートする。市販のプロトコルには、例えば、伝送制御プロトコル/インタネットプロトコル(「TCP/IP」)、開放型システム間相互接続(「OSI」)モデルの多様な層で動作するプロトコル、ファイル転送プロトコル(「FTP」)、ユニバーサルプラグアンドプレイ(「UpnP」)、ネットワークファイルシステム(「NFS」)、カモンインタネットファイルシステム(「CIFS」)、及びAppleTalk(登録商標)などがある。ネットワークには、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク、及びそれらの組合せがある。
ウェブサーバを利用する実施形態において、ウェブサーバは、多様なサーバまたはミッドティアアプリケーションのいずれであっても実行でき、例えば、ハイパーテキスト転送プロトコル(「HTTP」)サーバ、FTPサーバ、共通ゲートウェイインタフェース(「CGI」)サーバ、データサーバ、Java(登録商標)サーバ、及び業務アプリケーションサーバなどを実行できる。また、サーバは、ユーザデバイスからの要求に応答してプログラムまたはスクリプトを実行可能であってもよく、その方法は、例えば、いずれかのプログラミング言語(Java(登録商標)、C、C#またはC++など)、いずれかのスクリプト言語(Perl(登録商標)、Python(登録商標)、またはTCLなど)、またはそれらの組合せで書かれた、1つまたは複数のスクリプトまたはプログラムとして実施される1つまたは複数のウェブアプリケーションを実行するものである。また、サーバはデータサーバを含んでもよく、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)及びIBM(登録商標)などの市販のデータサーバがあるが、これらに限定されない。
環境は、上記のように、多様なデータストア、その他メモリ及び記憶媒体を備え得る。これらは、1つまたは複数のコンピュータにローカルな(及び/または、1つまたは複数のコンピュータに配置された)記憶媒体上、またはネットワークで繋がった一部または全てのコンピュータから独立した記憶媒体上など、多様な位置に配置可能である。特定の実施形態セットにおいて、情報は、当業者であれば精通しているストレージエリアネットワーク(「SAN」)に置かれてもよい。同様に、コンピュータ、サーバまたはその他ネットワークデバイスによる機能の実行に必要なファイルは全て、適宜ローカル及び/または遠隔で格納されてもよい。システムがコンピュータデバイスを備えている場合、各デバイスは、バスで電気的に接続されるハードウェアエレメントを備えることができ、当該エレメントは、例えば少なくとも1つの中央処理装置(「CPU」または「プロセッサ」)、少なくとも1つの入力デバイス(例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド)、及び少なくとも1つの出力装置(例えば、ディスプレイ、プリンタ、またはスピーカ)を備える。また、そのようなシステムは、1つまたは複数の記憶装置も備えてもよく、例えば、ディスクデバイス、光学記憶装置、及び固体記憶装置(ランダムアクセスメモリ(「RAM」)または読取専用メモリ(「ROM」)など)などがあり、また、リムーバブルメディア装置、メモリーカード、フラッシュカードなどがある。
また、そのようなデバイスは、上記のように、コンピュータ読取可能な記憶媒体リーダ、通信デバイス(例えば、モデム、ネットワークカード(無線または有線)、赤外線通信デバイスなど)、及びワーキングメモリも含み得る。コンピュータ読取可能な記憶媒体リーダは、コンピュータ読取可能な記憶媒体との接続が可能であるか、コンピュータ読取可能な記憶媒体を受けつけるような構成が可能である。コンピュータ読取可能な記憶媒体とは、遠隔、ローカル、固定及び/または取外し可能な記憶装置であり、コンピュータ読取可能な情報を一時的に及び/または永久的に含み、格納し、送信し、検索する記憶媒体を意味する。また、システム及び多様なデバイスは、一般的に、少なくとも1つのワーキングメモリデバイス内に多数のソフトウェアアプリケーション、モジュール、サービス、またはその他エレメントを備えてもよく、オペレーティングシステム、及び、クライアントアプリケーションまたはウェブブラウザなどのアプリケーションプログラムを含んでもよい。上記とは異なる代替実施形態が多種多様にあり得ることも理解されるであろう。例えば、ハードウェアをカスタマイズして使用可能であろうし、特定のエレメントをハードウェア、ソフトウェア(アプレットなどポータブルソフトウェアを含む)またはその両方で実施可能であろう。さらに、ネットワーク入出力デバイスなどその他の計算デバイスへの接続も可能であろう。
コードまたはコードの一部を含む記憶媒体及びコンピュータ読取可能媒体は、当業界で周知または使用されている適切な媒体のいずれであっても含み得る。当該媒体は、揮発性及び不揮発性、取外し可能及び取外し不可な媒体などの、記憶媒体及び通信媒体を含むがこれらに限定されず、コンピュータ読取可能な命令、データ構造、プログラムモジュールまたはその他データなどの情報を、格納及び/または送信するいずれかの方法または技術で実施される。例えば、RAM、ROM、電気的消去可能プログラマブル読取専用メモリ(「EEPROM」)、フラッシュメモリまたは他のメモリ技術、コンパクトディスク読取専用メモリ(「CD−ROM」)、デジタル多用途ディスク(DVD)またはその他光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたはその他磁気記憶デバイス、あるいは、所望の情報の格納に使用でき、システムデバイスによりアクセス可能なその他媒体などがある。本明細書による開示及び技術に基づき、当業者であれば、別の手法及び/または方法を理解し、多様な実施形態を実施できるであろう。
よって、本明細書及び本図面は、限定するものではなく例示とみなされるべきである。しかし、本請求項で定める発明の広範な趣旨及び範囲から逸脱すること無く成される変形や変更が、多様にあることは明らかであろう。
上記の内容を以下の項目の観点で見ると、より理解しやすくなるであろう。
・ 実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
実行可能部を備えるアプリケーションソースを受信し、
当該アプリケーションソースを解析し、当該実行可能部の実行における変動ポイントを判断し、
判断した当該変動ポイントの少なくとも一部に基づく停止ポイントまで、仮想マシンインスタンスにより当該実行可能部を実行し、
当該仮想マシンインスタンスを当該停止ポイントで停止させ、
停止させた当該仮想マシンインスタンスのスナップショットを、当該変動ポイントで、または当該変動ポイント以前で取り、
当該スナップショットを用いて別の仮想マシンインスタンスをインスタンス化する、ことを備える、コンピュータ実施方法。
・ 1項に記載のコンピュータ実施方法において、
当該アプリケーションソースを解析することは、判断した当該変動ポイントを含む1つまたは複数の変動ポイントの1つまたは複数の位置について、当該アプリケーションソースにアノテーションを付けることを含み、
当該停止ポイントは、少なくとも一部の当該アノテーション付アプリケーションソースに基づいている、当該コンピュータ実施方法。
・ 2項に記載のコンピュータ実施方法において、当該アプリケーションソースにアノテーションを付けることは、当該アプリケーションソースに参照された1つまたは複数の機能を、変動ポイントに対応する機能一覧に照らすことを含む、当該コンピュータ実施方法。
・ 先行する項目のいずれかに記載のコンピュータ実施方法において
当該方法ではさらに、当該変動ポイント以前の実行において、セーフポイントであると判断されるポイントに相当する状態に、当該仮想マシンインスタンスを復元することを備え、
実行において当該セーフポイントであると判断される当該ポイントで、当該スナップショットを取る、当該コンピュータ実施方法。
・ 先行する項目のいずれかに記載のコンピュータ実施方法において、当該停止ポイントまで当該実行可能部を実行することは、当該実行可能部の実行をモニタリングし、当該停止ポイントを検出することを含む、当該コンピュータ実施方法。
・ 先行する項目のいずれかに記載のコンピュータ実施方法において、当該スナップショットは、当該仮想マシンインスタンスのメモリ空間の少なくとも一部のコピーを符号化し、1つまたは複数のプロセッサレジスタの1つまたは複数の状態、1つまたは複数のフラグの1つまたは複数の状態、1つまたは複数のプログラムカウンタの1つまたは複数の状態、或いは、1つまたは複数のエントリポイントアドレスを備える、当該コンピュータ実施方法。
・ 先行する項目のいずれかに記載のコンピュータ実施方法において、別の仮想マシンインスタンスをインスタンス化するのに当該スナップショットを使用することは、仮想マシンインスタンスのインスタンス化に使用可能なアプリケーションイメージのリポジトリに、当該スナップショットを追加し、当該別の仮想マシンインスタンスのインスタンス化において、当該リポジトリから当該スナップショットを検索することを含む、当該コンピュータ実施方法。
・ 実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
アプリケーションソースの実行可能部にある、1つまたは複数の変動ポイントを特定し、
コンピュータシステムインスタンスにより、当該アプリケーションソースの当該実行可能部の実行をモニタリングし、特定した当該1つまたは複数の変動ポイントから1つの変動ポイントを特定し、
特定した当該1つの変動ポイントの少なくとも一部に基づくポイントで、当該コンピュータシステムインスタンスのスナップショットを取り、
取った当該スナップショットの少なくとも一部に基づく、別のコンピュータシステムインスタンスのインスタンス化に使用可能な、アプリケーションイメージを格納する、ことを備える、コンピュータ実施のアプリケーションイメージ作成方法。
・ 8項に記載のコンピュータ実施方法において、当該1つまたは複数の変動ポイントの各変動ポイントは、複数回の実行において、アプリケーション動作の実行結果に潜在的に変動をもたらす1つまたは複数のコンピュータ実行可能命令に対応する、当該コンピュータ実施方法。
・ 8項または9項に記載のコンピュータ実施方法において、当該1つまたは複数の変動ポイントを特定することは、
当該アプリケーションソースで指定された1つまたは複数の機能を特定し、
特定された当該1つまたは複数の機能が、潜在的に変動ポイントになると判断された機能一覧にあるかを判断する、ことを含む、当該コンピュータ実施方法。
・ 8項乃至10項のいずれかに記載のコンピュータ実施方法において、当該スナップショットを取ることは、特定した当該変動ポイントでまたは当該変動ポイント以前でセーフポイントを特定することを含み、当該セーフポイントは、復元可能なコンピュータシステムの状態であり、別のコンピュータシステム上で当該アプリケーションソースの当該実行可能部を当該コンピュータシステムの状態からレジューム可能な、当該コンピュータシステムの状態に対応することを受け特定される、当該コンピュータ実施方法。
・ 8項乃至11項のいずれかに記載のコンピュータ実施方法において、
当該スナップショットを取ることは、特定した当該変動ポイントでまたは当該変動ポイント以前でセーフポイントを特定することを含み、
当該セーフポイントの特定は、当該コンピュータシステムの、異なる時点で取られる複数のスナップショットセットのうち、1つまたは複数のスナップショットに適用されるセーフポイント基準の少なくとも一部に基づいている、当該コンピュータ実施方法。
・ システムであって、
1つまたは複数のプロセッサ、及び
実行可能な命令を備えるメモリを備え、
当該命令は、当該1つまたは複数のプロセッサにより実行されると、当該システムに第一サブシステムを実施させ、
当該第一サブシステムは、
アプリケーションソースの少なくとも一部に基づきコンピュータシステムインスタンスをインスタンス化し、
当該アプリケーションソースの実行可能部を、インスタンス化した当該コンピュータインスタンスにより実施してモニタリングし、変動ポイントを特定し、
特定した当該変動ポイントの少なくとも一部に基づき、当該コンピュータシステムインスタンスのスナップショットを取り、
取った当該スナップショットの少なくとも一部に基づく、別のコンピュータシステムインスタンスのインスタンス化に使用可能な、アプリケーションイメージを格納させるよう、構成されるシステム。
・ さらに第二サブシステムを備え、当該第二サブシステムは、当該アプリケーションソースの当該実行可能部を処理し、複数変動ポイントのセットを特定し、特定された当該変動ポイントは、特定された当該複数変動ポイントセットから特定されるよう構成された、13項に記載の当該システム。
・ 13項または14項に記載のシステムにおいて、当該コンピュータシステムインスタンスをインスタンス化することは、
当該アプリケーションソースの少なくとも一部に基づき、ブートストラッププログラムを選択すること、
選択した当該ブートストラッププログラムを実行することを含む、当該システム。
・ 13項乃至15項のいずれかに記載のシステムにおいて、
当該システムはさらに、コンピュータシステムインスタンスのインスタンス化のため別のシステムがアクセス可能なアプリケーションイメージリポジトリを備え、
当該アプリケーションイメージを格納させることは、当該アプリケーションイメージを当該アプリケーションイメージリポジトリに送信することを含む、当該システム。
・ 13項乃至16項のいずれかに記載のシステムにおいて、
当該アプリケーションソースに、潜在的な変動ポイントを示す1つまたは複数のアノテーションを付け、
当該アプリケーションソースの当該実行可能部の実行を、当該1つまたは複数のアノテーションの少なくとも一部に基づいてモニタリングする、当該システム。
・ 13項乃至17項のいずれかに記載のシステムにおいて、特定した当該変動ポイントは、当該アプリケーションソースから確定的に導出できないが実行結果に対応することを受け特定される、当該システム。
・ 13項乃至18項のいずれかに記載のシステムにおいて、当該アプリケーションソースの当該実行可能部の、インスタンス化された当該コンピュータシステムインスタンスによる実行をモニタリングすることは、インスタンス化された当該コンピュータシステムインスタンスのメモリページが当該変動ポイントに対応する命令を備えることにより、インスタンス化した当該コンピュータシステムインスタンスを中断させる割り込みを発行することを含む、当該システム。
・ 13項乃至19項のいずれかに記載のシステムにおいて、当該アプリケーションソースの当該実行可能部の、インスタンス化された当該コンピュータシステムインスタンスによる実行をモニタリングすることは、インスタンス化された当該コンピュータシステムインスタンスの外部にあるプロセスに、当該実行が当該変動ポイントに到達したことを通知し、当該プロセスが、インスタンス化された当該コンピュータシステムインスタンスを停止させ得るようにすることを含む、当該システム。
・ コンピュータ読取可能記憶媒体であって、該コンピュータ読取可能記憶媒体に格納された命令を有し、当該命令がコンピュータシステムの1つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
実行可能部を備えるアプリケーションソースを取得させ、
コンピュータシステムインスタンスに、少なくともいくつかの当該実行可能部を実行させ、
当該実行可能部を部分的に実行した後ではあるが完了前に、当該コンピュータシステムインスタンスのスナップショットを取らせ、当該スナップショットを別のコンピュータシステムインスタンスのインスタンス化に使用可能にし、当該実行可能部の実行を、当該スナップショットが取られたポイントで開始可能にする、コンピュータ読取可能記憶媒体。
・ 21項に記載のコンピュータ読取可能記憶媒体において、
取得した当該アプリケーションソースを、当該実行可能部の実行を停止する潜在的な1つまたは複数のポイントを示すアノテーションと併せて取得し、
当該コンピュータシステムインスタンスに少なくともいくつかの当該実行可能部を実行させる際、当該スナップショットの取る前の当該アノテーションのうちの1つのアノテーションに従い、当該コンピュータシステムインスタンスを停止する、当該コンピュータ読取可能記憶媒体。
・ 21項または22項に記載のコンピュータ読取可能記憶媒体において、当該命令はさらに、当該コンピュータシステムに、仮想マシンとして当該コンピュータシステムインスタンスをインスタンス化させる、当該コンピュータ読取可能記憶媒体。
・ 21項乃至23項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該コンピュータシステムインスタンスの当該スナップショットを取ることは、
当該実行可能部の実行においてあるポイントを、当該ポイントでの中央処理装置の状態の少なくとも一部に基づき判断し、
判断した当該ポイントでの当該コンピュータシステムインスタンスの当該スナップショットを取ることを含む、当該コンピュータ読取可能記憶媒体。
・ 21項乃至24項のいずれかに記載のコンピュータ読取可能記憶媒体において、取った当該スナップショットは、当該コンピュータシステムインスタンスのメモリ空間の、少なくとも一部のコピーを備え、1つまたは複数のプロセッサレジスタの1つまたは複数の状態、1つまたは複数のフラグの1つまたは複数の状態、1つまたは複数のプログラムカウンタの1つまたは複数の状態、或いは、1つまたは複数のエントリポイントアドレスを備える、当該コンピュータ読取可能記憶媒体。
・ 21項乃至25項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該命令はさらに、当該コンピュータシステムに、少なくとも一部の当該スナップショットに基づくアプリケーションイメージを、アプリケーションイメージのリポジトリに送信させ、各アプリケーションイメージを仮想マシンインスタンスのインスタンス化に使用可能にする、当該コンピュータ読取可能記憶媒体。
・ ハイパーバイザを実施する計算デバイス、及び
フロントエンドリスナを備え、
当該フロントエンドリスナは、
ネットワークを介して送信された要求を受信し、
受信した当該要求の少なくとも1つのサブセットの各要求に対し、当該要求に対応するワークトークンを当該ハイパーバイザに提供するよう、構成され、
当該ハイパーバイザは、
当該フロントエンドリスナからワークトークンを受信し、
受信した当該ワークトークンの少なくとも1つのサブセットの各ワークトークンに対し、
少なくとも一部の当該ワークトークンに基づき、当該ワークトークンに対応する要求の処理に使用可能なアプリケーションイメージを選択し、
少なくとも、選択された当該アプリケーションイメージの当該コピー部分のエントリポイントアドレスを特定し、特定された当該エントリポイントの少なくとも一部に基づきアプリケーションコードの実行を開始することにより、少なくとも一部の選択された当該アプリケーションイメージに基づき仮想コンピュータシステムをインスタンス化し、
当該ワークトークンを用いて、当該フロントエンドリスナから、当該ワークトークンに対応する当該要求のコピーを取得し、当該ワークトークンに対応する当該要求の当該コピーを、インスタンス化された当該仮想コンピュータシステムに提供し、当該仮想コンピュータシステムにより処理されるよう、構成されるシステム。
・ 27項に記載のシステムにおいて、
当該ワークトークンを提供することは、少なくとも一部の当該要求に基づき、複数の要求キューから要求キューを選択し、選択した当該要求キューに当該ワークトークンをエンキューすることを含む、当該システム。
・ 27項または28項に記載のシステムにおいて、
当該ワークトークンを提供することは、要求キューに当該ワークトークンをエンキューし、
当該フロントエンドリスナから複数のワークトークンを受信する際、当該要求キューから当該複数ワークトークンをデキューすることを含む、当該システム。
・ 27項乃至29項のいずれかに記載のシステムにおいて、当該仮想コンピュータシステムをインスタンス化することは、少なくとも一部の選択した当該アプリケーションイメージを、当該仮想コンピュータシステムのメモリパーティションにコピーすることを含む、当該システム。
・ 27項乃至30項のいずれかに記載のシステムにおいて、当該アプリケーションイメージは、別の仮想コンピュータシステムのスナップショットの少なくとも一部に基づいており、当該別のコンピュータシステムは、当該アプリケーションイメージに対応するアプリケーションコードの実行可能部を部分的に実行した、当該システム。
・ 27項乃至31項のいずれかに記載のシステムにおいて、当該ワークトークンを用いて当該要求の当該コピーを取得することは、
当該ワークトークンにおいて符号化された当該要求の識別子を当該フロントエンドリスナに提供し、
当該フロントエンドリスナにより、提供された当該識別子の少なくとも一部に基づき、当該要求を配置し、
配置された当該要求を当該計算デバイスに送信する、ことを含む、当該システム。
・ 要求に応答するためのコンピュータ実施方法であって、
実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
当該要求を受信したフロントエンドリスナにより、受信した要求に対応するトークンを受信し、
当該トークンを受信したことを受け、当該要求を処理する仮想コンピュータシステムをインスタンス化し、
受信した当該トークンを用いて、当該フロントエンドリスナから当該要求のコピーを取得し、
当該要求の取得した当該コピーを用いて、当該仮想コンピュータシステムにより当該要求を処理する、コンピュータ実施方法。
・ 33項に記載のコンピュータ実施方法において、当該フロントエンドリスナ及び当該仮想コンピュータシステムは、別の計算デバイスにより実施される、当該コンピュータ実施方法。
・ 33項または34項に記載のコンピュータ実施方法において、当該仮想コンピュータシステムをインスタンス化することは、
当該要求の処理に使用可能なアプリケーション用のアプリケーションイメージを、アプリケーションイメージのリポジトリから入手し、
当該アプリケーションイメージの少なくとも一部を、当該仮想コンピュータシステム用に割当てられたメモリにロードし、
ロードされた当該一部を実行するエントリポイントを特定し、
ロードされた当該一部の実行を開始することを含む、当該コンピュータ実施方法。
・ 35項に記載のコンピュータ実施方法において、当該アプリケーションイメージを入手することは、当該要求に関連する情報の少なくとも一部に基づき当該アプリケーションイメージを選択することを含み、当該要求に関連する当該情報は、当該要求の1つまたは複数のメッセージヘッダの少なくとも1つ、当該要求のメッセージ本体、当該要求の送信先であるネットワークアドレスに対応するユニフォームリソースロケータ、または、当該ネットワークアドレスを含む、当該コンピュータ実施方法。
・ 35項に記載のコンピュータ実施方法において、当該アプリケーションイメージに対応するアプリケーションコードの実行可能部を部分的に実行した場合、当該アプリケーションイメージは、停止状態の別の仮想コンピュータシステムの少なくとも一部のスナップショットに基づく、当該コンピュータ実施方法。
・ 33項乃至37項のいずれかに記載のコンピュータ実施方法において、当該トークンを受信することは、トークンのキューから当該トークンをデキューすることを含み、当該トークンのそれぞれは当該フロントエンドリスナにより受信された要求に対応している、当該コンピュータ実施方法。
・ 33項乃至38項のいずれかに記載のコンピュータ実施方法において、さらに、当該要求の処理が完了したことを受け、当該仮想コンピュータシステムを終了させることを備える、前記コンピュータ実施方法。
・ 非一時的なコンピュータ読取可能記憶媒体であって、格納された命令を有し、当該命令がコンピュータシステムの1つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
コントローラを実施させ、当該コントローラは、
フロントエンドリスナが要求を受信した旨の通知を受信し、
受信した当該通知の少なくとも1つのサブセットの各通知に対し、
仮想コンピュータシステムをインスタンス化し、対応する要求を処理し、
インスタンス化した当該仮想コンピュータシステムに、当該フロントエンドリスナから当該要求のコピーを取得させ、当該要求を処理させるよう、構成される、コンピュータ読取可能記憶媒体。
・ 40項に記載のコンピュータ読取可能記憶媒体において、
当該命令はさらに、当該コンピュータシステムにハイパーバイザを実施させ、
当該仮想コンピュータシステム及び当該コントローラは、当該ハイパーバイザの異なるドメインで動作する、当該コンピュータ読取可能記憶媒体。
・ 40項または41項に記載のコンピュータ読取可能記憶媒体において、当該コントローラはさらに、当該コンピュータシステムの要求処理容量の、少なくとも一部の1つまたは複数回の測定に基づき、当該コンピュータシステムにより同時処理される要求数を調整するよう構成された、当該コンピュータ読取可能記憶媒。
・ 40項乃至42項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該通知は、当該フロントエンドリスナからの当該要求の位置確認に使用可能な情報を符号化するトークンである、当該コンピュータ読取可能記憶媒体。
・ 40項乃至43項のいずれかに記載のコンピュータ読取可能記憶媒体において、当該通知を受信することは、キューから対応トークンをデキューすることを含む、当該コンピュータ読取可能記憶媒体。
・ 40項乃至44項のいずれかに記載のコンピュータ読取可能記憶媒体において、インスタンス化した当該仮想システムに当該要求の当該コピーを取得させることは、
当該仮想コンピュータシステムによる当該要求の入手の試みを検出し、
当該通知からの情報を用い、当該フロントエンドリスナから当該要求の当該コピーを取得する、ことを含む、当該コンピュータ読取可能記憶媒体。
・ リスナ及びコントローラを備え、
当該リスナは、
要求を受信し、当該受信された要求は、それぞれ異なるアプリケーションによりサービス可能である複数の要求のサブセットを備え、
受信した当該要求の少なくとも1つのサブセットの各要求に対し、
当該要求についての通知を出し、
少なくとも一部の当該通知に基づく第二要求を受信し、
当該第二要求の少なくとも一部の応答に基づき、当該要求のコピーを提供するよう構成され、
当該コントローラは、
当該リスナから出された通知を受信し、
出された当該通知の少なくとも1つのサブセットの、出され受信された各通知に対し、
出された当該通知を用い、当該リスナから出され受信された当該通知に対応する要求のコピーを取得し、
出され受信された当該通知の少なくとも一部に基づき、複数のアプリケーションイメージから、出され受信された当該通知に対応する当該要求の処理が可能なアプリケーションのアプリケーションイメージを選択し、
選択された当該アプリケーションイメージの少なくとも一部に基づき、仮想コンピュータシステムをインスタンス化し、出され受信された当該通知に対応する当該要求の、少なくとも一部の取得した当該コピーに基づき、当該仮想コンピュータシステムに当該要求を処理させるよう、構成されるシステム。
・ 46項に記載のシステムにおいて、受信された当該要求は、異なるネットワークアドレスにアドレス指定された要求を含み、当該異なるネットワークアドレスの各ネットワークアドレスは、当該複数のアプリケーションイメージの異なるアプリケーションイメージに対応している、当該システム。
・ 46項または47項に記載のシステムにおいて、当該コントローラはさらに、出され受信された当該通知に対応する当該要求と当該通知とのコネクションを確立し、当該アプリケーションが当該リスナから当該要求のコピーを取得出来るよう構成された、当該システム。
・ 46項乃至48項のいずれかに記載のシステムにおいて、通知を出すことは、要求キューにトークンをエンキューすることを含む、当該システム。
・ 46項乃至49項のいずれかに記載のシステムにおいて、選択された当該アプリケーションイメージは、別の仮想コンピュータシステムインスタンスのスナップショットの少なくとも一部に基づいている、当該システム。
・ 46項乃至50項のいずれかに記載のシステムにおいて、
出された当該通知を受信することは、出された当該通知をキューからデキューすることを含み、
当該コントローラはさらに、要求処理容量を検出したことを受け、キューされた通知をデキューするよう構成された、当該システム。
・ 要求を処理するためのコンピュータ実施方法であって、
実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザにより、仮想コンピュータシステムインスタンス及びコントローラを実施して、
当該仮想コンピュータシステムインスタンスが、当該要求の受信に使用するプロトコルスタックの1つまたは複数層の実施を不足させるよう、
当該コントローラが、当該仮想コンピュータシステムインスタンスにより当該1つまたは複数層が不足した当該プロトコルスタックを実施させるよう、
共有メモリ領域を、当該仮想コンピュータシステムインスタンス及び当該コントローラの双方からアクセス可能になるようにし、
当該コントローラから当該仮想コンピュータシステムインスタンスへの当該要求のデータを、当該メモリ領域に配置し、
当該共有メモリ領域から当該仮想コンピュータシステムに当該データを提供し、
当該仮想コンピュータシステムから当該コントローラへの、当該要求に対する応答のデータを、当該共有メモリ領域に配置し、
当該共有メモリ領域から当該コントローラに当該応答の当該データを提供し、
当該コントローラの当該プロトコルスタックの当該1つまたは複数の層の当該実施を行い、当該要求に対する当該応答を提供する、コンピュータ実施方法。
・ 52項に記載のコンピュータ実施方法において、
当該方法ではさらに、当該仮想コンピュータシステムインスタンス及び当該コントローラの双方がアクセス可能な当該ハイパーバイザに対するハイパーコールインタフェースを通して、当該ワーカコントローラのハイパーコールハンドラに通知を出し、
当該ハイパーコールハンドラが当該通知を受信したことを受け、当該共有メモリ領域から当該コントローラに当該応答の当該データを提供する、ことを備えるコンピュータ実施方法。
・ 52項または53項に記載のコンピュータ実施方法において、
当該共有メモリ領域に当該要求の当該データを配置することは、当該共有メモリ領域の制御域に、当該制御域の当該データの1つまたは複数の位置を書込むことを含み、
当該共有メモリ領域から当該仮想コンピュータシステムインスタンスに当該データを提供することは、当該制御域に書込まれた当該1つまたは複数の位置の少なくとも一部に基づき、当該データを配置することを含む、当該コンピュータ実施方法。
・ 52項乃至54項のいずれかに記載のコンピュータ実施方法ではさらに、
当該仮想コンピュータシステムインスタンスにより、第一オブジェクトモデルを用いて第一リスナオブジェクトを作成し、
当該コントローラにより、当該第一リスナオブジェクトに対応する第二リスナオブジェクトを作成して、当該要求を受信する、ことを備える、コンピュータ実施方法。
・ 52項乃至55項のいずれかに記載のコンピュータ実施方法において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ実施方法。
・ 52項乃至56項のいずれかに記載のコンピュータ実施方法ではさらに、
当該ハイパーバイザにより、第二仮想コンピュータシステムインスタンスを実施して、第二共有メモリ領域に、当該第二仮想コンピュータシステムインスタンス及び当該コントローラの双方がアクセス可能になるようにすることを備え、
当該プロトコルスタックの当該1つまたは複数の層の当該実施を当該コントローラが使用して、当該第二仮想コンピュータシステムインスタンスの要求を処理する、コンピュータ実施方法。
・ 実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
ハイパーバイザの第一ドメインで、コンピュータシステムインスタンスを実施し、
当該ハイパーバイザの第二ドメインで、コントローラを実施し、当該コントローラは、当該コンピュータシステムインスタンスと共有するメモリ領域にアクセスし、当該コンピュータシステムインスタンスにより実施される共有層のプロトコルスタックを備えた、複数層の当該プロトコルスタックを実施し、
当該プロトコルスタックを用いて受信された要求を満たすが、少なくとも、
当該共有層の当該プロトコルスタック及び当該メモリ領域を用いて、当該コンピュータシステムインスタンスから当該コントローラに、当該要求に対する応答データを渡し、
当該複数層の当該プロトコルスタックのうち、当該コンピュータシステムインスタンスの実施に不足がある少なくとも1つの層を用いて、当該第二ドメインで当該応答データに対し1つまたは複数の動作を実施することを備える、コンピュータ実施方法。
・ 58項に記載のコンピュータ実施方法において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ実施方法。
・ 58項または59項に記載のコンピュータ実施方法において、当該共有層は当該プロトコルスタックのアプリケーション層である、当該コンピュータ実施方法。
・ 58項乃至60項のいずれかに記載のコンピュータ実施方法において、当該要求に対する当該応答データを渡すことは、当該コンピュータシステムインスタンスが、当該ハイパーバイザのハイパーコールインタフェースに対する準仮想デバイスドライバと対話したことを受け、当該コントローラにハイパーコールを送信することを含む、当該コンピュータ実施方法。
・ 58項乃至61項のいずれかに記載のコンピュータ実施方法において
当該メモリ領域は、制御空間及び複数の要求スロットを備えるよう構成され、
当該コンピュータシステムインスタンスから当該コントローラに当該応答データを渡すことは、少なくとも当該制御空間にアクセスし、当該複数の要求スロットのうち少なくとも一部の当該応答データを有する1つの要求スロットを判断することにより、当該コントローラに当該応答データを取得させることを含む、当該コンピュータ実施方法。
・ 58項乃至62項のいずれかに記載のコンピュータ実施方法において、当該要求を満たすことは、当該第二ドメインで受信された当該要求に対応する第一要求を当該第一ドメインに生成することを含む、当該コンピュータ実施方法。
・ 1つまたは複数のプロセッサ、及び
命令を備えたメモリを備え、
当該命令は、当該1つまたは複数のプロセッサにより実行されると、当該システムに、
ハイパーバイザ、
当該ハイパーバイザ上で動作する1つまたは複数のコンピュータシステムインスタンス、
当該ハイパーバイザ上で動作するコントローラ、及び
当該1つまたは複数のコンピュータシステムインスタンスの各コンピュータシステムインスタンスに対し、当該コンピュータシステムインスタンス及び当該コントローラにより共有されるメモリ空間、を実施させ、
当該ハイパーバイザ、当該コンピュータシステムインスタンス、及び当該コントローラは、当該メモリ空間に当該要求データを配置することで利用可能になる要求に対する応答のデータについて、当該コンピュータシステムインスタンスから当該コントローラにハイパーコールを通して通知し、少なくとも部分的に当該コントローラにより当該コンピュータシステムの当該要求が満たされるよう一括して構成されるシステム。
・ 64項に記載のシステムにおいて、当該コンピュータシステムインスタンスは、当該ハイパーバイザにより実施されたハイパーコールインタフェースに対する準仮想デバイスドライバを備え、当該コンピュータシステムインスタンス及びコントローラのどちらか一方からのハイパーコールが、当該コンピュータシステムインスタンス及び当該コントローラの他方への通信のトリガとなるようにする、当該システム。
・ 64項または65項に記載のシステムにおいて、
当該コントローラは、プロトコルスイートの第一層セットを実施して備え、
当該コンピュータシステムインスタンスは、当該プロトコルスイートの第二層セットを実施して備え、
当該第一層セット及び当該第二層セットは、異なるが共通部分を有し、
当該要求を満たすことは、当該コントローラにより当該プロトコルスイートの当該第一層セットを使用することを含む、当該システム。
・ 64項乃至66項のいずれかに記載のシステムにおいて、当該要求はHTTP要求である、当該システム。
・ 64項乃至67項のいずれかに記載のシステムにおいて、当該要求データを当該メモリ空間に配置することは、当該メモリ空間の第一部に第一データを書込むこと、当該メモリ空間の第二部に第二データを書込むことを含み、当該第一データは、当該メモリ空間の当該第二部にある当該第二データの位置を示す、当該システム。
・ 64項乃至68項のいずれかに記載のシステムにおいて、当該コントローラはハイパーコールハンドラを備え、当該ハイパーコールハンドラは、当該ハイパーバイザのハイパーコールインタフェースからハイパーコールを受信し、当該メモリ空間にアクセスして要求をサービスすべきか判断するよう構成された、当該システム。
・ コンピュータ読取可能記憶媒体であって、格納された命令を有し、当該命令がコンピュータシステムの1つまたは複数のプロセッサにより実行されると、当該命令は当該コンピュータシステムに、少なくとも、
ハイパーバイザの第一ドメインにコンピュータシステムインスタンス、
当該ハイパーバイザの第二ドメインにコントローラ、及び
当該コントローラ及び当該コンピュータシステムインスタンスの双方がアクセス可能なメモリ領域、を実施させ、
当該コンピュータシステムインスタンス及びコントローラは、連携して要求処理するよう一括で構成され、要求を満たすことは、
当該ハイパーバイザのハイパーコールインタフェース及び当該メモリ領域を用いて、当該コンピュータシステムインスタンスと当該コントローラとの間でデータを渡すこと、
当該コンピュータシステムインスタンス及び当該コントローラの双方にそれぞれ、当該データに関連して1つまたは複数の動作を実行させるようにすること、を含む、コンピュータ読取可能記憶媒体。
・ 70項に記載のコンピュータ読取可能記憶媒体において、当該要求はハイパーテキスト転送プロトコル要求である、当該コンピュータ読取可能記憶媒体。
・ 70項または71項に記載のコンピュータ読取可能記憶媒体において、当該コンピュータシステムインスタンスと当該コントローラとの間で当該データを渡すことは、当該コンピュータシステムインスタンスは、準仮想デバイスドライバと対話し、当該メモリ領域にある当該データについての通知を、当該コントローラに向け出させることを含む、当該コンピュータ読取可能記憶媒体。
・ 72項に記載のコンピュータ読取可能記憶媒体において、当該通知は当該要求の識別子を備え、当該コンピュータシステムインスタンスと当該コントローラとの間で当該データを渡すことは、さらに、当該識別子を用いて位置を判断し、当該メモリ領域に格納された複数のデータインスタンスから当該要求データを選択することを含む、当該コンピュータ読取可能記憶媒体。
・ 70項乃至73項のいずれかに記載のコンピュータ読取可能記憶媒体において、
当該コントローラは、当該コンピュータシステムインスタンスにより実施されない、1つまたは複数層のプロトコルスタックを実施し、
当該要求処理では、当該1つまたは複数層の当該プロトコルスタックを使用する、当該コンピュータ読取可能記憶媒体。
・ 70項乃至74項のいずれかに記載のコンピュータ読取可能記憶媒体において、
当該命令はさらに、当該コンピュータシステムに別の1つまたは複数のコンピュータシステムインスタンスを実施させ、
実施された当該1つまたは複数層の当該プロトコルスタックは、当該別の1つまたは複数のコンピュータシステムインスタンスのそれぞれの要求処理に使用され、
当該メモリ領域に、当該別の1つまたは複数のコンピュータシステムインスタンスがアクセスできない、当該コンピュータ読取可能記憶媒体。
その他変形も本開示の範囲内にある。このため、本開示の技術は、様々な変更及び代替構造に影響されやすいが、所定の例示的な実施形態は図で示され、上で詳述された。しかし、本発明により開示された特定の形式に限定する意図は無く、反対に、あらゆる変更、代替構造、及び、本発明の趣旨及び範囲に入る同等物を、添付の請求項の定義に包含することを意図していると理解すべきである。
本開示の実施形態の記述(特に、次にあげる請求項での文脈において)において、不定冠詞(「a」及び「an」)、不定冠詞(「the」)及び同種の指示語の使用は、本明細書に特段の記載、または文脈での明確な否定がない限り、単数も複数も本開示の範囲であると解釈されるものである。用語「備える」(「comprising」)、「有する」(「having」)及び「含む」(「including」及び「containing」)、などは、特段に記載が無い限り、オープンエンドタイプの用語(すなわち、「含むが、限定されない」)と解釈されるものである。物理的接続を意味する場合の用語「接続(され)」は、間に仲介物があっても、部分的または全体的な相互接触または相互固着として解釈されるものである。本明細書にて挙げた範囲値は、単に、それぞれが範囲に当てはまる値として参照する簡略法として挙げたものであり、本明細書に特段の記載がない限り、個々の値は、本明細書にそれぞれ挙げられた通り、本明細書に組み込まれる。特段の記載、または文脈での否定がない限り、用語「セット」(例えば、「対象物のセット」)または「サブセット」は、1つまたは複数の構成を含む空ではない集合体として解釈されるものである。さらに、特段の記載、または文脈での否定がない限り、対応するセットがある場合の用語「サブセット」は、対応するセットのサブセットを必ずしも明確に表示する必要もないが、サブセットも対応するセットも同じものであってもよい。
「A、B、及びCの少なくとも1つ」または「A、B及びCの少なくとも1つ」形式の言い回しなどの連結表現は、特段の記載、または文脈での明確な否定がない限り、一般的に、アイテム、期間などがAまたはBまたはCのいずれかであるか、A及びB及びCのセットの空でないサブセットを表すよう使用される文脈であると理解される。例えば、上記の連結した言い回しでの3つの構成を有するセットの例示例において、「A、B、及びCの少なくとも1つ」及び「A、B及びCの少なくとも1つ」は、次のセットのいずれでもある:{A}、{B}、{C}、{A、B}、{A、C}、{B、C}、{A、B、C}。このため、連結表現は一般的に、少なくとも1つのA、少なくとも1つのB、及び少なくとも1つのCのそれぞれが存在するような任意の実施形態を意味するものではない。
本明細書に記載のプロセスの動作は、本明細書に特段の記載、または文脈での明確な否定がない限り、任意の順で実施可能である。本明細書に記載のプロセス(または変形及び/または変形の組合せ)は、実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと実行されてもよく、ハードウェアまたはハードウェアの組合せにより、1つまたは複数のプロセッサ上で一括して実行するコード(例えば、実行可能な命令、1つまたは複数のコンピュータプログラム、または1つまたは複数のアプリケーション)として実行されてもよい。コードは、例えば、1つまたは複数のプロセッサにより実行可能な複数の命令を備えるコンピュータプログラムの形式で、コンピュータ読取可能記憶媒体に格納されてもよい。コンピュータ読取可能記憶媒体は、非一時的であってもよい。
本明細書で一部及び全ての実施例、または例示的な表現(例えば、「など」)を使うのは、単に本発明をより分かりやすくするためであり、請求しない限り、本発明の範囲の限定するものではない。本発明の実施に不可欠な要素であるのに、本明細書の表現を理由に、請求されていない要素であるなどと解釈すべきでない。
本開示による好適な実施形態は、本明細書にて記述されているが、本発明を実行する発明者に周知の最適な様式も含む。好適な実施形態の変形は、上で論じた内容を当業者が読めば明らかであろう。発明者は、技能者が適宜変形することを期待し、発明者は、本開示の実施形態が、本明細書で明確に記載した実施形態とは異なって実行されることも意図する。よって、本開示の範囲は、適用法令に基づき、あらゆる変形、及び本明細書に添付の請求項に挙げた内容と同等なものを含む。さらに、本明細書にて特段の記載、または文脈での明確な否定がない限り、可能性のあるあらゆる変形における上記の構成要素のあらゆる組合せも、本開示の範囲に包含される。
本明細書で引用した、出版物、特許申請及び特許を含めたあらゆる引用文献は、各引用文献を、引用により本明細書の一部として個々に具体的に表示し、本明細書にて全て定めたと見なし援用するものである。

Claims (15)

  1. 実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
    実行可能部を備えるアプリケーションソースを受信し、
    前記アプリケーションソースを解析し、前記実行可能部の実行における変動ポイントを判断し、
    判断した前記変動ポイントの少なくとも一部に基づく停止ポイントまで、仮想マシンインスタンスにより前記実行可能部を実行し、
    前記仮想マシンインスタンスを前記停止ポイントで停止させ、
    停止させた前記仮想マシンインスタンスのスナップショットを、前記変動ポイントで、または前記変動ポイント以前で取り、
    前記スナップショットを用いて別の仮想マシンインスタンスをインスタンス化する、ことを備える、
    コンピュータ実施方法。
  2. 前記アプリケーションソースを解析することは、前記アプリケーションソースに、判断した前記変動ポイントを含む1つまたは複数の変動ポイントの1つまたは複数の位置のアノテーションを付けることを含み、
    前記停止ポイントは、少なくとも一部の前記アノテーションが付されたアプリケーションソースに基づく、請求項1に記載のコンピュータ実施方法。
  3. 前記アプリケーションソースにアノテーションを付けることは、前記アプリケーションソースに参照された1つまたは複数の機能を、変動ポイントに対応する機能一覧に照らすことを含む、請求項2に記載のコンピュータ実施方法。
  4. 前記方法はさらに、前記変動ポイント以前の実行において、セーフポイントであると判断されるポイントに相当する状態に、前記仮想マシンインスタンスを復元することを備え、
    実行において前記セーフポイントであると判断される前記ポイントで、前記スナップショットを取る、請求項1〜3のいずれか一項に記載のコンピュータ実施方法。
  5. 前記停止ポイントまで前記実行可能部を実行することは、前記実行可能部の実行をモニタリングし、前記停止ポイントを検出することを含む、請求項1〜4のいずれか一項に記載のコンピュータ実施方法。
  6. 前記スナップショットは、前記仮想マシンインスタンスのメモリ空間の少なくとも一部のコピーを符号化し、1つまたは複数のプロセッサレジスタの状態、1つまたは複数のフラグの状態、1つまたは複数のプログラムカウンタの状態、或いは、1つまたは複数のエントリポイントアドレスを備える、請求項1〜5のいずれか一項に記載のコンピュータ実施方法。
  7. 実行可能な命令を備えて構成された1つまたは複数のコンピュータシステムの制御のもと、
    1つまたは複数のアプリケーションソースの実行可能部にある変動ポイントを特定することであって,前記1つまたは複数の変動ポイントのそれぞれは1つまたは複数のコンピュータ実行可能命令に対応し,複数回行った前記1つまたは複数のコンピュータ実行可能命令の実行結果に潜在的に様々な変動が見られるような、前記変動ポイントを特定することと、
    仮想マシンインスタンスにより、前記アプリケーションソースの前記実行可能部の実行をモニタリングし、前記1つまたは複数の変動ポイントから1つの変動ポイントを特定することと、
    前記仮想マシンインスタンスで前記アプリケーションソースを実行し、特定した前記変動ポイントのうち前記1つの変動ポイントに基づき、前記仮想マシンインスタンスを停止させることと、
    前記仮想マシンインスタンスを停止させた前記1つの変動ポイントで、前記仮想マシンインスタンスのスナップショットを取ることと、
    取った前記スナップショットの少なくとも一部に基づき、別の仮想マシンインスタンスのインスタンス化に使用可能であるアプリケーションイメージを格納することと、を備える、
    コンピュータ実施方法。
  8. 特定された前記1つまたは複数の変動ポイントは、実行の実行結果が前記アプリケーションソースからは確定的に導出できない、実行可能部の実行におけるポイントに対応する、請求項7に記載のコンピュータ実施方法。
  9. 前記アプリケーションソースで指定された1つまたは複数の機能を特定することと、
    特定された前記1つまたは複数の機能が、潜在的に変動ポイントになると判断された機能一覧にあるかを判断することと、を含む、請求項7又は8に記載のコンピュータ実施方法。
  10. 前記スナップショットを取ることは、特定した前記変動ポイントでまたは前記変動ポイント以前でセーフポイントを特定することを含み、前記セーフポイントは、復元可能なコンピュータシステムの状態であり、別のコンピュータシステム上で前記アプリケーションソースの前記実行可能部を前記コンピュータシステムの状態からレジューム可能な、前記コンピュータシステムの状態に対応することを受け特定される、請求項7〜9のいずれか一項に記載のコンピュータ実施方法。
  11. 1つまたは複数のプロセッサ、及び
    実行可能な命令を備えるメモリを備え、
    前記1つまたは複数のプロセッサにより実行されると、第一サブシステムが実施され、
    前記第一サブシステムは、
    アプリケーションソースの少なくとも一部に基づきコンピュータシステムインスタンスをインスタンス化し、
    変動ポイントを特定するため、
    前記コンピュータシステムインスタンスのメモリページが前記変動ポイントに対応する命令を含むことによって、前記コンピュータシステムインスタンスを中断させる割り込みを発行するため、前記アプリケーションソースの実行可能部の実行をモニタリングし、
    特定した前記変動ポイントの少なくとも一部に基づき、前記コンピュータシステムインスタンスのスナップショットを取り、
    別のコンピュータシステムインスタンスのインスタンス化に使用可能であり、取った前記スナップショットの少なくとも一部に基づくアプリケーションイメージを格納させる、
    システム。
  12. さらに、前記アプリケーションソースの前記実行可能部を処理し、変動ポイントのセットから複数変動ポイントのセットを特定するよう構成された第二サブシステムを備える、請求項11に記載のシステム。
  13. 前記アプリケーションソースの少なくとも一部に基づき、ブートストラッププログラムを選択することと、
    選択した前記ブートストラッププログラムを実行することと、を含む、請求項11又は12に記載のシステム。
  14. 前記システムはさらに、コンピュータシステムインスタンスのインスタンス化のため、別のシステムによるアクセス可能なアプリケーションイメージリポジトリを備え、
    前記アプリケーションイメージを格納させることは、前記アプリケーションイメージを前記アプリケーションイメージリポジトリに送信することを含む、請求項11から13のいずれか一項に記載のシステム。
  15. 前記アプリケーションソースは、潜在的な変動ポイントを示す1つまたは複数のアノテーションが付され、
    前記1つまたは複数のアノテーションの少なくとも一部に基づき、前記アプリケーションソースの前記実行可能部の実行をモニタリングする、請求項11から14のいずれか一項に記載のシステム。
JP2018191339A 2013-08-12 2018-10-10 要求処理技術 Active JP6849642B2 (ja)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US13/964,977 2013-08-12
US13/964,889 2013-08-12
US13/964,941 2013-08-12
US13/964,977 US10346148B2 (en) 2013-08-12 2013-08-12 Per request computer system instances
US13/964,941 US9348634B2 (en) 2013-08-12 2013-08-12 Fast-booting application image using variation points in application source code
US13/964,889 US9280372B2 (en) 2013-08-12 2013-08-12 Request processing techniques

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2016533499A Division JP6419815B2 (ja) 2013-08-12 2014-08-11 要求処理技術

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2019201248A Division JP6764989B2 (ja) 2013-08-12 2019-11-06 要求処理技術

Publications (2)

Publication Number Publication Date
JP2019023915A JP2019023915A (ja) 2019-02-14
JP6849642B2 true JP6849642B2 (ja) 2021-03-24

Family

ID=52468614

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2016533499A Active JP6419815B2 (ja) 2013-08-12 2014-08-11 要求処理技術
JP2018191339A Active JP6849642B2 (ja) 2013-08-12 2018-10-10 要求処理技術
JP2019201248A Active JP6764989B2 (ja) 2013-08-12 2019-11-06 要求処理技術

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2016533499A Active JP6419815B2 (ja) 2013-08-12 2014-08-11 要求処理技術

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2019201248A Active JP6764989B2 (ja) 2013-08-12 2019-11-06 要求処理技術

Country Status (6)

Country Link
US (2) US9280372B2 (ja)
EP (1) EP3033677B1 (ja)
JP (3) JP6419815B2 (ja)
CN (2) CN111338762B (ja)
CA (1) CA2921180C (ja)
WO (1) WO2015023607A1 (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10339229B1 (en) 2013-05-31 2019-07-02 Cadence Design Systems, Inc. Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
US10169063B2 (en) * 2014-02-24 2019-01-01 Red Hat Israel, Ltd. Hypervisor capability access provision
US9690686B1 (en) * 2014-03-31 2017-06-27 Cadence Design Systems, Inc. Method for setting breakpoints in automatically loaded software
DE102014208848A1 (de) * 2014-05-12 2015-11-12 Robert Bosch Gmbh Verfahren zum Überwachen eines elektronischen Sicherheitsmoduls
US11487561B1 (en) 2014-12-24 2022-11-01 Cadence Design Systems, Inc. Post simulation debug and analysis using a system memory model
US10802852B1 (en) 2015-07-07 2020-10-13 Cadence Design Systems, Inc. Method for interactive embedded software debugging through the control of simulation tracing components
US10699211B2 (en) 2016-02-29 2020-06-30 Oracle International Corporation Supervised method for classifying seasonal patterns
US10331802B2 (en) 2016-02-29 2019-06-25 Oracle International Corporation System for detecting and characterizing seasons
US10970891B2 (en) 2016-02-29 2021-04-06 Oracle International Corporation Systems and methods for detecting and accommodating state changes in modelling
US10885461B2 (en) 2016-02-29 2021-01-05 Oracle International Corporation Unsupervised method for classifying seasonal patterns
US10198339B2 (en) 2016-05-16 2019-02-05 Oracle International Corporation Correlation-based analytic for time-series data
US11082439B2 (en) 2016-08-04 2021-08-03 Oracle International Corporation Unsupervised method for baselining and anomaly detection in time-series data for enterprise systems
US10635563B2 (en) 2016-08-04 2020-04-28 Oracle International Corporation Unsupervised method for baselining and anomaly detection in time-series data for enterprise systems
US10785288B2 (en) * 2017-02-22 2020-09-22 International Business Machines Corporation Deferential support of request driven cloud services
US10915830B2 (en) 2017-02-24 2021-02-09 Oracle International Corporation Multiscale method for predictive alerting
US10949436B2 (en) 2017-02-24 2021-03-16 Oracle International Corporation Optimization for scalable analytics using time series models
US10817803B2 (en) 2017-06-02 2020-10-27 Oracle International Corporation Data driven methods and systems for what if analysis
WO2018227899A1 (zh) * 2017-06-14 2018-12-20 北京小米移动软件有限公司 应用交互方法、交互方法及装置
US11010823B2 (en) * 2017-07-28 2021-05-18 Citrix Systems, Inc. Connector leasing for long-running software operations
US10621005B2 (en) * 2017-08-31 2020-04-14 Oracle International Corporation Systems and methods for providing zero down time and scalability in orchestration cloud services
US20200142746A1 (en) * 2017-12-29 2020-05-07 Virtual Instruments Corporation Methods and system for throttling analytics processing
CN110413333B (zh) * 2018-04-28 2022-04-22 网宿科技股份有限公司 基于NodeJS和PowerShell的Windows系统的微服务管理方法和装置
US10997517B2 (en) 2018-06-05 2021-05-04 Oracle International Corporation Methods and systems for aggregating distribution approximations
US10963346B2 (en) 2018-06-05 2021-03-30 Oracle International Corporation Scalable methods and systems for approximating statistical distributions
US11074094B2 (en) 2018-08-29 2021-07-27 Red Hat, Inc. Securing hypercall support for user space processes in virtual machines
US12001926B2 (en) 2018-10-23 2024-06-04 Oracle International Corporation Systems and methods for detecting long term seasons
US11138090B2 (en) 2018-10-23 2021-10-05 Oracle International Corporation Systems and methods for forecasting time series with variable seasonality
US10855548B2 (en) 2019-02-15 2020-12-01 Oracle International Corporation Systems and methods for automatically detecting, summarizing, and responding to anomalies
US12086157B2 (en) * 2019-03-04 2024-09-10 Hitachi Vantara Llc Asynchronous storage management in a distributed system
US11121983B1 (en) 2019-03-20 2021-09-14 United Services Automobile Association (Usaa) Reactive throttle infrastructure
US11748178B2 (en) * 2019-04-02 2023-09-05 Intel Corporation Scalable and accelerated function as a service calling architecture
US11533326B2 (en) 2019-05-01 2022-12-20 Oracle International Corporation Systems and methods for multivariate anomaly detection in software monitoring
US11537940B2 (en) 2019-05-13 2022-12-27 Oracle International Corporation Systems and methods for unsupervised anomaly detection using non-parametric tolerance intervals over a sliding window of t-digests
US11625505B2 (en) 2019-08-19 2023-04-11 Microsoft Technology Licensing, Llc Processor with network stack domain and system domain using separate memory regions
US11887015B2 (en) 2019-09-13 2024-01-30 Oracle International Corporation Automatically-generated labels for time series data and numerical lists to use in analytic and machine learning systems
US11470118B2 (en) * 2019-11-01 2022-10-11 Microsoft Technology Licensing, Llc Processor with network processing stack having separate binary
CN111880864B (zh) * 2020-07-30 2023-12-26 平安国际智慧城市科技股份有限公司 基于http的模型调用方法、系统、计算机设备和存储介质
US11582327B1 (en) 2021-10-21 2023-02-14 Citrix Systems, Inc. Dynamically coordinated service maintenance operations and adaptive service polling for microservices

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5555385A (en) 1993-10-27 1996-09-10 International Business Machines Corporation Allocation of address spaces within virtual machine compute system
US5797005A (en) 1994-12-30 1998-08-18 International Business Machines Corporation Shared queue structure for data integrity
US6678735B1 (en) 2000-01-26 2004-01-13 Nortel Networks Limited Method and apparatus for a sip client manager
US20020116205A1 (en) 2000-05-19 2002-08-22 Ankireddipally Lakshmi Narasimha Distributed transaction processing system
US7689560B2 (en) 2000-10-13 2010-03-30 Miosoft Corporation Persistent data storage techniques
US20020141404A1 (en) 2001-04-03 2002-10-03 Michael Wengrovitz Call routing using information in session initiation protocol messages
US6886041B2 (en) 2001-10-05 2005-04-26 Bea Systems, Inc. System for application server messaging with multiple dispatch pools
US7376693B2 (en) 2002-02-08 2008-05-20 Jp Morgan Chase & Company System architecture for distributed computing and method of using the system
US6895472B2 (en) 2002-06-21 2005-05-17 Jp Morgan & Chase System and method for caching results
US7103628B2 (en) 2002-06-20 2006-09-05 Jp Morgan Chase & Co. System and method for dividing computations
US7640547B2 (en) 2002-02-08 2009-12-29 Jpmorgan Chase & Co. System and method for allocating computing resources of a distributed computing system
US8271882B2 (en) 2002-04-24 2012-09-18 Sap Ag Processing life and work events
GB0217088D0 (en) 2002-07-24 2002-09-04 Ibm Asynchronous messaging in storage area network
US6957113B1 (en) 2002-09-06 2005-10-18 National Semiconductor Corporation Systems for allocating multi-function resources in a process system and methods of operating the same
US20040205776A1 (en) 2003-04-10 2004-10-14 International Business Machines Corporation Method and apparatus for concurrent update and activation of partition firmware on a logical partitioned data processing system
US7467102B2 (en) 2003-09-11 2008-12-16 International Business Machines Corporation Request type grid computing
US20050060704A1 (en) * 2003-09-17 2005-03-17 International Business Machines Corporation Managing processing within computing environments including initiation of virtual machines
US7908313B2 (en) 2004-07-21 2011-03-15 The Mathworks, Inc. Instrument-based distributed computing systems
US7512769B1 (en) 2004-10-06 2009-03-31 Hewlett-Packard Development Company, L.P. Process migration
US7409719B2 (en) * 2004-12-21 2008-08-05 Microsoft Corporation Computer security management, such as in a virtual machine or hardened operating system
EP1979828A4 (en) 2006-01-31 2011-03-23 Open Text Inc APPLICATIONS FOR WORKFLOW
JP4958034B2 (ja) 2006-04-28 2012-06-20 克秀 浅沼 グループ分けシステム、グループ分け管理サーバ及びグループ分けプログラム
US7885969B2 (en) 2007-09-17 2011-02-08 International Business Machines Corporation System and method for executing compute-intensive database user-defined programs on an attached high-performance parallel computer
US8505030B2 (en) 2007-11-16 2013-08-06 Microsoft Corporation Coordinating resources using a volatile network intermediary
US9021503B2 (en) 2007-11-16 2015-04-28 Microsoft Technology Licensing, Llc Coordinating application state and communication medium state
US8719841B2 (en) 2007-11-16 2014-05-06 Microsoft Corporation Dispatch mechanism for coordinating application and communication medium state
US7743107B2 (en) * 2007-12-07 2010-06-22 International Business Machines Corporation System and method for using remote module on VIOS to manage backups to remote backup servers
US8984530B2 (en) 2008-01-31 2015-03-17 Microsoft Corporation Queued message dispatch
US10127059B2 (en) 2008-05-02 2018-11-13 Skytap Multitenant hosted virtual machine infrastructure
US8849971B2 (en) * 2008-05-28 2014-09-30 Red Hat, Inc. Load balancing in cloud-based networks
US8171495B2 (en) 2008-05-29 2012-05-01 Microsoft Corporation Queue dispatch using deferred acknowledgement
US20110004701A1 (en) 2008-12-29 2011-01-06 Debashish Panda Provisioning highly available services for integrated enterprise and communication
US8776090B2 (en) * 2009-02-17 2014-07-08 Broadcom Corporation Method and system for network abstraction and virtualization for a single operating system (OS)
US8433749B2 (en) 2009-04-15 2013-04-30 Accenture Global Services Limited Method and system for client-side scaling of web server farm architectures in a cloud data center
JP2010271980A (ja) 2009-05-22 2010-12-02 Access Co Ltd 端末装置、端末装置の起動方法およびプログラム
US8301706B2 (en) 2009-06-15 2012-10-30 Microsoft Corporation Routing of pooled messages via an intermediary
US8549267B2 (en) 2009-12-22 2013-10-01 Intel Corporation Methods and apparatus to manage partial-commit checkpoints with fixup support
US8375095B2 (en) 2009-12-22 2013-02-12 Microsoft Corporation Out of order durable message processing
EP2549380B1 (en) 2010-03-16 2018-06-13 Panasonic Intellectual Property Management Co., Ltd. Information processing device, virtual machine generation method, and application software distribution system
US20110252208A1 (en) * 2010-04-12 2011-10-13 Microsoft Corporation Express-full backup of a cluster shared virtual machine
US8607242B2 (en) 2010-09-02 2013-12-10 International Business Machines Corporation Selecting cloud service providers to perform data processing jobs based on a plan for a cloud pipeline including processing stages
US9304867B2 (en) * 2010-09-28 2016-04-05 Amazon Technologies, Inc. System and method for providing flexible storage and retrieval of snapshot archives
US8694821B2 (en) 2010-12-03 2014-04-08 International Business Machines Corporation Generation of standby images of applications
US9552215B2 (en) * 2011-03-08 2017-01-24 Rackspace Us, Inc. Method and system for transferring a virtual machine
JP5742410B2 (ja) * 2011-04-11 2015-07-01 日本電気株式会社 フォールトトレラント計算機システム、フォールトトレラント計算機システムの制御方法、及びフォールトトレラント計算機システムの制御プログラム
CN102270104B (zh) * 2011-07-14 2013-07-24 华中科技大学 虚拟化环境中动态磁盘带宽分配方法
US20130067469A1 (en) 2011-09-14 2013-03-14 Microsoft Corporation Load Balancing By Endpoints
US8863129B2 (en) 2011-12-06 2014-10-14 International Business Machines Corporation Automated caching and mirroring of immutable data in distributed virtual machines via native interface components
KR101658070B1 (ko) 2012-01-26 2016-09-22 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 연속 월드 스위치 보안을 갖는 데이터 센터
US8881115B2 (en) 2012-04-17 2014-11-04 International Business Machines Corporation Compiling source code for debugging with expanded snapshots
US8839243B2 (en) 2012-04-23 2014-09-16 International Business Machines Corporation Remediating resource overload
US9189959B2 (en) * 2012-06-27 2015-11-17 International Business Machines Corporation Navigation system providing a super detail mode of operation to assist user's driving
US9563480B2 (en) * 2012-08-21 2017-02-07 Rackspace Us, Inc. Multi-level cloud computing system

Also Published As

Publication number Publication date
US10353725B2 (en) 2019-07-16
JP2019023915A (ja) 2019-02-14
US20160188360A1 (en) 2016-06-30
CN111338762B (zh) 2024-04-23
EP3033677A1 (en) 2016-06-22
CN111338762A (zh) 2020-06-26
WO2015023607A1 (en) 2015-02-19
CN105556475A (zh) 2016-05-04
EP3033677B1 (en) 2021-06-23
JP6764989B2 (ja) 2020-10-07
US9280372B2 (en) 2016-03-08
JP2020038692A (ja) 2020-03-12
JP6419815B2 (ja) 2018-11-07
CA2921180C (en) 2023-04-04
US20150046920A1 (en) 2015-02-12
CA2921180A1 (en) 2015-02-19
JP2016529620A (ja) 2016-09-23
EP3033677A4 (en) 2017-03-22
CN105556475B (zh) 2020-03-31

Similar Documents

Publication Publication Date Title
JP6849642B2 (ja) 要求処理技術
US11068309B2 (en) Per request computer system instances
US11093270B2 (en) Fast-booting application image
JP7275171B2 (ja) オンデマンドネットワークコード実行システムにおけるオペレーティングシステムカスタマイゼーション
US10013275B2 (en) Executing code referenced from a microservice registry
Lagar-Cavilla et al. Snowflock: Virtual machine cloning as a first-class cloud primitive
US11886898B2 (en) GPU-remoting latency aware virtual machine migration
Arya et al. Design and implementation for checkpointing of distributed resources using process-level virtualization
US9606827B2 (en) Sharing memory between guests by adapting a base address register to translate pointers to share a memory region upon requesting for functions of another guest
CN110781159B (zh) Ceph目录文件信息读取方法、装置、服务器及存储介质
US10579419B2 (en) Data analysis in storage system
US10558553B2 (en) Enabling non-blocking runtime application debugging for a single threaded server environment
US9158601B2 (en) Multithreaded event handling using partitioned event de-multiplexers
US9612860B2 (en) Sharing memory between guests by adapting a base address register to translate pointers to share a memory region upon requesting for functions of another guest
US10824456B2 (en) System traffic analyzers to request co-location of virtual machines in frequent communication
US8745620B2 (en) Software tool and method for updating a virtual appliance
Cosulschi et al. Running Hadoop applications in virtualization environment

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181107

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181107

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20181107

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20190131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190425

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20190708

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191106

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20191106

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20191114

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20191118

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20200124

C211 Notice of termination of reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C211

Effective date: 20200203

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20200629

C13 Notice of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: C13

Effective date: 20201006

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20201006

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201209

C23 Notice of termination of proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C23

Effective date: 20201221

C03 Trial/appeal decision taken

Free format text: JAPANESE INTERMEDIATE CODE: C03

Effective date: 20210216

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20210216

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210304

R150 Certificate of patent or registration of utility model

Ref document number: 6849642

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250