特許第6363796号(P6363796)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アマゾン テクノロジーズ インコーポレイテッドの特許一覧

特許6363796動的コードデプロイメント及びバージョニング
<>
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000002
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000003
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000004
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000005
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000006
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000007
  • 特許6363796-動的コードデプロイメント及びバージョニング 図000008
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6363796
(24)【登録日】2018年7月6日
(45)【発行日】2018年7月25日
(54)【発明の名称】動的コードデプロイメント及びバージョニング
(51)【国際特許分類】
   G06F 8/60 20180101AFI20180712BHJP
   G06F 8/656 20180101ALI20180712BHJP
   G06F 9/455 20060101ALI20180712BHJP
   G06F 9/50 20060101ALI20180712BHJP
【FI】
   G06F8/60
   G06F8/656
   G06F9/455 150
   G06F9/50 120A
【請求項の数】15
【全頁数】31
(21)【出願番号】特願2017-516168(P2017-516168)
(86)(22)【出願日】2015年9月29日
(65)【公表番号】特表2017-534107(P2017-534107A)
(43)【公表日】2017年11月16日
(86)【国際出願番号】US2015052833
(87)【国際公開番号】WO2016053968
(87)【国際公開日】20160407
【審査請求日】2017年3月23日
(31)【優先権主張番号】14/502,620
(32)【優先日】2014年9月30日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100106541
【弁理士】
【氏名又は名称】伊藤 信和
(72)【発明者】
【氏名】ワグナー ティモシー アレン
(72)【発明者】
【氏名】レック ショーン フィリップ
(72)【発明者】
【氏名】マンワリング デレック スティーブン
(72)【発明者】
【氏名】ザオ ジン
(72)【発明者】
【氏名】トーマス ディラン チャンドラー
【審査官】 坂庭 剛史
(56)【参考文献】
【文献】 特開2011−257847(JP,A)
【文献】 特開2002−287974(JP,A)
【文献】 国際公開第2008/114454(WO,A1)
【文献】 特開2006−107500(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/60
G06F 8/65
G06F 8/656
G06F 9/445
G06F 9/455
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
仮想コンピュートフリートから低レイテンシ演算キャパシティを提供するためのシステムであって、前記システムが、
ユーザの少なくとも1つのプログラムコードを電子的にストアするように構成されるデータストアと、
特定のコンピュータにより実行可能な命令を実行する1つまたは複数のハードウェアコンピューティングデバイスを含む仮想コンピュートシステムであって、前記仮想コンピュートシステムが前記データストアと通信し、且つ、少なくとも
1つまたは複数の物理的なコンピューティングデバイス上で複数の仮想マシンインスタンスを保守し、前記複数の仮想マシンインスタンスは、
そこにロードされた1つまたは複数のソフトウェア構成要素を有し、且つ、ユーザに割り当てられるのを待機する仮想マシンインスタンスを含むウォーミングプール、及び、
1人または複数のユーザに現在割り当てられる仮想マシンインスタンスを含むアクティブプールを含むものであり、
前記仮想コンピュートシステム上で第1のプログラムコードを実行するため第1のコード実行要求を受信し、
前記第1のコード実行要求に基づいて、前記第1のプログラムコードが、前記アクティブプールにおいて前記仮想マシンインスタンスの特定のインスタンス上に作成されたコンテナへロードされる第2のプログラムコードのより新しいバージョンであると判定し、
前記データストア、前記特定のインスタンスのコードキャッシュ、及び、前記コンテナの少なくとも1つへの前記第1のプログラムコードのダウンロードを開始し、
前記第2のプログラムコードにより前記第1のコード実行要求を処理する、
ように構成される、前記仮想コンピュートシステムと、
を含む、前記システム。
【請求項2】
請求項1に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステム上で前記第1のプログラムコードを実行するため第2のコード実行要求を受信し、
前記コンテナが前記第2のプログラムコードを実行している間、前記第1のプログラムコードにより前記第2のコード実行要求を処理させる、
ように構成される、前記システム。
【請求項3】
請求項1に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステムの前記データストアを前記アクティブプールにおける多数の仮想マシンインスタンスと関連させ、前記多数の仮想マシンインスタンスのそれぞれは、前記データストアにストアされたデータを利用するものであり、
前記多数の仮想マシンインスタンスのいずれか1つにロードされる1つまたは複数のプログラムコードを、前記データストアに自動的にロードさせる、
ように構成される、前記システム。
【請求項4】
特定のコンピュータにより実行可能な命令を実行する1つまたは複数のハードウェアコンピューティングデバイスを含み、且つ、少なくとも、
より新しいプログラムコードと関連した第1の要求を受信し、
前記第1の要求に基づいて、前記より新しいプログラムコードが、仮想コンピュートシステム上の仮想マシンインスタンス上に作成された既存のコンテナへ予めロードされたより古いプログラムコードのより新しいバージョンであると判定し、
前記仮想マシンインスタンス上に作成される新たなコンテナ、前記仮想コンピュートシステムのデータストア、及び、前記仮想マシンインスタンスのコードキャッシュの少なくとも1つへの前記より新しいプログラムコードのダウンロードを開始し、
前記既存のコンテナにおける前記より古いプログラムコードにより前記第1の要求を処理させる、
ように構成される、仮想コンピュートシステム
を含む、システム。
【請求項5】
請求項4に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記より古いプログラムコードがアップデートされたと判定し、
前記より新しいプログラムコードと関連した何らかの要求が受信される前に、前記より新しいプログラムコードを、前記仮想コンピュートシステムへダウンロードさせる、
ように構成される、前記システム。
【請求項6】
請求項4に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記より新しいプログラムコードと関連した第2の要求を受信し、
前記既存のコンテナが前記より古いプログラムコードを実行している間に、前記新たなコンテナにおける前記より新しいプログラムコードにより前記第2の要求を処理させる、
ように構成される、前記システム。
【請求項7】
請求項4に記載のシステムであって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急でないというインディケーションを含み、
前記仮想コンピュートシステムがさらに、前記より新しいプログラムコードがダウンロードされている間に、前記より古いプログラムコードを使用して、前記より新しいプログラムコードと関連した追加の要求を処理し続ける、
ように構成される、前記システム。
【請求項8】
請求項4に記載のシステムであって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急であるというインディケーションを含み、
前記仮想コンピュートシステムがさらに、前記より新しいプログラムコードと関連したいずれの追加の要求も、前記より古いプログラムコードにより処理されるのを防ぐ、ように構成される、前記システム。
【請求項9】
請求項4に記載のシステムであって、
前記仮想コンピュートシステムが、そこに作成される1つまたは複数のコンテナにおいてユーザコードを実行するように構成される仮想マシンインスタンスのアクティブプールを含み、
前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステムの前記データストアを前記アクティブプールにおける多数の仮想マシンインスタンスと関連させ、前記多数の仮想マシンインスタンスのそれぞれは、前記データストアにストアされたデータを利用するものであり、
前記多数の仮想マシンインスタンスのいずれか1つにロードされる1つまたは複数のプログラムコードを、前記データストアに自動的にロードさせる、
ように構成される、前記システム。
【請求項10】
請求項9に記載のシステムであって、
前記データストアが、前記特定の仮想マシンインスタンスが終了された後、前記データストア上で任意のデータを保持しつつ、前記特定の仮想マシンインスタンスと、前記データストア上の前記特定の仮想マシンインスタンスと予め関連した前記任意のデータとの関連を終了させる、
ように構成される、前記システム。
【請求項11】
コンピュータにより実行される方法であって、
特定の実行可能な命令を備えて構成される1つまたは複数のコンピューティングデバイスによって実行されるとき、
仮想コンピュートシステム上でより新しいプログラムコードを実行するため第1の要求を受信することと、
前記第1の要求に基づいて、前記より新しいプログラムコードが、前記仮想コンピュートシステム上の仮想マシンインスタンス上に作成された既存のコンテナへロードされたより古いプログラムコードのより新しいバージョンであると判定することと、
前記仮想マシンインスタンス上に作成される新たなコンテナ、前記仮想コンピュートシステムのデータストア、及び、前記仮想マシンインスタンスのコードキャッシュの少なくとも1つへの前記より新しいプログラムコードのダウンロードを開始することと、
前記既存のコンテナにおける前記より古いプログラムコードにより、前記第1の要求を処理させること、
を含む、前記方法。
【請求項12】
請求項11に記載のコンピュータにより実行される方法であって、前記方法がさらに、
前記より古いプログラムコードがアップデートされたと判定することと、
前記より新しいプログラムコードと関連した何らかの要求が受信される前に、前記より新しいプログラムコードを前記仮想コンピュートシステムへダウンロードさせること、
を含む、前記方法。
【請求項13】
請求項11に記載のコンピュータにより実行される方法であって、前記方法がさらに、
前記仮想コンピュートシステム上で前記より新しいプログラムコードを実行するため第2の要求を受信することと、
前記既存のコンテナが前記より古いプログラムコードを実行している間に、前記より新しいプログラムコードにより前記第2の要求を処理させること、
を含む、前記方法。
【請求項14】
請求項11に記載のコンピュータにより実行される方法であって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急であるというインディケーションを含み、
前記方法がさらに、前記より新しいプログラムコードと関連したいずれの追加の要求も、前記より古いプログラムコードにより処理されるのを防ぐことを含む、
前記方法。
【請求項15】
請求項11に記載のコンピュータにより実行される方法であって、
前記仮想コンピュートシステムが、そこに作成される1つまたは複数のコンテナにおいてユーザコードを実行するように構成される仮想マシンインスタンスのアクティブプールを含み、
前記方法がさらに、
前記仮想コンピュートシステムの前記データストアを、前記アクティブプールにおける多数の仮想マシンインスタンスと関連させることであって、前記多数の仮想マシンインスタンスのそれぞれは、前記データストアにストアされたデータを利用するものである、前記関連させることと、
前記多数の仮想マシンインスタンスのいずれか1つへロードされる1つまたは複数のプログラムコードを、前記データストアへ自動的にロードさせること、
を含む、前記方法。
【発明の詳細な説明】
【技術分野】
【0001】
本出願の出願人は、2014年9月30日に、以下の米国特許出願を現在出願している。
代理人整理番号 発明の名称
SEAZN,982A MESSAGE−BASED COMPUTATION
REQUEST SCHEDULING
メッセージベースのコンピューテーション
要求スケジューリング
SEAZN.983A LOW LATENCY COMPUTATIONAL
CAPACITY PROVISIONING
低レイテンシ演算キャパシティプロビジョニング
SEAZN.984A AUTOMATIC MANAGEMENT OF LOW
LATENCY COMPUTATIONAL
CAPACITY
低レイテンシ演算キャパシティの自動管理
SEAZN.989A THREADING AS A SERVICE
サービスとしてのスレッディング
SEAZN.990A PROGRAMMATIC EVENT
DETECTION AND MESSAGE
GENERATION FOR REQUESTS
TO EXECUTE PROGRAM CODE
プログラムコード実行に対する要求のための
プログラムによるイベント検出及びメッセージ生成
SEAZN.991A PROCESSING EVENT MESSAGES
FOR USER REQUESTS TO
EXECUTE PROGRAM CODE
プログラムコード実行に対するユーザ要求のための
イベントメッセージ処理
【0002】
上記で参照された出願の開示は、それらの全体が参照により本明細書に組み込まれる。
【背景技術】
【0003】
一般に言われているように、コンピューティングデバイスは、データを交換するために、1つの通信ネットワークまたは一連の通信ネットワークを利用する。企業や組織は、動作をサポートするため、または、サードパーティにサービスを提供するため、いくつかのコンピューティングデバイスを相互接続するコンピュータネットワークを運用する。コンピューティングシステムは、1つの地理的位置に配置されてもよく、または、多数の別個の地理的位置に配置されてもよい(例えば、プライベートまたはパブリック通信ネットワークを介して相互接続されてよい)。具体的には、本明細書において一般に「データセンター」と呼ばれるデータセンターまたはデータ処理センターが、データセンターのユーザにコンピューティングリソースを提供するように、いくつかの相互接続されたコンピューティングシステムを含んでよい。データセンターは、組織に代わって運用されるプライベートデータセンター、または、不特定多数の人々に代わって、もしくは不特定多数の人々の利益のために運用されるパブリックデータセンターであってよい。
【0004】
データセンターリソースの利用の増加を促進するため、仮想化技術により、1つの物理的なコンピューティングデバイスが、データセンターのユーザにとって独立したコンピューティングデバイスとして出現及び動作する仮想マシンの1つまたは複数のインスタンスをホストすることが可能となり得る。仮想化により、1つの物理的なコンピューティングデバイスは、動的な方法で仮想マシンを作成、保守、削除、あるいは管理し得る。その結果、ユーザは、1つのコンピューティングデバイスまたはネットワーク化されたコンピューティングデバイスの構成を含み、且つ、種々の数の仮想マシンリソースを備えるデータセンターから、コンピュータリソースを要求し得る。
【発明の概要】
【課題を解決するための手段】
【0005】
いくつかのシナリオにおいて、仮想マシンインスタンスは、特定の機能性を提供するように、いくつかの仮想マシンインスタンスタイプに応じて構成されてよい。例えば、コンピューティングデバイスが異なる所望の機能性を提供すること、または、同様の機能性をより効率的に提供することを可能にするように、様々なコンピューティングデバイスは、オペレーティングシステムまたはオペレーティングシステム構成、仮想化されたハードウェアリソース及びソフトウェアアプリケーションの異なる組合せと関連してよい。これらの仮想マシンインスタンスタイプの構成は、多くの場合デバイスイメージ内に収容され、デバイスイメージは、仮想マシンがいったん始動されると実行するソフトウェア(例えば、OS及びアプリケーション、ならびに、それらの構成及びデータファイル等)を収容する静的データを含む。デバイスイメージは一般に、インスタンスを作成または初期化するのに使用されるディスクに記憶される。それゆえ、コンピューティングデバイスは、所望のソフトウェア構成を実行するため、デバイスイメージを処理してよい。
【0006】
前述の態様及び本開示の付随する利点の多くが、添付の図面と併用して以下の詳細な説明を参照することにより、一層容易に理解され、同様に、良好に理解される。
【図面の簡単な説明】
【0007】
図1】例示的な態様に従った、低レイテンシコンピュートキャパシティを提供するための説明的な環境を表すブロック図である。
図2】例示的な態様に従った、例示的なバージョニングスキームを示すブロック図である。
図3】例示的な態様に従った、例示的なバージョニングスキームを示すブロック図である。
図4】例示的な態様に従った、例示的なバージョニングスキームを示すブロック図である。
図5】例示的な態様に従った、例示的なバージョニングスキームを示すブロック図である。
図6】例示的な態様に従った、仮想コンピュートシステム上のコードデプロイメントを管理するためのバージョニング及びデプロイメントマネージャを提供するコンピューティングデバイスの一般的なアーキテクチャを表す。
図7】例示的な態様に従った、デプロイメントマネージャにより実行される例示的なコードデプロイメントルーチンを示す流れ図である。
【発明を実施するための形態】
【0008】
企業や組織はもはや、コンピューティング動作を実施(例えば、スレッド、プログラム、ソフトウェア、ルーチン、サブルーチン、プロセス等を含むコードを実行)するために、自身の所有するデータセンターを獲得及び管理する必要はない。クラウドコンピューティングの出現により、ハードウェアコンピューティングデバイスにより従来提供されたストレージ空間及び演算能力は、今や、インターネット上で数分で取得及び構成され得る。それゆえ、開発者は、物理的なマシンの獲得を懸念する必要なく、所望の量のコンピューティングリソースを迅速に購入し得る。このようなコンピューティングリソースは、仮想コンピューティングリソースまたは仮想マシンインスタンスの形で一般に購入される。仮想マシンのこれらのインスタンスは、それら自体のオペレーティングシステム及び他のソフトウェア構成要素を備える物理的なコンピューティングデバイス上でホストされるものであり、物理的なコンピュータと同じ方法で利用され得る。
【0009】
しかし、仮想コンピューティングリソースが購入された場合でさえ、どのくらいの数の及びどんな種類の仮想マシンインスタンスを購入するか、ならびに、それらをいつまで維持するかを、開発者は依然として決定しなければならない。例えば、仮想マシンインスタンスを使用するコストは、タイプ及びそれらが貸し出される時間数により変動し得る。加えて、仮想マシンを貸し出すことのできる最短時間は、一般に時間単位である。さらに、開発者は、仮想マシンにインストールするためにハードウェア及びソフトウェアリソース(例えば、オペレーティングシステム及び言語ランタイム等のタイプ)を指定しなければならない。彼らが抱えることのある他の懸念は、過剰利用(例えば、獲得するコンピューティングリソースが少な過ぎて、パフォーマンス問題に悩まされること)、過少利用(例えば、コードを実行するのに必要とされるよりも多くのコンピューティングリソースを獲得し、それゆえ余計に支払うこと)、トラフィックの変化の予測(例えば、これにより、彼らはいつスケールアップまたはスケールダウンするかが分かる)、及び、インスタンス及び言語ランタイム起動遅延を含む。こうした遅延は、ユーザが、秒単位またはさらにミリ秒単位でコンピューティングキャパシティを所望することがあるにも関わらず、3〜10分またはそれよりも長くかかることがあるものである。それゆえ、ユーザが、サービスプロバイダにより提供される仮想マシンインスタンスを活用することを可能にする改善された方法が所望される。
【0010】
本開示の態様によれば、コード実行要求を受信することに応答してコードを動的にデプロイすることにより、コードを実行すること(例えばインスタンス及び言語ランタイム起動時間)と関連した遅延(レイテンシと呼ばれることもある)が、著しく削減され得る。
【0011】
一般に言われているように、本開示の態様は、ユーザコードの獲得、ならびに、仮想コンピュートシステム(例えば、内部ストレージ、仮想マシンインスタンス、及び/またはその中のコンテナ)上へのユーザコードのデプロイメントに関する。具体的には、仮想コンピュートシステム内でのユーザコードの管理を促進するシステム及び方法が開示される。仮想コンピュートシステムは、そこにロードされた1つまたは複数のソフトウェア構成要素(例えば、オペレーティングシステム、言語ランタイム、ライブラリ等)を有する仮想マシンインスタンスのプールを保守する。プールにおける仮想マシンインスタンスは、プログラムコードを実行するためのユーザ要求にサービスするように指定されてよい。プログラムコードは、仮想マシンインスタンス上に作成される隔離されたコンテナにおいて実行されてよい。プールにおける仮想マシンインスタンスは、要求が受信される時までに既に立ち上げられ、且つ、特定のオペレーティングシステム及び言語ランタイムをロードしているので、(例えば、仮想マシンインスタンス上に作成される1つまたは複数のコンテナにおいてユーザコードを実行することにより)要求に対処し得るコンピュートキャパシティを発見することと関連した遅延が著しく削減される。
【0012】
別の態様において、仮想コンピュートシステムは、入来する要求と関連したユーザコードが仮想コンピュートシステムに既にロードされている最新のバージョンのコードであると判定してよい。入来する要求の性質及び仮想コンピュートシステムの状態に基づいて、仮想コンピュートシステムは、どこにコードを配置すべきか、及び、どのバージョンのコードをどの要求にサービスするのに使用すべきかを決定してよい。
【0013】
本開示の特定の実施形態及び例示的な用途が、次に図面を参照して説明される。これらの実施形態及び例示的な用途は、本開示を説明することを意図しており、本開示に限定することを意図しない。
【0014】
図1を参照して、仮想環境100の実施形態を示すブロック図が説明される。図1に示された実施例は、ユーザコンピューティングデバイス102のユーザ(例えば、開発者等)が仮想コンピュートシステム110により提供される仮想コンピューティングリソースを使用して様々なプログラムコードを実行し得る、仮想環境100を含む。
【0015】
実例として、デスクトップコンピュータ、ラップトップ、及び携帯電話を含め、仮想コンピュートシステム110と通信する様々な例示的なユーザコンピューティングデバイス102が示される。一般に、ユーザコンピューティングデバイス102は、デスクトップ、ラップトップ、携帯電話(またはスマートフォン)、タブレット、キオスク、無線デバイス、及び他の電子デバイスなど、任意のコンピューティングデバイスであってよい。加えて、ユーザコンピューティングデバイス102は、同一または異なるデータセンター上で実行するウェブサービスを含んでよく、そこでは、例えば、異なるウェブサービスが、本明細書において説明される1つまたは複数の技法を実施するように、互いにプログラムで通信してよい。さらに、ユーザコンピューティングデバイス102は、インターネットアプライアンス及び接続されるデバイスなど、モノのインターネット(IoT)デバイスを含んでよい。仮想コンピュートシステム110は、ユーザコードを生成及びアップロードし、ユーザコードを呼び出し(例えば、仮想コンピュートシステム110上でユーザコードを実行するように要求をサブミットし)、イベントベースのジョブまたは時間指定されたジョブをスケジューリングし、ユーザコードを追跡し、ならびに/または、それらの要求及び/またはユーザコードに関連するその他のロギングまたはモニタリング情報を表示するための、1つまたは複数のユーザインターフェース、コマンドラインインターフェース(CLI)、アプリケーションプログラミングインターフェース(API)、及び/または、他のプログラマチックインターフェースを、ユーザコンピューティングデバイス102に提供してよい。1つまたは複数の実施形態が、ユーザインターフェースを使用するものとして本明細書において説明され得るが、そのような実施形態が、追加的にまたは代替的に、任意のCLI、API、または他のプログラマチックインターフェースを使用してもよいことを理解すべきである。
【0016】
ユーザコンピューティングデバイス102は、ネットワーク104を介して仮想コンピュートシステム110にアクセスする。ネットワーク104は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組合せであってよい。加えて、ネットワーク104は、パーソナルエリアネットワーク、ローカルエリアネットワーク、広域ネットワーク、無線の放送網ネットワーク(例えば、ラジオまたはテレビ用)、ケーブルネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組合せであってよい。例えば、ネットワーク104は、インターネットなど、場合によっては様々な別個の当事者により動作される、接続されたネットワークのうちの公衆にアクセス可能なネットワークであってよい。いくつかの実施形態において、ネットワーク104は、法人または大学のイントラネットなど、プライベートまたは準プライベートネットワークであってよい。ネットワーク104は、Global System for Mobile Communications(GSM)ネットワーク、符号分割多元接続(CDMA)ネットワーク、ロングタームエボリューション(LTE)ネットワーク、または任意の他のタイプの無線ネットワークなど、1つまたは複数の無線ネットワークを含んでよい。ネットワーク104は、インターネットまたは他の前述のタイプのネットワークのいずれかを介して通信するためのプロトコル及び構成要素を使用してよい。例えば、ネットワーク104により使用されるプロトコルは、ハイパーテキストトランスファープロトコル(HTTP)、HTTPセキュア(HTTPS)、Message Queue Telemetry Transport(MQTT)、Constrained Application Protocol(CoAP)等を含んでよい。インターネットまたは他の前述のタイプの通信ネットワークのいずれかを介して通信するためのプロトコル及び構成要素は、当業者によく知られており、それゆえ、本明細書ではより詳細に説明されない。
【0017】
仮想コンピュートシステム110は、1つまたは複数のコンピュータネットワークを使用して相互接続されるいくつかのコンピュータシステムを含む分散コンピューティング環境において動作するものとして、図1に表わされる。仮想コンピュートシステム110はまた、図1に示したよりも少ない数または多い数のデバイスを有するコンピューティング環境内で動作してもよい。それゆえ、図1における仮想コンピュートシステム110の描写は、説明的なものとして受け取られるべきであり、本開示に限定するものでない。例えば、仮想コンピュートシステム110またはその様々な構成要素は、本明細書において説明されるプロセスの少なくとも一部を実行するように、様々なウェブサービス構成要素、ホストまたは「クラウド」コンピューティング環境、及び/または、ピアツーピアネットワーク構成を実行してよい。
【0018】
さらに、仮想コンピュートシステム110は、ハードウェア及び/またはソフトウェアにおいて実行されてよく、例えば、本明細書において説明される様々な特徴を実施するための、コンピュータにより実行可能な命令を実行するように構成される、物理的なコンピュータハードウェア上で実行される1つまたは複数の物理的または仮想サーバを含んでよい。1つまたは複数のサーバは、地理的に分散されてもよく、または、例えば1つまたは複数のデータセンターにおいて地理的に同じ場所に配置されてもよい。
【0019】
図1に示した環境において、仮想環境100は、仮想コンピュートシステム110を含み、仮想コンピュートシステム110は、フロントエンド120、ウォーミングプールマネージャ130、ワーカマネージャ140、バージョニング及びデプロイメントマネージャ150、及び、内部データストア160を含む。表された実施例において、仮想マシンインスタンス(「インスタンス」)152、154が、ウォーミングプールマネージャ130により管理されるウォーミングプール130Aにおいて示され、インスタンス156、158が、ワーカマネージャ140により管理されるアクティブプール140Aにおいて示される。仮想コンピュートシステム110内の様々な構成要素の実例は、実際には論理的なものであり、構成要素の1つまたは複数は、1つのコンピューティングデバイスまたは多数のコンピューティングデバイスにより実行されてよい。例えば、インスタンス152、154、156、158は、異なる様々な地理的領域における1つまたは複数の物理的なコンピューティングデバイス上で実行されてよい。同様に、フロントエンド120、ウォーミングプールマネージャ130、ワーカマネージャ140、バージョニング及びデプロイメントマネージャ150、及び内部データストア160のそれぞれは、多数の物理的なコンピューティングデバイス間で実行されてよい。あるいは、フロントエンド120、ウォーミングプールマネージャ130、ワーカマネージャ140、バージョニング及びデプロイメントマネージャ150、及び内部データストア160の1つまたは複数が、1つの物理的なコンピューティングデバイス上で実行されてよい。いくつかの実施形態において、仮想コンピュートシステム110は、多数のフロントエンド、多数のウォーミングプールマネージャ、多数のワーカマネージャ、多数のデプロイメントマネージャ、及び/または、多数の内部データストアを含んでよい。4つの仮想マシンインスタンスが図1の実施例に示されるが、本明細書において説明される実施形態はそのように限定されず、仮想コンピュートシステム110が、任意の数の物理的なコンピューティングデバイスを使用して実行される任意の数の仮想マシンインスタンスを含んでよいことを当業者は理解する。同様に、1つのウォーミングプール及び1つのアクティブプールが図1の実施例に示されるが、本明細書において説明される実施形態はそのように限定されず、仮想コンピュートシステム110が、任意の数のウォーミングプール及びアクティブプールを含んでよいことを当業者は理解する。
【0020】
図1の実施例において、仮想コンピュートシステム110は、ネットワーク104に接続されるものとして示される。いくつかの実施形態において、仮想コンピュートシステム110内の構成要素のいずれかは、仮想環境100の他の構成要素(例えば、ユーザコンピューティングデバイス102及び補助サービス106であり、補助サービス106は、モニタリング/ロギング/ビリングサービス107、ストレージサービス108、インスタンスプロビジョニングサービス109、及び/または、仮想コンピュートシステム110と通信し得る他のサービスを含んでよい)とネットワーク104を介して通信してよい。他の実施形態において、仮想コンピュートシステム110の全ての構成要素が、仮想環境100の他の構成要素と通信可能であるとは限らない。1つの実施例において、フロントエンド120のみがネットワーク104に接続されてよく、仮想コンピュートシステム110の他の構成要素は、フロントエンド120を介して、仮想環境100の他の構成要素と通信してよい。
【0021】
ユーザは、仮想コンピュートシステム110を、そこにあるユーザコードを実行するために使用してよい。例えば、ユーザは、ユーザが開発したウェブまたはモバイルアプリケーションに関連して1つのコードを実行することを望むことがある。コードを実行する1つの方法は、サービスとしてインフラストラクチャを提供するサービスプロバイダから仮想マシンインスタンスを獲得し、当該仮想マシンインスタンスをユーザのニーズに適合するように構成し、構成された仮想マシンインスタンスを、コードを実行するのに使用することであろう。あるいは、ユーザは、仮想コンピュートシステム110へコード実行要求を送信してもよい。仮想コンピュートシステム110は、コード実行要求に基づいて、コンピュートキャパシティ(例えば、以下でより詳細に説明されるコンテナ、インスタンス等)の獲得及び構成に対処してよく、コンピュートキャパシティを使用してコードを実行してよい。仮想コンピュートシステム110は、ボリュームに基づいて自動的にスケールアップまたはスケールダウンしてよく、これにより、過剰利用(例えば、獲得するコンピューティングリソースが少な過ぎて、パフォーマンス問題に悩まされること)、または、過少利用(例えば、コードを実行するのに必要とされるよりも多くのコンピューティングリソースを獲得し、それゆえ余計に支払うこと)を懸念しなければならないという負担から、ユーザが解放される。
【0022】
フロントエンド120は、仮想コンピュートシステム110上でユーザコードを実行するように要求全てを処理する。いくつかの実施形態において、フロントエンド120は、仮想コンピュートシステム110により提供される他のサービス全てにとってのフロントドアとしての働きをする。フロントエンド120は、要求を処理し、当該要求が適切にオーソライズされることを確認する。例えば、フロントエンド120は、要求と関連したユーザが、要求において指定されたユーザコードにアクセスするのにオーソライズされるかどうかを判定してよい。
【0023】
本明細書において使用されるユーザコードは、特定のプログラム言語で記述された任意のプログラムコード(例えば、プログラム、ルーチン、サブルーチン、スレッド等)を参照してよい。本開示において、「コード」、「ユーザコード」及び「プログラムコード」という用語は、区別なく使用され得る。このようなユーザコードは、例えば、ユーザにより開発される特定のウェブアプリケーションまたはモバイルアプリケーションに関連して特定のタスクを達成するように実行されてよい。例えば、ユーザコードは、JavaScript(登録商標)(node.js)、Java(登録商標)、Python(登録商標)、及び/またはRuby(登録商標)で記述されてよい。要求は、ユーザコード(またはその位置)、及びユーザコードを実行するのに使用される1つまたは複数の引数を含んでよい。例えば、ユーザは、ユーザコードを実行するように要求と共にユーザコードを提供してよい。別の実施例において、要求は、予めアップロードされたプログラムコードを、(例えば、コードをアップロードするためのAPIを使用して)その名前またはそのユニークなIDによって識別してよい。さらに別の実施例において、コードは、要求に含まれてもよく、また、要求が仮想コンピュートシステム110により受信される前に、別個の位置(例えば、ストレージサービス108、または仮想コンピュートシステム110内のストレージシステム)においてアップロードされてもよい。仮想コンピュートシステム110は、要求が処理される時点でコードが利用可能である場所に基づいて、そのコード実行ストラテジを変更してよい。
【0024】
フロントエンド120は、ユーザからのハイパーテキストトランスファープロトコルセキュア(HTTPS)要求に応答して、そのようなユーザコードを実行するように要求を受信してよい。また、ユーザコードを実行するとき、HTTPS要求に含まれる任意の情報(例えば、ヘッダ及びパラメータ)がさらに処理及び利用されてもよい。上述のように、例えば、HTTP、MQTT及びCoAPを含め、任意の他のプロトコルが、コード実行要求を収容するメッセージをフロントエンド120に転送するのに使用されてよい。フロントエンド120はまた、自動の要求生成をトリガするためにユーザが登録したイベントなどのイベントが検出されたときに、そのようなユーザコードを実行するように要求を受信してもよい。例えば、ユーザは、補助サービス106によりユーザコードを登録していてもよく、また、特定のイベントが発生する(例えば、新たなファイルがアップロードされる)たびに、ユーザコードを実行するための要求がフロントエンド120へ送信されることを指定していてもよい。あるいは、ユーザは、時間指定されたジョブ(例えば、24時間毎にユーザコードを実行する)を登録していてもよい。このような実施例において、時間指定されたジョブについてスケジュールされた時間がやってくるとき、ユーザコードを実行するための要求が、フロントエンド120に送信されてよい。さらに別の実施例において、フロントエンド120は、入来するコード実行要求のキューを有してよく、ユーザのバッチジョブが仮想コンピュートシステムのワークキューから削除されるとき、フロントエンド120はユーザ要求を処理してよい。さらに別の実施例において、要求は、仮想コンピュートシステム110内の別の構成要素または図1に示されない他のサーバもしくはサービスから発生されてよい。
【0025】
ユーザ要求は、ユーザコードと共に使用すべき1つまたは複数のサードパーティのライブラリ(ネイティブライブラリを含む)を指定してよい。1つの実施形態において、ユーザ要求は、ユーザコード及び任意のライブラリ(及び/またはそのストレージ位置の識別)を収容するZIPファイルである。いくつかの実施形態において、ユーザ要求は、実行すべきプログラムコードを示すメタデータ、プログラムコードを記述する言語、要求と関連したユーザ、及び/または、プログラムコードを実行するためにリザーブすべきコンピューティングリソース(例えば、メモリ等)を含む。例えば、プログラムコードは、要求を備えてもよく、ユーザにより予めアップロードされてもよく、仮想コンピュートシステム110(例えば、標準ルーチン)により提供されてもよく、及び/または、サードパーティにより提供されてもよい。いくつかの実施形態において、このようなリソースレベルの制約(例えば、特定のユーザコードを実行するためにいくつのメモリを割り当てるべきか)は、特定のユーザコードに対して指定されてよく、ユーザコードの各実行と共に変化するものでなくてよい。このような場合、仮想コンピュートシステム110は、各個々の要求が受信される前にそのようなリソースレベルの制約を利用してよく、個々の要求がそのようなリソースレベルの制約を指定しなくてよい。いくつかの実施形態において、ユーザ要求は、要求を実行するためにどのようなパーミッションを要求が有するのかを示すパーミッションデータなど、他の制約を指定してよい。このようなパーミッションデータは、(例えば、プライベートネットワーク上の)プライベートリソースにアクセスするために、仮想コンピュートシステム110により使用されてよい。
【0026】
いくつかの実施形態において、ユーザ要求は、ユーザ要求に対処するために用いるべきビヘイビアを指定してよい。このような実施形態において、ユーザ要求は、ユーザ要求と関連したユーザコードが実行され得る1つまたは複数の実行モードを可能にするための標識を含んでよい。例えば、要求は、ユーザコードの実行に関連して生成され得るデバッギング及び/またはロギング出力が(例えば、コンソールユーザインターフェースを介して)ユーザに提供されるデバッグモードにおいて、ユーザコードを実行すべきかどうかを示すためのフラグまたはヘッダを含んでよい。このような実施例において、仮想コンピュートシステム110は要求を検査してよく、フラグまたはヘッダを探してよく、それが存在する場合には、仮想コンピュートシステム110は、ユーザコードが実行されるコンテナのビヘイビア(例えば、ロギングファシリティ)を修正してよく、出力データをユーザに提供させてよい。いくつかの実施形態において、ビヘイビア/モード標識は、仮想コンピュートシステム110によりユーザに提供されるユーザインターフェースによって要求に追加される。ソースコードプロファイリング、リモートデバッギング等などの他の特徴はまた、要求において提供されるインディケーションに基づいて有効または無効にされてよい。
【0027】
いくつかの実施形態において、仮想コンピュートシステム110は、多数のフロントエンド120を含んでよい。このような実施形態において、ロードバランサが、例えばラウンドロビン方式で、入来する要求を多数のフロントエンド120へ分散するように提供されてよい。いくつかの実施形態において、ロードバランサが、入来する要求を多数のフロントエンド120へ分散する方法は、ウォーミングプール130A及び/またはアクティブプール140Aの状態に基づくものであってよい。例えば、ウォーミングプール130Aにおけるキャパシティが十分であると考えられる場合、要求は、フロントエンド120の個々のキャパシティに基づいて(例えば、1つまたは複数のロードバランシング制限に基づいて)、多数のフロントエンド120へ分散されてよい。一方、ウォーミングプール130Aにおけるキャパシティが閾値量よりも低い場合、そのようなロードバランシング制限の1つまたは複数は削除されてよく、その結果、ウォーミングプール130Aから取得される仮想マシンインスタンスの数を削減または最小にする方法で、要求は、多数のフロントエンド120へ分散されてよい。例えば、ロードバランシング制限に従って、要求がフロントエンドAにルートされるべきであっても、フロントエンドAは、要求にサービスするためにウォーミングプール130Aからインスタンスを取得する必要があるが、フロントエンドBは、同一の要求にサービスするために、そのアクティブプールおけるインスタンスの1つを使用し得る場合、要求は、フロントエンドBにルートされてよい。
【0028】
仮想コンピュートシステム110が、仮想コンピュートシステム110上でユーザコードを実行するための要求を受信するとき、仮想マシンインスタンスがワーカマネージャ140によりすぐに使用されることができることを、ウォーミングプールマネージャ130が確実にする。図1に示した実施例において、ウォーミングプールマネージャ130は、入来するユーザコード実行要求にサービスするのに使用され得る予め初期化され且つ予め構成された仮想マシンインスタンスのグループ(プールと呼ばれることもある)である、ウォーミングプール130Aを管理する。いくつかの実施形態において、ウォーミングプールマネージャ130は、仮想マシンインスタンスを、仮想コンピュートシステム110内の1つまたは複数の物理的なコンピューティングマシン上で立ち上げさせて、ウォーミングプール130Aに追加させる。他の実施形態において、ウォーミングプールマネージャ130は、新たなインスタンスを作成してそれをウォーミングプール130Aに追加するように、補助サービス(例えば、図1のインスタンスプロビジョニングサービス109)と通信する。いくつかの実施形態において、ウォーミングプールマネージャ130は、フロントエンド120により受信されるコード実行要求にサービスするのに使用され得るコンピュートキャパシティを獲得及び保守するように、仮想コンピュートシステム110内の物理的なコンピューティングデバイスと、1つまたは複数の仮想マシンインスタンスサービスとの両方を利用してよい。いくつかの実施形態において、仮想コンピュートシステム110は、ウォーミングプール130Aにおける利用可能なキャパシティを制御(例えば、増加または削減)するための1つまたは複数の論理ノブまたはスイッチを含んでよい。例えば、システム管理者は、ピーク時の間、ウォーミングプール130Aにおいて利用可能なキャパシティ(例えば、予め立ち上げられたインスタンスの数)を増加するように、そのようなノブまたはスイッチを使用してよい。いくつかの実施形態において、ウォーミングプール130Aにおける仮想マシンインスタンスは、ユーザのコードを実行するように、特定のユーザ要求から独立した、構成の所定のセットに基づいて構成することができる。構成の所定のセットは、ユーザコードを実行するように様々なタイプの仮想マシンインスタンスに対応することができる。ウォーミングプールマネージャ130は、現在または以前のユーザコード実行に関連する1つまたは複数のメトリクスに基づいて、ウォーミングプール130Aにおける仮想マシンインスタンスのタイプ及び数を最適化することができる。
【0029】
図1に示すように、インスタンスは、そこにロードされたオペレーティングシステム(OS)及び/または言語ランタイムを有してよい。例えば、ウォーミングプールマネージャ130により管理されるウォーミングプール130Aは、インスタンス152、154を含む。インスタンス152は、OS152A及びランタイム152Bを含む。インスタンス154は、OS154Aを含む。いくつかの実施形態において、ウォーミングプール130Aにおけるインスタンスはまた、以下でより詳細に説明される、(オペレーティングシステム、ランタイム、ユーザコード等のコピーをさらに含んでよい)コンテナを含んでもよい。インスタンス152が1つのランタイムを含むように図1に示されるが、他の実施形態において、図1に表されたインスタンスは、2つまたはそれよりも多いランタイムを含んでもよく、そのそれぞれが異なるユーザコードを実行するのに使用されてよい。いくつかの実施形態において、ウォーミングプールマネージャ130は、ウォーミングプール130Aにおけるインスタンスのリストを保持してよい。インスタンスのリストはさらに、インスタンスの構成(例えば、OS、ランタイム、コンテナ等)を指定してよい。
【0030】
いくつかの実施形態において、ウォーミングプール130Aにおける仮想マシンインスタンスは、任意のユーザの要求に応対するのに使用されてよい。1つの実施形態において、ウォーミングプール130Aにおける仮想マシンインスタンス全ては、同一または実質的に同様の方法で構成される。別の実施形態において、ウォーミングプール130Aにおける仮想マシンインスタンスは、異なるユーザのニーズに適合するように異なって構成されてよい。例えば、仮想マシンインスタンスは、そこにロードされた異なるオペレーティングシステム、異なる言語ランタイム、及び/または異なるライブラリを有してよい。さらに別の実施形態において、ウォーミングプール130Aにおける仮想マシンインスタンスは、同一または実質的に同様の方法で(例えば、同一のOS、言語ランタイム、及び/またはライブラリを備えて)構成されてよいが、これらのインスタンスのうちのいくつかが異なるコンテナ構成を有してもよい。例えば、2つのインスタンスはPythonとRubyの両方のためのランタイムを有してもよいが、一方のインスタンスは、Pythonコードを実行するように構成されるコンテナを有してよく、他方のインスタンスは、Rubyコードを実行するように構成されるコンテナを有してよい。いくつかの実施形態において、それぞれが全く同様に構成された仮想マシンインスタンスを有する多数のウォーミングプール130Aが提供される。
【0031】
各仮想マシンインスタンスが、仮想コンピュートシステム110上でプログラムコードを実行するためにユーザ要求により要求または指定され得る動作条件の少なくとも1つを満たすように構成されるように、ウォーミングプールマネージャ130は、ウォーミングプール130Aにおける仮想マシンインスタンスを予め構成してよい。1つの実施形態において、動作条件は、可能なユーザコードを記述できるプログラム言語を含んでよい。例えば、そのような言語は、Java(登録商標)、JavaScript(登録商標)、Python(登録商標)、Ruby(登録商標)等を含んでよい。いくつかの実施形態において、ユーザコードを記述できる言語のセットは、ユーザコードを実行するための要求を満たし得る仮想マシンインスタンスの事前初期化を促進するため、所定のセット(例えば4言語のセットであるが、いくつかの実施形態においては、4言語よりも多い、または少ないセットが提供される)に限定されてよい。例えば、ユーザが、仮想コンピュートシステム110により提供されるユーザインターフェースを介して要求を構成している場合、ユーザインターフェースは、ユーザコードを実行するための所定の動作条件の1つを指定するようユーザに促してよい。別の実施例において、仮想コンピュートシステム110により提供されるサービスの利用に関するサービス水準合意(SLA)は、ユーザ要求が満たすべき一連の条件(例えば、プログラミング言語、コンピューティングリソース等)を指定してよく、仮想コンピュートシステム110は、要求に対処するにあたり、要求が一連の条件を満たすと想定してよい。別の実施例において、要求において指定された動作条件は、要求を処理するために使用される演算能力の量、要求のタイプ(例えば、HTTP対トリガされるイベント)、要求のためのタイムアウト(例えば、要求を終了し得た後の閾値時間)、セキュリティポリシー(例えば、ウォーミングプール130Aにおけるどのインスタンスがどのユーザにより使用可能かを制御してよい)等を含んでよい。
【0032】
ワーカマネージャ140は、入来するコード実行要求にサービスするために使用されるインスタンスを管理する。図1に示した実施例において、ワーカマネージャ140は、1人または複数のユーザに現在割り当てられている仮想マシンインスタンスのグループ(プールと呼ばれることもある)であるアクティブプール140Aを管理する。仮想マシンインスタンスが、特定のユーザに割り当てられるものとしてここでは説明されるが、いくつかの実施形態において、インスタンスは、ユーザのグループに割り当てられてもよく、これにより、インスタンスはユーザのグループに結び付けられて、グループのどのメンバーもインスタンス上のリソースを利用することができる。例えば、同一グループにおけるユーザは、(例えば、それらのセキュリティ証明書に基づいて)同一のセキュリティグループに属してよく、これにより、1人のメンバーのコードを特定のインスタンス上のコンテナにおいて実行する前に、別のメンバーのコードが同一のインスタンス上の別のコンテナにおいて実行されていても、セキュリティ上のリスクは生じない。同様に、どのコンテナにおいてどの要求を実行できるか、及び、どのインスタンスをどのユーザに割り当てることができるかを規定する1つまたは複数のポリシーに従って、ワーカマネージャ140は、インスタンス及びコンテナを割り当ててよい。例示的なポリシーは、インスタンスが、同一のアカウント(例えば、仮想コンピュートシステム110により提供されるサービスにアクセスするためのアカウント)を共有するユーザの集まりに割り当てられることを指定してよい。いくつかの実施形態において、同一のユーザグループと関連した要求は、(例えば、それに関連したユーザコードが全く同一である場合)同一のコンテナを共有してよい。いくつかの実施形態において、要求は、グループの中の異なるユーザ間で区別されず、要求と関連したユーザが属するグループを示すに過ぎない。
【0033】
図1に示した実施例において、ユーザコードは、コンテナと呼ばれる隔離されたコンピュートシステムにおいて実行される。コンテナは、仮想マシンインスタンス内で、そのインスタンス上で利用可能なリソースを使用して作成される論理ユニットである。例えば、ワーカマネージャ140は、ユーザコードを実行するための要求において指定された情報に基づいて、新たなコンテナを作成してよく、または、アクティブプール140Aにおけるインスタンスの1つにおいて既存のコンテナを配置してよく、要求と関連したユーザコードの実行に対処するように、当該コンテナを要求に割り当てる。1つの実施形態において、そのようなコンテナは、Linuxコンテナとして実行される。アクティブプール140Aにおける仮想マシンインスタンスは、そこに作成される1つまたは複数のコンテナを有してよく、(例えば、コンテナのうちの1つ、またはインスタンスのローカルキャッシュのいずれかにおいて)そこにロードされた、ユーザと関連した1つまたは複数のプログラムコードを有してよい。各コンテナは、そこで利用可能とされたクレデンシャル情報を有してよく、その結果、コンテナ上で実行されるユーザコードは、対応するクレデンシャル情報により当該ユーザコードがアクセスできるものは何でも利用する。
【0034】
図1に示すように、インスタンスは、オペレーティングシステム(OS)、言語ランタイム、及びコンテナを有してよい。コンテナは、OS及び言語ランタイムの個々のコピーならびにそこにロードされたユーザコードを有してよい。図1の実施例において、ワーカマネージャ140により管理されるアクティブプール140Aは、インスタンス156、158を含む。インスタンス156は、コンテナ156A、156Bを有する。コンテナ156Aは、その中にロードされたOS156A−1、ランタイム156A−2、及びコード156A−3を有する。表された実施例において、コンテナ156Aは、その中にロードされた、それ自体のOS、ランタイム、及びコードを有する。1つの実施形態において、OS156A−1(例えば、そのカーネル)、ランタイム156A−2、及び/または、コード156A−3は、コンテナ156A、156B(及び図1に示されない任意の他のコンテナ)の間で共有される。別の実施形態において、OS156A−1(例えば、カーネルの外で実行する任意のコード)、ランタイム156A−2及び/またはコード156A−3は、コンテナ156Aのために作成される独立したコピーであり、インスタンス156上の他のコンテナと共有されない。さらに別の実施形態において、OS156A−1、ランタイム156A−2、及び/またはコード156A−3のいくつかの部分が、インスタンス156上のコンテナ間で共有され、それの他の部分は、コンテナ156Aに特有の独立したコピーである。インスタンス158は、コンテナ158A、158B、及び、インスタンス158上のコンテナのいずれかにおいて実行されるコードをストアするためのコードキャッシュ159Cを含む。
【0035】
図1の実施例において、図1に表されたコンテナのサイズは、コンテナの実際のサイズに比例するものとしてよい。例えば、コンテナ156Aは、インスタンス156上のコンテナ156Bよりも多くの空間を占有してよい。同様に、コンテナ158A、158Bは、等しいサイズにされてよい。インスタンス158に示される「C」と付された点線のボックスは、新たなコンテナを作成するのに使用され得る、インスタンス上に残されている空間を示す。いくつかの実施形態において、コンテナのサイズは、64MBまたは任意のその倍数であってよい。他の実施形態において、コンテナのサイズは、コンテナが作成されるインスタンスのサイズよりも小さいか、またはそれと等しい、どんな任意のサイズであってもよい。いくつかの実施形態において、コンテナのサイズは、コンテナが作成されるインスタンスのサイズよりも小さいか、それと等しいか、またはそれよりも大きい、どんな任意のサイズであってもよい。コンテナのサイズがインスタンスのサイズをどの程度上回ってよいかは、これらのコンテナが、インスタンスにより提供されるキャパシティを超えて利用されることのある可能性がどの程度かに基づいて決定されてよい。
【0036】
コンテナ156B、158A内部の構成要素は、図1の実施例に示されていないが、これらのコンテナのそれぞれは、様々なオペレーティングシステム、言語ランタイム、ライブラリ、及び/またはユーザコードを有してよい。いくつかの実施形態において、インスタンスは、(例えば、コードキャッシュ159Cなどのインスタンスレベルのキャッシュにおいて)そこにロードされたユーザコードを有してよく、これらのインスタンス内のコンテナはまた、その中(例えば、コンテナ156A)にロードされたユーザコードを有してよい。いくつかの実施形態において、ワーカマネージャ140は、アクティブプール140Aにおけるインスタンスのリストを保持してよい。インスタンスのリストはさらに、インスタンスの構成(例えば、OS、ランタイム、コンテナ等)を指定してよい。いくつかの実施形態において、ワーカマネージャ140は、ウォーミングプール130Aにおける(例えば、インスタンスの数及びタイプを含む)インスタンスのリストを利用してよい。他の実施形態において、ワーカマネージャ140は、ウォーミングプール130Aにおける仮想マシンインスタンスの知識を有することなく、ウォーミングプールマネージャ130からコンピュートキャパシティを要求する。
【0037】
要求がフロントエンド120により正常に処理された後、ワーカマネージャ140は、仮想コンピュートシステム110上でユーザコードを実行するための要求にサービスするキャパシティを発見する。例えば、その中にロードされた同一のユーザコード(例えば、コンテナ156Aに示したコード156A−3)を備えるコンテナを有するアクティブプール140Aにおいて特定の仮想マシンインスタンスが存在する場合、ワーカマネージャ140は、当該コンテナを要求に割り当ててよく、ユーザコードを当該コンテナにおいて実行させてよい。あるいは、ユーザコードが、仮想マシンインスタンスの1つのローカルキャッシュにおいて利用可能である(例えば、インスタンス158のコードキャッシュ159Cにストアされるが、いずれの個々のコンテナにも属さない)場合、ワーカマネージャ140は、そのようなインスタンス上に新たなコンテナを作成してよく、当該コンテナを要求に割り当ててよく、ユーザコードを当該コンテナにロードさせて、そこで実行させてよい。
【0038】
要求と関連したユーザコードが、アクティブプール140Aにおけるインスタンスのいずれにおいても(例えば、コンテナ、またはインスタンスのローカルキャッシュのいずれにおいても)発見されないとワーカマネージャ140が判定する場合、アクティブプール140Aにおけるインスタンスのいずれかが、要求と関連したユーザに現在割り当てられているかどうか、及び、現在の要求に対処するためのコンピュートキャパシティを有するかどうかを、ワーカマネージャ140は判定してよい。そのようなインスタンスがある場合、ワーカマネージャ140は、インスタンス上に新たなコンテナを作成してよく、当該コンテナを要求に割り当ててよい。あるいは、ワーカマネージャ140はさらに、ユーザに割り当てられるインスタンス上に既存のコンテナを構成してよく、当該コンテナを要求に割り当ててよい。例えば、現在のユーザ要求により要求される特定のライブラリがそこにロードされる場合に、既存のコンテナが、ユーザコードを実行するのに使用されてよいことを、ワーカマネージャ140は判定してよい。このような場合、ワーカマネージャ140は、当該コンテナ上へ特定のライブラリ及びユーザコードをロードしてよく、ユーザコードを実行するように当該コンテナを使用してよい。
【0039】
アクティブプール140Aが、ユーザに現在割り当てられているいずれのインスタンスも含まない場合、ワーカマネージャ140は、ウォーミングプール130Aから新たな仮想マシンインスタンスをプルし、要求と関連したユーザに当該インスタンスを割り当て、当該インスタンス上に新たなコンテナを作成し、当該コンテナを要求に割り当て、ユーザコードを、当該コンテナにダウンロードさせてそこで実行させる。
【0040】
いくつかの実施形態において、仮想コンピュートシステム110は、ユーザコードの実行を、それが(例えば、フロントエンド120により)受信された後すぐに開始するように適合される。時間間隔は、(例えば、ユーザと関連した仮想マシンインスタンス上のコンテナにおいて)ユーザコードの実行を開始することと、(例えば、フロントエンドにより受信される)ユーザコードを実行するための要求を受信することの間の時間差として決定されてよい。仮想コンピュートシステム110は、所定の期間よりも短い時間間隔内でユーザコードの実行を開始するように適合される。1つの実施形態において、所定の期間は500msである。別の実施形態において、所定の期間は300msである。別の実施形態において、所定の期間は100msである。別の実施形態において、所定の期間は50msである。別の実施形態において、所定の期間は10msである。別の実施形態において、所定の期間は、10msから500msの範囲から選択される任意の値であってよい。いくつかの実施形態において、仮想コンピュートシステム110は、1つまたは複数の条件が満たされる場合、所定の期間よりも短い時間間隔内でユーザコードの実行を開始するように適合される。例えば、1つまたは複数の条件は、(1)要求が受信される時点で、ユーザコードがアクティブプール140Aにおけるコンテナにロードされること、(2)要求が受信される時点で、ユーザコードがアクティブプール140Aにおけるインスタンスのコードキャッシュにストアされること(3)要求が受信される時点で、アクティブプール140Aが、要求と関連したユーザに割り当てられるインスタンスを含むこと、または(4)要求が受信される時点で、ウォーミングプール130Aが、要求に対処するキャパシティを有すること、のいずれか1つを含んでよい。
【0041】
ユーザコードは、図1のストレージサービス108などの補助サービス106からダウンロードされてよい。図1に示されたデータ108Aは、1人または複数のユーザによりアップロードされたユーザコード、そのようなユーザコードと関連したメタデータ、または、本明細書において説明される1つまたは複数の技法を実施するために仮想コンピュートシステム110により利用される任意の他のデータを含んでよい。ストレージサービス108のみが図1の実施例に示されているが、仮想環境100は、ユーザコードがそこからダウンロードされ得る他のレベルのストレージシステムを含んでよい。例えば、各インスタンスは、物理的(例えば、インスタンスが起動している物理的なコンピューティングシステムに常駐するローカルストレージ)または論理的(例えば、インスタンスとのネットワーク通信における、仮想コンピュートシステム110の内または外に提供されるネットワークアタッチトストレージシステム)のいずれかで、コンテナが作成されるインスタンスと関連した1つまたは複数のストレージシステムを有してよい。あるいは、コードは、ストレージサービス108により提供されるウェブベースのデータストアからダウロードされてよい。
【0042】
ワーカマネージャ140が、ユーザコード実行要求に応対するのに使用され得るウォーミングプール130Aに、仮想マシンインスタンスの1つをいったん配置すると、ウォーミングプールマネージャ130またはワーカマネージャ140は、ウォーミングプール130Aからインスタンスを取得し、それを、要求と関連したユーザに割り当てる。割り当てられる仮想マシンインスタンスは、ウォーミングプール130Aから取得され、アクティブプール140Aに配置される。いくつかの実施形態において、仮想マシンインスタンスが特定のユーザにいったん割り当てられると、同一の仮想マシンインスタンスは、いずれの他のユーザの要求にサービスするのに使用できない。これは、ユーザリソースの起こり得る混合を防止することによるセキュリティ上の利点をユーザに提供する。あるいは、いくつかの実施形態において、異なるユーザに属する(または、異なるユーザと関連した要求に割り当てられる)多数のコンテナが、1つの仮想マシンインスタンス上で共存してもよい。このようなアプローチは、利用可能なコンピュートキャパシティの利用を改善し得る。いくつかの実施形態において、仮想コンピュートシステム110は、別個のキャッシュを保守してよく、当該別個のキャッシュにおいて、ユーザコードは、仮想マシンインスタンスのローカルキャッシュと(例えば、ネットワーク104介してアクセス可能な)ウェブベースのネットワークストレージとの間の中間レベルのキャッシングシステムとしての働きをするようにストアされる。
【0043】
ユーザコードが実行された後、ワーカマネージャ140は、ユーザコードを実行するのに使用されるコンテナを分解して、そのコンテナが占有していたリソースを、インスタンスにおける他のコンテナに使用されるように解放してよい。あるいは、ワーカマネージャ140は、コンテナを起動し続けて、同一のユーザからの追加の要求にサービスするようにコンテナを使用してよい。例えば、別の要求が、コンテナに既にロードされた同一のユーザコードと関連する場合、当該要求は、同一のコンテナに割り当てられてよく、これにより、新たなコンテナの作成及びコンテナにおけるユーザコードのローディングと関連した遅延が取り除かれる。いくつかの実施形態において、ワーカマネージャ140は、ユーザコードを実行するのに使用されるコンテナが作成されたインスタンスを分解してよい。あるいは、ワーカマネージャ140は、インスタンスを起動し続けて、同一のユーザからの追加の要求にサービスするようにインスタンスを使用してよい。ユーザコードが実行を終了した後に、コンテナ及び/またはインスタンスを起動し続けるかどうかの判定は、閾値時間、ユーザのタイプ、ユーザの平均要求量、及び/または、他の動作条件に基づくものであってよい。例えば、閾値時間が、何らのアクティビティ(例えば、コードの実行)を伴わずに経過した後(例えば、5分、30分、1時間、24時間、30日等)、コンテナ及び/または仮想マシンインスタンスが停止され(例えば、削除される、終了される等)、そこに割り当てられたリソースがリリースされる。いくつかの実施形態において、コンテナが分解される前に経過した閾値時間は、インスタンスが分解される前に経過した閾値時間よりも短い。
【0044】
いくつかの実施形態において、仮想コンピュートシステム110は、入来するコード実行要求にサービスするとき、補助サービス106の1つまたは複数にデータを提供してよい。例えば、仮想コンピュートシステム110は、モニタリング/ロギング/ビリングサービス107と通信してよい。モニタリング/ロギング/ビリングサービス107は、仮想コンピュートシステム110上のコンテナ及びインスタンスのステータスなど、仮想コンピュートシステム110から受信されるモニタリング情報を管理するためのモニタリングサービス、仮想コンピュートシステム110上のコンテナ及びインスタンスにより実施されるアクティビティなど、仮想コンピュートシステム110から受信されるロギング情報を管理するためのロギングサービス、及び、(例えば、モニタリングサービス及びロギングサービスにより管理されるモニタリング情報及び/またはロギング情報に基づいて)仮想コンピュートシステム110上でのユーザコードの実行と関連したビリング情報を発生させるためのビリングサービスを含んでよい。上述のように、(例えば、仮想コンピュートシステム110に代わって)モニタリング/ロギング/ビリングサービス107により実施され得るシステムレベルのアクティビティに加えて、モニタリング/ロギング/ビリングサービス107は、仮想コンピュートシステム110上で実行されるユーザコードに代わって、アプリケーションレベルのサービスを提供してよい。例えば、モニタリング/ロギング/ビリングサービス107は、ユーザコードが仮想コンピュートシステム110上で実行されることに代わって、様々な入力、出力、または他のデータ及びパラメータをモニタ及び/またはログしてよい。1つのブロックとして示されているが、モニタリング、ロギング、及びビリングサービス107は、別個のサービスとして提供されてもよい。
【0045】
いくつかの実施形態において、ワーカマネージャ140は、ワーカマネージャ140により管理されるインスタンス及びコンテナ(例えば、アクティブプール140Aにおけるこれら)に関するヘルスチェックを実施してよい。例えば、ワーカマネージャ140により実施されるヘルスチェックは、ワーカマネージャ140により管理されるインスタンス及びコンテナが、(1)不適切に構成されたネットワークキング及び/または起動構成、(2)枯渇したメモリ、(3)破損したファイルシステム、(4)互換性のないカーネル、及び/または、インスタンス及びコンテナのパフォーマンスを低下させ得る任意の他の問題のうちのいずれかの問題を有するかどうかを判定することを含んでよい。1つの実施形態において、ワーカマネージャ140は、周期的に(例えば、5分毎、30分毎、1時間毎、24時間毎等)ヘルスチェックを実行する。いくつかの実施形態において、ヘルスチェックの頻度は、ヘルスチェックの結果に基づいて自動的に調整されてよい。他の実施形態において、ヘルスチェックの頻度はユーザ要求に基づいて調整されてよい。いくつかの実施形態において、ワーカマネージャ140は、ウォーミングプール130Aにおけるインスタンス及び/またはコンテナに関する同様のヘルスチェックを実施してよい。ウォーミングプール130Aにおけるインスタンス及び/またはコンテナは、アクティブプール140Aにおけるこれらのインスタンス及びコンテナと一緒または別個のいずれかで管理されてよい。いくつかの実施形態において、ウォーミングプール130Aにおけるインスタンス及び/またはコンテナの健全性がアクティブプール140Aから別個に管理される場合、ウォーミングプールマネージャ130が、ワーカマネージャ140の代わりに、ウォーミングプール130Aにおけるインスタンス及び/またはコンテナに関して上述のヘルスチェックを実施してよい。
【0046】
バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110上でユーザコードのデプロイメントを管理する。例えば、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110上の任意の内部データストア、インスタンスレベルのコードキャッシュ及び/またはコンテナ上へのユーザコードのデプロイメントを管理するように、フロントエンド120、ウォーミングプールマネージャ130、ワーカマネージャ140、及び/または内部データストア160と通信してよい。バージョニング及びデプロイメントマネージャ150が、仮想コンピュートシステム110内の別個の構成要素として示されているが、バージョニング及びデプロイメントマネージャ150の機能性の一部または全ては、フロントエンド120、ウォーミングプールマネージャ130、ワーカマネージャ140、及び/または内部データストア160により実施されてもよい。例えば、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110の他の構成要素の1つ内で、または、仮想コンピュートシステム110の他の構成要素間に分散して、全面的に実行されてよい。図1の実施例において、バージョニング及びデプロイメントマネージャ150は、コードデプロイメントデータ150Aを含む。コードデプロイメントデータ150Aは、入来する要求の履歴に関するデータ、仮想コンピュートシステム110上で実行されるユーザコードのバージョン、及び、入来するコード実行要求と関連したユーザコードのデプロイメントを調整及び/または最適化するためにバージョニング及びデプロイメントマネージャ150により使用され得る任意の他のメトリックを含んでよい。コードデプロイメントデータ150Aはまた、仮想コンピュートシステム110上でそれらのコード(例えば、バージョニングプリファレンス等)をデプロイするため、ユーザにより指定される、または、バージョニング及びデプロイメントマネージャ150により決定される、任意の管理ポリシーを含んでよい。
【0047】
ユーザコードのライフサイクル全体を通して、様々なアップデートがコードに対して成されてよい。いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110上で実行されるユーザコード全てのリストを保持し、バージョニング及びデプロイメントマネージャ150が、ユーザコードの1つまたは複数がアップデートされたと判定する場合、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110により受信される後続のコード実行要求に関連して、アップデートされたユーザコードを(そのより古いバージョンの代わりに)使用させる。例えば、ユーザが1つのAPIを使用して特定のユーザコードをアップデートして、別のAPIを使用してユーザコードと関連した要求をする場合、ユーザコードと関連した要求が(例えば、新たなバージョンのサイズ、アクティブプール130Aにおけるより古いバージョンの利用可能性等に基づいて)新たなバージョンにより処理されるべきである場合を、仮想コンピュートシステム110はプログラムで判定してよい。いくつかの実施形態において、要求は、要求と関連したユーザコードがアップデートされたというインディケーションを含んでよい。例えば、ユーザは、コードがアップデートされたことを指定してよい。別の実施例において、ユーザは、彼または彼女が使用することを望むコードのバージョンを指定してよく、バージョニング及びデプロイメントマネージャ150は、各要求について、ユーザにより指定されたバージョンが、仮想コンピュートシステム110上で起動され得るコードの1つまたは複数のバージョンとは異なるかどうかを判定してよい。さらに別の実施例において、要求は、コード(例えば、作成日、修正日、ハッシュ値等)にユニークな識別子を含んでよい。他の実施形態において、バージョニング及びデプロイメントマネージャ150は、要求と共に受信されるユーザコードに基づいて、ユーザコードに対する何らかのアップデートがあったかどうかを自動的に判定してよい。例えば、バージョニング及びデプロイメントマネージャ150は、コードのハッシュ値またはチェックサムを計算してよく、また、コードが、仮想コンピュートシステム110上で実行し得るコードの1つまたは複数のバージョンとは異なるかどうかを判定してよい。
【0048】
いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、ユーザコードがアップデートされた後に受信される要求の1つまたは複数を、より古いバージョンのコードを使用してサービスさせてもよい。例えば、新たなバージョンのユーザコードが検出されたとき、バージョニング及びデプロイメントマネージャ150は、より古いバージョンのユーザコードを実行途中のいずれのコンテナも、これらのコンテナへ新たなバージョンをロードする前に終了することを可能としてよい。いくつかの実施形態において、新たなバージョンが、内部データストア、特定のインスタンスのコードキャッシュ、及び/または、コンテナへダウンロードされている間に、バージョニング及びデプロイメントマネージャ150は、より古いバージョンのコードを使用させることを可能とする。新たなバージョンがダウンロードされている間に、より古いバージョンのコードを使用することにより、変更によるどんなレイテンシの増加も、新たなバージョン(例えば、最新の修正された/要求バージョン)の入手を要求の実行とオーバーレイすることによって回避され得る。いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、そこにロードされたより古いバージョンを有するこれらのコンテナ上へ(または、インスタンス上に作成される新たなコンテナ上へ、そのインスタンス上には、そこにロードされたより古いバージョンを有するこれらのコンテナが作成されている)新たなバージョンのダウンロードを速やかに開始してよい。他の実施形態において、バージョニング及びデプロイメントマネージャ150は、そこにロードされたより古いバージョンを有するこれらのコンテナ上へ(または、インスタンス上に作成される新たなコンテナ上へ、そのインスタンス上には、そこにロードされたより古いバージョンを有するこれらのコンテナが作成されている)、これらのコンテナがアイドル状態になった後に(例えば、いずれのユーザコードも現在実行していない)、新たなバージョンをダウンロードしてよい。いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、特定の要求と関連した新たなバージョンをダウンロードするためにどれ程時間がかかるかを判定してよく、また、ダウンロード時間が閾値を超える場合、より古いバージョンを使用して特定の要求にサービスすることを決定してよい。いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、コードと関連した要求がいくつ受信されたかを判定してよく、また、1つまたは複数のコンテナが、ロードされたより古いバージョンを既に有する場合、及び、コンテナが、要求全てに対応するための、そこにロードされたより新しいバージョンを十分に有さない場合、より古いバージョンを使用して、要求の1つまたは複数にサービスすることを決定してよい。
【0049】
いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、ユーザ要求に基づいて、どれほど迅速により古いバージョンのコードを仮想コンピュートシステム110から削除すべきかを決定する。例えば、コード実行要求と関連したユーザは、アップデートがささいなものであること、及び、可能な限り低いレイテンシをユーザが好むことを示してよい。このような実施例において、バージョニング及びデプロイメントマネージャ150は、より古いバージョンのコードを実行し続けてよく、(例えば、より古いバージョンを起動するインスタンスが、全て破棄されたか、あるいは利用可能でないか、または、コードと関連した入来する要求全てに対処する十分なキャパシティを有していない場合)、より新しいバージョンを徐々に、段階的に導入してよい。別の実施例において、ユーザは、より古いバージョンが顧客のクレジットカード情報を暴露するセキュリティバグを有すること、及び、コードの全ての以前のバージョンが速やかに無効にされるべきであることを示してよい。このような実施例において、バージョニング及びデプロイメントマネージャ150は、より古いバージョンのコードを実行するいずれのコンテナも停止及び/または終了してよく、より新しいバージョンの使用を速やかに開始してよい。
【0050】
いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110により受信される要求の量の履歴に基づいて、アクティブプール140Aにおける1つまたは複数のコンテナへ、仮想コンピュートシステム110上で十分に高い頻度で実行されるプログラムコードをプリエンプティブにロードしてよい。いくつかの実施形態において、コードが周期的に実行されることが予想される場合、バージョニング及びデプロイメントマネージャ150は、一定のコードをコンテナ及び/またはインスタンス内に残留させる。例えば、バージョニング及びデプロイメントマネージャ150が、仮想コンピュートシステム110特定のコードが午後7時と午後8時の1時間の間にその要求の90%を受信すると決定する場合、バージョニング及びデプロイメントマネージャ150は、イナクティブの時間の後であっても特定のコードをコンテナに残留させてよい。いくつかの実施形態において、バージョニング及びデプロイメントマネージャ150が新たなバージョンを検出するとき、新たなバージョンと関連したいずれの要求が受信される前であっても、バージョニング及びデプロイメントマネージャ150は、アクティブプール140Aまたはウォーミングプール130Aにおける1つまたは複数のコンテナへ、新たなバージョンをプリエンプティブにロードしてよい。
【0051】
図1の実施例において、バージョニング及びデプロイメントマネージャ150は、1つまたは複数のインスタンスによりアクセスされるデータをストアするのに使用される内部データストア160を保守する。例えば、バージョニング及びデプロイメントマネージャ150は、ユーザコードが多数のインスタンス間で共有され得るように、内部データストア160にユーザコードをストアしてよい。いくつかの実施形態において、そのような多数のインスタンスに関連した、内部データストア160にストアされたデータ(例えば、そのようなインスタンス上に作成されたコンテナにおいて実行されるユーザコード)は、特定のインスタンスが停止された後であっても、他のインスタンスによる使用のために内部データストア160上に残留する。1つの実施例において、内部データストア160からコンテナへコードをダウンロードすることは、仮想コンピュートシステム110外部のデータストア(例えば、ストレージサービス108)からコンテナへ同一のコードをダウンロードするよりも10倍を超えて速い。いくつかの実施形態において、内部データストア160は、隔離されたコンテナへ分割され(そのようなコンテナ間に追加のセキュリティを提供してよい)、各コンテナへのアクセスは、それと関連する1つまたは複数のインスタンスに制限される。
【0052】
バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110により受信される入来するコード実行要求を分析するため、及び、どこの及びいくつのユーザコードを取得及びデプロイすべきかを判定するためのコードデプロイメントユニットを含んでよい。バージョニング及びデプロイメントマネージャ150の例示的な構成は、図6を参照して以下でより詳細に説明される。
【0053】
図2図5を参照して、ユーザコードがアップデートされた後にコード実行要求に対処するための例示的なバージョニングスキームが説明される。図2の実施例において、ストレージサービス106は、そこにロードされたコード(1)108B(「コード(1)」)を有し、インスタンス158は、そこにロードされたコード(1)有するコードキャッシュ158C、及び、コード(1)108Bを実行するビジー状態の4つのコンテナを有する。インスタンス158に示された、「C」と付された点線のボックスは、新たなコンテナを作成するのに使用され得る、インスタンス上に残された空間を示す。
【0054】
図3において、ストレージサービス108に予めストアされたコード(1)が、コード(2)108C(「コード(2)」)にアップデートされている。図3はまた、コンテナの1つがアイドル状態になっていること、及び、他の3つのコンテナが依然として、(例えば、コード(1)と関連した既存の要求、または、コード(2)と関連した新たな要求に関連して)コード(1)を実行するビジー状態であることを示す。例えば、コードがコード(2)にアップデートされた後であっても、例えば要求にサービスすることと関連したレイテンシを削減するために、3つのコンテナが依然として、現時点で最新でないコード(1)を実行している。バージョニング及びデプロイメントマネージャ150は、この時点でコード(2)のダウロードを開始されていてよい。
【0055】
図4において、コード(2)は、コードキャッシュ159Cへのダウンロードを終了している。コード(2)はまた、以前のアイドル状態のコンテナ及び2つの新たなコンテナへロードされている。最初の3つのコンテナは依然としてコード(1)を実行している(例えば、そこにロードされたコード(1)を使用して、コード(2)と関連した新たな要求にサービスしている)。
【0056】
図5は、コンテナ全てがコード(2)に切り換えられた後の、入来するコード実行要求に関連してコード(2)を実行している構成を示す。図5において、バージョニング及びデプロイメントマネージャ150が、(例えば、コード(1)がアップデートされてから経過した時間に基づいて、または、コード(1)を最終的に段階的に停止するためのユーザインディケーションに基づいて)コード(1)がもはや必要とされないと決定した後に、コード(1)はさらに、例えばバージョニング及びデプロイメントマネージャ150によりコードキャッシュ159Cから削除されている。いくつかの実施形態において、コード(2)が十分に段階的に導入された後、入来するコード実行要求のレベルが変化しないと仮定して、同一の数のコンテナ(例えば、図2図5の実施例では4つ)が、特定のコードと関連した入来するコード実行要求に対処可能であってよく、その特定のコードのどのバージョンが使用されるかは問題でない。
【0057】
それゆえ、コードがアップデートされた後であっても、より古いバージョンのコードを使用して、入来するコード実行要求にサービスし続けることにより、そこにロードされたより古いバージョンのコードを有する既存のコンテナが、コード実行要求の処理と関連したレイテンシを削減するように利用されてもよい。
【0058】
図6は、仮想コンピュートシステム110においてユーザコードのデプロイメントを管理するコンピューティングシステム(バージョニング及びデプロイメントマネージャ150と呼ばれる)の一般的なアーキテクチャを表す。図6に表されたバージョニング及びデプロイメントマネージャ150の一般的なアーキテクチャは、本開示の態様を実行するのに使用され得るコンピュータハードウェア及びソフトウェアモジュールの構成を含む。バージョニング及びデプロイメントマネージャ150は、図6に示したものよりも多い(または少ない)要素を含んでよい。しかし、可能な開示を提供するため、これらの一般に従来の要素の全てを示す必要はない。図示するように、バージョニング及びデプロイメントマネージャ150は、処理ユニット190、ネットワークインターフェース192、コンピュータ可読媒体ドライブ194、入力/出力デバイスインターフェース196を含み、それらの全てが、コミュニケーションバスを介して互いに通信してよい。ネットワークインターフェース192は、1つまたは複数のネットワークまたはコンピューティングシステムへの接続を提供してよい。処理ユニット190は、それゆえ、他のコンピューティングシステムまたはサービスから、ネットワーク104を介して情報及び命令を受信してよい。処理ユニット190はまた、メモリ180へ及びメモリ180から通信してよく、さらに入力/出力デバイスインターフェース196を介して随意のディスプレイ(図示せず)のための出力情報を提供してよい。入力/出力デバイスインターフェース196はまた、随意の入力デバイス(図示せず)から入力を受け取ってよい。
【0059】
メモリ180は、本開示の1つまたは複数の態様を実行するために処理ユニット190が実行する、(いくつかの実施形態において、モジュールとしてグループ化された)コンピュータプログラム命令を含んでよい。メモリ180は、一般に、RAM、ROM及び/または、他の永続的な、補助的または非一時的なコンピュータ可読媒体を含む。メモリ180は、バージョニング及びデプロイメントマネージャ150の一般的な管理及び操作において処理ユニット190により使用するためのコンピュータプログラム命令を提供するオペレーティングシステム184をストアしてよい。メモリ180はさらに、本開示の態様を実行するためのコンピュータプログラム命令及び他の情報を含んでよい。例えば、1つの実施形態において、メモリ180は、例えば、コンピューティングデバイスにインストールされたブラウザまたはアプリケーションなどのナビゲーション及び/またはブラウジングインターフェースを介して、コンピューティングデバイス上に表示するためのユーザインターフェース(及び/またはそれに対する命令)を生成するユーザインターフェースユニット182を含む。加えて、メモリ180は、例えば、ユーザプログラムコード及び/またはライブラリにアクセスするため、1つまたは複数のデータリポジトリ(図示せず)を含んでよく、及び/または、これと通信してよい。
【0060】
ユーザインターフェースユニット182に加えて、及び/または、それと関連して、メモリ180は、処理ユニット190により実行され得るコードデプロイメントユニット186を含んでよい。1つの実施形態において、ユーザインターフェースユニット182及びコードデプロイメントユニット186は、個々にまたは集合的に、さらに以下で説明するように、例えば、仮想コンピュートシステム110により受信される入来するコード実行要求を分析すること、どこの及びいくつのユーザコードを獲得及びデプロイすべきかを決定すること等、本開示の様々な態様を実行する。
【0061】
コードデプロイメントユニット186は、仮想コンピュートシステム110により受信される入来するコード実行要求を分析する。例えば、コードデプロイメントユニット186は、入来する要求と関連したユーザコードが仮想コンピュートシステム110のコンテナの1つまたは複数にロードされる、より新しいバージョンのコードであるかどうかを判定してよい。入来する要求の性質及び仮想コンピュートシステム110の状態に基づいて、コードデプロイメントユニット186は、どこにコードを配置すべきか、及び、どのコードを、どの要求にサービスするのに使用すべきかを判定する。
【0062】
コードデプロイメントユニット186が、バージョニング及びデプロイメントマネージャ150の一部として図6に示されるが、他の実施形態において、コードデプロイメントユニット186の全てまたは一部は、仮想コンピュートシステム110及び/または別のコンピューティングデバイスの他の構成要素により実行されてもよい。例えば、本開示の一定の実施形態において、仮想コンピュートシステム110と通信する別のコンピューティングデバイスが、バージョニング及びデプロイメントマネージャ150の一部として示されるモジュール及び構成要素と同じように動作する、いくつかのモジュールまたは構成要素を含んでよい。
【0063】
次に図7に注目すると、仮想コンピュートシステム110の1つまたは複数の構成要素(例えば、バージョニング及びデプロイメントマネージャ150)により実行されるルーチン700が説明される。ルーチン700が、バージョニング及びデプロイメントマネージャ150による実施態様に関して説明されるが、代替的な構成要素がルーチン700を実行してもよいこと、または、ブロックの1つまたは複数が、異なる構成要素により、または分散された方法で実行されてもよいことを関連の当業者は理解するであろう。
【0064】
説明的なルーチン700のブロック702で、バージョニング及びデプロイメントマネージャ150は、ユーザコードと関連したコード実行要求を受信する。例えば、フロントエンドが要求に対する何らかの初期の処理を実施した後、バージョニング及びデプロイメントマネージャ150はフロントエンド120から要求を受信してよい。上述のように、要求は、仮想コンピュートシステム110上で実行されるコード、及び、要求を処理するのに使用される演算能力の量、要求のタイプ(例えば、HTTP対トリガされるイベント)、要求のためのタイムアウト(例えば、その後に要求が終了され得る閾値時間)、セキュリティポリシー(例えば、ウォーミングプール130Aにおけるどのインスタンスがどのユーザによって使用可能かを制御し得る)等などの任意の動作条件を指定してよい。
【0065】
ブロック704で、バージョニング及びデプロイメントマネージャ150は、要求と関連したコードが、仮想コンピュートシステム110へ既にロードされた、アップデートされたバージョンのコードであることを検出する。例えば、1つまたは複数のコンテナは、そこにロードされた要求と関連した、より古いバージョンのコードを有してよい。
【0066】
ブロック706で、バージョニング及びデプロイメントマネージャ150は、仮想コンピュートシステム110への、アップデートされたバージョンのコードのダウンロードを開始する。例えば、バージョニング及びデプロイメントマネージャ150は、アップデートされたバージョンのコードを、仮想コンピュートシステム110の内部データストア(例えば、図1の内部データストア160)、インスタンスの1つ上のコードキャッシュ(例えば、図1のコードキャッシュ158C)、または、仮想コンピュートシステム110上に作成された1つまたは複数のコンテナへダウンロードさせる。
【0067】
ブロック708で、バージョニング及びデプロイメントマネージャ150は、アップデートされたバージョンのコードと関連したコード実行要求を、コード実行要求がブロック702で受信される前にコンテナの1つに予めロードされたより古いバージョンのコードによって処理させる。
【0068】
図7のルーチン700がブロック702〜708を参照して上述されたが、本明細書において説明される実施形態はそのように限定されず、1つまたは複数のブロックが、本開示の精神から逸脱することなく、追加、省略、修正、または交換されてよい。例えば、ルーチン700はさらにブロック710を含んでよく、そこでは、バージョニング及びデプロイメントマネージャ150が、アップデートされたバージョンのコードと関連した後続のコード実行要求を、ブロック706で開始されたダウンロードが完了した後にコンテナの1つにロードされたアップデートされたバージョンのコードによって処理させる。
【0069】
本開示において説明された機能の全てが、開示された構成要素の1つまたは複数の物理的なプロセッサ及びモバイル通信デバイスにより実行されるソフトウェアにおいて具体化されてよいことが、当業者または他の者によって理解される。ソフトウェアは、任意のタイプの不揮発性ストレージに永続的に記憶されてよい。
【0070】
とりわけ「can」、「could」、「might」、または「may」などの条件付きの言い回しは、そうではないと明確に述べられる場合を除き、あるいは、使用される文脈において理解される場合を除き、概して、一定の実施形態が、他の実施形態が含まない一定の特徴、要素及び/またはステップを含むことを伝えるように意図される。それゆえ、そのような条件付きの言い回しは、概して、特徴、要素及び/またはステップが1つまたは複数の実施形態に多少なりとも必要とされること、または、1つまたは複数の実施形態が、ユーザ入力またはプロンプトにより、またはそれらを伴わずに、これらの特徴、要素及び/またはステップが、任意の特定の実施形態において含まれるかどうか、または実行すべきものであるかどうかを決定するための論理を必ず含むことを暗示するように意図されない。
【0071】
本明細書において説明される流れ図、及び/または、添付の図面に表されたいずれのプロセスの説明、要素、またはブロックも、プロセスにおける特定の論理的機能またはステップを実行するための1つまたは複数の実行可能な命令を含むコードのモジュール、セグメント、または一部を潜在的に示すものとして理解すべきである。代替的な実施態様が、本明細書において説明される実施形態の範囲内に含まれ、当業者に理解されるように、含まれる機能性に応じて、要素または機能が削除されてもよく、実質的に同時実行または逆の順番を含め、図示または説明されたもとは違う順番で実行されてもよい。上述のデータ及び/または構成要素は、コンピュータ可読媒体にストアされてよく、また、CD‐ROM、DVD‐ROM、またはネットワークインターフェースなどのコンピュータにより実行可能な構成要素をストアするコンピュータ可読ストレージ媒体と関連した駆動機構を使用してコンピューティングデバイスのメモリにロードされてよいことがさらに理解されよう。さらに、構成要素及び/またはデータは1つのデバイスに含まれてもよく、または、任意の方法で分散されてもよい。従って、汎用のコンピューティングデバイスは、上述の様々なデータ及び/または構成要素の処理及び/または実行により、本開示のプロセス、アルゴリズム及び方法論を実行するように構成されてよい。
【0072】
上述の実施形態に対して多くの変形または修正が成されてよく、それらの要素が、他の許容可能な実施例に存在するものとして理解すべきであることを強調すべきである。全てのそのような修正及び変形は、本明細書において、本開示の範囲内に含まれるように、及び、以下の特許請求の範囲によって保護されるように意図される。
【0073】
本開示の実施形態は、以下の条項の観点から説明されてよい。
1.仮想コンピュートフリートから低レイテンシ演算キャパシティを提供するためのシステムであって、前記システムが、
ユーザの少なくとも1つのプログラムコードをストアするように構成される電子データストアと、
特定のコンピュータにより実行可能な命令を実行する1つまたは複数のハードウェアコンピューティングデバイスを含む仮想コンピュートシステムであって、前記仮想コンピュートシステムが前記データストアと通信し、且つ、少なくとも、
1つまたは複数の物理的なコンピューティングデバイス上で複数の仮想マシンインスタンスを保守し、前記複数の仮想マシンインスタンスは、
そこにロードされた1つまたは複数のソフトウェア構成要素を有し、且つ、ユーザに割り当てられるのを待機する仮想マシンインスタンスを含むウォーミングプール、及び、
1人または複数のユーザに現在割り当てられる仮想マシンインスタンスを含むアクティブプールを含むものであり、
前記仮想コンピュートシステム上で第1のプログラムコードを実行するため第1のコード実行要求を受信し、
前記第1のコード実行要求に基づいて、前記第1のプログラムコードが、前記アクティブプールにおいて前記仮想マシンインスタンスの特定のインスタンス上に作成されたコンテナへロードされる第2のプログラムコードのより新しいバージョンであると判定し、
前記内部データストア、前記特定のインスタンスのコードキャッシュ、及び、前記コンテナの少なくとも1つへの前記第1のプログラムコードのダウンロードを開始し、
前記第2のプログラムコードにより前記コード実行要求を処理する、
ように構成される、前記仮想コンピュートシステムと、
を含む、前記システム。
【0074】
2.条項1に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステム上で前記第1のプログラムコードを実行するため第2のコード実行要求を受信し、
前記コンテナが前記第2のプログラムコードを実行している間、前記第1のプログラムコードにより前記第2の要求を処理させる、
ように構成される、前記システム。
【0075】
3.条項1に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステムの前記内部データストアを前記アクティブプールにおける多数の仮想マシンインスタンスと関連させ、前記多数の仮想マシンインスタンスのそれぞれは、前記内部データストアにストアされたデータを利用するものであり、
前記多数の仮想マシンインスタンスのいずれか1つにロードされる1つまたは複数のプログラムコードを、前記内部データストアに自動的にロードさせる、
ように構成される、前記システム。
【0076】
4.特定のコンピュータにより実行可能な命令を実行する1つまたは複数のハードウェアコンピューティングデバイスを含み、且つ、少なくとも、
より新しいプログラムコードと関連した第1の要求を受信し、
前記第1の要求に基づいて、前記より新しいプログラムコードが、前記仮想コンピュートシステム上の仮想マシンインスタンス上に作成された既存のコンテナへ予めロードされたより古いプログラムコードのより新しいバージョンであると判定し、
前記仮想マシンインスタンス上に作成される新たなコンテナ、前記仮想コンピュートシステムの内部データストア、及び、前記仮想マシンインスタンスのコードキャッシュの少なくとも1つへの前記より新しいプログラムコードのダウンロードを開始し、
前記既存のコンテナにおける前記より古いプログラムコードにより前記第1の要求を処理させる、
ように構成される、仮想コンピュートシステム、
を含む、システム。
【0077】
5.条項4に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記より古いプログラムコードがアップデートされたと判定し、
前記より新しいプログラムコードと関連した何らかの要求が受信される前に、前記より新しいプログラムコードを、前記仮想コンピュートシステムへダウンローさせる、
ように構成される、前記システム。
【0078】
6.条項4に記載のシステムであって、前記仮想コンピュートシステムがさらに、
前記より新しいプログラムコードと関連した第2の要求を受信し、
前記既存のコンテナが前記より古いプログラムコードを実行している間に、前記新たなコンテナにおける前記より新しいプログラムコードにより前記第2の要求を処理させる、
ように構成される、前記システム。
【0079】
7.条項4に記載のシステムであって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急でないというインディケーションを含み、
前記仮想コンピュートシステムがさらに、前記より新しいプログラムコードがダウンロードされている間に、前記より古いプログラムコードを使用して、前記より新しいプログラムコードと関連した追加の要求を処理し続ける、
ように構成される、前記システム。
【0080】
8.条項4に記載のシステムであって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急であるというインディケーションを含み、
前記仮想コンピュートシステムがさらに、前記より新しいプログラムコードと関連したいずれの追加の要求も、前記より古いプログラムコードにより処理されるのを防ぐ、ように構成される、前記システム。
【0081】
9.条項4に記載のシステムであって、
前記仮想コンピュートシステムが、そこに作成される1つまたは複数のコンテナにおいてユーザコードを実行するように構成される仮想マシンインスタンスのアクティブプールを含み、
前記仮想コンピュートシステムがさらに、
前記仮想コンピュートシステムの前記内部データストアを前記アクティブプールにおける多数の仮想マシンインスタンスと関連させ、前記多数の仮想マシンインスタンスのそれぞれは、前記内部データストアにストアされたデータを利用するものであり、
前記多数の仮想マシンインスタンスのいずれか1つにロードされる1つまたは複数のプログラムコードを、前記内部データストアに自動的にロードさせる、
ように構成される、前記システム。
【0082】
10.条項9に記載のシステムであって、
前記内部データストアが、前記特定の仮想マシンインスタンスが終了された後、前記内部データストア上で前記任意のデータを保持しつつ、前記特定の仮想マシンインスタンスと、前記内部データストア上の前記特定の仮想マシンインスタンスと予め関連した任意のデータとの関連を終了させる、
ように構成される、前記システム。
【0083】
11.コンピュータにより実行される方法であって、
特定の実行可能な命令を備えて構成される1つまたは複数のコンピューティングデバイスによって実行されるとき、
仮想コンピュートシステム上でより新しいプログラムコードを実行するため第1の要求を受信することと、
前記第1の要求に基づいて、前記より新しいプログラムコードが、前記仮想コンピュートシステム上の仮想マシンインスタンス上に作成された既存のコンテナへロードされたより古いプログラムコードのより新しいバージョンであると判定することと、
前記仮想マシンインスタンス上に作成される新たなコンテナ、前記仮想コンピュートシステムの内部データストア、及び、前記仮想マシンインスタンスのコードキャッシュの少なくとも1つへの前記より新しいプログラムコードのダウンロードを開始することと、
前記既存のコンテナにおける前記より古いプログラムコードにより、前記第1の要求を処理させること、
を含む、前記方法。
【0084】
12.条項11に記載のコンピュータにより実行される方法であって、前記方法がさらに、
前記より古いプログラムコードがアップデートされたと判定することと、
前記より新しいプログラムコードと関連した何らかの要求が受信される前に、前記より新しいプログラムコードを前記仮想コンピュートシステムへダウンロードさせること、
を含む、前記方法。
【0085】
13.条項11に記載のコンピュータにより実行される方法であって、前記方法がさらに、
前記仮想コンピュートシステム上で前記より新しいプログラムコードを実行するため第2の要求を受信することと、
前記既存のコンテナが前記より古いプログラムコードを実行している間に、前記より新しいプログラムコードにより前記第2の要求を処理させること、
を含む、前記方法。
【0086】
14.条項11に記載のコンピュータにより実行される方法であって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急であるというインディケーションを含み、
前記方法がさらに、前記より新しいプログラムコードと関連したいずれの追加の要求も、前記より古いプログラムコードにより処理されるのを防ぐことを含む、
前記方法。
【0087】
15.条項11に記載のコンピュータにより実行される方法であって、
前記仮想コンピュートシステムが、そこに作成される1つまたは複数のコンテナにおいてユーザコードを実行するように構成される仮想マシンインスタンスのアクティブプールを含み、
前記方法がさらに、
前記仮想コンピュートシステムの前記内部データストアを、前記アクティブプールにおける多数の仮想マシンインスタンスと関連させることであって、前記多数の仮想マシンインスタンスのそれぞれは、前記内部データストアにストアされたデータを利用するものである、前記関連させることと、
前記多数の仮想マシンインスタンスのいずれか1つへロードされる1つまたは複数のプログラムコードを、前記内部データストアへ自動的にロードさせること、
を含む、前記方法。
【0088】
16.コンピュータにより実行可能な命令をストアする、コンピュータ可読の非一時的ストレージ媒体であって、前記命令が、1つまたは複数のコンピューティングデバイスにより実行される場合、
仮想コンピュートシステム上でより新しいプログラムコードを実行するため第1の要求を受信することと、
前記第1の要求に基づいて、前記より新しいプログラムコードが、前記仮想コンピュートシステム上の仮想マシンインスタンス上に作成された既存のコンテナへロードされたより古いプログラムコードのより新しいバージョンであると判定することと、
前記仮想マシンインスタンス上に作成される新たなコンテナ、前記仮想コンピュートシステムの内部データストア、及び、前記仮想マシンインスタンスのコードキャッシュの少なくとも1つへの前記より新しいプログラムコードのダウンロードを開始することと、
前記既存のコンテナにおける前記より古いプログラムコードにより、前記第1の要求を処理させること、
を含む動作を実行するように、前記1つまたは複数のコンピューティングデバイスを構成する、前記コンピュータ可読の非一時的ストレージ媒体。
【0089】
17.条項16に記載のコンピュータ可読の非一時的ストレージ媒体であって、前記動作がさらに、
前記より古いプログラムコードがアップデートされたと判定することと、
前記より新しいプログラムコードと関連した何らかの要求が受信される前に、前記より新しいプログラムコードを前記仮想コンピュートシステムへダウンロードさせること、
を含む、前記コンピュータ可読の非一時的ストレージ媒体。
【0090】
18.条項16に記載のコンピュータ可読の非一時的ストレージ媒体であって、前記動作がさらに、
前記仮想コンピュートシステム上で前記より新しいプログラムコードを実行するため第2の要求を受信することと、
前記既存のコンテナが前記より古いプログラムコードを実行している間に、前記より新しいプログラムコードにより前記第2の要求を処理させること、
を含む、前記コンピュータ可読の非一時的ストレージ媒体。
【0091】
19.条項16に記載のコンピュータ可読の非一時的ストレージ媒体であって、
前記第1の要求が、前記より新しいプログラムコードを段階的に導入することが緊急であるというインディケーションを含み、
前記動作がさらに、前記より新しいプログラムコードと関連したいずれの追加の要求も、前記より古いプログラムコードにより処理されるのを防ぐことを含む、
前記コンピュータ可読の非一時的ストレージ媒体。
【0092】
20.条項16に記載のコンピュータ可読の非一時的ストレージ媒体であって、前記仮想コンピュートシステムが、そこに作成される1つまたは複数のコンテナにおいてユーザコードを実行するように構成される仮想マシンインスタンスのアクティブプールを含み、前記動作がさらに、
前記仮想コンピュートシステムの前記内部データストアを、前記アクティブプールにおける多数の仮想マシンインスタンスと関連させることであって、前記多数の仮想マシンインスタンスのそれぞれは、前記内部データストアにストアされたデータを利用するものである、前記関連させることと、
前記多数の仮想マシンインスタンスのいずれか1つへロードされる1つまたは複数のプログラムコードを、前記内部データストアへ自動的にロードさせること、
を含む、前記コンピュータ可読の非一時的ストレージ媒体。
図1
図2
図3
図4
図5
図6
図7