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

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

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

特許6352535プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成
<>
  • 特許6352535-プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成 図000002
  • 特許6352535-プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成 図000003
  • 特許6352535-プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成 図000004
  • 特許6352535-プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成 図000005
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6352535
(24)【登録日】2018年6月15日
(45)【発行日】2018年7月4日
(54)【発明の名称】プログラム・コードを実行するための要求に対するプログラム的イベント検出及びメッセージ生成
(51)【国際特許分類】
   G06F 9/54 20060101AFI20180625BHJP
   G06F 9/455 20060101ALI20180625BHJP
【FI】
   G06F9/54 D
   G06F9/455 150
【請求項の数】14
【全頁数】32
(21)【出願番号】特願2017-516160(P2017-516160)
(86)(22)【出願日】2015年9月29日
(65)【公表番号】特表2017-534967(P2017-534967A)
(43)【公表日】2017年11月24日
(86)【国際出願番号】US2015052838
(87)【国際公開番号】WO2016053973
(87)【国際公開日】20160407
【審査請求日】2017年3月23日
(31)【優先権主張番号】14/502,648
(32)【優先日】2014年9月30日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】506329306
【氏名又は名称】アマゾン テクノロジーズ インコーポレイテッド
(74)【代理人】
【識別番号】100106541
【弁理士】
【氏名又は名称】伊藤 信和
(72)【発明者】
【氏名】ワグナー ティモシー アレン
【審査官】 井上 宏一
(56)【参考文献】
【文献】 特開2011− 65243(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455−9/54
(57)【特許請求の範囲】
【請求項1】
仮想計算システム上でプログラム・コードを実行する要求のためのイベント・メッセージを提供するシステムであって、
少なくともユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントを記憶するように構成された電子データ記憶と、
特定のコンピュータ実行可能命令を実行する1つ以上のハードウェア・コンピューティング・デバイスを含むイベント・トリガリング・コンピューティング・システムと、を含み、
前記イベント・トリガリング・コンピューティング・システムが少なくとも、
前記イベント・トリガリング・コンピューティング・システム上でイベントを第1の時点に検出
前記電子データ記憶の前記ユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントに基づいて、前記プログラム的イベントが仮想計算システム上の前記ユーザのプログラム・コード実行をトリガするように指示されているかを判定し、
前記イベントが前記ユーザの前記プログラム・コードの実行をトリガするように指定されていると判定することに応答して、前記データ記憶からアクセスされる前記ユーザのプログラム・コードに関する情報を取り扱う前記プログラム的イベントに基づいて、イベント・メッセージを生成
前記イベント・メッセージは、前記仮想計算システム上のインスタンス上のコンテナ上の前記ユーザの代わりに前記プログラム・コードを実行するために使用可能なスキーマにおいて編成された、ユーザ・アカウント識別子並びにプログラム的情報を少なくとも含み、前記プログラム的情報は、少なくとも(1)前記検出されたイベントに応答して前記実行されるプログラム・コードの関数、及び(2)前記プログラム・コードの実行のために使用される1つ以上のパラメータの少なくとも一方を含み
前記仮想計算システムは前記第1の時点との間の差が所定の継続時間よりも短い第2の時点に前記プログラム・コードの実行を開始する、システム。
【請求項2】
前記イベント・トリガリング・コンピューティング・システムがリモート・ストレージ・システムであり、前記イベント・メッセージが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルに応答して生成される、請求項1に記載の前記システム。
【請求項3】
前記イベント・トリガリング・コンピューティング・システムがデータベース・システムであり、前記イベント・メッセージが前記データベース・システムにおいてアップデートされるデータベース・テーブルに応答して生成される、請求項1に記載の前記システム。
【請求項4】
前記所定の継続時間が100msである、請求項1から請求項3のいずれか一項に記載の前記システム。
【請求項5】
特定のコンピュータ実行可能命令を実行する1つ以上のハードウェア・コンピューティング・デバイスを含む補助コンピューティング・システムであって、少なくとも、
仮想計算システム上ユーザのプログラム・コードの実行をトリガするように指定されたイベントを補助コンピューティング・システムによって第1の時点に検出
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに基づいて、イベント・メッセージを生成
前記イベント・メッセージは、(1)ユーザに関連するユーザ・アカウント識別子、(2)前記実行されるプログラム・コードの関数及び(3)前記関数に対して入力される1つ以上の入力パラメータの少なくとも1つを含み、
前記仮想計算システムは、前記第1の時点と第2の時点との間の差所定の継続時間より短い前記第2の時点に前記プログラム・コードを開始する、システム。
【請求項6】
前記補助コンピューティング・システムがリモート・ストレージ・システムであり、前記検出されたイベントが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルである、請求項5に記載の前記システム。
【請求項7】
前記補助コンピューティング・システムがデータベース・システムであり、前記検出されたイベントが前記データベース内のデータベース・テーブル更新操作である、請求項5に記載の前記システム。
【請求項8】
前記補助コンピューティング・システムが前記仮想計算システムから分離して個別のサード・パーティ・コンピューティング・システムである、請求項5に記載の前記システム。
【請求項9】
前記イベント・メッセージが、前記補助コンピューティング・システム及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、請求項5に記載の前記システム。
【請求項10】
前記共有スキーマがリモート・プロシージャ・コールの形式である、請求項9に記載の前記システム。
【請求項11】
前記イベント・メッセージが、少なくとも(1)オペレーティング・システムであって、前記プログラム・コードがその上で実行されるべき前記オペレーティング・システム、及び(2)前記プログラム・コードが書かれているプログラム言語、のインジケータを含む、請求項5から請求項10のいずれか一項に記載の前記システム。
【請求項12】
イベント・トリガリング・サービス上の仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示する、第1の時点に生じるイベントを検出し、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントにに基づいて、(1)ユーザに関連するユーザ・アカウント識別子及び(2)前記仮想計算システム上のプログラム・コードの実行のために使用する1つ以上のパラメータの少なくとも1つを含む、イベント・メッセージを生成し、
前記イベント・メッセージを前記仮想計算システムに提供する、ことを含み、
前記仮想計算システムが、前記第1の時点との間の差が所定の継続時間よりも短い第2の時点に前記プログラム・コードの実行を開始する
コンピュータによる実施方法。
【請求項13】
前記イベント・トリガリング・サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、請求項12に記載の前記コンピュータによる実施方法。
【請求項14】
前記イベント・メッセージが、前記仮想計算システムからの要求に応答して前記仮想計算システムに直接提供される、請求項12に記載の前記コンピュータによる実施方法。
【発明の詳細な説明】
【技術分野】
【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,991A PROCESSING EVENT
MESSAGES FOR USER
REQUESTS TO EXECUTE
PROGRAM CODE
SEAZN.997A DYNAMIC CODE
DEPLOYMENT AND
VERSIONING
【0002】
上記に参照された出願の開示は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0003】
一般的に述べれば、コンピューティング・デバイスは、データを交換するために、通信ネットワーク、または一連の通信ネットワークを利用する。企業や組織は、サード・パーティに対して運用をサポートしたりサービスを提供するために、数多くのコンピューティング・デバイスを相互接続するコンピュータ・ネットワークを運営している。コンピューティング・システムは、単一の地理的位置に配置することができ、または複数の分離した地理的位置に配置することができる(例えば、私設または公衆通信ネットワークを介して相互接続する)。具体的には、本明細書では一般に「データセンター」と呼ばれるデータセンターまたはデータ処理センターは、データセンターのユーザにコンピューティング・リソースを提供するための多数の相互接続されたコンピューティング・システムを含むことができる。データセンターは、組織のために運営される私設のデータセンター、または一般の人々のため、もしくはその利益のために運営される公的データセンターであってもよい。
【0004】
データセンター・リソースの利用の増加を促進するために、仮想化技術は、単一の物理コンピューティング・デバイスが、データセンターのユーザに対して独立したコンピューティング・デバイスとして見え、そして動作する、仮想マシンの1つ以上のインスタンスをホストすることを可能にし得る。仮想化により、単一の物理コンピューティング・デバイスは、仮想マシンを動的に作成、維持、削除、または管理することができる。同様にユーザは、単一のコンピューティング・デバイスやネットワーク化されたコンピューティング・デバイスの構成などを含めて、データセンターからのコンピュータ・リソースを要求し、数を変えながら仮想マシン・リソースの提供を受けることができる。
【発明の概要】
【課題を解決するための手段】
【0005】
いくつかのシナリオでは、仮想マシン・インスタンスは、特定の機能性を提供するために多くの仮想マシン・インスタンス・タイプに従って構成することができる。例えば、様々なコンピューティング・デバイスは、コンピューティング・デバイスが異なる所望の機能性を提供することを可能にするため、またはより効率的に同様の機能性を提供するために、オペレーティング・システムまたはオペレーティング・システム構成、仮想化ハードウェア・リソース及びソフトウェア・アプリケーションの異なる組み合わせに関連付けられ得る。これらの仮想マシン・インスタンス・タイプ構成は、しばしば、仮想マシンが一度起動されると実行されるソフトウェア(例えば、構成及びデータ・ファイルを共に備えるOS及びアプリケーションなど)を含む静的データを含むデバイス・イメージ内に含まれる。デバイス・イメージは、通常、インスタンスを作成または初期化するために使用されるディスクに記憶される。従って、コンピューティング・デバイスは、所望のソフトウェア構成を実装するためにデバイス・イメージを処理することができる。
【0006】
本開示の前述の態様及び付随する多くの利点は、添付の図面と併せて以下の詳細な説明を参照することにより、より良く理解されるようになるに従って、より容易に理解されるであろう。
【図面の簡単な説明】
【0007】
図1】仮想計算システムにおいてプログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理するための例示的な環境を示すブロック図である。
図2】プログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理する、仮想計算システムのフロントエンドを提供するコンピューティング・デバイスの一般的なアーキテクチャを示す図である。
図3】例示的な一態様による、仮想計算システムのフロントエンドと通信する補助システムによって実施される、イベント通知及びメッセージ生成ルーチンを説明する流れ図である。
図4】別の例示的な態様による、仮想計算システムのフロントエンドによって実施されるイベント・メッセージ処理ルーチンを説明する流れ図である。
【発明を実施するための形態】
【0008】
企業や組織は、コンピューティング操作(例えば、スレッド、プログラム、ソフトウェア、ルーチン、サブルーチン、プロセスなどを含むコードの実行)を行うために、もはや独自のデータセンターを取得し管理する必要はない。クラウド・コンピューティングの出現により、従来はハードウェア・コンピューティング・デバイスが提供していたストレージ・スペースとコンピューティング・パワーを、今やインターネット上で数分で取得及び設定できる。従って、開発者は、物理マシンの取得の心配をすることなく、所望の量のコンピューティング・リソースを迅速に購入できる。そのようなコンピューティング・リソースは、通常、仮想コンピューティング・リソースまたは仮想マシン・インスタンスの形態で購入される。これらの仮想マシンのインスタンスは、それぞれのオペレーティング・システムや他のソフトウェア・コンポーネントを使用して物理コンピューティング・デバイス上でホストされるものであり、物理コンピュータと同じ方法で使用できる。
【0009】
しかし、仮想コンピューティング・リソースを購入しても、開発者は相変わらず、購入する仮想マシン・インスタンスの数とタイプ、及びそれらを保持する期間を決定する必要がある。例えば、仮想マシン・インスタンスを使用するコストは、タイプ及び賃貸時間数によって異なる場合がある。それに加えて、仮想マシンをレンタルできる最小時間は、通常、数時間のオーダーである。さらに、開発者は、仮想マシンにインストールするハードウェア及びソフトウェア・リソース(例えば、オペレーティング・システムのタイプ及び言語ランタイムなど)を指定しなければならない。開発者が持っているその他の懸念として含まれるのが、過度の利用率(例えば、コンピューティング・リソースの獲得が少なすぎて性能問題で苦労)、低い利用率(例えば、コードの実行に必要以上に多くのコンピューティング・リソースを獲得し、そのために過払い)、トラフィックの変化の予測(例えば、スケール・アップまたはダウン時期を知るため)及び、ユーザが望むのは秒あるいはミリ秒のオーダーのコンピューティング能力でさえあり得るのに、3〜10分またはそれ以上かかる可能性のある、インスタンスと言語ランタイム立ち上げの遅延である。従って、サービス・プロバイダによって提供される仮想マシン・インスタンスをユーザが利用できるようにする改良された方法が望まれる。
【0010】
本開示の態様によれば、ユーザ要求が受信されると直ちに使用準備が整えられている予め初期化された仮想マシン・インスタンスのプールを維持することによって、ユーザ・コードを実行することに関連する(例えば、インスタンス及び言語ランタイムの起動時間といった)遅延(レイテンシと呼ばれることもある)を大幅に短縮することができる。
【0011】
一般的に説明すると、本開示の態様は、仮想マシン・インスタンス及びそこに作成されるコンテナの管理に関する。具体的には、仮想計算システムにおける仮想マシン・インスタンスの管理を容易にするシステム及び方法が開示される。仮想計算システムは、1つ以上のソフトウェア・コンポーネント(例えば、オペレーティング・システム、言語ランタイム、ライブラリなど)がロードされた仮想マシン・インスタンスのプールを維持する。プール内の仮想マシン・インスタンスは、プログラム・コードを実行するためのユーザの要求に対応するように指定することができる。プログラム・コードは、仮想マシン・インスタンス上に作成された分離したコンテナで実行できる。プール内の仮想マシン・インスタンスは、要求が受信される時までに既に起動され、特定のオペレーティング・システム及び言語ランタイムがロードされているため、要求を処理できる計算能力を(例えば、仮想マシン・インスタンス上で作成された1つ以上のコンテナにおいてユーザ・コードを実行することによって)見つけることに関連する遅延が、大幅に削減される。
【0012】
特定の実施形態では、メッセージ・キュー、メッセージ・バス、または任意の他のメッセージ中間サービスが提供されて、第1のプログラム的環境(例えば、補助サービス)で生成されたイベント・メッセージを、本明細書に記載の仮想環境によって提供されるプログラム的環境システムへ伝送または通信するのを容易にする。第1のプログラム的環境から仮想計算システムへのトリガされたイベントの伝播及び伝送をさらに容易にするために、トリガされたイベント、トリガされたイベントに応答してユーザ・コードを実行する要求に関連するユーザ、及び、仮想計算システムが、イベント・メッセージを、仮想計算システムによるさらなる処理のためのユーザ要求に変換することを可能にするプログラム的情報を記述する情報、を含むようにイベント・メッセージを生成することができる。イベント・メッセージ及び/またはそこに含まれるプログラム的情報は、補助サービスにおけるイベント・メッセージの作成/生成、及び仮想計算システムにおけるイベント・メッセージの変換/処理の両方を容易にするための、スキーマ、コード・モデル、またはアプリケーション・プログラミング・インタフェース(「API」)に従って構築することができる。
【0013】
別の態様では、仮想計算システムは、1つ以上の物理コンピューティング・デバイス上に仮想マシン・インスタンスのプールを維持することができ、そこでは各仮想マシン・インスタンスには1つ以上のソフトウェア・コンポーネントがロードされる。仮想計算システムが、ユーザのプログラム・コードを実行するための1つ以上のコンピューティング制約を指定するユーザのプログラム・コードを実行する要求を受信すると、仮想計算システムは、その要求によって指定された1つ以上のコンピューティング制約に基づいてユーザのプログラム・コードを実行させるための仮想マシン・インスタンスを選択し、ユーザのプログラム・コードが、選択された仮想マシン・インスタンス上で実行されるようにすることができる。
【0014】
本明細書に記載されるシステム及び方法によって提供される1つの利点は、補助サービスでトリガされるイベントと、それに対応する、様々な仮想マシン・インスタンス上のユーザ・コードの実行との間の、暗黙的で自動的なレート・マッチング及びスケーリングである。そのため、仮想計算システムは、イベントがまれに(例えば、1日に1回)トリガされるか、またはより大きい規模(例えば、毎秒数百回または数千回)であっても、オン・デマンドでイベントに応答することができる。
【0015】
次に、本開示の特定の実施形態及び例示的な用途を、図面を参照して説明する。これらの実施形態及び応用例は、本開示を例示するものであり、本開示を限定するものではない。
【0016】
図1を参照して、仮想環境100の一実施形態を説明するブロック図を説明する。図1に示す実施例は、ユーザ・コンピューティング・デバイス102のユーザ(例えば、開発者など)が、仮想計算システム110によって提供される仮想コンピューティング・リソースを使用して様々なプログラム・コードを実行することができる、仮想環境100を含む。
【0017】
説明として、デスクトップ・コンピュータ、ラップトップ、及び携帯電話を含む、仮想計算システム110と通信する様々な例示的ユーザ・コンピューティング・デバイス102が示される。一般に、ユーザ・コンピューティング・デバイス102は、デスクトップ、ラップトップ、携帯電話(またはスマートフォン)、タブレット、キオスク、無線デバイス、及び他の電子デバイスなどの任意のコンピューティング・デバイスとすることができる。さらに、ユーザ・コンピューティング・デバイス102は、例えば異なるウェブ・サービスが互いにプログラム的に通信して本明細書に記載された1つ以上の技術を実行する、同じまたは異なるデータセンター上で動作するウェブ・サービスを含むことができる。さらに、ユーザ・コンピューティング・デバイス102は、インターネット・アプライアンス及び接続デバイスなどのモノのインターネット(IoT)デバイスを含むことができる。仮想計算システム110は、ユーザ・コンピューティング・デバイス102に、ユーザ・コードを生成及びアップロードし、ユーザを呼び出し(例えば、仮想計算システム110上でユーザ・コードを実行する要求を提出し)、イベント・ベースのジョブまたは定期的ジョブをスケジューリングし、ユーザ・コードを追跡し、及び/またはそれらの要求及び/またはユーザ・コードに関する他のロギングまたは監視情報を見るための、1つ以上のユーザ・インタフェース、コマンド・ライン・インタフェース(CLI)、アプリケーション・プログラミング・インタフェース(API)及び/または他のプログラム的インタフェースを提供することができる。1つ以上の実施形態は、本明細書ではユーザ・インタフェースを使用するものとして説明することができるが、そのような実施形態は、追加的または代替的に、任意のCLI、API、または他のプログラム的インタフェースを使用できることが理解されるべきである。
【0018】
ユーザ・コンピューティング・デバイス102は、ネットワーク104を介して仮想計算システム110にアクセスする。ネットワーク104は、任意の有線ネットワーク、無線ネットワーク、またはそれらの組み合わせであってもよい。さらに、ネットワーク104は、パーソナル・エリア・ネットワーク、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、(例えば、ラジオまたはテレビ用の)無線放送ネットワーク、ケーブル・ネットワーク、衛星ネットワーク、携帯電話ネットワーク、またはそれらの組み合わせであってもよい。例えば、ネットワーク104は、おそらくはインターネットなどの様々な別個の当事者によって運営される、公衆アクセス可能なリンクされたネットワークのネットワークであってもよい。いくつかの実施形態では、ネットワーク104は、企業イントラネットまたは大学イントラネットなどのプライベートまたはセミ・プライベート・ネットワークであってもよい。ネットワーク104は、Global System for Mobile Communications(GSM)ネットワーク、符号分割多元接続(CDMA)ネットワーク、Long Term Evolution(LTE)ネットワーク、または任意の他のタイプの無線ネットワークなどの1つ以上の無線ネットワークを含むことができる。ネットワーク104は、インターネットまたは他の前述のタイプのネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントを使用することができる。例えば、ネットワーク104によって使用されるプロトコルは、Hypertext Transfer Protocol(HTTP)、HTTP Secure(HTTPS)、Message Queue Telemetry Transport(MQTT)、Constrained Application Protocol(CoAP)及び同様のものを含むことができる。インターネットまたは他の前述のタイプの通信ネットワークのいずれかを介して通信するためのプロトコル及びコンポーネントは、当業者には周知であり、従って、本明細書では詳細には説明しない。
【0019】
仮想計算システム110は、1つ以上のコンピュータ・ネットワークを使用して相互接続された複数のコンピュータ・システムを含む分散コンピューティング環境で動作するものとして図1に示す。仮想計算システム110はまた、図1に説明されているよりも少ないまたはより多い数のデバイスを有するコンピューティング環境内で動作することもできる。従って、図1の仮想計算システム110の描写は、例示的であり、本開示を限定するものではないと考えるべきである。例えば、仮想計算システム110またはその様々なコンポーネントは、本明細書で説明するプロセスの少なくとも一部を実施するために、様々なウェブ・サービス・コンポーネント、ホスト型または「クラウド」コンピューティング環境、及び/またはピア・ツー・ピア・ネットワーク構成を実装することができる。
【0020】
さらに、仮想計算システム110は、ハードウェア及び/またはソフトウェアで実施されてもよく、例えば、本明細書で説明される様々な機能を実行するためのコンピュータ実行可能命令を実行するように構成された物理コンピュータ・ハードウェア上に実装された1つ以上の物理または仮想サーバを含んでも良い。1つ以上のサーバは、例えば、1つ以上のデータセンター内に、地理的に分散されていても地理的に同じ場所に配置されていてもよい。
【0021】
図1に説明する環境では、仮想環境100は、フロントエンド120、ウォーミング・プール・マネージャ130、及びワーカ・マネージャ140を含む仮想計算システム110を含む。図示の例では、仮想マシン・インスタンス(「インスタンス」)152、154がウォーミング・プール・マネージャ130によって管理されるウォーミング・プール130A内に示され、またインスタンス156、158は、ワーカ・マネージャ140によって管理されるアクティブ・プール140A内に示される。仮想計算システム110内の様々なコンポーネントの説明は本質的に論理的であり、1つ以上のコンポーネントが、単一のコンピューティング・デバイスまたは複数のコンピューティング・デバイスによって実施され得る。例えば、インスタンス152、154、156、158は、異なる様々な地理的領域内の1つ以上の物理コンピューティング・デバイス上に実装することができる。同様に、フロントエンド120、ウォーミング・プール・マネージャ130、及びワーカ・マネージャ140の各々は、複数の物理コンピューティング・デバイスにまたがって実装することができる。あるいは、フロントエンド120、ウォーミング・プール・マネージャ130、及びワーカ・マネージャ140のうちの1つ以上は、単一の物理コンピューティング・デバイス上に実装することができる。いくつかの実施形態では、仮想計算システム110は、複数のフロントエンド、複数のウォーミング・プール・マネージャ、及び/または複数のワーカ・マネージャを含むことができる。図1の例では、4つの仮想マシン・インスタンスが示されているが、本明細書に記載される実施形態はそのように限定されるものではなく、当業者は、仮想計算システム110が、任意の数の物理コンピューティング・デバイスを使用して実装された任意の数の仮想マシン・インスタンスを含むことができることを理解するであろう。同様に、単一のウォーミング・プール及び単一のアクティブ・プールが図1の例に示されているが、本明細書に記載された実施形態はそのように限定されるものではなく、当業者は、仮想計算システム110が任意の数のウォーミング・プール及びアクティブ・プールを備えることができることを理解するであろう。
【0022】
図1の実施例では、仮想計算システム110はネットワーク104に接続されているように説明される。いくつかの実施形態では、仮想計算システム110内の任意のコンポーネントは、ネットワーク104を介して、仮想環境100の他のコンポーネント(例えば、監視/ロギング/課金サービス107、ストレージ・サービス108、インスタンス・プロビジョニング・サービス109、メッセージ・キュー・サービス105、及び/または仮想計算システム110と通信することができる他のサービスを含み得る、ユーザ・コンピューティング・デバイス102及び補助サービス106)と通信することができる。他の実施形態では、仮想計算システム110のすべてのコンポーネントが仮想環境100の他のコンポーネントと通信することができるわけではない。実施例では、フロントエンド120のみがネットワーク104に接続され、仮想計算システム110の他のコンポーネントは、フロントエンド120を介して仮想環境100Aの他のコンポーネントと通信することができる。いくつかの実施形態では、任意の補助サービス106は、本明細書でより詳細に説明するように、補助サービスのユーザによって指定されたイベントを注意深く見守り、仮想計算システム110による処理のためのイベント・メッセージの生成をトリガするために、イベント・トリガリング・サービス106Aとして動作するように構成することができる。従って、例えば、ストレージ・サービス108は、ストレージ・サービス108上で発生するイベントに応答して仮想計算システム110上でユーザ・コードを実行する能力を提供するために、イベント・トリガリング・サービス106Aとして動作するように構成することができる。
【0023】
一実施形態では、1つ以上の補助サービス106は、仮想計算システム110上のユーザ・コードの実行をトリガするためにイベントに対してポーリングまたはクエリされるように登録または構成することができる。そのような登録または構成は、ユーザ・コンピューティング・デバイス102に提供される1つ以上のユーザ・インタフェースを介して提供したり有効にすることができる。例えば、ユーザ・インタフェースは、イベント・トリガリング・サービス106A上のイベントがイベント・メッセージの生成をトリガするように、またはイベント・トリガリング・サービス106Aが、中間ポーリング・システムなどによるイベントに対して定期的にポーリングされるか、またはクエリされるように、ユーザが補助サービス106をイベント・トリガリング・サービス106Aとして選択または指定するオプションを提供することができる。
【0024】
一実施形態では、イベント・トリガリング・サービス106Aは、イベントまたはイベント・タイプを、仮想計算システム110上で実行される特定のプログラム・コードに関連付けるように構成されてもよい(すなわち、イベント・トリガリング・サービス106Aは、そのイベントを特定のプログラム・コードに関連付けるデータを記憶するか、またはそのデータにアクセスしてもよい)。別の実施形態では、イベント・トリガリング・サービス106Aは、必ずしもイベントまたはイベント・タイプを仮想計算システム110上で実行される特定のプログラム・コードと関連付ける必要はないが、むしろイベント・トリガリング・サービス106Aは、仮想計算システム110が、仮想計算システム110上で実行されるプログラム・コードに関連付けられていると解釈するように構成されているイベント・メッセージを生成してもよい(すなわち、仮想計算システム110は、イベントを特定のプログラム・コードに関連付けるデータを記憶するか、またはそのデータにアクセスしてもよい)。別の実施形態では、中間システムまたはサービスは、プログラム・コードを実行するためのイベント・メッセージの解釈及びルーティングを処理するように構成され、イベント・トリガリング・サービス106A及び仮想計算システム110のいずれも、イベントとプログラム・コードの関連付けデータを記憶するかまたはそのデータにアクセスすることが出来ないようにしてもよい。例えば、イベント・トリガリング・サービス106Aは、実行されるべき任意の特定のプログラム・コードに対して不可知論的なイベント・メッセージを生成することができ、イベント・メッセージは、イベント・メッセージ及び関連するメタデータを評価して、どのプログラム・コードを応答して実行するかを決定し、プログラム・コードを実行する対応する要求を開始する仮想計算システム110(または中間システム)に経路指定することができる。
【0025】
上述したように、任意の補助サービス106は、イベント・トリガリング・サービス106Aとして動作するように構成することができる。これらには、限定するものではないが、リモート・ストレージ・システム、データベース・システム、メッセージ・キュー・システム(例えば、仮想計算システム110によって提供されるメッセージ・キュー・サービス、仮想計算システム110とは分離したユーザまたはクライアントによって所有及び/または運用されるメッセージ・キュー・システムなど)、ウェブ・サービス、監査サービス、(例えば、仮想計算システムの健全性状態を監視するための)健全性監視サービス、ロギング・サービス、課金サービス、(例えば、仮想コンピューティング環境のライフサイクル及び/または所有権などを管理するための)リソース管理システム、などが含まれる。
【0026】
ユーザは、仮想計算システム110を使用して、そこにあるユーザ・コードを実行することができる。例えば、ユーザは、ユーザが開発したウェブまたはモバイル・アプリケーションに関連するコードを実行することを望む場合がある。そのコードを実行する1つの方法は、インフラストラクチャをサービスとして提供し、ユーザのニーズに合わせて仮想マシン・インスタンスを構成し、構成された仮想マシン・インスタンスを使用してコードを実行するサービス・プロバイダから、仮想マシン・インスタンスを取得することである。あるいは、ユーザは、仮想計算システム110にコード実行要求を送信することができる。仮想計算システム110は、計算能力(例えば、以下にさらに詳細に記述するコンテナ、インスタンスなど)の取得及び構成を、コード実行要求に基づいて処理し、計算能力を使用してコードを実行することができる。仮想コンピューティング・システム110は、ボリュームに基づいて自動的にスケール・アップ及びスケール・ダウンすることができるので、ユーザは過度の使用(例えば、コンピューティング・リソースの獲得が少なすぎて性能問題となること)または使用不足(例えば、コードを実行するために必要以上に多くのコンピューティング・リソースを獲得し、従って過払いとなること)の心配をしなければならない、という負担から解放される。
【0027】
フロントエンド120は、仮想計算システム110上でユーザ・コードを実行するために(時にはイベント・メッセージの形式である)すべての要求を受信して処理する。一実施形態では、フロントエンド120は、仮想計算システム110によって提供される他のすべてのサービスへのフロント・ドアの役割を果たす。フロントエンド120は要求を処理し、要求が適切に許可されていることを確認する。例えば、フロントエンド120は、要求に関連付けられたユーザが、要求で指定されたユーザ・コードにアクセスすることを許可されているかどうかを判定することができる。
【0028】
本明細書で使用されるユーザ・コードは、特定のプログラム言語で書かれた任意のプログラム・コード(例えば、プログラム、ルーチン、サブルーチン、スレッドなど)を指していてもよい。本開示では、用語「コード」、「ユーザ・コード」及び「プログラム・コード」は、互換的なものとして使用される場合がある。そのようなユーザ・コードは、例えば、ユーザによって開発された特定のウェブ・アプリケーションまたはモバイル・アプリケーションに関連して、特定のタスクを達成するために実行されてもよい。例えば、ユーザ・コードはJavaScript(登録商標)(node.js)、Java(登録商標)、Python、及び/またはRubyで記述することができる。要求は、ユーザ・コード(またはその位置)と、ユーザ・コードを実行するために使用される1つ以上の引数を含むことができる。例えば、ユーザは、ユーザ・コードを、そのユーザ・コードを実行する要求と共に提供することができる。別の例では、要求は、その名前またはその一意的なIDによって、以前にアップロードされたプログラム・コードを(例えば、コードをアップロードするためのAPIを使用して)識別することができる。さらに別の例では、コードは要求に含まれるとともに、要求が仮想計算システム110によって受信される前に、別の場所(例えば、ストレージ・サービス108、または仮想計算システム110の内部のストレージ・システム)にアップロードされてもよい。仮想計算システム110は、要求が処理される時点でコードが利用可能である場所に基づいて、そのコード実行戦略を変更することができる。
【0029】
フロントエンド120は、ユーザからのハイパーテキスト転送プロトコル・セキュア(HTTPS)要求に応答して、そのようなユーザ・コードを実行する要求を受信することができる。また、HTTPS要求に含まれる任意の情報(例えば、ヘッダ及びパラメータ)は、ユーザ・コードを実行するときに処理され、利用されてもよい。上述したように、コード実行要求を含むメッセージをフロントエンド120に転送するために、例えばHTTP、MQTT、及びCoAPを含む他のプロトコルを使用することができる。フロントエンド120は、ユーザが自動要求生成をトリガするために登録したイベントのようなイベントが検出されたとき、そのようなユーザ・コードを実行する要求を受信することもできる。例えば、ユーザは、ユーザ・コードを補助サービス106に登録して、特定のイベントが発生する(例えば、新しいファイルがアップロードされる)ときにいつでも、ユーザ・コードを実行するための要求がフロントエンド120に送られる、ということを指定することによって、補助サービス106をイベント・トリガリング・サービス106Aとして動作するように補助サービス106を構成することができる。あるいは、ユーザは、定期的ジョブ(例えば、24時間毎にユーザ・コードを実行する)を登録していてもよい。そのような例では、定期的ジョブのためのスケジュールされた時間に到達すると、ユーザ・コードの実行要求がフロントエンド120に送信され得る。定期的またはスケジュールされたジョブは、この開示の技術を使用して、例えば、タイマ・サービスによって生成されたイベントとしてジョブをモデル化するために、実施することができる。例えば、タイマ・サービスは、ユーザ・コードを実行する時間であることを示すイベント・メッセージを生成することができ、仮想計算システム110は、タイマ・サービスを利用して仮想計算システム110にユーザ・コードを実行することを思い出させることによって、特定の時間にコードを実行する処理を実施することができる。さらに別の例では、フロントエンド120は着信コード実行要求のキューを含むか、またはそれにアクセスすることができ、ユーザのバッチ・ジョブが仮想計算システムの作業キューから除去されると、フロントエンド120はユーザ要求を処理することができる。さらに別の例では、要求は、仮想計算システム110内の別のコンポーネントまたは図1に図示されていない他のサーバまたはサービスから発生してもよい。
【0030】
さらに別の例では、要求は、仮想計算システム110内の別のコンポーネントまたは図1に説明されていない他のサーバまたはサービスから発生してもよい。いくつかの実施形態では、ユーザ・コードを実行/起動する要求は、ユーザ・コンピューティング・デバイス102または補助サービス106に関連付けられたイベントに応答して生成されてもよい。例えば、エンドユーザが、ユーザ・コンピューティング・デバイスから、イベント・トリガリング・サービス106Aとして動作するように構成された補助サービス(ストレージ・サービス108など)に新しいイメージをアップロードすることに応答して、イベント・トリガリング・サービス106Aは、イメージのサムネイルを生成するためのコードを実行/起動する要求をトリガすることができる。コードは、アクティブ・プール120でホストされるか、またはストレージ・サービス108から仮想計算システム110にダウンロードされる。
【0031】
上述した例のいずれにおいても、そして本開示全体を通じて、ユーザ・コードを実行する要求を表すイベント・メッセージは、メッセージ・キュー・サービス105によって最初に受信され、メッセージ・キューに提供されるか、または置かれる。メッセージ・キュー・サービス105は、補助サービス106のコンポーネントとして、または異なるコンポーネントとして実装することができる。特定の実施形態では、フロントエンド120は、定期的にメッセージ・キュー・サービス105をポーリングして、処理のためにイベント・メッセージを識別し、検索することができる。メッセージ・イベントは、ユーザ・コードを実行する要求の自動生成をトリガするためにユーザが登録したイベントが検出されたときに応答した形でなど、例えばメッセージ・キュー・サービス105によってメッセージ・キューに入れられる。場合によっては、そのようなイベントを検出し、イベント・メッセージの生成をトリガし、イベント・メッセージをメッセージ・キュー・サービス105に提供することが望ましく、またはより実用的であり得る。例えば、実施形態に応じて、メッセージ・キュー・サービス105は、特定のメッセージ・イベントがより高い優先度を受けるように、メッセージ・イベントの順序付けを可能にするように構成されてもよい。別の例では、メッセージ・キュー・サービス105は、データベース操作、バッチ処理に適した特定のタイプのデータなどの特定のタイプのプログラム的イベントの伝送を容易にするように、具体的にまたは特別に構成され得る。一実施形態では、メッセージ・キュー・サービス105は、メッセージのストリーミング及び/または順序付けられた伝送(例えば、断片化データのセットとして)を提供するように構成され得る。次に、フロントエンド120は、メッセージ・キュー・サービス105をポーリングし、仮想計算システム110によるさらなる処理のためにイベント・メッセージを検索することができる。
【0032】
別の実施形態では、メッセージ・キュー・サービス105の代わりに、またはそれと組み合わせて、フロントエンド120は、イベント・トリガリング・サービス106Aに直接クエリして、イベント・トリガリング・サービス106Aによって提供されるAPIの呼び出しなどのさらなる処理のためにイベント・メッセージを要求することができる。別の実施形態では、イベント・トリガリング・サービス106Aは、1つ以上のAPI及び関数コールを介してフロントエンド120と直接的にインタフェースすることができる。例えば、イベントが検出され、イベント・メッセージが生成されると、イベント・トリガリング・サービス106Aは、イベント・メッセージをフロントエンド120に直接提供するために、フロントエンド120によって提供されるAPIを、必ずしもイベント・メッセージをメッセージ・キュー・サービス105に提供せずに呼び出すことができる。
【0033】
ユーザ要求は、ユーザ・コードと共に使用される1つ以上のサード・パーティ・ライブラリ(ネイティブ・ライブラリを含む)を指定することができる。一実施形態では、ユーザ要求は、ユーザ・コード及び任意のライブラリ(及び/またはその記憶場所の識別)を含むパッケージ・ファイル(例えば、圧縮ファイル、ZIPファイル、RARファイルなど)を含む。いくつかの実施形態では、ユーザ要求は、実行されるプログラム・コード、プログラム・コードが書かれている言語、要求に関連付けられたユーザ、及び/またはプログラム・コードを実行するために予約されるコンピュータ・リソース(例えば、メモリなど)を示すメタデータを含む。例えば、プログラム・コードは、要求とともに提供されてもよく、ユーザによって前もってアップロードされてもよく、仮想計算システム110によって提供されてもよく(例えば、標準ルーチン)、及び/またはサード・パーティによって提供されてもよい。いくつかの実施形態では、そのようなリソース・レベルの制約(例えば、特定のユーザ・コードを実行するためにどれだけのメモリが割り当てられるか)は、特定のユーザ・コードに対して指定され、各ユーザ・コードの実行中には変化してはいけない。このような場合、仮想計算システム110は、それぞれの個々の要求が受信される前にそのようなリソース・レベルの制約にアクセスすることができ、個々の要求はそのようなリソース・レベルの制約を指定することはできない。いくつかの実施形態では、ユーザ要求は、要求がユーザ・コードを実行しなければならないどのような種類の許可であるかを示す許可データなどの、他の制約を指定してもよい。そのような許可データは、(例えば、私設ネットワーク上の)私的資源にアクセスするために仮想計算システム110によって使用されてもよい。
【0034】
いくつかの実施形態では、ユーザ要求は、ユーザ要求を処理するために採用すべき動作を指定することができる。そのような実施形態では、ユーザ要求は、ユーザ要求に関連するユーザ・コードが実行される1つ以上の実行モードを可能にするためのインジケータを含むことができる。例えば、要求は、ユーザ・コードの実行に関連して生成され得るデバッグ及び/またはロギング出力がユーザに(例えば、コンソール・ユーザ・インタフェースを介して)戻して提供される、デバッグモードでユーザ・コードを実行すべきかどうかを示す、フラグまたはヘッダを含むことができる。このような例では、仮想計算システム110は、要求を検査してフラグまたはヘッダを探すことができ、もしそれが存在するなら、仮想計算システム110は、ユーザ・コードが実行されるコンテナの動作(例えば、ファシリティのロギングをすること)を修正し、出力データがユーザに返されるようにすることができる。いくつかの実施形態では、動作/モード・インジケータは、仮想計算システム110によってユーザに提供されるユーザ・インタフェースによって要求に追加される。ソース・コード・プロファイリング、リモート・デバッギングなどの他の機能も、要求に示された指示に基づいて有効または無効にされる。
【0035】
いくつかの実施形態では、仮想計算システム110は、複数のフロントエンド120を含むことができる。そのような実施形態では、例えば、ラウンド・ロビン方式で、複数のフロントエンド120に着信要求及び/またはイベント・メッセージを配信するために、ロード・バランサが提供されてもよい。
【0036】
ウォーミング・プール・マネージャ130は、仮想計算システム110が仮想計算システム110上でユーザ・コードを実行する要求を受信したときに、その仮想マシン・インスタンスがワーカ・マネージャ140によって使用される準備ができていることを保証する。図1に説明する例では、ウォーミング・プール・マネージャ130は、着信ユーザ・コード実行要求を処理するために使用され得る事前に初期化され、事前構成された仮想マシン・インスタンスのグループ(プールと呼ばれることもある)である、ウォーミング・プール130Aを管理する。いくつかの実施形態では、ウォーミング・プール・マネージャ130は、仮想計算機システムを仮想計算システム110内の1つ以上の物理コンピューティング・マシン上で起動させ、仮想マシン・インスタンス上で実行されるコード実行要求を受信する前にウォーミング・プール130Aに追加されるようにする。他の実施形態では、ウォーミング・プール・マネージャ130は、補助仮想マシン・インスタンス・サービス(例えば、インスタンス・プロビジョニング・サービス109)と通信して、新しいインスタンスを作成してウォーミング・プール130Aに追加する。例えば、ウォーミング・プール・マネージャ130は、ウォーミング・プール130A内の利用可能な容量に基づいて、追加のインスタンスをウォーミング・プール130Aに追加させて、着信要求を処理することができる。いくつかの実施形態では、ウォーミング・プール・マネージャ130は、フロントエンド120によって受信されたコード実行要求にサービスを提供するために使用され得る計算能力を取得及び維持するために、仮想計算システム110内の物理コンピューティング・デバイス及び1つ以上の仮想マシン・インスタンス・サービスの両方を利用し得る。いくつかの実施形態では、仮想計算システム110は、ウォーミング・プール130A内の利用可能な能力を制御(例えば、増加または減少)するための1つ以上の論理ノブまたはスイッチを備えることができる。例えば、システム管理者は、そのようなノブまたはスイッチを使用して、ピーク時にウォーミング・プール130A内の利用可能な能力(例えば、プレ・ブートされたインスタンスの数)を増加させることができる。いくつかの実施形態では、ウォーミング・プール130A内の仮想マシン・インスタンスは、ユーザのコードを実行する特定のユーザ要求から独立した所定のセットの構成に基づいて構成することができる。所定のセットの構成は、ユーザ・コードを実行するための様々なタイプの仮想マシン・インスタンスに対応することができる。ウォーミング・プール・マネージャ130は、現在または以前のユーザ・コード実行に関する1つ以上のメトリックに基づいて、ウォーミング・プール130A内の仮想マシン・インスタンスのタイプ及び数を最適化することができる。
【0037】
図1に示すように、インスタンスは、オペレーティング・システム(OS)及び/またはその上にロードされた言語ランタイムを有することができる。例えば、ウォーミング・プール・マネージャ130によって管理されるウォーミング・プール130Aは、インスタンス152、154を含む。インスタンス152は、OS152A及びランタイム152Bを含む。インスタンス154は、OS154Aを含む。いくつかの実施形態では、ウォーミング・プール130A内のインスタンスは、以下でより詳細に説明するコンテナ(オペレーティング・システムのコピー、ランタイム、ユーザ・コードなどをさらに含むことができる)も含むことができる。インスタンス152が1つのランタイムを含むように図1に示されているが、他の実施形態では、図1に示されるインスタンスは、2つ以上のランタイムを含むことができ、その各々は、異なるユーザ・コードを実行するために使用され得る。いくつかの実施形態では、ウォーミング・プール・マネージャ130は、ウォーミング・プール130A内のインスタンスのリストを維持することができる。インスタンスのリストは、インスタンスの構成(例えば、OS、ランタイム、コンテナなど)をさらに指定することができる。
【0038】
いくつかの実施形態では、任意のユーザの要求を処理するために、ウォーミング・プール130A内の仮想マシン・インスタンスを使用することができる。一実施形態では、ウォーミング・プール130A内のすべての仮想マシン・インスタンスは、同一または実質的に同様の方法で構成されている。別の実施形態では、ウォーミング・プール130A内の仮想マシン・インスタンスは、異なるユーザのニーズに合わせて異なるように構成され得る。例えば、仮想マシン・インスタンスは、異なるオペレーティング・システム、異なる言語ランタイム、及び/または異なるライブラリがそこにロードされてもよい。さらに別の実施形態では、ウォーミング・プール130A内の仮想マシン・インスタンスは、同一または実質的に同様の方法(例えば、同じOS、言語ランタイム、及び/またはライブラリ)で構成されて得るが、それらのインスタンスのいくつかは、異なるコンテナ構成を有してもよい。例えば、2つのインスタンスにPythonとRubyの両方のランタイムがある場合があるが、1つのインスタンスにはPythonコードを実行するようにコンテナを構成し、もう1つのインスタンスにはRubyコードを実行するようにコンテナを構成できる。いくつかの実施形態では、それぞれが同一構成の仮想マシン・インスタンスを有する複数のウォーミング・プール130Aが提供される。
【0039】
ウォーミング・プール・マネージャ130は、各仮想マシン・インスタンスが、仮想計算システム110上で実行されるプログラム・コードを実行するためのユーザ要求によって要求または指定され得る動作条件のうちの少なくとも1つを満たすように、ウォーミング・プール130A内の仮想マシン・インスタンスを事前設定することができる。一実施形態では、動作条件は、実行可能性があるユーザ・コードを書き込むことができるプログラム言語を含むことができる。例えば、そのような言語は、Java(登録商標)、JavaScript(登録商標)、Python(登録商標)、Ruby(登録商標)及び同様なものを含むことができる。いくつかの実施形態では、ユーザ・コードを実行する要求を満たすことができる仮想マシン・インスタンスの事前初期化を容易にするために、ユーザ・コードを書き込むことができる言語のセットは、(いくつかの実施形態では4つ以上の言語のセットが提供されるが、例えば、4つの言語のセットなどの)所定のセットに限定されてもよい。例えば、ユーザが仮想計算システム110によって提供されるユーザ・インタフェースを介して要求を構成している場合、ユーザ・インタフェースは、ユーザ・コードを実行するための所定の動作条件の1つを指定するようにユーザに促すことができる。別の例では、仮想計算システム110によって提供されるサービスを利用するためのサービスレベル合意(SLA)は、ユーザ要求が満足すべき一セットの条件(例えば、プログラミング言語、コンピューティング・リソースなど)を指定することができ、仮想計算システム110は、要求が、要求を処理する際の条件のセットを満たす、と仮定してもよい。別の例では、要求において指定された動作条件は、要求を処理するために使用される計算能力の量、要求のタイプ(例えば、HTTPかトリガされたイベントか)、要求に対するタイムアウト(例えば、以降は要求が終了され得る閾値時間)、セキュリティ・ポリシー(例えば、ウォーミング・プール130A内のどのインスタンスがどのユーザによって使用可能であるかを制御することができる)、などを含むことができる。
【0040】
ワーカ・マネージャ140は、着信コード実行要求を処理するために使用されるインスタンスを管理する。図1に説明する例では、ワーカ・マネージャ140は、1人以上のユーザに現在割り当てられている仮想マシン・インスタンスのグループ(プールと呼ばれることもある)であるアクティブ・プール140Aを管理する。仮想マシン・インスタンスは、本明細書では特定のユーザに割り当てられているものとして説明されているが、いくつかの実施形態では、インスタンスはユーザのグループに割り当てられ、それによりインスタンスは、ユーザのグループに結び付けられ、そのグループのあらゆるメンバがインスタンス上のリソースを利用することができる。例えば、同じグループ内のユーザは、同じセキュリティ・グループに属してもよく(例えば、セキュリティ証明書に基づいて)、その結果、別のメンバのコードが同じインスタンス上の別のコンテナ内で実行された後に、その特定のインスタンス上のメンバのコードを実行することが、セキュリティ上のリスクをもたらすことはない。同様に、ワーカ・マネージャ140は、どのコンテナでどの要求を実行できるか、及びどのインスタンスをどのユーザに割り当てることができるか、を指示する1つ以上のポリシーに従ってインスタンス及びコンテナを割り当てることができる。例示的なポリシーは、インスタンスが同じアカウントを共有するユーザの集合(例えば、仮想計算システム110によって提供されるサービスにアクセスするためのアカウント)に割り当てられることを指定することができる。いくつかの実施形態では、同じユーザ・グループに関連する要求は、(例えば、それに関連付けられたユーザ・コードが同一である場合)同じコンテナを共有することができる。いくつかの実施形態では、要求はグループの異なるユーザの間の区別せず、単純に、要求に関連するユーザが属するグループを示す。
【0041】
図1に示すように、インスタンスはオペレーティング・システム(OS)、言語ランタイム、及びコンテナを有することができる。コンテナは、OSの個々のコピー、ならびにその上にロードされたランタイムとユーザ・コードを有することができる。図1の例では、ワーカ・マネージャ140によって管理されるアクティブ・プール140Aは、インスタンス156、158を含む。インスタンス156は、OS156A、ランタイム156B、156C、及びコンテナ156D、156Eを有する。コンテナ156Dは、OS156Aのコピー、ランタイム156Bのコピー、及びコード156D−1のコピーを含む。コンテナ156Eは、OS156Aのコピー、ランタイム156Cのコピー、及びコード156E−1のコピーを含む。インスタンス158は、OS158A、ランタイム158B、158C、158E、158F、コンテナ158D、及びコード158G、158Hを有する。コンテナ158Dは、OS158Aのコピー、ランタイム158Bのコピー、及びコード158D−1のコピーを有する。図1に説明するように、インスタンスにはユーザ・コードがロードされ、それらのインスタンス内のコンテナにはユーザ・コードがロードされる。いくつかの実施形態では、ワーカ・マネージャ140は、アクティブ・プール140A内のインスタンスのリストを維持することができる。インスタンスのリストは、インスタンスの構成(例えば、OS、ランタイム、コンテナなど)をさらに指定することができる。いくつかの実施形態では、ワーカ・マネージャ140は、ウォーミング・プール130A内の(例えば、インスタンスの数及びタイプを含む)インスタンスのリストにアクセスすることができる。他の実施形態では、ワーカ・マネージャ140は、ウォーミング・プール130A内の仮想マシン・インスタンスの知識は持たず、ウォーミング・プール・マネージャ130から計算能力を要求する。
【0042】
図1に説明する例では、ユーザ・コードは、コンテナ(例えば、コンテナ156D、156E、158D)と呼ばれる分離された計算システムで実行される。コンテナは、仮想マシン・インスタンス内で、そのインスタンス上で使用可能なリソースを使用して作成された、論理的ユニットである。例えば、ワーカ・マネージャ140は、ユーザ・コードを実行する要求で指定された情報に基づいて、アクティブ・プール140A内のインスタンスの1つに、新しいプールを作成するか、既存のコンテナを配置し、要求に関連するユーザ・コードの実行を処理するために、そのコンテナを要求に割り当てる。一実施形態では、そのようなコンテナはLinuxコンテナとして実装される。アクティブ・プール140A内の仮想マシン・インスタンスは、その上に作成された1つ以上のコンテナを有することができ、(例えば、コンテナの1つまたはインスタンスのローカル・キャッシュのいずれかに)ロードされたユーザに関連する1つ以上のプログラム・コードを有する。各コンテナは、その中で利用可能にされているクレデンシャル情報を有することができ、そのため、コンテナで実行されるユーザ・コードは、対応するクレデンシャル情報がアクセスすることができるものすべてにアクセスすることができる。
【0043】
要求がいったんフロントエンド120によって首尾よく処理されると、ワーカ・マネージャ140は、仮想計算システム110上のユーザ・コードを実行する要求を処理する能力を見出す。例えば、アクティブ・プール140A内に、同じユーザ・コードがロードされたコンテナ(例えば、コンテナ156Dに示されたコード156D−1)を有する特定の仮想マシン・インスタンスが存在する場合、ワーカ・マネージャ140は、そのコンテナを要求に割り当て、ユーザ・コードをコンテナ内で実行させる。あるいは、ユーザ・コードが仮想マシン・インスタンスの1つ(例えば、インスタンス158に記憶されているがいずれの個々のコンテナにも属さないコード158G、158H)のローカルキャッシュ内で利用可能である場合、ワーカ・マネージャ140は、そのようなインスタンス上に新しいコンテナを作成し、そのコンテナを要求に割り当て、ユーザ・コードをコンテナにロードして実行させる。
【0044】
ワーカー・マネージャ140が、要求に関連するユーザ・コードがアクティブ・プール140A内のいずれかのインスタンス(例えば、インスタンスのコンテナまたはローカル・キャッシュのいずれか)上に見つからないと判定した場合、ワーカー・マネージャ140は、アクティブ・プール140A内のいずれかのインスタンスが、現在、要求に関連付けられたユーザに割り当てられて、現在の要求を処理するための計算能力を有しているか、を判定する。そのようなインスタンスが存在する場合、ワーカ・マネージャ140は、そのインスタンス上に新しいコンテナを作成し、コンテナをその要求に割り当てることができる。あるいは、ワーカ・マネージャ140は、ユーザに割り当てられたインスタンス上に既存のコンテナをさらに構成し、コンテナをその要求に割り当てることができる。例えば、ワーカ・マネージャ140は、現在のユーザ要求によって求められる特定のライブラリがそこにロードされている場合、既存のコンテナを使用してユーザ・コードを実行することが可能だと判定することができる。そのような場合、ワーカ・マネージャ140は、特定のライブラリ及びユーザ・コードをコンテナにロードし、そのコンテナを使用してユーザ・コードを実行することができる。
【0045】
アクティブ・プール140Aが現在そのユーザに割り当てられているインスタンスをまったく含まない場合、ワーカ・マネージャ140はウォーミング・プール130Aから新しい仮想マシン・インスタンスを引き出し、そのインスタンスを要求に関連付けられたユーザに割り当て、インスタンス上に新たなコンテナを作成し、コンテナを要求に割り当て、ユーザ・コードがダウンロードされてコンテナ上で実行されるようにする。
【0046】
ユーザ・コードは、図1のストレージ・サービス108などの補助サービス106からダウンロードすることができる。図1に説明するデータ108Aは、1つ以上のユーザによってアップロードされたユーザ・コード、そのようなユーザ・コードに関連付けられたメタデータ、または本明細書で説明される1つ以上の技術を実行するために仮想計算システム110によって利用される他の任意のデータを含むことができる。図1に説明する例ではストレージ・サービス108のみが示されているが、仮想環境100は、ユーザ・コードをダウンロードすることができる他のレベルのストレージ・システムを含んでもよい。例えば、各インスタンスは、コンテナが作成されたインスタンスに物理的(例えば、インスタンスが実行されている物理的コンピューティング・システム上にあるローカル・ストレージ)、または論理的(例えば、インスタンスとネットワーク通信し、仮想計算システム110の内部または外部に提供されるネットワーク接続ストレージ・システム)に関連付けられた1つ以上のストレージ・システムを有することができる。あるいは、コードは、ストレージ・サービス108によって提供されるウェブ・ベースのデータ・ストアからダウンロードされてもよい。
【0047】
ワーカ・マネージャ140が、ユーザ・コード実行要求に対応するために使用することができるウォーミング・プール130A内の仮想マシン・インスタンスの1つを見つけると、ウォーミング・プール・マネージャ130またはワーカ・マネージャ140は、インスタンスをウォーミング・プール130Aから取り出し、それを要求に関連付けられたユーザに割り当てる。割り当てられた仮想マシン・インスタンスは、ウォーミング・プール130Aから取り出され、アクティブ・プール140Aに配置される。いくつかの実施形態では、仮想マシン・インスタンスが特定のユーザにいったん割り当てられると、同じ仮想マシン・インスタンスを使用して他のどのようなユーザの要求も処理することはできない。それにより、ユーザ・リソースの混在を防ぐことで、ユーザにセキュリティ上のメリットがもたらされる。あるいは、いくつかの実施形態では、異なるユーザに属する(または異なるユーザに関連する要求に割り当てられた)複数のコンテナが、単一の仮想マシン・インスタンス上に共存することができる。そのようなアプローチは、利用可能な計算能力の活用を改善することができる。
【0048】
いくつかの実施形態では、仮想計算システム110は、仮想マシン・インスタンスのローカル・キャッシュと(例えば、ネットワーク104を介してアクセス可能な)ウェブ・ベースのネットワーク・ストレージとの間のキャッシング・システムの中間レベルとして機能するようにユーザ・コードが記憶される、分離したキャッシュを維持することができる。ワーカ・マネージャ140が要求を処理する際に遭遇する様々なシナリオは、図4を参照して以下により詳細に説明される。
【0049】
ユーザ・コードが実行された後、ワーカ・マネージャ140は、ユーザ・コードを実行するために使用されたコンテナを破棄して、占有したリソースをインスタンス内の他のコンテナが使用するために解放することができる。あるいは、ワーカ・マネージャ140は、コンテナを稼働させたままにして、そのコンテナを使用して、同じユーザからの追加の要求を処理することができる。例えば、同じユーザ・コードに関連付けられた別の要求がコンテナに既にロードされているなら、その要求は同じコンテナに割り当てることが可能であり、それによって新しいコンテナの作成及びユーザ・コードのコンテナへのロードに関連する遅延がなくなる。いくつかの実施形態では、ワーカ・マネージャ140は、ユーザ・コードを実行するために使用されたコンテナが作成されたインスタンスを破棄することができる。あるいは、ワーカー・マネージャ140は、同じユーザからの追加の要求を処理するために、それを使用するようにインスタンスを稼動状態に保ってもよい。ユーザ・コードが実行完了した後にコンテナ及び/またはインスタンスを稼働状態に維持するかどうかの決定は、閾値時間、ユーザのタイプ、ユーザの平均要求ボリューム、及び/または他の動作条件に基づくことができる。例えば、アクティビティ(例えば、コードの実行)なしに閾値時間(例えば、5分、30分、1時間、24時間、30日など)が経過した後、コンテナ及び/または仮想マシン・インスタンスがシャットダウン(例えば、削除、終了など)され、それに割り当てられたリソースが解放される。いくつかの実施形態では、コンテナが破棄される前に経過した閾値時間は、インスタンスが破棄される前に経過した閾値時間よりも短い。
【0050】
いくつかの実施形態では、仮想計算システム110は、着信コード実行要求を処理するときに、1つ以上の補助サービス106にデータを提供することができる。例えば、仮想計算システム110は、監視/ロギング/課金サービス107と通信することができる。監視/ロギング/課金サービス107は、仮想計算システム110上のコンテナ及びインスタンスの状態などの、仮想計算システム110から受信した監視情報を管理するための監視サービスと、仮想計算システム110上でコンテナ及びインスタンスによって実行される動作などの、仮想計算システム110から受信したロギング情報を管理するためのロギング・サービスと、(例えば、監視サービス及びロギング・サービスによって管理される監視情報及び/又はロギング情報に基づいて)仮想計算システム110上でユーザ・コードを実行することに関連する課金情報を生成するための課金サービスとを含むことができる。上述したような(例えば、仮想計算システム110に代わって)監視/ロギング/課金サービス107によって実行され得るシステム・レベルの動作に加えて、監視/ロギング/課金サービス107は、仮想計算システム110上で実行されるユーザ・コードに代わって、アプリケーション・レベルのサービスを実行する。例えば、監視/ロギング/課金サービス107は、仮想計算システム110上で実行されるユーザ・コードに代わって、様々な入力、出力、または他のデータ及びパラメータを監視及び/またはロギングすることができる。単一のブロックとして示されているが、監視、ロギング及び課金サービス107は、分離したサービスとして提供されてもよい。
【0051】
いくつかの実施形態では、ワーカ・マネージャ140は、ワーカ・マネージャ140によって管理されるインスタンス及びコンテナ(例えば、アクティブ・プール140A内のインスタンス及びコンテナ)のヘルス・チェックを実行することができる。例えば、ワーカ・マネージャ140によって実行されるヘルス・チェックは、ワーカ・マネージャ140によって管理されるインスタンス及びコンテナが、(1)ネットワーク及び/またはスタートアップ構成の設定ミス、(2)使い尽くされたメモリ、(3)ファイル・システムの破損、(4)互換性のないカーネル、及び/またはインスタンスとコンテナのパフォーマンスを損なう可能性のあるその他の問題、という課題を抱えているかを判定することを含んでいてもよい。一実施形態では、ワーカ・マネージャ140は定期的に(例えば、5分毎、30分毎、1時間毎、24時間毎など)ヘルス・チェックを実施する。いくつかの実施形態では、ヘルス・チェックの頻度は、ヘルス・チェックの結果に基づいて自動的に調整することができる。他の実施形態では、ヘルス・チェックの頻度は、ユーザ要求に基づいて調整することができる。いくつかの実施形態では、ワーカ・マネージャ140は、ウォーミング・プール130A内のインスタンス及び/またはコンテナについて同様のヘルス・チェックを実行することができる。ウォーミング・プール130A内のインスタンス及び/またはコンテナは、アクティブ・プール140A内のインスタンス及びコンテナと一緒に、または別々に管理されてもよい。いくつかの実施形態では、ウォーミング・プール130A内のインスタンス及び/またはコンテナの健全性がアクティブ・プール140Aとは別に管理される場合、ウォーミング・プール・マネージャ130は、ワーカ・マネージャ140の代わりに、ウォーミング・プール130A内のインスタンス及び/またはコンテナ上で上述したヘルス・チェックを実行してもよい。
【0052】
いくつかの実施形態では、仮想計算システム110は、ユーザ・コードの実行を、(例えば、フロントエンド120によって)それが受信された直後に開始するように適合される。時間幅は、(例えば、ユーザに関連する仮想マシン・インスタンス上のコンテナ内の)ユーザ・コードの実行の開始と、(例えば、フロントエンドによって受信される)ユーザ・コードを実行する要求の受信との間の時間差として決定することができる。別の時間幅は、(1)イベント・トリガリング・サービス上のイベントの検出と、(2a)(例えばフロントエンドによって受信された)ユーザ・コードを実行する要求の受信、及び/または(2b)(例えば、ユーザに関連する仮想マシン・インスタンス上のコンテナ内の)ユーザ・コードの実行の開始、との間の時間差として決定することができる。別の時間幅は、(1)イベント・メッセージの(例えば、イベント・トリガリング・サービス上からの直接的または間接的)検索、アクセス、または受信と、(2)ユーザ・コードを実行する要求の処理の(例えば、ユーザに関連付けられた仮想マシン・インスタンス上のコンテナ内での)開始、との間の時間差として決定することができる。仮想計算システム110は、所定の継続時間より短い時間幅内にユーザ・コードの実行を開始するように適合されている。一実施形態では、所定の継続時間は500ミリ秒である。別の実施形態では、所定の継続時間は300ミリ秒である。別の実施形態では、所定の継続時間は100ミリ秒である。別の実施形態では、所定の継続時間は50ミリ秒である。別の実施形態では、所定の継続時間は10ミリ秒である。別の実施形態では、所定の継続時間は、10ミリ秒〜500ミリ秒の範囲から選択される任意の値であってもよい。いくつかの実施形態では、仮想計算システム110は、1つ以上の条件が満たされる場合、所定の継続時間よりも短い時間幅内にユーザ・コードの実行を開始するように適合される。例えば、1つ以上の条件は、(1)ユーザ・コードは、要求が受信された時点で、アクティブ・プール140A内のコンテナにロードされているか、(2)ユーザ・コードは、要求が受信された時点で、アクティブ・プール140Aのインスタンスのコード・キャッシュに記憶されているか、(3)アクティブ・プール140Aは、要求が受信された時点で、要求に関連付けられたユーザに割り当てられたインスタンスを含んでいるか、(4)ウォーミング・プール130Aは、要求が受信された時点で、要求を処理する能力を有するか、のうちのいずれか1つを含み得る。
【0053】
ワーカ・マネージャ140は、着信コード実行要求を処理する計算能力(例えば、コンテナ)を見つけるためのインスタンス割当てユニットと、それらのコンテナ上のユーザ・コードの実行を容易にするユーザ・コード実行モジュールとを含むことができる。フロントエンド120の例示的な構成は、図2を参照して以下により詳細に説明される。
【0054】
図2は、仮想計算システム110内のプログラム・コードを実行するためのユーザ要求に対するイベント・メッセージを処理する、(フロントエンド120として参照される)コンピューティング・システムの一般的なアーキテクチャを示す。図2に示すフロントエンド120の一般的なアーキテクチャは、本開示の態様を実装するために使用され得るコンピュータ・ハードウェア及びソフトウェア・モジュールの構成を含む。ハードウェア・モジュールは、以下に詳細に説明するように、物理的な電子デバイスで実装することができる。フロントエンド120は、図2に示すものよりも多くの(またはより少ない)要素を含むことができる。しかしながら、実現可能な開示を提供するために、これらの一般的な従来の要素のすべてを示す必要はない。さらに、図2に説明する一般的なアーキテクチャは、図1に説明する他のコンポーネントのうちの1つ以上を実施するために使用されてもよい。説明されているように、フロントエンド120は、処理ユニット190、ネットワーク・インタフェース192、コンピュータ可読媒体ドライブ194、入出力デバイス・インタフェース196を含み、それらのすべてが通信バスを介して互いに通信することができる。ネットワーク・インタフェース192は、1つ以上のネットワークまたはコンピューティング・システムへの接続を提供することができる。従って、処理ユニット190は、ネットワーク104を介して他のコンピューティング・システムまたはサービスから情報及び指示を受信することができる。処理ユニット190は、メモリ180との間で通信することもでき、入出力デバイス・インタフェース196を介してオプションのディスプレイ(図示せず)の出力情報をさらに提供することができる。入出力デバイス・インタフェース196は、オプションの入力デバイス(図示せず)からの入力を受け入れることもできる。
【0055】
メモリ180は、本開示の1つ以上の態様を実施するために処理ユニット190が実行するコンピュータ・プログラム命令(いくつかの実施形態では、モジュールとしてグループ化される)を含むことができる。メモリ180は、一般に、RAM、ROM、及び/または他の持続的、補助的、または非一時的なコンピュータ可読媒体を含む。メモリ180は、ワーカ・マネージャ140の一般的な管理及び動作において処理ユニット190によって使用されるコンピュータ・プログラム命令を提供するオペレーティング・システム184を記憶することができる。メモリ180は、本開示の態様を実施するための、コンピュータ・プログラム命令及びその他の情報をさらに含むことができる。例えば、一実施形態では、メモリ180は、例えばコンピューティング・デバイスにインストールされるブラウザまたはアプリケーションなどのナビゲーション及び/またはブラウジング・インタフェースを介して、コンピューティング・デバイス上に表示するためのユーザ・インタフェース(及び/またはそのための命令)を生成するユーザ・インタフェース・ユニット182を含む。さらに、メモリ180は、例えばユーザ・プログラム・コード及び/またはライブラリにアクセスするために、1つ以上のデータ・レポジトリ(図示せず)を含み及び/またはそれらと通信することができる。
【0056】
メモリ180は、ユーザ・インタフェース・ユニット182に加えて、及び/またはそれと組み合わせて、イベント/要求処理ユニット188を含むことができ、イベント/要求処理ユニット188は、処理ユニット190によって実行され得る、イベント・メッセージ・ポーリング・ユニット186A及びイベント・メッセージ変換ユニット186Bを含むことができる。一実施形態では、ユーザ・インタフェース・ユニット182、イベント・メッセージ・ポーリング・ユニット186A、及びイベント・メッセージ変換ユニット186Bは、個別にまたは集合的に、例えば、実行されるユーザ・コードへの要求のためのイベント・メッセージの処理などの、本開示に説明するような様々な態様を実装する。別の実施形態では、例えば、イベント・ソースまたはメッセージ・キューをポーリングし、少なくともフロントエンド120及び/または仮想コンピューティング・システム100の別のコンポーネントによるさらなる処理のためのイベント・メッセージを準備するために、初期メッセージ変換または処理を実行するように構成されたポーリング・フリートを介して、分離したポーリング・サービスを実施することができる。
【0057】
イベント・メッセージ・ポーリング・ユニット186Aは、ユーザ・コードを実行する要求に向けて処理されるべきイベント・メッセージを定期的にポーリングする。例えば、イベント・メッセージ・ポーリング・ユニット186Aは、メッセージ・キュー・サービス105またはその他のメッセージ・キュー・サービスまたはメッセージ・バスなどのメッセージ・キューに定期的にアクセスして、イベント・メッセージが仮想計算システム110による処理のためにメッセージ・キューに配置されているか、を判定または検出することができる。イベント・メッセージは、例えば、図3を参照して本明細書で説明するルーチンに従ってメッセージ・キューに置かれてもよい。メッセージ・キュー内のイベント・メッセージを判定または検出することに応答して、メッセージ・ポーリング・ユニット186Aは、メッセージ・キューからメッセージ・イベントを検索し、本明細書でさらに説明するイベント・メッセージのさらなる処理を開始することができる。別の実施形態では、イベント・メッセージ・ポーリング・ユニット186Aは、メッセージ・キューからではなく、イベント・トリガリング・サービス106Aを直接ポーリングすることができる。例えば、特定のタイプのデータベースなどのイベント・トリガリング・サービスの中には、必ずしも中間メッセージ・キューに依存する必要がない、イベント・メッセージの直接ポーリングをサポートするものもある。
【0058】
イベント・メッセージ変換ユニット186Bは、(例えば、メッセージ・キュー105などのメッセージ・キューからアクセスされた、または検索された)イベント・メッセージの、ユーザ・コード(例えば、上記で前に参照によりその全体が本明細書に組み込まれている、2014年9月30日に出願された「THREADING AS A SERVICE」と題する米国特許出願第__/___,___号(代理人整理番号SEAZN.989A)に記載されているプロセスに従ってさらなる処理の準備がなされている)を実行する要求への変換を管理する。イベント・メッセージの変換については、本明細書の図4を参照してより詳細に説明する。一実施形態では、イベント・メッセージが処理されるときに、仮想計算システム110による迅速な変換及び/または即時関数呼び出しを容易にするために、リモート・プロシージャ・コールを表す形式でイベント・メッセージが生成される。このような実施態様は、イベント・トリガに応答する補助システムと、イベント・トリガに応答して補助システムによって生成されるイベント・メッセージを処理する仮想計算システム110との間の、高度な関数的透明性と待ち時間の低減を可能にする。
【0059】
イベント・メッセージ・ポーリング・ユニット186A及びイベント・メッセージ変換ユニット186Bは、フロントエンド120の一部として図2に示されているが、他の実施形態では、イベント・メッセージ・ポーリング・ユニット186A及びイベント・メッセージ変換ユニット186Bのすべてまたは一部は、仮想計算システム110の他のコンポーネント及び/または別のコンピューティング・デバイスによって実装されてもよい。例えば、本開示の特定の実施形態では、仮想計算システム110と通信する別のコンピューティング・デバイスが、フロントエンド120の一部として説明されるモジュール及びコンポーネントと同様に動作するいくつかのモジュールまたはコンポーネントを含むことができる。いくつかの実施形態では、フロントエンド120は図2に説明する以外のコンポーネントをさらに含んでもよい。
【0060】
次に図3を参照して、イベント・トリガリング・サービス106Aとして動作するように構成されたストレージ・サービス108などの、補助サービス106の1つ以上のコンポーネントによって実施されるルーチン300が説明される。ルーチン300は、イベント・トリガリング・サービス106Aによる実施に関して説明されているが、当業者であれば、ユーザ・デバイス102または仮想計算システム110などの代替コンポーネントがルーチン300を実施してもよく、あるいは、1つ以上のブロックが、異なるコンポーネントによって、または分散されて実施されてもよいことを理解するであろう。
【0061】
例示的なルーチン300のブロック302において、イベント・トリガリング・サービス106Aは、仮想計算システム110上のユーザ・コードの実行をトリガまたは起動するように指定されたイベントまたは動作を検出する。例えば、いくつかの実施形態では、イベント・トリガリング・サービス106Aは、1つ以上のイベントのイベント通知を有効化またはアクティブ化するように構成できる。一実施形態では、イベント・トリガ及び通知構成設定は、ユーザによって提供または指定されてもよい。例えば、ユーザが仮想計算システム110及び/またはストレージ・サービス108にユーザ・コードを提供またはアップロードするとき、ユーザは、その時点で、イベント・トリガリング・サービス106Aが注意深く見守るべき、及び1つ以上のイベントの検出に応答して、対応するユーザ・コードの関数またはルーチンが実行されるべき、1つ以上のイベントを指定してもよい。1つの説明的な例として、ユーザは、サムネイル画像を生成するためのユーザ・コードをアップロードし(または事前にアップロードするか、または他の方法で仮想計算システム110に提供しておき)、さらに、サムネイル画像を生成するコードが、新しい画像を補助システム(画像共有システムなど)にアップロードしているエンド・ユーザに応答して実行されるべきであることを指定することができる。この例では、画像共有システムは次に画像アップロード・イベントを監視または検出する。いくつかの実施形態では、イベント・トリガ及び通知構成設定は、例えばユーザ・コードと共に提供され得る構成ファイルまたは他のデータ・フォーマットによって提供または指定され得る。様々な実施形態では、ユーザ・コードをアップロードしているユーザと、イベント・トリガリング・サービス(新しい画像のアップロードなど)として構成された補助サービスに関して何らかの他の動作を実行するエンド・ユーザは、分離した別個のユーザまたはエンティティであってもよい。
【0062】
次に、ブロック304において、イベント・トリガリング・サービス106Aは、検出された動作/イベントに関連してイベント・メッセージを生成する。例えば、イベント・トリガリング・サービス106Aは、ユーザによって以前に提供されたイベント・トリガ及び通知構成設定に従ってイベント・メッセージを生成することができる。構成設定は、例えば、トリガされたイベントに応答して仮想計算システムによって実行されるユーザ・コードに関連するスキーマ、コード・モデル、またはAPIを指定することができる。例えば、イベント・メッセージは、とりわけ、ユーザに関連するユーザ・アカウント識別子、仮想計算システム上で呼び出される関数を識別する関数識別子、及び関数呼び出しと共に提供されるべき任意の入力パラメータ(必須及び/またはオプション)を含む1つ以上のイベント・メッセージ・パラメータを含むように生成することができる。
【0063】
いくつかの実施形態では、イベント・メッセージは、実行されるプログラム・コード、プログラム・コードが書き込まれる言語、要求に関連付けられたユーザ、及び/またはプログラム・コードを実行するために予約されるコンピュータ・リソース(例えば、メモリなど)を示すデータまたはメタデータを含むことができる。例えば、イベント・メッセージは、「言語ランタイムX」を使用して「オペレーティング・システムA」上でユーザ・コードが実行されるべきであることを指定することができる。イベント・メッセージが仮想計算システム110によって処理されると(例えば図4参照)、仮想計算システム110またはそのコンポーネントのうちの1つは、「オペレーティング・システムA」及び「言語ランタイムX」で事前設定され、ユーザに割り当てられた仮想マシン・インスタンスを見つけることができる。次に、仮想計算システム110は、コンテナを、その中のユーザ・コードを実行するために仮想マシン・インスタンス上に作成することができる。コードを有するコンテナが仮想マシン・インスタンス上に既に存在する場合、仮想計算システム110は、コンテナが利用可能になると、コンテナ上での実行に対する現在の要求をバッファすることができる。
【0064】
一実施形態では、イベント・メッセージ(または、少なくとも、イベント・メッセージの一部)のフォーマットは、イベント・トリガリング・サービス106Aが、イベント・メッセージにおいて、仮想計算システム上で関数を起動するために必要とされ得る関連する情報を提供するために、最小限の処理を実行するだけでよいように、標準的なリモート・プロシージャ・コールを表すことができる。例えば、このような標準的なリモート・プロシージャ・コール・フォーマットは、仮想計算システム110とは異なるオペレーティング・システムまたは言語ランタイムを実行する補助システム106が、そのような標準フォーマットで生成されたイベント・メッセージを介して仮想計算システム110とシームレスに通信することを可能にする。一実施形態では、リモート・プロシージャ・コールのフォーマットは、ユーザによって提供され、実行されるユーザ・コードと一致するか、対応するように設計される。例えば、画像アップロード・イベントが検出された場合、イベント・メッセージのフォーマットは、「invoke(generateThumbnail、userID、imageName、imagePath)」、または「generateThumbnail(userID、imageName、imagePath)」、または類似のものなどの、仮想計算システム上で応答して実行される関数へのリモート・プロシージャ・コールを表すことができる。
【0065】
いくつかの実施形態では、イベント・トリガリング・サービス106Aと仮想計算システム110との間に信頼できる関係または安全な関係が確立されるインスタンスのように、イベント・メッセージは、仮想計算システム110によって実行されるユーザ・コードをさらに含むことができる。例えば、ユーザは、仮想計算システム110にユーザ・コードを提供する代わりに、または提供することに加えて、ユーザ・コードをイベント・トリガリング・サービス106Aに提供することができ、さらに、ユーザ・コードが実行時に実行するために仮想計算システム110へのイベント・メッセージを提供される、ということを指示する。別の実施形態では、イベント・メッセージは、仮想計算システム110によって実行されるユーザ・コードの位置(URIなど)を含むことができ、それにより仮想計算システム110がURIを介して遠隔からユーザ・コードを呼び出すことができる。
【0066】
ブロック306において、イベント・トリガリング・サービス106Aは、仮想計算システムによるさらなる処理のためにイベント・メッセージを提供する。例えば、一実施形態では、イベント・メッセージは、メッセージ・キュー105などのメッセージ・キューに提供される。メッセージ・キュー・サービス105は、(例えば、図1に示すように)補助システム106のコンポーネントであってもよく、または補助システム106及び/または仮想計算システム110とネットワーク160上で通信する、分離したシステムまたはサービスであってもよい。イベント・メッセージの特定のフォーマットは、イベント・メッセージを伝送するために使用されるメッセージ・キューに関連する仕様に少なくとも部分的に基づいてもよい。さらに、使用されている特定のメッセージ・キューは、生成され、仮想計算システムに提供されるイベント・メッセージのタイプに基づいてもよい。例えば、特定のメッセージ・キューは、データベース操作に関するメッセージを伝送するのに適しており、従って、データベース・イベント・トリガに応答して生成されたイベント・メッセージが、特定のメッセージ・キューを使用して提供されてもよい。仮想計算システムがどのようにしてイベント・メッセージにアクセスし処理するかについては、図4を参照して以下でより詳細に説明する。別の実施形態では、イベント・メッセージは、中間メッセージ・キューを必要とせずに、仮想計算システム110によるアクセスのために提供されるか、または利用可能にされてもよい。例えば、イベント・トリガリング・サービス106Aは、イベント・トリガリング・サービス106Aから1つ以上の利用可能なイベント・メッセージを要求するために、仮想計算システム110が呼び出すことができるAPIを提供または使用可能にすることができる。次に、仮想計算システム100は、処理のためにイベント・メッセージをアクセス及び/または検索するために、メッセージ・キューをポーリングする代わりに、またはそれと組み合わせて、例えば定期的にAPIを呼び出すことができる。
【0067】
図3のルーチン300はブロック302〜306を参照して上記に説明されたが、本明細書に記載された実施形態はそのように限定はされず、本開示の趣旨から逸脱することなく、1つ以上のブロックを省略、変更または交換することができる。
【0068】
次に図4を参照して、仮想計算システム110(例えば、フロントエンド120)の1つ以上のコンポーネントによって実施されるルーチン400を説明する。ルーチン400は、フロントエンド120による実施に関して説明されているが、当業者であれば、代替コンポーネントがルーチン400を実施してもよく、または1つ以上のブロックが異なるコンポーネントによって、または分散されて実施されてもよいことを理解するであろう。
【0069】
例示的なルーチン400のブロック402において、フロントエンド120は、オプションで、ユーザ・コードを実行する要求を表すことができるイベント・メッセージについてメッセージ・キュー(例えば、メッセージ・キュー105)を定期的にポーリングすることができる。例えば、ブロック402は、イベント・トリガリング・サービス106Aがメッセージ・キューを介してイベント・メッセージを提供するシナリオでは、図3のブロック306からのイベント・メッセージング・プロセスを継続することができる。
【0070】
次に、ブロック404において、フロントエンド120は、仮想計算システム110による処理のためにイベント・メッセージにアクセスするか、またはそれを検索する。一実施形態では、イベント・メッセージは、メッセージ・キューからアクセスされるか、または検索される。イベント・メッセージの検索により、イベントに関連するさらなる処理の重複を防止するために、メッセージ・キューからイベント・メッセージが除去される。別の実施形態では、イベント・メッセージは、仮想計算システム110による処理の準備が整ったイベント・メッセージをフロントエンド120が要求及び受信することができるイベント・トリガリング・サービスによって提供される、APIの呼び出しなどによって、イベント・トリガリング・サービスから直接アクセスまたは検索されてもよい。イベント・メッセージは、図3を参照して上述した情報及びメタデータの任意のものを含むことまたは備えることができ、例えばその中に含まれるのは、ユーザに関連するユーザアカウント識別子、仮想計算システム上で呼び出される関数を識別する関数識別子、及び関数の呼び出しと共に提供される任意の入力パラメータ(必須及び/またはオプション)を含む1つ以上のイベント・メッセージ・パラメータである。
【0071】
ブロック406において、フロントエンド120は、ユーザ・コードを実行する要求が、仮想計算システム110によってさらに処理され得るように、イベント・メッセージをユーザ・コードを実行する要求に変換する(例えば、上記で前に参照によりその全体が本明細書に組み込まれている、2014年9月30日に出願された「THREADING AS A SERVICE」と題する米国特許出願第__/___,___号(代理人整理番号SEAZN.989A)に記載されていることを含む)。イベント・メッセージの変換は、イベント・メッセージを構文解析して、関数識別子、任意の入力パラメータ、及びイベント・トリガに応答して実行されるべきユーザによって指定されたユーザ・コードを実行する要求を生成するために必要とされ得る他のメタデータを、識別及び/または抽出することを含むことができる。例えば、イベント・メッセージは、既知または定義されたスキーマまたは他のフォーマットに準拠してもよいイベント・ペイロード(例えば、イベント・データ)に関する情報、例えばイベント・メッセージ・バスまたはイベント・トリガリング・サービス(例えば、メッセージ・キュー・サービスによって提供されるイベント・メッセージの暗黙のリースの一部であり得る)によって提供されるイベント・ラッパーまたは「エンベロープ」、及び/または、イベント・メッセージが署名された識別情報、イベント・プロデューサまたはイベント・トリガのソースの識別情報(例えば、どのイベント・トリガリング・サービスがイベントをトリガしたかなど)、イベント・メッセージが伝送されたメッセージ・キューの名称または所有者を含むイベントに関連するイベント・メタデータ、などのうち少なくとも1つ以上を含むかまたは備えることができる。
【0072】
図3を参照して説明したように、一実施形態では、イベント・メッセージのフォーマットは、メッセージ・キューから一旦検索されると、フロントエンド120が、ユーザ・コードを実行するための対応する要求を生成するために最小限の処理しか必要としないように、標準リモート・プロシージャ・コールを表す。例えば、画像アップロード・イベントが検出された場合、イベント・メッセージのフォーマットは、「invoke(generateThumbnail、userID、imageName、imagePath)」、または「generateThumbnail(userID、imageName、imagePath)」、または類似のものなどの、仮想計算システム上で応答して実行される関数へのリモート・プロシージャ・コールを表すことができる。従って、一実施形態では、フロントエンド120は、このリモート・プロシージャ・コールを抽出し、指定された関数を直ちに起動して要求を開始することができる。さらに、図3を参照して上記に論じたように、ユーザ・コードの実行要求は、ユーザ・コードを実行する要求の追加入力として含まれる「言語ランタイムX」を使用して、ユーザ・コードが「オペレーティング・システムA」上で実行されるべきであることをさらに指定することができる。
【0073】
ブロック408において、フロントエンド120は、オプションで、セキュリティアクセスを検証し、及び/またはイベント・メッセージと共に提供されるユーザ・アカウント識別子に関連するユーザを認証し、ユーザが指定されたユーザ・コードにアクセスする権限を有すると判定する。いくつかの実施形態では、セキュリティ及び/または認証は、分離したプロセスで、またはユーザ・コードを実行するための要求の処理の一部として、省略または実行されてもよい。いくつかの実施形態では、セキュリティ及び/または認証は、ブロック406で実行される変換の前など、ルーチン400の早期に実行されてもよい。
【0074】
ブロック410において、フロントエンド120は、ユーザ・コードを実行する要求を仮想計算システム110に提供する。特定の実施形態では、フロントエンド120自体は、例えば、上記で前に参照によりその全体が本明細書に組み込まれている、2014年9月30日に出願された「THREADING AS A SERVICE」と題する米国特許出願第__/___,___号(代理人整理番号SEAZN.989A)に記載されているように、さらに要求の処理を実行する。要求は、プログラミング言語で構成されたプログラム・コードを含むことができる。Java(登録商標)、PHP、C ++、Python(登録商標)などの様々なプログラム言語を使用してユーザ・コードを作成できる。要求は、コード実行要件に関する構成情報を含むことができる。例えば、要求には、プログラム・コードが書かれたプログラム言語に関する情報、言語ランタイムに関する情報、及び/またはユーザ・コードを実行するための言語ライブラリに関する情報を含めることができる。構成情報は、ユーザ・コードをホストできる仮想マシン・インスタンスに関する特定の情報を含む必要はない。
【0075】
図4のルーチン400はブロック402〜410を参照して上記に説明されたが、本明細書に記載された実施形態はそのように限定はされず、本開示の趣旨から逸脱することなく、1つ以上のブロックを省略、変更または交換することができる。例えば、ブロック402は、フロントエンド120がユーザ・デバイス102からイベント・メッセージを受信するように変更することができる。
【0076】
図4のルーチン400は、異なる順序で実行され得る異なるプロセスまたはルーチンを含み得る。1つの代替例が以下のように提供されるが、他の変形も可能である。まず、イベント・メッセージを(利用可能な場合にはスキーマを使用して)解析するフロントエンド120によって、イベント・メッセージを受信またはアクセスすることができる。フロントエンド120は、解析されたイベント・メッセージを、イベントに関する情報、イベントのソース所有者、及び仮想計算システム110に提供され得る他の情報を決定または確立するために、追加のイベントメタデータ(例えば、イベント・ラッパー、メッセージ・キュー識別情報またはイベント・トリガのソースに関する情報)と組み合わせることができる。次に、フロントエンド120は、必要に応じて少なくとも初期認証及び/またはセキュリティ・チェックを実行して、安全なアクセス及びユーザ・コードの関連する実行を検証することができる。次に、フロントエンド120は、イベントに応答して呼び出される適切なプログラムまたはユーザ・コードにメッセージをルーティングするために、解析されたイベント・メッセージ及び追加のイベントメタデータを評価することができる。次に、フロントエンド120は、例えば、メッセージ及び/またはイベントメタデータの内容を、引数、変数、及びイベント・メッセージを処理するために選択されたユーザ・コードのプログラミング言語内の他の入力に変換することによって、ユーザ・コードを実行する要求にイベント・メッセージをマッピングすることができる。例えば、イベント・メッセージの署名者またはプロバイダに関連付けられた識別情報を含むユーザ・コードを実行する要求に、追加情報を加えることができる。次に、フロントエンド120は、プログラミング言語の関数、方法、または他のエントリポイントを(オプションとして、イベント・メッセージ及び/またはイベント・メタデータの態様に基づく条件で)呼び出して、要求の処理を開始することができる。
【0077】
ユーザ・コードを実行する要求の処理中に、フロントエンド120は、イベント・メッセージまたはペイロードの処理を容易にするために追加の処理を実行し続けることができる。例えば、元のイベント・メッセージまたはペイロードが1つ以上のサブ・イベントの集合体を含む場合、各サブ・イベントは、一度に1つずつユーザ・コードを介して実行するために仮想計算システム110に中継されてもよい。フロントエンド120は、元の集合イベント・メッセージ・ペイロードを、複数の単一イベントに分割することを管理するように構成されてもよい。フロントエンド120は、例えば、元のイベント・メッセージの処理の一部として必要とされる中間または集合チェックポイント・サービスを容易にするように構成することもできる。例えば、複数のイベントを含む集合イベント・メッセージは、第1のイベントのいくつかが、後の第2、または第3のイベントの前に最初に処理及び完了されることを必要とする場合があり、この場合、フロントエンド120は、第1イベントの処理を容易にし、仮想計算システムによる処理/実行のために、後の第2または第3のイベントをルーティングする前に、第1イベントの完了ステータスをチェックするようにさらに構成することができる。
【0078】
イベント・メッセージに対するユーザ・コードの処理/実行の後、フロントエンド120は、追加の後処理を提供するようにさらに構成されてもよい。例えば、フロントエンド120は、特定のクリーンアップ操作(例えば、関連するイベント・メッセージ/ラッパーに関するリースの解放)を実行し、結果計算を実行し、戻り値を(必要な場合)提供じ、チェックポイント操作(例えば上述のように、集合イベント・メッセージに関するサブ・イベントの処理の最中または処理の間に発生する可能性がある)を実行することができる。いくつかの実施形態では、フロントエンド120は、ユーザプログラムに代わって、イベントの完了(成功または不成功)に関連するロギング、監視、アラーム/通知、及び/または他のレポートを実行することができる。場合によっては、そのようなロギング、監視などは、ユーザ・コード自体の実行中に行われるロギング、監視、及び関連プロセスに加えて実行することができる。例えば、フロントエンド120は、イベントの結果(及びイベントに応答したユーザ・コードの関連する実行)について、例えばイベント・トリガリング・サービス106Aまたはユーザに戻して報告するように構成することができる。
【0079】
当業者であれば、本開示に記載された機能の全てが、開示されたコンポーネント及び移動通信デバイスの1つ以上の物理プロセッサによって実行されるソフトウェアで具体化されてもよいことが理解されるであろう。ソフトウェアは、任意のタイプの不揮発性ストレージに持続的に記憶されてもよい。
【0080】
特に言及しない限り、または使用されている文脈の中で他の意味で理解されない限り、とりわけ「can」、「could」、「might」または「may」などの条件付き言語は、一般に、特定の機能、構成要素及び/またはステップを、特定の実施形態が含むが、他の実施形態は含まない、ということを伝えることを意図するものである。従って、そのような条件付き言語は、機能、構成要素及び/またはステップが1つ以上の実施形態に何らかの形で必要であるということ、もしくは、1つ以上の実施形態が、これらの機能、構成要素及び/またはステップは任意の特定の実施形態に含まれるか、または実施されることになるかを、ユーザ入力またはプロンプティング有無にかかわらず検出するための論理を含む必要があるということを、暗示することを一般に意図してはいない。
【0081】
本明細書に記載され、及び/または添付の図に示された流れ図における任意のプロセス記述、構成要素、またはブロックは、プロセス内の特定の論理関数またはステップを実施するための1つ以上の実行可能命令を含むモジュール、セグメント、またはコード部分を潜在的に表すものとして理解されるべきである。関連する機能に応じて、要素または機能が削除され、実質的に同時にまたは逆の順序を含めて、示されているかまたは議論された順序とは順不同に実行される代替実施形態は、本明細書に記載された実施形態の範囲内に含まれるということが、当業者には理解されるであろう。上述のデータ及び/またはコンポーネントは、CD■ROM、DVD■ROMまたはネットワーク・インタフェースなどのコンピュータ実行可能コンポーネントを格納することが可能なコンピュータに関連付けられたドライブ機構を使用して、コンピュータ可読記憶媒体に記憶され、コンピューティング・デバイスのメモリにロードされる、ということが、さらに理解されるであろう。さらに、コンポーネント及び/またはデータは、単一のデバイスに含めることができ、または任意の方法で分散させることができる。従って、汎用コンピューティング・デバイスは、上述した様々なデータ及び/またはコンポーネントの処理及び/または実行を伴う本開示のプロセス、アルゴリズム、及び方法を実施するように構成されてもよい。
【0082】
上記の実施形態には多くの変形及び修正がなされてもよく、その構成要素は他の許容可能な例の中にあると理解されるべきであることを強調すべきである。そのような変更及び変形のすべては、本明細書で本開示の範囲内に含まれ、以下の請求項によって保護されることが意図される。
【0083】
本開示の実施形態は、以下の条項を考慮して説明することができる。
1.仮想計算システム上でプログラム・コードを実行する要求のためのイベント・メッセージを提供するシステムであって、
少なくともユーザのプログラム・コードに関する情報を取り扱うプログラム的イベントを記憶するように構成された電子データ記憶と、
特定のコンピュータ実行可能命令を実行する1つ以上のハードウェア・コンピューティング・デバイスを含むイベント・トリガリング・コンピューティング・システムであって、前記イベント・トリガリング・コンピューティング・システムがメッセージ・キュー・システムと通信する前記イベント・トリガリング・コンピューティング・システムを含み、前記イベント・トリガリング・コンピューティング・システムが少なくとも、
前記イベント・トリガリング・コンピューティング・システム上でイベントを検出し、前記イベントは第1の時点に検出され、
前記ユーザの前記プログラム・コードに関する情報を取り扱う前記プログラム的イベントに基づいて、前記イベントが仮想計算システム上の前記ユーザのプログラム・コード実行をトリガするように指示されているかを判定することであって、前記プログラム的イベントが前記電子データ記憶からアクセスされる情報を取り扱い、前記仮想計算システムが前記プログラム・コードを第2の時点に実行開始するように構成され、前記第1の時点と前記第2の時点との間の差として決定される時間幅が所定の継続時間よりも短いものであり、前記判定し、
前記イベントが前記ユーザの前記プログラム・コードの実行をトリガするように指定されていると判定することに応答して、前記データ記憶からアクセスされる前記ユーザのプログラム・コードに関する情報を取り扱う前記プログラム的イベントに、少なくとも部分的に基づいてイベント・メッセージを生成することであって、
前記イベント・メッセージは、前記仮想計算システム上のインスタンス上のコンテナ上の前記ユーザの代わりに前記プログラム・コードを実行するために使用可能なスキーマにおいて編成された、ユーザ・アカウント識別子及びプログラム的情報を少なくとも含み、前記プログラム的情報は、少なくとも(1)前記検出されたイベントに応答して前記実行するプログラム・コードの関数、及び(2)前記プログラム・コードの実行のための1つ以上のイベント・メッセージ・パラメータを指示し、前記生成し、
前記イベント・メッセージを中間メッセージ・キュー・システムに提供することであって、前記中間メッセージ・キュー・システムはさらに前記仮想計算システムと通信する、前記提供する、
ように構成された、
前記システム。
【0084】
2.前記イベント・トリガリング・システムがリモート・ストレージ・システムであり、前記イベント・メッセージが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルに応答して生成される、条項1に記載の前記システム。
【0085】
3.前記イベント・トリガリング・システムがデータベース・システムであり、前記イベント・メッセージが前記データベース・システムにおいてアップデートされるデータベース・テーブルに応答して生成される、条項1に記載の前記システム。
【0086】
4.前記所定の継続時間が100msである、条項1に記載の前記システム。
【0087】
5.特定のコンピュータ実行可能命令を実行する1つ以上のハードウェア・コンピューティング・デバイスを含む補助コンピューティング・システムであって、少なくとも、
仮想計算システム上でユーザのプログラム・コードの実行をトリガするように指定されたイベントを検出し、前記イベントは第1の時点に検出され、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに少なくとも部分的に基づいて、イベント・メッセージを生成するように構成される、前記補助コンピューティング・システムを含み、
前記イベント・メッセージは、前記仮想計算システム上のプログラム・コードの実行のためのユーザ・アカウント識別子及びメタデータを少なくとも含み、前記イベント・メタデータは前記実行するプログラム・コードの関数及び前記関数に対する1つ以上の入力パラメータを識別し、前記仮想計算システムは、第2の時点に前記プログラム・コードを開始するように構成され、前記第1の時点と前記第2の時点との間の差として決定される時間幅は所定の継続時間より短いものであり、
前記イベント・メッセージを中間メッセージ・キュー・システムに提供し、前記中間メッセージ・キュー・システムはさらに前記仮想計算システムと通信する、
前記システム。
【0088】
6.前記補助コンピューティング・システムがリモート・ストレージ・システムであり、前記検出されたイベントが前記リモート・ストレージ・システムにアップロードされるデータ・ファイルである、条項5に記載の前記システム。
【0089】
7.前記補助コンピューティング・システムがデータベース・システムであり、前記検出されたイベントが前記データベース内のデータベース・テーブル更新操作である、条項5に記載の前記システム。
【0090】
8.前記補助コンピューティング・システムが前記仮想計算システムから分離して個別のサード・パーティ・コンピューティング・システムである、条項5に記載の前記システム。
【0091】
9.前記イベント・メタデータが、実行する前記プログラムの前記関数に関するイベント・メッセージを処理するために、前記補助コンピューティング・システム及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、条項5に記載の前記システム。
【0092】
10.前記共有スキーマがリモート・プロシージャ・コールの形式である、条項9に記載の前記システム。
【0093】
11.前記イベント・メタデータが、少なくとも(1)オペレーティング・システムであって、前記プログラム・コードがその上で実行されるべき前記オペレーティング・システム、及び(2)前記プログラム・コードが書かれているプログラム言語、のインジケータを含む、条項5に記載の前記システム。
【0094】
12.特定の実行可能命令と共に構成された1つ以上のコンピューティング・デバイスによって実施されるように、
イベント・トリガリング・サービス上のイベントを検出し、前記イベントは仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示され、前記検出は第1の時点に生じ、
前記イベントの検出に応答して、電子データ記憶からアクセスされる前記ユーザの前記プログラム・コードに関する情報を取り扱うプログラム的イベントに少なくとも部分的に基づいて、イベント・メッセージを生成し、
前記イベント・メッセージは、ユーザ・アカウント識別子及び前記仮想計算システム上のプログラム・コードの実行のために使用可能なイベント・メタデータを少なくとも含み、
前記イベント・メッセージを前記仮想計算システムに提供する
ことを含む、コンピュータによる実施方法。
【0095】
13.前記イベント・トリガリング・サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、条項12に記載の前記コンピュータによる実施方法。
【0096】
14.前記仮想計算システムが、第2の時点に前記プログラム・コードの実行を開始するように構成され、前記第1の時点と前記第2の時点との間の差として決定される時間幅は所定の継続時間より短い、条項12に記載の前記コンピュータによる実施方法。
【0097】
15.前記イベント・メッセージが、前記仮想計算システムからの要求に応答して前記仮想計算システムに直接提供される、条項14に記載の前記コンピュータによる実施方法。
【0098】
16.前記イベント・メッセージが、中間メッセージ・キューによって前記仮想計算システムに間接的に提供される、条項12に記載の前記コンピュータによる実施方法。
【0099】
17.1つ以上のコンピューティング・デバイスによって実行されると、
第1の時点で補助サービス上のイベントを検出し、前記イベントは仮想計算システム上のユーザのプログラム・コードの実行をトリガするように指示され、
前記イベントの検出に応答して、前記ユーザの前記プログラム・コードに関する情報を取り扱うイベントに少なくとも部分的に基づいて、イベント・メッセージを生成し、
前記イベントは電子データ記憶からアクセスされた情報を取り扱い、前記イベント・メッセージは、少なくともアカウント識別子及び前記仮想計算システム上のプログラム・コードの実行のためのイベント・メタデータを含み、前記イベント・メタデータは、前記実行するプログラム・コードの関数及び前記関数に対する1つ以上の入力パラメータを決定するために、前記仮想計算システムによって使用可能なデータを含み、
前記仮想計算システム上の前記プログラム・コードの実行のために前記イベント・メッセージを提供し、前記仮想計算システムは、第2の時点に前記プログラム・コードの実行を開始するように構成され、前記第1の時点と前記第2の時点との間の差として決定される時間幅は所定の継続時間より短いものである
ことを含む操作を実行するように、前記1つ以上のコンピューティング・デバイスを構成する、コンピュータ実行可能命令を記憶する、コンピュータ可読の非一時的記憶媒体。
【0100】
18.前記補助サービスが、前記仮想計算システムから分離した個別のサード・パーティ・コンピューティング・システムによって提供される、条項17に記載の前記コンピュータ可読の非一時的記憶媒体。
【0101】
19.前記補助サービスがリモート・ストレージ・サービスであり、前記イベントが前記リモート・ストレージ・システム上のデータ・ファイル・アップロード・イベントであり、前記実行するプログラム・コードの前記関数が、前記リモート・ストレージ・システム上の前記データ・ファイル・アップロード・イベントの検出に応答して実行されるように指示された、ファイル・アップロード・イベント・ハンドラである、条項17に記載の前記コンピュータ可読の非一時的記憶媒体。
【0102】
20.前記イベント・メタデータが、実行する前記プログラムの前記関数に関するイベント・メッセージを処理するために、前記補助サービス及び前記仮想計算システムの両方によって使用される共有スキーマに従ってフォーマットされる、条項17に記載の前記コンピュータ可読の非一時的記憶媒体。
図1
図2
図3
図4