同時(shí)提交的申請(qǐng)的交叉引用
本申請(qǐng)的申請(qǐng)人于2014年9月30日同時(shí)提交以下美國(guó)專(zhuān)利申請(qǐng):
上文引用的申請(qǐng)的公開(kāi)內(nèi)容特此以引用的方式整體并入本文。
背景
一般來(lái)說(shuō),計(jì)算裝置利用通信網(wǎng)絡(luò)或一系列通信網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。公司和組織操作互連許多計(jì)算裝置的計(jì)算機(jī)網(wǎng)絡(luò)來(lái)支持操作或者向第三方提供服務(wù)。計(jì)算系統(tǒng)可以位于單一地理位置或者位于多個(gè)不同地理位置中(例如,通過(guò)私有或公共通信網(wǎng)絡(luò)互連)。具體地,數(shù)據(jù)中心或數(shù)據(jù)處理中心(在本文中總體稱(chēng)之為“數(shù)據(jù)中心”)可以包括多個(gè)互連的計(jì)算系統(tǒng)以向數(shù)據(jù)中心的用戶(hù)提供計(jì)算資源。數(shù)據(jù)中心可以是以某一組織的名義操作的私有數(shù)據(jù)中心或以公眾的名義或者為了公眾的利益操作的公共數(shù)據(jù)中心。
為了促進(jìn)數(shù)據(jù)中心資源的加大利用,虛擬化技術(shù)可允許單一物理計(jì)算裝置托管虛擬機(jī)的一個(gè)或多個(gè)實(shí)例,所述虛擬機(jī)作為獨(dú)立計(jì)算裝置向數(shù)據(jù)中心的用戶(hù)展現(xiàn)并操作。利用虛擬化,單一物理計(jì)算裝置可以動(dòng)態(tài)方式創(chuàng)建、維護(hù)、刪除或以其他方式管理虛擬機(jī)。進(jìn)而,用戶(hù)可以從數(shù)據(jù)中心請(qǐng)求計(jì)算機(jī)資源,包括單一計(jì)算裝置或聯(lián)網(wǎng)計(jì)算裝置配置,并且可以被提供變化數(shù)量的虛擬機(jī)資源。
在一些情景中,虛擬機(jī)實(shí)例可根據(jù)許多虛擬機(jī)實(shí)例類(lèi)型而被配置來(lái)提供特定功能性。例如,各種計(jì)算裝置可以與操作系統(tǒng)或操作系統(tǒng)配置、虛擬的硬件資源和軟件應(yīng)用的不同組合相關(guān)聯(lián),以使得計(jì)算裝置能夠提供不同的所需功能性,或者更高效地提供類(lèi)似功能性。這些虛擬機(jī)實(shí)例類(lèi)型配置經(jīng)常包含在裝置圖像內(nèi),所述裝置圖像包括包含虛擬機(jī)一旦啟動(dòng)就將運(yùn)行的軟件(例如,os和應(yīng)用以及它們的配置和數(shù)據(jù)文件等)的靜態(tài)數(shù)據(jù)。所述裝置圖像通常存儲(chǔ)在用來(lái)創(chuàng)建或初始化實(shí)例的磁盤(pán)上。因此,計(jì)算裝置可處理裝置圖像以便實(shí)現(xiàn)所需的軟件配置。
附圖簡(jiǎn)述
當(dāng)結(jié)合附圖參考以下詳細(xì)描述時(shí),可更容易地理解本公開(kāi)案的上述方面和許多伴隨的優(yōu)點(diǎn),因此將更易于了解所述方面和優(yōu)點(diǎn),附圖中:
圖1是描繪用于處理針對(duì)在虛擬計(jì)算系統(tǒng)中執(zhí)行程序代碼的用戶(hù)請(qǐng)求的事件消息的說(shuō)明性環(huán)境的塊圖;
圖2描繪提供虛擬計(jì)算系統(tǒng)的前端以用于處理針對(duì)執(zhí)行程序代碼的用戶(hù)請(qǐng)求的事件消息的計(jì)算裝置的總體架構(gòu);
圖3是示出根據(jù)示例性方面的由與虛擬計(jì)算系統(tǒng)的前端通信的輔助系統(tǒng)實(shí)現(xiàn)的事件通知和消息生成例程的流程圖;
圖4是示出根據(jù)另一個(gè)示例性方面的由虛擬計(jì)算系統(tǒng)的前端實(shí)現(xiàn)的事件消息處理例程的流程圖;以及
詳細(xì)描述
公司和組織不再需要獲得和管理他們自己的數(shù)據(jù)中心以便執(zhí)行計(jì)算操作(例如,執(zhí)行代碼,包括線程、程序、軟件、例程、子例程、進(jìn)程等)。隨著云計(jì)算的出現(xiàn),傳統(tǒng)地由硬件計(jì)算裝置提供的存儲(chǔ)空間和計(jì)算能力現(xiàn)可通過(guò)互聯(lián)網(wǎng)在幾分鐘內(nèi)被得到和配置。因此,開(kāi)發(fā)者可快速地購(gòu)買(mǎi)希望數(shù)量的計(jì)算資源而無(wú)需擔(dān)心獲得物理機(jī)。這類(lèi)計(jì)算資源通常以虛擬計(jì)算資源或虛擬機(jī)實(shí)例的形式被購(gòu)買(mǎi)??梢耘c物理計(jì)算機(jī)相同的方式利用托管在具有其自己的操作系統(tǒng)和其他軟件部件的物理計(jì)算裝置上的虛擬機(jī)的這些實(shí)例。
然而,即使當(dāng)虛擬計(jì)算資源被購(gòu)買(mǎi)時(shí),開(kāi)發(fā)者仍必須決定購(gòu)買(mǎi)多少虛擬機(jī)實(shí)例和購(gòu)買(mǎi)何種類(lèi)型的虛擬機(jī)實(shí)例以及保持它們多久。例如,使用虛擬機(jī)實(shí)例的成本可取決于它們被租賃的類(lèi)型和小時(shí)數(shù)而變。此外,虛擬機(jī)可被租賃的最小時(shí)間通常大約為幾個(gè)小時(shí)。另外,開(kāi)發(fā)者必須指定硬件和軟件資源(例如,操作系統(tǒng)的類(lèi)型和語(yǔ)言運(yùn)行時(shí)等)來(lái)安裝在虛擬機(jī)上。其他考慮在于它們可能已經(jīng)包括過(guò)度利用(例如,獲得太少計(jì)算資源并且遭受性能問(wèn)題)、利用不足(例如,獲得比需要運(yùn)行代碼更多的計(jì)算資源并且因此支付過(guò)多)、流量變化的預(yù)測(cè)(例如,使得它們知道何時(shí)增大或縮小),以及實(shí)例和語(yǔ)言運(yùn)行時(shí)啟動(dòng)延遲(其可能花費(fèi)3-10分鐘或更長(zhǎng),即使用戶(hù)可能需要大約幾秒或甚至幾毫秒的計(jì)算能力)。因此,需要允許用戶(hù)利用由服務(wù)提供商提供的虛擬機(jī)實(shí)例的改進(jìn)的方法。
根據(jù)本公開(kāi)的方面,通過(guò)維持一旦接收到用戶(hù)請(qǐng)求就準(zhǔn)備使用的預(yù)初始化虛擬機(jī)實(shí)例的池,可顯著地減少與執(zhí)行用戶(hù)代碼(例如,實(shí)例和語(yǔ)言運(yùn)行時(shí)啟動(dòng)時(shí)間)相關(guān)聯(lián)的延遲(有時(shí)被稱(chēng)為等待時(shí)間)。
一般來(lái)說(shuō),本公開(kāi)的方面涉及對(duì)虛擬計(jì)算機(jī)實(shí)例和在其中創(chuàng)建的容器的管理。具體地,公開(kāi)了促進(jìn)對(duì)虛擬計(jì)算系統(tǒng)中虛擬機(jī)實(shí)例的管理的系統(tǒng)和方法。虛擬計(jì)算系統(tǒng)維持具有加載在其上的一個(gè)或多個(gè)軟件部件(例如,操作系統(tǒng)、語(yǔ)言運(yùn)行時(shí)、庫(kù)等)的虛擬機(jī)實(shí)例的池??芍付ǔ刂械奶摂M機(jī)實(shí)例來(lái)服務(wù)執(zhí)行程序代碼的用戶(hù)請(qǐng)求。程序代碼可在創(chuàng)建于虛擬機(jī)實(shí)例上的隔離容器中執(zhí)行。由于當(dāng)接收請(qǐng)求時(shí),池中的虛擬機(jī)實(shí)例已經(jīng)被起動(dòng)并加載有特定操作系統(tǒng)和語(yǔ)言運(yùn)行時(shí),與查找可處置請(qǐng)求(例如,通過(guò)在虛擬機(jī)實(shí)例上創(chuàng)建的一個(gè)或多個(gè)容器中執(zhí)行用戶(hù)代碼)的計(jì)算能力相關(guān)聯(lián)的延遲顯著地減少。
在某些實(shí)施方案中,提供消息隊(duì)列、消息總線或任何其他消息中間服務(wù)以促進(jìn)在第一程序性環(huán)境中(例如,在輔助服務(wù)處)生成的事件消息到由本文描述的虛擬計(jì)算系統(tǒng)提供的程序性環(huán)境的輸送或通信。為了進(jìn)一步促進(jìn)觸發(fā)事件從第一程序性環(huán)境傳播和輸送到虛擬計(jì)算系統(tǒng),可生成包括描述觸發(fā)事件的信息、與響應(yīng)于觸發(fā)事件而執(zhí)行用戶(hù)代碼的請(qǐng)求相關(guān)聯(lián)的用戶(hù)以及用來(lái)使虛擬計(jì)算系統(tǒng)能夠?qū)⑹录⑥D(zhuǎn)換成用于由虛擬計(jì)算系統(tǒng)進(jìn)一步處理的用戶(hù)請(qǐng)求的程序性信息的事件消息。事件消息和/或包含在其中的程序性信息可根據(jù)模式、代碼模型或應(yīng)用編程接口(“api”)進(jìn)行結(jié)構(gòu)化以促進(jìn)事件消息在輔助服務(wù)處的創(chuàng)建/生成和事件消息在虛擬計(jì)算系統(tǒng)處的轉(zhuǎn)換/處理兩者。
在另一方面,虛擬計(jì)算系統(tǒng)可維持一個(gè)或多個(gè)物理計(jì)算裝置上的虛擬機(jī)實(shí)例的池,其中每個(gè)虛擬機(jī)實(shí)例具有加載在其上的一個(gè)或多個(gè)軟件部件。當(dāng)虛擬計(jì)算系統(tǒng)接收?qǐng)?zhí)行用戶(hù)程序代碼的請(qǐng)求時(shí)(所述請(qǐng)求指定用于執(zhí)行用戶(hù)的程序代碼的一個(gè)或多個(gè)計(jì)算約束條件),所述虛擬計(jì)算系統(tǒng)可基于由所述請(qǐng)求指定的一個(gè)或多個(gè)計(jì)算約束條件來(lái)選擇用于執(zhí)行用戶(hù)程序代碼的虛擬機(jī)實(shí)例并且致使用戶(hù)的程序代碼在選擇的虛擬機(jī)實(shí)例上執(zhí)行。
由本文所述的系統(tǒng)和方法提供的一個(gè)益處在于在輔助服務(wù)上觸發(fā)的事件與在各個(gè)虛擬機(jī)實(shí)例上對(duì)應(yīng)執(zhí)行用戶(hù)代碼之間進(jìn)行隱含和自動(dòng)速率匹配和縮放。因此,虛擬計(jì)算系統(tǒng)能夠按需響應(yīng)于事件,不論所述事件是被不頻繁地(例如,每天一次)觸發(fā)還是被大規(guī)模地(例如,每秒幾百次或幾千次)觸發(fā)。
現(xiàn)將參考附圖描述本公開(kāi)的特定實(shí)施方案和示例性應(yīng)用。這些實(shí)施方案和示例性應(yīng)用意圖示出但不限制本公開(kāi)。
參考圖1,將描述示出虛擬環(huán)境100的實(shí)施方案的塊圖。圖1中所示的實(shí)例包括虛擬環(huán)境100,在所述虛擬環(huán)境100中用戶(hù)計(jì)算裝置102的用戶(hù)(例如,開(kāi)發(fā)者等)可使用由虛擬計(jì)算系統(tǒng)110提供的虛擬計(jì)算資源運(yùn)行各種程序代碼。
通過(guò)示例的方式,各種示例性用戶(hù)計(jì)算裝置102被示出與虛擬計(jì)算系統(tǒng)110通信,所述示例性用戶(hù)計(jì)算裝置102包括臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)和移動(dòng)電話。通常,用戶(hù)計(jì)算裝置102可以是諸如臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、移動(dòng)電話(或智能電話)、平板、信息亭、無(wú)線裝置及其他電子裝置的任何計(jì)算裝置。此外,用戶(hù)計(jì)算裝置102可包括在相同或不同數(shù)據(jù)中心上運(yùn)行的web服務(wù),在所述相同或不同數(shù)據(jù)中心中例如不同web服務(wù)可程序性地與彼此通信以執(zhí)行本文所述的一種或多種技術(shù)。另外,用戶(hù)計(jì)算裝置102可包括物聯(lián)網(wǎng)(iot)裝置,諸如互聯(lián)網(wǎng)器件及連接的裝置。虛擬計(jì)算系統(tǒng)110可向用戶(hù)計(jì)算裝置102提供一個(gè)或多個(gè)用戶(hù)接口、命令行接口(cli)、應(yīng)用編程接口(api)和/或其他程序性接口以用于生成和上傳用戶(hù)代碼、調(diào)取用戶(hù)代碼(例如,提交在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼的請(qǐng)求)、調(diào)度基于事件的作業(yè)或定時(shí)作業(yè)、追蹤用戶(hù)代碼和/或查看與其請(qǐng)求和/或用戶(hù)代碼相關(guān)的其他記錄或監(jiān)測(cè)信息。盡管一個(gè)或多個(gè)實(shí)施方案可在本文中被描述為使用用戶(hù)接口,但應(yīng)認(rèn)識(shí)到,另外或可替代地,這類(lèi)實(shí)施方案可使用任何cli、api或其他程序性接口。
用戶(hù)計(jì)算裝置102通過(guò)網(wǎng)絡(luò)104訪問(wèn)虛擬計(jì)算系統(tǒng)110。網(wǎng)絡(luò)104可以是任意有線網(wǎng)絡(luò)、無(wú)線網(wǎng)絡(luò)或其組合。此外,網(wǎng)絡(luò)104可以是個(gè)人區(qū)域網(wǎng)、局域網(wǎng)、廣域網(wǎng)、空中廣播網(wǎng)絡(luò)(例如,用于無(wú)線電或電視)、電纜網(wǎng)絡(luò)、衛(wèi)星網(wǎng)絡(luò)、蜂窩電話網(wǎng)絡(luò)或其組合。例如,網(wǎng)絡(luò)104可以是鏈接網(wǎng)絡(luò)中的公共可訪問(wèn)網(wǎng)絡(luò)并且可能由各個(gè)不同方操作,諸如互聯(lián)網(wǎng)。在一些實(shí)施方案中,網(wǎng)絡(luò)104可以是私有或半私有網(wǎng)絡(luò),諸如企業(yè)或大學(xué)內(nèi)部網(wǎng)。網(wǎng)絡(luò)104可包括一個(gè)或多個(gè)無(wú)線網(wǎng)絡(luò),諸如全球移動(dòng)通信系統(tǒng)(gsm)網(wǎng)絡(luò)、碼分多址(cdma)網(wǎng)絡(luò)、長(zhǎng)期演進(jìn)(lte)網(wǎng)絡(luò)或任意其他類(lèi)型的無(wú)線網(wǎng)絡(luò)。網(wǎng)絡(luò)104可使用用于通過(guò)互聯(lián)網(wǎng)或任何其他前述類(lèi)型網(wǎng)絡(luò)中的任一種通信的協(xié)議和部件。例如,由網(wǎng)絡(luò)104使用的協(xié)議可包括超文本傳輸協(xié)議(http)、http安全(https)、消息隊(duì)列遙測(cè)傳輸(mqtt)、受限制的應(yīng)用協(xié)議(coap)等。用于通過(guò)互聯(lián)網(wǎng)或任何其他前述類(lèi)型的通信網(wǎng)絡(luò)進(jìn)行通信的協(xié)議和部件對(duì)于本領(lǐng)域中的技術(shù)人員來(lái)說(shuō)是眾所周知的,并且因此在本文中不進(jìn)行更詳細(xì)地描述。
虛擬計(jì)算系統(tǒng)110在圖1中被描繪為在包括使用一個(gè)或多個(gè)計(jì)算機(jī)網(wǎng)絡(luò)互連的若干計(jì)算機(jī)系統(tǒng)的分布式計(jì)算環(huán)境中操作。虛擬計(jì)算系統(tǒng)110還可在具有比圖1中示出的更少或更多數(shù)量的裝置的計(jì)算環(huán)境內(nèi)操作。因此,對(duì)圖1中的虛擬計(jì)算系統(tǒng)110的描繪本質(zhì)上應(yīng)視為說(shuō)明性的,并且不對(duì)本公開(kāi)進(jìn)行限制。例如,虛擬計(jì)算系統(tǒng)110或其各種組成可實(shí)現(xiàn)各種web服務(wù)部件、托管式或“云”計(jì)算環(huán)境和/或?qū)Φ染W(wǎng)絡(luò)配置以實(shí)現(xiàn)本文所述的進(jìn)程的至少一部分。
另外,虛擬計(jì)算系統(tǒng)110可以硬件和/或軟件實(shí)現(xiàn),并且例如可包括在被配置來(lái)執(zhí)行計(jì)算機(jī)可執(zhí)行指令以用于執(zhí)行將在本文所述的各種特征的物理計(jì)算機(jī)硬件上實(shí)現(xiàn)的一個(gè)或多個(gè)物理或虛擬服務(wù)器。所述一個(gè)或多個(gè)服務(wù)器可例如在一個(gè)或多個(gè)數(shù)據(jù)中心中在地理上是分散的或在地理上協(xié)同定位的。
在圖1中示出的環(huán)境中,虛擬環(huán)境100包括虛擬計(jì)算系統(tǒng)110,所述虛擬計(jì)算系統(tǒng)110包括前端120、加熱池管理器130和工作站管理器140。在描述的實(shí)例中,虛擬機(jī)實(shí)例(“實(shí)例”)152、154被示出處于由加熱池管理器130管理的加熱池130a中,并且實(shí)例156、158被示出處于由工作站管理器140管理的活動(dòng)池140a中。虛擬計(jì)算系統(tǒng)110內(nèi)的各種部件的說(shuō)明本質(zhì)上是邏輯的并且部件中的一個(gè)或多個(gè)可由單一計(jì)算裝置或多個(gè)計(jì)算裝置實(shí)現(xiàn)。例如,實(shí)例152、154、156、158可在一個(gè)或多個(gè)不同物理計(jì)算裝置上在不同的各種地理區(qū)域中實(shí)現(xiàn)。類(lèi)似地,前端120、加熱池管理器130和工作站管理器140中的每一個(gè)可在多個(gè)物理計(jì)算裝置上實(shí)現(xiàn)??商娲兀岸?20、加熱池管理器130和工作站管理器140中的一個(gè)或多個(gè)可在單一物理計(jì)算裝置上實(shí)現(xiàn)。在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110可包括多個(gè)前端、多個(gè)加熱池管理器和/或多個(gè)工作站管理器。盡管在圖1的實(shí)例中示出四個(gè)虛擬機(jī)實(shí)例,但是本文所述的實(shí)施方案不限于如此,并且本領(lǐng)域中的技術(shù)人員將認(rèn)識(shí)到,虛擬計(jì)算系統(tǒng)110可包括使用任意數(shù)量的物理計(jì)算裝置實(shí)現(xiàn)的任意數(shù)量的虛擬機(jī)實(shí)例。類(lèi)似地,盡管在圖1的實(shí)例中示出單一加熱池和單一活動(dòng)池,但是本文所述的實(shí)施方案不限于如此,并且本領(lǐng)域中的技術(shù)人員將認(rèn)識(shí)到,虛擬計(jì)算系統(tǒng)110可包括任意數(shù)量的加熱池和活動(dòng)池。
在圖1的實(shí)例中,虛擬計(jì)算系統(tǒng)110被示出為連接到網(wǎng)絡(luò)104。在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110內(nèi)的部件中的任一個(gè)可通過(guò)網(wǎng)絡(luò)104與虛擬環(huán)境100的其他部件(例如,用戶(hù)計(jì)算裝置102和輔助服務(wù)106,所述輔助服務(wù)106可包括監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107、存儲(chǔ)服務(wù)108、實(shí)例供應(yīng)服務(wù)109、消息隊(duì)列服務(wù)105和/或可與虛擬計(jì)算系統(tǒng)110通信的其他服務(wù))通信。在其他實(shí)施方案中,不是虛擬計(jì)算系統(tǒng)110的所有部件都能夠與虛擬環(huán)境100的其他部件通信。在一個(gè)實(shí)例中,僅前端120可連接到網(wǎng)絡(luò)104,并且虛擬計(jì)算系統(tǒng)110的其他部件可通過(guò)前端120與虛擬環(huán)境100a的其他部件通信。在一些實(shí)施方案中,輔助服務(wù)106中的任一個(gè)可被配置來(lái)作為事件觸發(fā)服務(wù)106a操作,以便收聽(tīng)由輔助服務(wù)的用戶(hù)指定的事件并且觸發(fā)生成事件消息以用于由虛擬計(jì)算系統(tǒng)110處理,如本文中更加詳細(xì)所述。因此例如,存儲(chǔ)裝置108可被配置來(lái)作為事件觸發(fā)服務(wù)106a操作,以便提供當(dāng)事件發(fā)生在存儲(chǔ)裝置108上時(shí)響應(yīng)于所述事件而在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼的能力。
在一個(gè)實(shí)施方案中,所述一個(gè)或多個(gè)輔助服務(wù)106可被注冊(cè)或被配置來(lái)輪詢(xún)或查詢(xún)事件以觸發(fā)在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼。這類(lèi)注冊(cè)或配置可通過(guò)被提供給用戶(hù)計(jì)算裝置102的一個(gè)或多個(gè)用戶(hù)接口而被提供或啟用。例如,用戶(hù)接口可向用戶(hù)提供將輔助服務(wù)106選擇或指定為事件觸發(fā)服務(wù)106a的選項(xiàng),使得事件觸發(fā)服務(wù)106a上的事件可觸發(fā)生成事件消息,或使得事件觸發(fā)服務(wù)106a可諸如由中間輪詢(xún)系統(tǒng)定期地輪詢(xún)或查詢(xún)事件。
在一個(gè)實(shí)施方案中,事件觸發(fā)服務(wù)106a可被配置來(lái)使事件或事件類(lèi)型與將要在虛擬計(jì)算系統(tǒng)110上執(zhí)行的特定程序代碼相關(guān)聯(lián)(也就是說(shuō),事件觸發(fā)服務(wù)106a可存儲(chǔ)或訪問(wèn)使事件與特定程序代碼相關(guān)聯(lián)的數(shù)據(jù))。在另一個(gè)實(shí)施方案中,事件觸發(fā)服務(wù)106a可能不必使事件或事件類(lèi)型與將要在虛擬計(jì)算系統(tǒng)110上執(zhí)行的特定程序代碼相關(guān)聯(lián),而是事件觸發(fā)服務(wù)106a可生成虛擬計(jì)算系統(tǒng)110被配置來(lái)解譯為與將要在虛擬計(jì)算系統(tǒng)110上執(zhí)行的程序代碼相關(guān)聯(lián)(也就是說(shuō),虛擬計(jì)算系統(tǒng)110可存儲(chǔ)或訪問(wèn)使事件與特定程序代碼相關(guān)聯(lián)的數(shù)據(jù))的事件消息,在另一個(gè)實(shí)施方案中,中間系統(tǒng)或服務(wù)可被配置來(lái)處置執(zhí)行程序代碼的事件消息的解譯和路由,使得事件觸發(fā)服務(wù)106a和虛擬計(jì)算系統(tǒng)110都不能存儲(chǔ)或訪問(wèn)事件到程序代碼相關(guān)聯(lián)數(shù)據(jù)。例如,事件觸發(fā)服務(wù)106a可生成對(duì)將要執(zhí)行的任何特定程序代碼是不可知的事件消息;并且可將所述事件消息路由至虛擬計(jì)算系統(tǒng)110(或中間系統(tǒng)),所述虛擬計(jì)算系統(tǒng)110(或中間系統(tǒng))評(píng)估所述事件消息和相關(guān)聯(lián)的元數(shù)據(jù)以作為響應(yīng)確定執(zhí)行哪個(gè)程序代碼和發(fā)起執(zhí)行程序代碼的對(duì)應(yīng)請(qǐng)求。
如上文所提及,輔助服務(wù)106中的任一個(gè)可被配置來(lái)作為事件觸發(fā)服務(wù)106a操作。這些包括但不限于:遠(yuǎn)程存儲(chǔ)系統(tǒng);數(shù)據(jù)庫(kù)系統(tǒng);消息隊(duì)列系統(tǒng)(例如,由虛擬計(jì)算系統(tǒng)110提供的消息隊(duì)列服務(wù)、由獨(dú)立于虛擬計(jì)算系統(tǒng)110的用戶(hù)或客戶(hù)端擁有和/或操作的消息隊(duì)列系統(tǒng)等等);web服務(wù);審計(jì)服務(wù);健康監(jiān)測(cè)服務(wù)(例如,用于監(jiān)測(cè)虛擬計(jì)算系統(tǒng)的健康狀態(tài));記錄服務(wù);計(jì)費(fèi)服務(wù);資源管理系統(tǒng)和服務(wù)(例如,用于管理虛擬計(jì)算環(huán)境等的生命周期和/或所有權(quán));等等。
用戶(hù)可使用虛擬計(jì)算系統(tǒng)110來(lái)執(zhí)行其上的用戶(hù)代碼。例如,用戶(hù)可能希望結(jié)合用戶(hù)已經(jīng)開(kāi)發(fā)的web或移動(dòng)應(yīng)用運(yùn)行一段代碼。運(yùn)行代碼的一種方法是從將提供基礎(chǔ)設(shè)施作為服務(wù)的服務(wù)提供商獲得虛擬機(jī)實(shí)例,配置虛擬機(jī)實(shí)例來(lái)滿足用戶(hù)需求并且使用已配置的虛擬機(jī)實(shí)例來(lái)運(yùn)行代碼??商娲?,用戶(hù)可向虛擬計(jì)算系統(tǒng)110發(fā)送代碼執(zhí)行請(qǐng)求。虛擬計(jì)算系統(tǒng)110可基于代碼執(zhí)行請(qǐng)求處置計(jì)算能力(例如,在下文更加詳細(xì)描述的容器、實(shí)例等)的獲得和配置,并且使用所述計(jì)算能力執(zhí)行代碼。虛擬計(jì)算系統(tǒng)110可基于體積而自動(dòng)地增大和縮小,由此減輕用戶(hù)必須擔(dān)憂過(guò)度利用(例如,獲得太少計(jì)算資源并且遭受性能問(wèn)題)或利用不足(例如,獲得比需要運(yùn)行代碼更多的計(jì)算資源并且由此支付過(guò)多)的負(fù)擔(dān)。
前端120接收并處理所有請(qǐng)求(有時(shí)呈事件消息的形式)以在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼。在一個(gè)實(shí)施方案中,前端120充當(dāng)?shù)接商摂M計(jì)算系統(tǒng)110提供的所有其他服務(wù)的前門(mén)。前端120處理請(qǐng)求并且確保請(qǐng)求被適當(dāng)?shù)厥跈?quán)。例如,前端120可確定與請(qǐng)求相關(guān)聯(lián)的用戶(hù)是否被授權(quán)訪問(wèn)請(qǐng)求中指定的用戶(hù)代碼。
如本文使用的用戶(hù)代碼可指代寫(xiě)入特定程序語(yǔ)言的任何程序代碼(例如,程序、例程、子例程、線程等)。在本公開(kāi)中,術(shù)語(yǔ)“代碼”、“用戶(hù)代碼”和“程序代碼”可互換使用。這類(lèi)用戶(hù)代碼可被執(zhí)行來(lái)例如結(jié)合由用戶(hù)開(kāi)發(fā)的特定web應(yīng)用或移動(dòng)應(yīng)用實(shí)現(xiàn)指定任務(wù)。例如,可將用戶(hù)代碼寫(xiě)入javascript(node.js)、java、python和/或ruby中。所述請(qǐng)求可包括用戶(hù)代碼(或其位置)以及將要被用來(lái)執(zhí)行用戶(hù)代碼的一個(gè)或多個(gè)自變量。例如,用戶(hù)可提供用戶(hù)代碼以及執(zhí)行用戶(hù)代碼的請(qǐng)求。在另一個(gè)實(shí)例中,請(qǐng)求可根據(jù)先前上傳的程序代碼的名稱(chēng)或所述代碼的唯一id識(shí)別所述先前上傳的程序代碼(例如,使用用于上傳代碼的api)。在又一個(gè)實(shí)例中,代碼可在請(qǐng)求被虛擬計(jì)算系統(tǒng)110接收之前被包括在請(qǐng)求中以及上傳到單獨(dú)位置(例如,存儲(chǔ)服務(wù)108或在虛擬計(jì)算系統(tǒng)110內(nèi)部的存儲(chǔ)系統(tǒng))中。虛擬計(jì)算系統(tǒng)110可基于請(qǐng)求被處理時(shí)代碼可用的情況來(lái)使代碼執(zhí)行策略變化。
前端120可響應(yīng)于來(lái)自用戶(hù)的超文本傳輸協(xié)議安全(https)請(qǐng)求接收?qǐng)?zhí)行這類(lèi)用戶(hù)代碼的請(qǐng)求。而且,當(dāng)執(zhí)行用戶(hù)代碼時(shí)也可處理和利用包括在https請(qǐng)求中的任何信息(例如,報(bào)頭和參數(shù))。如上文所述,任何其他協(xié)議(例如包括http、mqtt和coap)可用來(lái)向前端120傳輸包含代碼執(zhí)行請(qǐng)求的消息。當(dāng)檢測(cè)到事件(諸如用戶(hù)已經(jīng)注冊(cè)來(lái)觸發(fā)自動(dòng)請(qǐng)求生成的事件)時(shí),前端120也可接收?qǐng)?zhí)行這類(lèi)用戶(hù)代碼的請(qǐng)求。例如,用戶(hù)可通過(guò)用輔助服務(wù)106注冊(cè)用戶(hù)代碼并且指定無(wú)論特定事件(例如,上傳新文件)何時(shí)發(fā)生,都將執(zhí)行用戶(hù)代碼的請(qǐng)求發(fā)送至前端120來(lái)配置輔助服務(wù)106以作為事件觸發(fā)服務(wù)106a操作。可替代地,用戶(hù)可注冊(cè)定時(shí)作業(yè)(例如,每24小時(shí)執(zhí)行用戶(hù)代碼)。在這種實(shí)例中,當(dāng)調(diào)度時(shí)間到達(dá)定時(shí)作業(yè)時(shí),可將執(zhí)行用戶(hù)代碼的請(qǐng)求發(fā)送至前端120。定時(shí)或調(diào)度作業(yè)可使用本公開(kāi)的技術(shù)來(lái)實(shí)現(xiàn)以例如使所述作業(yè)模仿為由定時(shí)器服務(wù)生成的事件。例如,定時(shí)器服務(wù)可生成指示現(xiàn)在是時(shí)候運(yùn)行用戶(hù)代碼的事件消息,并且虛擬計(jì)算系統(tǒng)110可通過(guò)利用定時(shí)器服務(wù)提醒虛擬計(jì)算系統(tǒng)110運(yùn)行用戶(hù)代碼來(lái)在某個(gè)時(shí)間處實(shí)現(xiàn)運(yùn)行代碼的進(jìn)程。在又一個(gè)實(shí)例中,前端120可包括或訪問(wèn)進(jìn)入的代碼執(zhí)行請(qǐng)求的隊(duì)列,并且當(dāng)將用戶(hù)的批作業(yè)從虛擬計(jì)算系統(tǒng)的工作隊(duì)列移除時(shí),前端120可處理用戶(hù)請(qǐng)求。在又一個(gè)實(shí)例中,請(qǐng)求可源自虛擬計(jì)算系統(tǒng)110或圖1中未示出的其他服務(wù)器或服務(wù)內(nèi)的另一個(gè)部件。
在又一個(gè)實(shí)例中,請(qǐng)求可源自虛擬計(jì)算系統(tǒng)110或圖1中未示出的其他服務(wù)器或服務(wù)內(nèi)的另一個(gè)部件。在一些實(shí)施方案中,可響應(yīng)于與用戶(hù)計(jì)算裝置102或輔助服務(wù)106相關(guān)聯(lián)的事件而生成執(zhí)行/激活用戶(hù)代碼的請(qǐng)求。例如,響應(yīng)于最終用戶(hù)將新圖像從用戶(hù)計(jì)算裝置上傳到被配置來(lái)作為事件觸發(fā)服務(wù)106a操作的輔助服務(wù)(諸如存儲(chǔ)服務(wù)108),事件觸發(fā)服務(wù)106a可觸發(fā)執(zhí)行/激活代碼的請(qǐng)求以生成圖像的縮略圖。所述代碼可托管在活動(dòng)池120中或從存儲(chǔ)服務(wù)存儲(chǔ)服務(wù)108下載到虛擬計(jì)算系統(tǒng)110。
在上文和整個(gè)本公開(kāi)所述的實(shí)例中的任一個(gè)中,表示執(zhí)行用戶(hù)代碼的請(qǐng)求的事件消息可初始地由消息隊(duì)列服務(wù)105接收并且提供給消息隊(duì)列或置于消息隊(duì)列中。消息隊(duì)列服務(wù)105可實(shí)現(xiàn)為輔助服務(wù)106的部件或不同部件。在某些實(shí)施方案中,前端120可定期地輪詢(xún)消息隊(duì)列服務(wù)105以識(shí)別和檢索事件消息以供處理。諸如響應(yīng)于當(dāng)檢測(cè)到用戶(hù)已經(jīng)注冊(cè)以觸發(fā)自動(dòng)生成執(zhí)行用戶(hù)代碼的請(qǐng)求的事件時(shí),消息事件可例如由消息隊(duì)列服務(wù)105置于消息隊(duì)列中。在一些情況下,檢測(cè)這類(lèi)事件,觸發(fā)生成事件消息并且將所述事件消息提供給消息隊(duì)列服務(wù)105可能是令人希望的或更加實(shí)際的。例如,取決于實(shí)施方案,消息隊(duì)列服務(wù)105可被配置來(lái)允許對(duì)消息事件排序,使得某些消息事件可接收較高的優(yōu)先級(jí)。在另一個(gè)實(shí)例中,消息隊(duì)列服務(wù)105可具體地或特別地被配置來(lái)促進(jìn)某些類(lèi)型的程序性事件(諸如數(shù)據(jù)庫(kù)操作)、適于批處理的某些類(lèi)型的數(shù)據(jù)等的輸送。在一個(gè)實(shí)施方案中,消息隊(duì)列服務(wù)105可被配置來(lái)提供消息(例如,作為切分?jǐn)?shù)據(jù)集)的流式傳輸和/或排序輸送。前端120然后可輪詢(xún)消息隊(duì)列服務(wù)105并且檢索事件消息以用于進(jìn)一步由虛擬計(jì)算系統(tǒng)110處理。
在另一個(gè)實(shí)施方案中,替代消息隊(duì)列服務(wù)105或與消息隊(duì)列服務(wù)105組合使用,前端120可諸如通過(guò)調(diào)取由事件觸發(fā)服務(wù)106a提供的api查詢(xún)事件觸發(fā)服務(wù)106a以直接請(qǐng)求和接收事件消息以供進(jìn)一步處理。在另一個(gè)實(shí)施方案中,事件觸發(fā)服務(wù)106a可通過(guò)一個(gè)或多個(gè)api和函數(shù)調(diào)用與前端120直接對(duì)接。例如,當(dāng)檢測(cè)到事件并且生成事件消息時(shí),事件觸發(fā)系統(tǒng)106a可調(diào)取由前端120提供的api以將事件消息直接提供給前端120,而無(wú)需將事件消息提供給消息隊(duì)列服務(wù)105。
用戶(hù)請(qǐng)求可指定一個(gè)或多個(gè)第三方庫(kù)(包括本地庫(kù))與用戶(hù)代碼一起使用。在一個(gè)實(shí)施方案中,用戶(hù)請(qǐng)求包括包含用戶(hù)代碼和任意庫(kù)(和/或其存儲(chǔ)位置的標(biāo)識(shí))的包文件(例如,壓縮文件、zip文件、rar文件等)。在一些實(shí)施方案中,用戶(hù)請(qǐng)求包括指示將要執(zhí)行的程序代碼、寫(xiě)入程序代碼所用的語(yǔ)言、與請(qǐng)求相關(guān)聯(lián)的用戶(hù)和/或被保留用于執(zhí)行程序代碼的計(jì)算資源(例如,存儲(chǔ)器等)的元數(shù)據(jù)。例如,程序代碼可被提供有請(qǐng)求,先前由用戶(hù)上傳,由虛擬計(jì)算系統(tǒng)110(例如,標(biāo)準(zhǔn)例程)提供和/或由第三方提供。在一些實(shí)施方案中,這類(lèi)資源級(jí)約束條件(例如,分配多少存儲(chǔ)器用于執(zhí)行特定用戶(hù)代碼)被指定用于特定用戶(hù)代碼,并且可在每次執(zhí)行用戶(hù)代碼時(shí)變化。在這類(lèi)情況下,虛擬計(jì)算系統(tǒng)110可在接收到每個(gè)單個(gè)請(qǐng)求之前訪問(wèn)這類(lèi)資源級(jí)約束條件,并且所述單個(gè)請(qǐng)求可能不指定這類(lèi)資源級(jí)約束條件。在一些實(shí)施方案中,用戶(hù)請(qǐng)求可指定其他約束條件(諸如何種許可指示請(qǐng)求必須執(zhí)行用戶(hù)代碼的許可數(shù)據(jù))。這類(lèi)許可數(shù)據(jù)可由虛擬計(jì)算系統(tǒng)110用來(lái)(例如,在私有網(wǎng)絡(luò)上)訪問(wèn)私有資源。
在一些實(shí)施方案中,用戶(hù)請(qǐng)求可指定應(yīng)被采用用于處置用戶(hù)請(qǐng)求的行為。在這類(lèi)實(shí)施方案中,用戶(hù)請(qǐng)求可包括用于啟用一個(gè)或多個(gè)執(zhí)行方式的指示符,在所述一個(gè)或多個(gè)執(zhí)行方式中與用戶(hù)請(qǐng)求相關(guān)聯(lián)的用戶(hù)代碼將要被執(zhí)行。例如,請(qǐng)求可包括用于指示用戶(hù)代碼是否應(yīng)在調(diào)試方式中執(zhí)行的標(biāo)志或報(bào)頭,在所述調(diào)試方式中將可結(jié)合執(zhí)行用戶(hù)代碼生成的調(diào)試和/或記錄輸出提供回至用戶(hù)(例如,通過(guò)控制臺(tái)用戶(hù)接口)。在這種實(shí)例中,虛擬計(jì)算系統(tǒng)110可檢查請(qǐng)求并且查看所述標(biāo)志或報(bào)頭,并且如果所述標(biāo)志或報(bào)頭存在,那么虛擬計(jì)算系統(tǒng)110可修改用戶(hù)代碼在其中執(zhí)行的容器的行為(例如,記錄設(shè)施)并且致使輸出數(shù)據(jù)提供回至用戶(hù)。在一些實(shí)施方案中,行為/方式指示符由虛擬計(jì)算系統(tǒng)110提供給用戶(hù)的用戶(hù)接口添加至請(qǐng)求。也可基于請(qǐng)求中提供的指示啟用或禁用其他特征(諸如源代碼分析、遠(yuǎn)程調(diào)試等)。
在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110可包括多個(gè)前端120。在這類(lèi)實(shí)施方案中,可提供負(fù)載平衡器以將進(jìn)入的請(qǐng)求和/或事件消息例如以循環(huán)的方式分布給多個(gè)前端120。
加熱池管理器130確保虛擬機(jī)實(shí)例在虛擬計(jì)算系統(tǒng)110接收請(qǐng)求以在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼時(shí)準(zhǔn)備由工作站管理器140使用。在圖1中示出的實(shí)例中,加熱池管理器130管理加熱池130a,所述加熱池130a是可用來(lái)服務(wù)進(jìn)入的用戶(hù)代碼執(zhí)行請(qǐng)求的預(yù)初始化和預(yù)配置的虛擬機(jī)實(shí)例的群組(有時(shí)被稱(chēng)為池)。在一些實(shí)施方案中,加熱池管理器130致使虛擬機(jī)實(shí)例在虛擬計(jì)算系統(tǒng)110內(nèi)的一個(gè)或多個(gè)物理計(jì)算機(jī)上起動(dòng)并且在接收將在虛擬機(jī)實(shí)例上執(zhí)行的代碼執(zhí)行請(qǐng)求之前被添加至加熱池130a。在其他實(shí)施方案中,加熱池管理器130與輔助虛擬機(jī)實(shí)例服務(wù)(例如,實(shí)例供應(yīng)服務(wù)109)通信以創(chuàng)建加熱池130a并將新的實(shí)例添加至加熱池130a。例如,加熱池管理器130可基于加熱池130a中的可用能力致使另外的實(shí)例添加至加熱池130a以服務(wù)進(jìn)入的請(qǐng)求。在一些實(shí)施方案中,加熱池管理器130可利用虛擬計(jì)算系統(tǒng)110內(nèi)的物理計(jì)算裝置和一個(gè)或多個(gè)虛擬機(jī)實(shí)例服務(wù)兩者來(lái)獲得和維持可用來(lái)服務(wù)由前端120接收的代碼執(zhí)行請(qǐng)求的計(jì)算能力。在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110可包括用于控制(例如,增加或減少)加熱池130a中的可用能力的一個(gè)或多個(gè)邏輯旋鈕或開(kāi)關(guān)。例如,系統(tǒng)管理器可使用這種旋鈕或開(kāi)關(guān)來(lái)增加在高峰時(shí)段期間在加熱池130a中可用的能力(例如,預(yù)起動(dòng)實(shí)例的數(shù)量)。在一些實(shí)施方案中,可基于獨(dú)立于執(zhí)行用戶(hù)代碼的特定用戶(hù)請(qǐng)求的預(yù)定配置集合來(lái)配置加熱池130a中的虛擬機(jī)實(shí)例。預(yù)定配置集合可對(duì)應(yīng)于各種類(lèi)型的虛擬機(jī)實(shí)例以執(zhí)行用戶(hù)代碼。加熱池管理器130可基于與當(dāng)前或先前用戶(hù)代碼執(zhí)行相關(guān)的一個(gè)或多個(gè)度量來(lái)優(yōu)化加熱池130a中的虛擬機(jī)實(shí)例的類(lèi)型和數(shù)量。
如圖1中所示,實(shí)例可具有操作系統(tǒng)(os)和/或加載在其上的語(yǔ)言運(yùn)行時(shí)。例如,由加熱池管理器130管理的加熱池130a包括實(shí)例152、154。實(shí)例152包括os152a和運(yùn)行時(shí)152b。實(shí)例154包括os154a。在一些實(shí)施方案中,加熱池130a中的實(shí)例也可包括在下文更加詳細(xì)描述的容器(其還可包含操作系統(tǒng)、運(yùn)行時(shí)、用戶(hù)代碼等的副本)。盡管實(shí)例152在圖1中被示出包括單一運(yùn)行時(shí),但是在其他實(shí)施方案中,圖1中描繪的實(shí)例可包括兩個(gè)或更多個(gè)運(yùn)行時(shí),所述運(yùn)行時(shí)中的每一個(gè)可用于運(yùn)行不同的用戶(hù)代碼。在一些實(shí)施方案中,加熱池管理器130可維持加熱池130a中的實(shí)例列表。實(shí)例列表還可指定實(shí)例的配置(例如,os、運(yùn)行時(shí)、容器等)。
在一些實(shí)施方案中,加熱池130a中的虛擬機(jī)實(shí)例可用來(lái)服務(wù)任意用戶(hù)的請(qǐng)求。在一個(gè)實(shí)施方案中,加熱池130a中的所有虛擬機(jī)實(shí)例以相同或大致類(lèi)似的方式配置。在另一個(gè)實(shí)施方案中,加熱池130a中的虛擬機(jī)實(shí)例可不同地配置以滿足不同用戶(hù)的需求。例如,虛擬機(jī)實(shí)例可具有不同的操作系統(tǒng),不同的語(yǔ)言運(yùn)行時(shí)和/或加載在其上的不同的庫(kù)。在又一個(gè)實(shí)施方案中,加熱池130a中的虛擬機(jī)實(shí)例可以相同或大致類(lèi)似的方式配置(例如具有相同的os、語(yǔ)言運(yùn)行時(shí)和/或庫(kù)),但這些實(shí)例中的一些可具有不同的容器配置。例如,兩個(gè)實(shí)例可具有用于python和ruby兩者的運(yùn)行時(shí),但一個(gè)實(shí)例可具有被配置來(lái)運(yùn)行python代碼的容器,并且另一個(gè)實(shí)例可具有被配置來(lái)運(yùn)行ruby代碼的容器。在一些實(shí)施方案中,提供多個(gè)加熱池130a,每個(gè)加熱池130a具有相同配置的虛擬機(jī)實(shí)例。
加熱池管理器130可預(yù)配置加熱池130a中的虛擬機(jī)實(shí)例,使得每個(gè)虛擬機(jī)實(shí)例被配置來(lái)滿足可由在虛擬計(jì)算系統(tǒng)110上執(zhí)行程序代碼的用戶(hù)請(qǐng)求請(qǐng)求或指定的操作條件中的至少一個(gè)。在一個(gè)實(shí)施方案中,操作條件可包括可寫(xiě)入潛在用戶(hù)代碼所用的程序語(yǔ)言。例如,這類(lèi)語(yǔ)言可包括java、javascript、python、ruby等。在一些實(shí)施方案中,可寫(xiě)入用戶(hù)代碼的語(yǔ)言集合可受限于預(yù)定集合(例如,4種語(yǔ)言集合,盡管在一些實(shí)施方案中提供了多于或少于四種語(yǔ)言的集合),以便促進(jìn)可滿足執(zhí)行用戶(hù)代碼的請(qǐng)求的虛擬機(jī)實(shí)例的預(yù)初始化。例如,當(dāng)用戶(hù)通過(guò)由虛擬計(jì)算系統(tǒng)110提供的用戶(hù)接口配置請(qǐng)求時(shí),用戶(hù)接口可提示用戶(hù)指定用于執(zhí)行用戶(hù)代碼的預(yù)定操作條件中的一個(gè)。在另一個(gè)實(shí)例中,用于利用由虛擬計(jì)算系統(tǒng)110提供的服務(wù)的服務(wù)級(jí)協(xié)議(sla)可指定用戶(hù)請(qǐng)求應(yīng)滿足的條件集合(例如,編程語(yǔ)言、計(jì)算資源等),并且虛擬計(jì)算系統(tǒng)110可假定請(qǐng)求滿足處置所述請(qǐng)求中的條件集合。在另一個(gè)實(shí)例中,在請(qǐng)求中指定的操作條件可包括:被用來(lái)處理請(qǐng)求的計(jì)算能力的量;請(qǐng)求的類(lèi)型(例如,http對(duì)觸發(fā)的事件);請(qǐng)求的超時(shí)(例如,閾值時(shí)間,在其之后可終止請(qǐng)求);安全策略(例如,可控制加熱池130a中的哪個(gè)實(shí)例可由哪個(gè)用戶(hù)使用)等。
工作站管理器140管理用于服務(wù)進(jìn)入的代碼執(zhí)行請(qǐng)求的實(shí)例。在圖1示出的實(shí)例中,工作站管理器140管理活動(dòng)池140a,所述活動(dòng)池140a是當(dāng)前被指配給一個(gè)或多個(gè)用戶(hù)的虛擬機(jī)實(shí)例的群組(有時(shí)被稱(chēng)為池)。盡管虛擬機(jī)實(shí)例在此被描述為被指配給特定用戶(hù),但是在一些實(shí)施方案中,可將實(shí)例指配給用戶(hù)群組,使得實(shí)例綁定到用戶(hù)群組并且群組中的任意成員可利用實(shí)例上的資源。例如,相同群組中的用戶(hù)可屬于相同安全群組(例如,基于它們的安全憑證),使得在特定實(shí)例上的容器中執(zhí)行一個(gè)成員的代碼之前已經(jīng)在相同實(shí)例上的另一個(gè)容器上執(zhí)行另一個(gè)成員的代碼并不面臨安全風(fēng)險(xiǎn)。類(lèi)似地,工作站管理器140可根據(jù)一個(gè)或多個(gè)策略指配實(shí)例和容器,所述一個(gè)或多個(gè)策略支配可在哪個(gè)容器中執(zhí)行哪個(gè)請(qǐng)求并且可將哪個(gè)實(shí)例指配給哪個(gè)用戶(hù)。示例性策略可指定將實(shí)例指配給共享相同賬戶(hù)(例如,用于訪問(wèn)由虛擬計(jì)算系統(tǒng)110提供的服務(wù)的賬戶(hù))的用戶(hù)的集合。在一些實(shí)施方案中,與相同用戶(hù)群組相關(guān)聯(lián)的請(qǐng)求可共享相同容器(例如,與其相關(guān)聯(lián)的用戶(hù)代碼是相同的)。在一些實(shí)施方案中,請(qǐng)求在群組的不同用戶(hù)之間沒(méi)有區(qū)別并且簡(jiǎn)單地指示與請(qǐng)求相關(guān)聯(lián)的用戶(hù)所屬于的群組。
如圖1中所示,實(shí)例可具有操作系統(tǒng)(os)、語(yǔ)言運(yùn)行時(shí)和容器。容器可具有os和運(yùn)行時(shí)以及加載在其上的用戶(hù)代碼的單獨(dú)副本。在圖1的實(shí)例中,由工作站管理器140管理的活動(dòng)池140a包括實(shí)例156、158。實(shí)例156具有os156a、運(yùn)行時(shí)156b、156c和容器156d、156e。容器156d包括os156a的副本、運(yùn)行時(shí)156b的副本和代碼156d-1的副本。容器156e包括os156a的副本、運(yùn)行時(shí)156c的副本和代碼156e-1的副本。實(shí)例158具有os158a、運(yùn)行時(shí)158b、158c、158e、158f、容器158d和代碼158g、158h。容器158d包括os158a的副本、運(yùn)行時(shí)158b的副本和代碼158d-1的副本。如圖1中所示,實(shí)例可具有加載在其上的用戶(hù)代碼,并且那些實(shí)例內(nèi)的容器也可具有加載在其中的用戶(hù)代碼。在一些實(shí)施方案中,工作站管理器140可維持活動(dòng)池140a中的實(shí)例列表。實(shí)例列表還可指定實(shí)例的配置(例如,os、運(yùn)行時(shí)、容器等)。在一些實(shí)施方案中,工作站管理器140可訪問(wèn)加熱池130a中的實(shí)例列表(例如,包括實(shí)例的數(shù)量和類(lèi)型)。在其他實(shí)施方案中,工作站管理器140從加熱池管理器130請(qǐng)求計(jì)算能力,而無(wú)需知道加熱池130a中的虛擬機(jī)實(shí)例。
在圖1中示出的實(shí)例中,用戶(hù)代碼在被稱(chēng)為容器(例如,容器156d、156e、158d)的隔離的計(jì)算系統(tǒng)中執(zhí)行。容器是在虛擬機(jī)實(shí)例內(nèi)使用在所述實(shí)例上可用的資源創(chuàng)建的邏輯單元。例如,工作站管理器140可基于在執(zhí)行用戶(hù)代碼的請(qǐng)求中指定的信息創(chuàng)建新容器或?qū)F(xiàn)有容器定位在活動(dòng)池140a中的實(shí)例中的一個(gè)中,并且將容器指配給請(qǐng)求以處置與請(qǐng)求相關(guān)聯(lián)的用戶(hù)代碼的執(zhí)行。在一個(gè)實(shí)施方案中,這類(lèi)容器被實(shí)現(xiàn)為linux容器?;顒?dòng)池140a中的虛擬機(jī)實(shí)例可具有在其上創(chuàng)建的一個(gè)或多個(gè)容器并且具有加載在其上(例如,在容器中的一個(gè)中或在實(shí)例的本地高速緩沖存儲(chǔ)器中)的與用戶(hù)相關(guān)聯(lián)的一個(gè)或多個(gè)程序代碼。每個(gè)容器可具有在其中可用的憑證信息,使得在容器上執(zhí)行的用戶(hù)代碼訪問(wèn)允許它們?cè)L問(wèn)的任何對(duì)應(yīng)的憑證信息。
一旦請(qǐng)求由前端120成功地處理,工作站管理器140就查找服務(wù)在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼的請(qǐng)求的能力。例如,如果在活動(dòng)池140a中存在具有含加載在其中的相同用戶(hù)代碼(例如,在容器156d中示出的代碼156d-1)的容器的特定的虛擬機(jī)實(shí)例,那么工作站管理器140可將所述容器指配給請(qǐng)求并且致使用戶(hù)代碼在容器中執(zhí)行??商娲?,如果用戶(hù)代碼(例如,存儲(chǔ)在實(shí)例158上但不屬于任何單獨(dú)容器的代碼158g、158h)在虛擬機(jī)實(shí)例中的一個(gè)的本地高速緩沖存儲(chǔ)器中可用,那么工作站管理器140可在這種實(shí)例上創(chuàng)建新容器,將所述容器指配給請(qǐng)求并且致使用戶(hù)代碼在所述容器中加載并執(zhí)行。
如果工作站管理器140確定與請(qǐng)求相關(guān)聯(lián)的用戶(hù)代碼未在活動(dòng)池140a中的實(shí)例中的任一個(gè)(例如,容器或?qū)嵗谋镜馗咚倬彌_存儲(chǔ)器)上被查找到,那么工作站管理器140可確定活動(dòng)池140a中的實(shí)例中的任一個(gè)是否當(dāng)前被指配給與請(qǐng)求相關(guān)聯(lián)的用戶(hù)并且具有處置當(dāng)前請(qǐng)求的計(jì)算能力。如果存在這種實(shí)例,那么工作站管理器140可在實(shí)例上創(chuàng)建新容器并且將所述容器指配給請(qǐng)求。可替代地,工作站管理器140還可在指配給用戶(hù)的實(shí)例上配置現(xiàn)有容器并且將所述容器指配給請(qǐng)求。例如,工作站管理器140可確定現(xiàn)有容器可用來(lái)執(zhí)行用戶(hù)代碼,如果將由當(dāng)前用戶(hù)請(qǐng)求需要的特定庫(kù)加載在其上的話。在這種情況下,工作站管理器140可加載特定庫(kù)并且將用戶(hù)代碼加載到容器上,并且使用所述容器來(lái)執(zhí)行用戶(hù)代碼。
如果活動(dòng)池140a不包含當(dāng)前被指配給用戶(hù)的任何實(shí)例,那么工作站管理器140將新的虛擬機(jī)實(shí)例從加熱池130a拉出,將所述實(shí)例指配給與請(qǐng)求相關(guān)聯(lián)的用戶(hù),在所述實(shí)例上創(chuàng)建新容器,將所述容器指配給請(qǐng)求,并且致使用戶(hù)代碼在容器上被下載和執(zhí)行。
可從輔助服務(wù)106(諸如圖1的存儲(chǔ)服務(wù)108)下載用戶(hù)代碼。圖1中示出的數(shù)據(jù)108a可包括由一個(gè)或多個(gè)用戶(hù)上傳的用戶(hù)代碼,或由虛擬計(jì)算系統(tǒng)110利用以執(zhí)行本文所述的一個(gè)或多個(gè)技術(shù)的任何其他數(shù)據(jù)。盡管在圖1的實(shí)例中僅示出存儲(chǔ)服務(wù)108,但是虛擬環(huán)境100可包括可從其下載用戶(hù)代碼的其他級(jí)別的存儲(chǔ)系統(tǒng)。例如,每個(gè)實(shí)例可具有物理地(例如,駐留在實(shí)例在其上運(yùn)行的物理計(jì)算系統(tǒng)上的本地存儲(chǔ))或邏輯地(例如,與實(shí)例網(wǎng)絡(luò)通信并且在虛擬計(jì)算系統(tǒng)110內(nèi)或外提供的網(wǎng)絡(luò)附接的存儲(chǔ)系統(tǒng))與在其上創(chuàng)建容器的實(shí)例相關(guān)聯(lián)的一個(gè)或多個(gè)存儲(chǔ)系統(tǒng)??商娲?,可從由存儲(chǔ)服務(wù)108提供的基于web的數(shù)據(jù)存儲(chǔ)下載代碼。
一旦工作站管理器140將可用來(lái)服務(wù)用戶(hù)代碼執(zhí)行請(qǐng)求的虛擬機(jī)實(shí)例中的一個(gè)定位在加熱池130a中,加熱池管理器130或工作站管理器140就將所述實(shí)例從加熱池130a取出并且將所述實(shí)例指配給與請(qǐng)求相關(guān)聯(lián)的用戶(hù)。將所指配的虛擬機(jī)實(shí)例從加熱池130a取出并且置于活動(dòng)池140a中。在一些實(shí)施方案中,一旦已經(jīng)將虛擬機(jī)實(shí)例指配給特定用戶(hù),所述虛擬機(jī)實(shí)例就不能用來(lái)服務(wù)任何其他用戶(hù)的請(qǐng)求。這通過(guò)防止可能使用戶(hù)資源共混來(lái)提供有益于用戶(hù)的安全性。可替代地,在一些實(shí)施方案中,屬于不同用戶(hù)(或被指配給與不同用戶(hù)相關(guān)聯(lián)的請(qǐng)求)的多個(gè)容器可在單一虛擬機(jī)實(shí)例上共存。這種方式可提高可用計(jì)算能力的利用。
在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110可維持在其中存儲(chǔ)用戶(hù)代碼以在虛擬機(jī)實(shí)例的本地高速緩存與(例如,通過(guò)網(wǎng)絡(luò)104可用的)基于web的網(wǎng)絡(luò)存儲(chǔ)裝置之間充當(dāng)中間級(jí)別的高速緩存系統(tǒng)的單獨(dú)高速緩沖存儲(chǔ)器。工作站管理器140可在服務(wù)請(qǐng)求中遭遇的各種情景在下文參考圖4更加詳細(xì)地描述。
在已經(jīng)執(zhí)行用戶(hù)代碼之后,工作站管理器140可拆除用來(lái)執(zhí)行用戶(hù)代碼的容器以釋放其占用的資源以用于實(shí)例中的其他容器??商娲兀ぷ髡竟芾砥?40可使容器保持運(yùn)行以使用所述容器來(lái)服務(wù)來(lái)自相同用戶(hù)的另外的請(qǐng)求。例如,如果另一個(gè)請(qǐng)求與已經(jīng)加載在容器中的相同用戶(hù)代碼相關(guān)聯(lián),那么可將所述請(qǐng)求指配給相同容器,從而消除了與創(chuàng)建新容器并且將用戶(hù)代碼加載在所述容器中相關(guān)聯(lián)的延遲。在一些實(shí)施方案中,工作站管理器140可拆除在其中創(chuàng)建用來(lái)執(zhí)行用戶(hù)代碼的容器的實(shí)例。可替代地,工作站管理器140可使實(shí)例保持運(yùn)行以使用所述實(shí)例來(lái)服務(wù)來(lái)自相同用戶(hù)的另外的請(qǐng)求。在用戶(hù)代碼完成執(zhí)行之后是否使容器和/或?qū)嵗3诌\(yùn)行的確定可基于閾值時(shí)間、用戶(hù)的類(lèi)型、用戶(hù)的平均請(qǐng)求量和/或其他操作條件。例如,在經(jīng)過(guò)閾值時(shí)間(例如,5分鐘、30分鐘、1小時(shí)、24小時(shí)、30天等)而沒(méi)有任何活動(dòng)(例如,運(yùn)行代碼)之后,容器和/或虛擬機(jī)實(shí)例被關(guān)閉(例如,刪除、終止等),并且分配給其的資源被釋放。在一些實(shí)施方案中,在容器被拆除之前經(jīng)過(guò)的閾值時(shí)間短于在實(shí)例被拆除之前經(jīng)過(guò)的閾值時(shí)間。
在一些實(shí)施方案中,當(dāng)虛擬計(jì)算系統(tǒng)110服務(wù)進(jìn)入的代碼執(zhí)行請(qǐng)求時(shí),它可將數(shù)據(jù)提供給輔助服務(wù)106中的一個(gè)或多個(gè)。例如,虛擬計(jì)算系統(tǒng)110可與監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107通信。監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107可包括:用于管理從虛擬計(jì)算系統(tǒng)110接收的監(jiān)測(cè)信息(諸如虛擬計(jì)算系統(tǒng)110上的容器和實(shí)例的狀態(tài))的監(jiān)測(cè)服務(wù);用于管理從虛擬計(jì)算系統(tǒng)110接收的記錄信息(諸如由虛擬計(jì)算系統(tǒng)110上的容器和實(shí)例執(zhí)行的活動(dòng))的記錄服務(wù);以及用于生成與在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼相關(guān)聯(lián)的計(jì)費(fèi)信息的計(jì)費(fèi)服務(wù)(例如,基于由監(jiān)測(cè)服務(wù)和記錄服務(wù)管理的監(jiān)測(cè)信息和/或記錄信息)。除可由如上文所述的監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107(例如,以虛擬計(jì)算系統(tǒng)110的名義)執(zhí)行的系統(tǒng)級(jí)活動(dòng)之外,監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107可以在虛擬計(jì)算系統(tǒng)110上執(zhí)行的用戶(hù)代碼的名義提供應(yīng)用級(jí)服務(wù)。例如,監(jiān)測(cè)/記錄/計(jì)費(fèi)服務(wù)107可以在虛擬計(jì)算系統(tǒng)110上執(zhí)行的用戶(hù)代碼的名義監(jiān)測(cè)和/或記錄各種輸入、輸出或其他數(shù)據(jù)和參數(shù)。盡管被示出為單一塊,但是可將監(jiān)測(cè)、記錄和計(jì)費(fèi)服務(wù)107提供為單獨(dú)服務(wù)。
在一些實(shí)施方案中,工作站管理器140可對(duì)由工作站管理器140管理的實(shí)例和容器(例如,活動(dòng)池140a中的那些)執(zhí)行健康檢驗(yàn)。例如,由工作站管理器140執(zhí)行的健康檢驗(yàn)可包括確定由工作站管理器140管理的實(shí)例和容器是否具有任何以下問(wèn)題:(1)配置錯(cuò)誤的聯(lián)網(wǎng)和/或啟動(dòng)配置,(2)耗盡的內(nèi)存,(3)毀壞的文件系統(tǒng),(4)不可兼容的內(nèi)核和/或可損害實(shí)例和容器性能的任何其他問(wèn)題。在一個(gè)實(shí)施方案中,工作站管理器140定期(例如,每5分鐘、每30分鐘、每小時(shí)、每24小時(shí)等)執(zhí)行健康檢驗(yàn)。在一些實(shí)施方案中,健康檢驗(yàn)的頻率可基于健康檢驗(yàn)的結(jié)果而自動(dòng)地調(diào)整。在其他實(shí)施方案中,健康檢驗(yàn)的頻率可基于用戶(hù)請(qǐng)求而調(diào)整。在一些實(shí)施方案中,工作站管理器140可對(duì)加熱池130a中的實(shí)例和/或容器執(zhí)行類(lèi)似的健康檢驗(yàn)。加熱池130a中的實(shí)例和/或容器可與活動(dòng)池140a中的那些實(shí)例和容器一起管理或單獨(dú)管理。在一些實(shí)施方案中,在加熱池130a中的實(shí)例和/或容器的健康狀況獨(dú)立于活動(dòng)池140a管理的情況下,替代工作站管理器140,加熱池管理器130可對(duì)加熱池130a中的實(shí)例和/或容器執(zhí)行上文所述的健康檢驗(yàn)。
在一些實(shí)施方案中,虛擬計(jì)算系統(tǒng)110適于在(例如,由前端120)接收到用戶(hù)代碼之后開(kāi)始執(zhí)行所述用戶(hù)代碼??蓪r(shí)間段確定為在發(fā)起執(zhí)行用戶(hù)代碼(例如,在與用戶(hù)相關(guān)聯(lián)的虛擬機(jī)實(shí)例上的容器中)與接收?qǐng)?zhí)行用戶(hù)代碼的請(qǐng)求(例如,由前端接收)之間的時(shí)間差??蓪⒘硪粋€(gè)時(shí)間段確定為在以下各項(xiàng)之間的時(shí)間差:(1)事件觸發(fā)服務(wù)上事件的檢測(cè)與(2a)接收?qǐng)?zhí)行(例如,由前端接收的)用戶(hù)代碼的請(qǐng)求和/或(2b)發(fā)起執(zhí)行用戶(hù)代碼(例如,在與用戶(hù)相關(guān)聯(lián)的虛擬機(jī)實(shí)例上的容器中)??蓪⒘硪粋€(gè)時(shí)間段確定為在以下各項(xiàng)之間的時(shí)間差:(1)(例如,直接或間接地從事件觸發(fā)服務(wù))檢索、訪問(wèn)或接收事件消息與(2)發(fā)起處理執(zhí)行用戶(hù)代碼的請(qǐng)求(例如,在與用戶(hù)相關(guān)聯(lián)的虛擬機(jī)實(shí)例上的容器中)。虛擬計(jì)算系統(tǒng)110適于開(kāi)始在少于預(yù)定持續(xù)時(shí)間的時(shí)間段內(nèi)執(zhí)行用戶(hù)代碼。在一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間為500ms。在另一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間為300ms。在另一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間為100ms。在另一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間為50ms。在另一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間為10ms。在另一個(gè)實(shí)施方案中,預(yù)定持續(xù)時(shí)間可以是選自10ms至500ms范圍的任意值。在一些實(shí)施方案中,如果一個(gè)或多個(gè)條件滿足的話,虛擬計(jì)算系統(tǒng)110適于開(kāi)始在少于預(yù)定持續(xù)時(shí)間的時(shí)間段內(nèi)執(zhí)行用戶(hù)代碼。例如,所述一個(gè)或多個(gè)條件可包括以下各項(xiàng)中的任一項(xiàng):(1)用戶(hù)代碼在請(qǐng)求被接收的時(shí)間處加載到活動(dòng)池140a中的容器上;(2)用戶(hù)代碼在請(qǐng)求被接收的時(shí)間處存儲(chǔ)在活動(dòng)池140a中實(shí)例的代碼高速緩沖存儲(chǔ)器中;(3)活動(dòng)池140a包含在請(qǐng)求被接收的時(shí)間處指配給與請(qǐng)求相關(guān)聯(lián)的用戶(hù)的實(shí)例;或(4)加熱池130a具有在請(qǐng)求被接收的時(shí)間處處置請(qǐng)求的能力。
工作站管理器140可包括用于查找計(jì)算能力(例如,容器)以服務(wù)進(jìn)入的代碼執(zhí)行請(qǐng)求的實(shí)例分配單元和用于促進(jìn)在那些容器上執(zhí)行用戶(hù)代碼的用戶(hù)代碼執(zhí)行模塊。前端120的示例性配置在下文參考圖2更加詳細(xì)地描述。
圖2描繪處理針對(duì)在虛擬計(jì)算系統(tǒng)110中執(zhí)行程序代碼的用戶(hù)請(qǐng)求的事件消息的計(jì)算系統(tǒng)(被稱(chēng)為前端120)的總體架構(gòu)。圖2中描繪的前端120的總體架構(gòu)包括計(jì)算機(jī)硬件和軟件模塊的布置,所述計(jì)算機(jī)硬件和軟件模塊可用來(lái)實(shí)現(xiàn)本公開(kāi)的方面。所述硬件模塊可與物理電子裝置一起實(shí)現(xiàn),如在下文更加詳細(xì)所述。前端120可包括許多多于(或少于)圖2中所示的那些的元件。然而,沒(méi)有必要示出所有這些通常常規(guī)的元件以便提供能夠?qū)崿F(xiàn)的公開(kāi)內(nèi)容。另外,圖2中示出的總體架構(gòu)可用來(lái)實(shí)現(xiàn)圖1中示出的其他部件中的一個(gè)或多個(gè)。如所示出,前端120包括處理單元190、網(wǎng)絡(luò)接口192、計(jì)算機(jī)可讀介質(zhì)驅(qū)動(dòng)器194、輸入/輸出裝置接口196,其中的所有可借助于通信總線與彼此通信。網(wǎng)絡(luò)接口192可提供到一個(gè)或多個(gè)網(wǎng)絡(luò)或計(jì)算系統(tǒng)的連接性。處理單元190可因此通過(guò)網(wǎng)絡(luò)104從其他計(jì)算系統(tǒng)或服務(wù)接收信息和指令。處理單元190也可通信至存儲(chǔ)器180并且從存儲(chǔ)器180通信,并且通過(guò)輸入/輸出裝置接口196進(jìn)一步向任選的顯示器(未示出)提供輸出信息。輸入/輸出裝置接口196還可從任選的輸入裝置(未示出)接受輸入。
存儲(chǔ)器180可包含處理單元190執(zhí)行以便實(shí)現(xiàn)本公開(kāi)的一個(gè)或多個(gè)方面的計(jì)算機(jī)程序指令(在一些實(shí)施方案中被分組為模塊)。存儲(chǔ)器180通常包括ram、rom和/或其他持久、輔助或非暫時(shí)性計(jì)算機(jī)可讀介質(zhì)。存儲(chǔ)器180可存儲(chǔ)操作系統(tǒng)184,所述操作系統(tǒng)184提供計(jì)算機(jī)程序指令以由處理單元190在工作站管理器140的一般管理和操作中使用。存儲(chǔ)器180還可包括用于實(shí)現(xiàn)本公開(kāi)的方面的計(jì)算機(jī)程序指令和其他信息。例如,在一個(gè)實(shí)施方案中,存儲(chǔ)器180包括用戶(hù)接口單元182,所述用戶(hù)接口單元182生成用戶(hù)接口(和/或用于其的指令)以供例如通過(guò)導(dǎo)航和/或?yàn)g覽接口(諸如安裝在計(jì)算裝置上的瀏覽器或應(yīng)用)在計(jì)算裝置上顯示。此外,存儲(chǔ)器180可包括一個(gè)或多個(gè)數(shù)據(jù)倉(cāng)庫(kù)(未示出)或可與其通信,以例如訪問(wèn)用戶(hù)程序代碼和/或庫(kù)。
除用戶(hù)接口單元182之外和/或與其組合,存儲(chǔ)器180可包括事件/請(qǐng)求處理單元188,所述事件/請(qǐng)求處理單元188可包括可由處理單元190執(zhí)行的事件消息輪詢(xún)單元186a和事件消息轉(zhuǎn)換單元186b。在一個(gè)實(shí)施方案中,用戶(hù)接口單元182、事件消息輪詢(xún)單元186a和事件消息轉(zhuǎn)換單元186b單獨(dú)地或共同地實(shí)現(xiàn)本公開(kāi)的各個(gè)方面,例如處理針對(duì)執(zhí)行用戶(hù)代碼的請(qǐng)求的事件消息,如本文所述。在另一個(gè)實(shí)施方案中,可例如通過(guò)被配置來(lái)輪詢(xún)事件源或消息隊(duì)列并且執(zhí)行至少一個(gè)初始消息轉(zhuǎn)換或處理以使事件消息做好準(zhǔn)備進(jìn)一步由前端120和/或虛擬計(jì)算系統(tǒng)100的另一個(gè)部件處理的輪詢(xún)團(tuán)來(lái)實(shí)現(xiàn)單獨(dú)的輪詢(xún)服務(wù)。
事件消息輪詢(xún)單元186a定期地輪詢(xún)事件消息以被處理成執(zhí)行用戶(hù)代碼的請(qǐng)求。例如,事件消息輪詢(xún)單元186a可定期地訪問(wèn)消息隊(duì)列(諸如消息隊(duì)列服務(wù)105或任何其他消息隊(duì)列服務(wù)或消息總線),以確定或檢測(cè)是否已經(jīng)將事件消息置于消息隊(duì)列中以用于由虛擬計(jì)算系統(tǒng)110處理??衫绺鶕?jù)在本文中參考圖3描述的例程將事件消息置于消息隊(duì)列中。響應(yīng)于確定或檢測(cè)消息隊(duì)列中的事件消息,事件消息輪詢(xún)單元186a可從消息隊(duì)列檢索消息事件并且如在本文中進(jìn)一步所述進(jìn)一步發(fā)起對(duì)事件消息的處理。在另一個(gè)實(shí)施方案中,事件消息輪詢(xún)單元186a可直接輪詢(xún)事件觸發(fā)服務(wù)106a而不是從消息隊(duì)列輪詢(xún)。例如,一些事件觸發(fā)服務(wù)(諸如某種類(lèi)型的數(shù)據(jù)庫(kù))可支持直接輪詢(xún)不必依賴(lài)于中間消息隊(duì)列的事件消息。
事件消息轉(zhuǎn)換單元186b管理將事件消息(例如,當(dāng)訪問(wèn)消息隊(duì)列(諸如消息隊(duì)列105)或從所述消息隊(duì)列檢索時(shí))轉(zhuǎn)換成執(zhí)行用戶(hù)代碼的請(qǐng)求(例如,根據(jù)在2014年9月30日提交的、題為“threadingasaservice”的美國(guó)申請(qǐng)?zhí)朹_/___,___,(代理人案號(hào)seazn.989a)(所述申請(qǐng)先前通過(guò)引用的方式整體并入上文)中描述的進(jìn)程準(zhǔn)備進(jìn)一步處理)。在本文中參考圖4更加詳細(xì)地描述事件消息的轉(zhuǎn)換。在一個(gè)實(shí)施方案中,事件消息以表示遠(yuǎn)程過(guò)程調(diào)用的格式生成以在處理事件消息時(shí),促進(jìn)由虛擬計(jì)算系統(tǒng)110進(jìn)行快速轉(zhuǎn)換和/或即刻函數(shù)調(diào)取。這種實(shí)現(xiàn)方式在對(duì)事件觸發(fā)作出響應(yīng)的輔助系統(tǒng)與處理響應(yīng)于事件觸發(fā)而由輔助系統(tǒng)生成的事件消息的虛擬計(jì)算系統(tǒng)110之間實(shí)現(xiàn)高度功能透明性和減少的等待時(shí)間。
雖然事件消息輪詢(xún)單元186a和事件消息轉(zhuǎn)換單元186b作為前端120的一部分在圖2中示出,但是在其他實(shí)施方案中,事件消息輪詢(xún)單元186a和事件消息轉(zhuǎn)換單元186b中的所有或一部分可由虛擬計(jì)算系統(tǒng)110的其他部件和/或另一個(gè)計(jì)算裝置實(shí)現(xiàn)。例如,在本公開(kāi)的某些實(shí)施方案中,與虛擬計(jì)算系統(tǒng)110通信的另一個(gè)計(jì)算裝置可包括類(lèi)似于作為前端120的一部分示出的模塊和部件操作的若干模塊或部件。在一些實(shí)施方案中,前端120還可包括除圖2中示出的那些之外的部件。
現(xiàn)轉(zhuǎn)向圖3,將描述由被配置來(lái)作為事件觸發(fā)服務(wù)106a操作的輔助服務(wù)106的一個(gè)或多個(gè)部件(諸如存儲(chǔ)服務(wù)108)實(shí)現(xiàn)的例程300。盡管例程300關(guān)于通過(guò)事件觸發(fā)服務(wù)106a的實(shí)現(xiàn)方式進(jìn)行了描述,但是相關(guān)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,替代性部件(諸如用戶(hù)裝置102或虛擬計(jì)算系統(tǒng)110)可實(shí)現(xiàn)例程300,或塊中的一個(gè)或多個(gè)可由不同部件或以分布式方式實(shí)現(xiàn)。
在說(shuō)明性例程300的塊302處,事件觸發(fā)服務(wù)106a檢測(cè)已經(jīng)被指定來(lái)觸發(fā)或激活在虛擬計(jì)算系統(tǒng)110上執(zhí)行用戶(hù)代碼的事件或活動(dòng)。例如,在一些實(shí)施方案中,事件觸發(fā)服務(wù)106a可被配置來(lái)啟用或激活針對(duì)一個(gè)或多個(gè)事件的事件通知。在一個(gè)實(shí)施方案中,事件觸發(fā)和通知配置設(shè)定可由用戶(hù)提供或指定。例如,當(dāng)用戶(hù)向虛擬計(jì)算系統(tǒng)110和/或向存儲(chǔ)服務(wù)108提供或上傳用戶(hù)代碼時(shí),用戶(hù)可在該時(shí)間處指定事件觸發(fā)服務(wù)106a應(yīng)收聽(tīng)的一個(gè)或多個(gè)事件,并且響應(yīng)于對(duì)所述一個(gè)或多個(gè)事件的檢測(cè)而執(zhí)行用戶(hù)代碼的哪個(gè)對(duì)應(yīng)的函數(shù)或例程。作為一個(gè)說(shuō)明性實(shí)例,用戶(hù)可上傳(或先前已經(jīng)上傳或以其他方式提供給虛擬計(jì)算系統(tǒng)110)用戶(hù)代碼以生成縮略圖,并且進(jìn)一步指定用來(lái)生成縮略圖的代碼響應(yīng)于最終用戶(hù)將新圖像上傳至輔助系統(tǒng)(諸如圖像共享系統(tǒng))而被執(zhí)行。在這個(gè)實(shí)例中,圖像共享系統(tǒng)然后將監(jiān)測(cè)或檢測(cè)圖像上傳事件。在一些實(shí)施方案中,事件觸發(fā)和通知配置設(shè)定可由可例如與用戶(hù)代碼一起提供的配置文件或其他數(shù)據(jù)格式提供或指定。在各種實(shí)施方案中,上傳用戶(hù)代碼的用戶(hù)和相對(duì)于被配置為事件觸發(fā)服務(wù)的輔助服務(wù)執(zhí)行一些其他動(dòng)作(諸如上傳新圖像)的最終用戶(hù)可以是單獨(dú)的和不同的用戶(hù)或?qū)嶓w。
接著,在塊304處,事件觸發(fā)服務(wù)106a生成與檢測(cè)到的活動(dòng)/事件相關(guān)聯(lián)的事件消息。例如,事件觸發(fā)服務(wù)106a可根據(jù)先前由用戶(hù)提供的事件觸發(fā)和通知配置設(shè)定生成事件消息。所述配置設(shè)定可例如指定與響應(yīng)于被觸發(fā)的事件而由虛擬計(jì)算系統(tǒng)執(zhí)行的用戶(hù)代碼相關(guān)聯(lián)的模式、代碼模型或api。例如,可生成事件消息以包括(除其他之外)與用戶(hù)相關(guān)聯(lián)的用戶(hù)賬戶(hù)標(biāo)識(shí)符、識(shí)別在虛擬計(jì)算系統(tǒng)上調(diào)取的函數(shù)的函數(shù)標(biāo)識(shí)符以及包括被提供有函數(shù)調(diào)取的任何輸入?yún)?shù)(需要的和/或任選的)的一個(gè)或多個(gè)事件消息參數(shù)。
在一些實(shí)施方案中,事件消息可包括指示將要執(zhí)行的程序代碼、寫(xiě)入程序代碼所用的語(yǔ)言、與請(qǐng)求相關(guān)聯(lián)的用戶(hù)和/或被保留用于執(zhí)行程序代碼的計(jì)算資源(例如,存儲(chǔ)器等)的數(shù)據(jù)或元數(shù)據(jù)。例如,事件消息可指定用戶(hù)代碼使用“語(yǔ)言運(yùn)行時(shí)x”在“操作系統(tǒng)a”上執(zhí)行。當(dāng)事件消息由虛擬計(jì)算系統(tǒng)110處理(例如,參見(jiàn)圖4)時(shí),虛擬計(jì)算系統(tǒng)110或其部件中的一個(gè)可定位已經(jīng)被預(yù)配置有“操作系統(tǒng)a”和“語(yǔ)言運(yùn)行時(shí)x”并且被指配給用戶(hù)的虛擬機(jī)實(shí)例。虛擬計(jì)算系統(tǒng)110可然后在虛擬機(jī)實(shí)例上創(chuàng)建容器以用于在其中執(zhí)行用戶(hù)代碼。如果具有代碼的容器已經(jīng)在虛擬機(jī)實(shí)例上存在,那么一旦容器變得可用,虛擬計(jì)算系統(tǒng)110就可緩沖針對(duì)在容器上執(zhí)行的當(dāng)前請(qǐng)求。
在一個(gè)實(shí)施方案中,事件消息(或事件消息的至少一部分)的格式可表示標(biāo)準(zhǔn)的遠(yuǎn)程過(guò)程調(diào)用,使得事件觸發(fā)服務(wù)106a僅可需要執(zhí)行最少的處理以在可能需要在虛擬計(jì)算系統(tǒng)上調(diào)取函數(shù)的事件消息中提供相關(guān)信息。例如,這類(lèi)標(biāo)準(zhǔn)的遠(yuǎn)程過(guò)程調(diào)用格式可啟用運(yùn)行與虛擬計(jì)算系統(tǒng)110不同的操作系統(tǒng)或語(yǔ)言運(yùn)行時(shí)的輔助系統(tǒng)106以通過(guò)以這種標(biāo)準(zhǔn)格式生成的事件消息與虛擬計(jì)算系統(tǒng)110無(wú)縫地通信。在一個(gè)實(shí)施方案中,遠(yuǎn)程過(guò)程調(diào)用的格式可由用戶(hù)提供并且被指定來(lái)與將要執(zhí)行的用戶(hù)代碼匹配或?qū)?yīng)于所述用戶(hù)代碼。例如,當(dāng)檢測(cè)到圖像上傳事件時(shí),事件消息的格式可表示對(duì)作為響應(yīng)將要在虛擬計(jì)算系統(tǒng)上執(zhí)行的函數(shù)的遠(yuǎn)程過(guò)程調(diào)用,諸如“調(diào)取(生成縮略圖、用戶(hù)id、圖像名稱(chēng)、圖像路徑)”或“生成縮略圖(用戶(hù)id、圖像名稱(chēng)、圖像路徑)”或類(lèi)似。
在一些實(shí)施方案中,諸如在事件觸發(fā)服務(wù)106a與虛擬計(jì)算系統(tǒng)110之間建立信任或安全關(guān)系的某些情況下,事件消息還可包括將要由虛擬計(jì)算系統(tǒng)110執(zhí)行的用戶(hù)代碼。例如,用戶(hù)可替代向虛擬計(jì)算系統(tǒng)110提供用戶(hù)代碼或除其之外可向事件觸發(fā)服務(wù)106a提供用戶(hù)代碼,并且還可指定利用事件消息將用戶(hù)代碼提供給虛擬計(jì)算系統(tǒng)110以供在運(yùn)行時(shí)處執(zhí)行。在另一個(gè)實(shí)施方案中,事件消息可包括將要由虛擬計(jì)算系統(tǒng)110執(zhí)行的用戶(hù)代碼的位置(諸如uri),使得虛擬計(jì)算系統(tǒng)110可通過(guò)uri遠(yuǎn)程地調(diào)取用戶(hù)代碼。
在塊306處,事件觸發(fā)服務(wù)106a提供事件消息以供進(jìn)一步由虛擬計(jì)算系統(tǒng)處理。例如,在一個(gè)實(shí)施方案中,將事件消息提供給消息隊(duì)列(諸如消息隊(duì)列105)。消息隊(duì)列服務(wù)105可以是輔助系統(tǒng)106的部件(如圖1中所示)或它可以是通過(guò)網(wǎng)絡(luò)160與輔助系統(tǒng)106和/或虛擬計(jì)算系統(tǒng)110通信的單獨(dú)的系統(tǒng)或服務(wù)。特定格式的事件消息可至少部分地基于與用來(lái)輸送事件消息的消息隊(duì)列相關(guān)聯(lián)的規(guī)范。另外,使用的特定消息隊(duì)列可基于生成并提供給虛擬計(jì)算系統(tǒng)的事件消息的類(lèi)型。例如,特定消息隊(duì)列可適于輸送與數(shù)據(jù)庫(kù)操作相關(guān)的消息,并且因此可使用特定消息隊(duì)列提供響應(yīng)于數(shù)據(jù)庫(kù)事件觸發(fā)而生成的事件消息。虛擬計(jì)算系統(tǒng)如何訪問(wèn)和處理事件消息將在下文參考圖4更加詳細(xì)描述。在另一個(gè)實(shí)施方案中,事件消息可由虛擬計(jì)算系統(tǒng)110直接提供或可供虛擬計(jì)算系統(tǒng)110直接訪問(wèn),而不需要中間消息隊(duì)列。例如,事件觸發(fā)服務(wù)106a可提供或啟用虛擬計(jì)算系統(tǒng)110可調(diào)取的api以便從事件觸發(fā)服務(wù)106a請(qǐng)求一個(gè)或多個(gè)可用事件消息。虛擬計(jì)算系統(tǒng)100然后可替代輪詢(xún)消息隊(duì)列或與輪詢(xún)消息隊(duì)列組合周期性地調(diào)取api,以便訪問(wèn)和/或檢索事件消息以供處理。
雖然在上文參考?jí)K302-306對(duì)圖3的例程300進(jìn)行了描述,但是本文所述的實(shí)施方案并不限于如此,并且在不背離本公開(kāi)的精神的情況下可省略、修改或切換一個(gè)或多個(gè)塊。
現(xiàn)轉(zhuǎn)向圖4,將描述由虛擬計(jì)算系統(tǒng)110的一個(gè)或多個(gè)部件(例如,前端120)實(shí)現(xiàn)的例程400。盡管例程400關(guān)于通過(guò)前端120的實(shí)現(xiàn)方式進(jìn)行了描述,但是相關(guān)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,替代性部件可實(shí)現(xiàn)例程400,或塊中的一個(gè)或多個(gè)可由不同部件或以分布式方式實(shí)現(xiàn)。
在說(shuō)明性例程400的塊402處,前端120可任選地定期輪詢(xún)針對(duì)可表示執(zhí)行用戶(hù)代碼的請(qǐng)求的事件消息的消息隊(duì)列(例如,消息隊(duì)列105)。例如,塊402可在事件觸發(fā)服務(wù)106a通過(guò)消息隊(duì)列提供事件消息的情境下從圖3的塊306繼續(xù)進(jìn)行事件消息處理。
接著,在塊404處,前端120訪問(wèn)或檢索事件消息以供由虛擬計(jì)算系統(tǒng)110處理。在一個(gè)實(shí)施方案中,事件消息從消息隊(duì)列訪問(wèn)或檢索。事件消息的檢索將事件消息從消息隊(duì)列移除以防止復(fù)制與事件相關(guān)聯(lián)的進(jìn)一步處理。在另一個(gè)實(shí)施方案中,事件消息可諸如通過(guò)調(diào)取由事件觸發(fā)服務(wù)提供的api從事件觸發(fā)服務(wù)直接訪問(wèn)或檢索,通過(guò)所述api前端120可請(qǐng)求和接收準(zhǔn)備用于由虛擬計(jì)算系統(tǒng)110處理的事件消息。事件消息可包括或包含上文參考圖3所述的信息和元數(shù)據(jù)中的任一種,例如包括與用戶(hù)相關(guān)聯(lián)的用戶(hù)賬戶(hù)標(biāo)識(shí)符、識(shí)別在虛擬計(jì)算系統(tǒng)上調(diào)取的函數(shù)的函數(shù)標(biāo)識(shí)符以及包括被提供有函數(shù)調(diào)取的任何輸入?yún)?shù)(需要的和/或任選的)的一個(gè)或多個(gè)事件消息參數(shù)。
在塊406處,前端120將事件消息轉(zhuǎn)換成執(zhí)行用戶(hù)代碼的請(qǐng)求,使得執(zhí)行用戶(hù)代碼的請(qǐng)求可進(jìn)一步由虛擬計(jì)算系統(tǒng)110處理(例如包括如在2014年9月30日提交的、題為“threadingasaservice”的美國(guó)申請(qǐng)?zhí)朹_/___,___,(代理人案號(hào)seazn.989a)(所述申請(qǐng)先前通過(guò)引用的方式整體并入上文)中所描述)。事件消息的轉(zhuǎn)換可涉及解析事件消息以識(shí)別和/或提取可能需要生成執(zhí)行用戶(hù)代碼的請(qǐng)求的函數(shù)標(biāo)識(shí)符、任何輸入?yún)?shù)以及其他元數(shù)據(jù),所述用戶(hù)代碼由用戶(hù)指定來(lái)響應(yīng)于事件觸發(fā)而執(zhí)行。例如,事件消息可包括或包含以下各項(xiàng)中的一個(gè)或多個(gè):與事件有效負(fù)荷(例如,事件數(shù)據(jù))相關(guān)的信息,所述信息可與已知的或定義的模式或其他格式相符;例如由事件消息總線或由事件觸發(fā)服務(wù)(例如,其可以是對(duì)由消息隊(duì)列服務(wù)提供的事件消息的隱含租用的一部分)提供的事件包裝器或“包層”;和/或與事件相關(guān)聯(lián)的事件元數(shù)據(jù),包括簽署事件消息的標(biāo)識(shí)、事件觸發(fā)的事件產(chǎn)生器或源(例如,哪個(gè)事件觸發(fā)服務(wù)觸發(fā)事件)的標(biāo)識(shí)、事件消息在其上輸送的消息隊(duì)列的名稱(chēng)或所有人;等等。
如參考圖3所述,在一個(gè)實(shí)施方案中,事件消息的格式可表示標(biāo)準(zhǔn)的遠(yuǎn)程過(guò)程調(diào)用,使得一旦從消息隊(duì)列檢索,前端120僅可需要執(zhí)行最少處理來(lái)生成執(zhí)行用戶(hù)代碼的對(duì)應(yīng)的請(qǐng)求。例如,當(dāng)檢測(cè)到圖像上傳事件時(shí),事件消息的格式可表示對(duì)作為響應(yīng)將要在虛擬計(jì)算系統(tǒng)上執(zhí)行的函數(shù)的遠(yuǎn)程過(guò)程調(diào)用,諸如“調(diào)取(生成縮略圖、用戶(hù)id、圖像名稱(chēng)、圖像路徑)”或“生成縮略圖(用戶(hù)id、圖像名稱(chēng)、圖像路徑)”或類(lèi)似。因此,在一個(gè)實(shí)施方案中,前端120可提取這類(lèi)遠(yuǎn)程過(guò)程調(diào)用并且立即調(diào)取特定函數(shù)來(lái)發(fā)起請(qǐng)求。另外,如上文參考圖3所述,執(zhí)行用戶(hù)代碼的請(qǐng)求還可指定用戶(hù)代碼使用“語(yǔ)言運(yùn)行時(shí)x”在“操作系統(tǒng)a”上執(zhí)行,所述用戶(hù)代碼可作為用于執(zhí)行用戶(hù)代碼的請(qǐng)求的另外的輸入被包括。
在塊408處,前端120可任選地驗(yàn)證安全性訪問(wèn)和/或認(rèn)證與提供有事件消息的用戶(hù)賬戶(hù)標(biāo)識(shí)符相關(guān)聯(lián)的用戶(hù)并且確定用戶(hù)被授權(quán)訪問(wèn)特定用戶(hù)代碼。在一些實(shí)施方案中,安全性和/或認(rèn)證可在單獨(dú)進(jìn)程中或作為處理執(zhí)行用戶(hù)代碼的請(qǐng)求的一部分而被省略或執(zhí)行。在一些實(shí)施方案中,安全性和/或認(rèn)證可在例程400中較早地(諸如在塊406處執(zhí)行轉(zhuǎn)換之前)執(zhí)行。
在塊410處,前端120向虛擬計(jì)算系統(tǒng)110提供執(zhí)行用戶(hù)代碼的請(qǐng)求。在某些實(shí)施方案中,前端120本身可對(duì)請(qǐng)求執(zhí)行進(jìn)一步處理,例如如在2014年9月30日提交的、題為“threadingasaservice”的美國(guó)申請(qǐng)?zhí)朹_/___,___,(代理人案號(hào)seazn.989a)(所述申請(qǐng)先前通過(guò)引用的方式整體并入上文)中所描述。所述請(qǐng)求可包括以程序語(yǔ)言組成的程序代碼。包括java、php、c++、python等的各種程序語(yǔ)言可用來(lái)組成用戶(hù)代碼。請(qǐng)求可包括與代碼執(zhí)行要求相關(guān)的配置信息。例如,請(qǐng)求可包括關(guān)于寫(xiě)入程序代碼所用的程序語(yǔ)言的信息、關(guān)于執(zhí)行用戶(hù)代碼的語(yǔ)言運(yùn)行時(shí)和/或語(yǔ)言庫(kù)的信息。所述配置信息不必包括關(guān)于可托管用戶(hù)代碼的虛擬機(jī)實(shí)例的任何特定信息。
雖然在上文參考?jí)K402-410對(duì)圖4的例程400進(jìn)行了描述,但是本文所述的實(shí)施方案并不限于如此,并且在不背離本公開(kāi)的精神的情況下可省略、修改或切換一個(gè)或多個(gè)塊。例如,可修改塊402使得前端120從用戶(hù)裝置102接收事件消息。
圖4的例程400可包括可以不同順序執(zhí)行的不同進(jìn)程或例程。一種替代性實(shí)例被提供如下,盡管其他變型可以是可能的。首先,事件消息可由前端120接收或訪問(wèn),所述前端120解析事件消息(如果一個(gè)可用的話,使用模式)。前端120可將解析的事件消息與另外的事件元數(shù)據(jù)(例如,事件包裝器、關(guān)于事件觸發(fā)的消息隊(duì)列標(biāo)識(shí)或源的信息等等)組合,以便確定或建立關(guān)于事件的信息、事件的源或所有人和可提供給虛擬計(jì)算系統(tǒng)110的其他信息。前端120然后可按需執(zhí)行至少一種初始授權(quán)和/或安全性檢驗(yàn)以驗(yàn)證用戶(hù)代碼的安全訪問(wèn)和相關(guān)的執(zhí)行。前端120然后可評(píng)估解析的事件消息和另外的事件元數(shù)據(jù),以便將消息路由至響應(yīng)于事件而被調(diào)用的適當(dāng)?shù)某绦蚧蛴脩?hù)代碼。前端120然后可例如通過(guò)將消息的內(nèi)容和/或事件元數(shù)據(jù)轉(zhuǎn)換成被選擇來(lái)處理事件消息的用戶(hù)代碼的編程語(yǔ)言中的自變量、變量和其他輸入而對(duì)事件消息執(zhí)行映射到執(zhí)行用戶(hù)代碼的請(qǐng)求中??蓪⒘硗獾男畔⑻砑又翀?zhí)行用戶(hù)代碼的請(qǐng)求,所述另外的信息例如包括與事件消息的簽署人或提供者相關(guān)聯(lián)的標(biāo)識(shí)。前端120然后可調(diào)用編程語(yǔ)言中的函數(shù)、方法或其他入口點(diǎn)(任選地以及基于事件消息和/或事件元數(shù)據(jù)的方面的條件)以發(fā)起對(duì)請(qǐng)求的處理。
在處理執(zhí)行用戶(hù)代碼的請(qǐng)求期間,前端120可繼續(xù)執(zhí)行另外的處理以促進(jìn)對(duì)事件消息或有效負(fù)荷的處理。例如,如果原始事件消息或有效負(fù)荷包括一個(gè)或多個(gè)子事件的聚合集合,那么可將每個(gè)子事件中繼到虛擬計(jì)算系統(tǒng)110以供通過(guò)用戶(hù)代碼一次一個(gè)地執(zhí)行。前端120可被配置來(lái)對(duì)將原始的、聚合的事件消息有效負(fù)荷拆分成多個(gè)單一事件進(jìn)行管理。前端120還可被配置來(lái)例如促進(jìn)中間的或聚合的檢驗(yàn)點(diǎn)服務(wù),所述中間的或聚合的檢驗(yàn)點(diǎn)服務(wù)可被要求作為處理原始事件消息的一部分。例如,包括多個(gè)事件的聚合的事件消息可能要求第一事件中的一些在隨后的、第二或第三事件之前被處理和完成;在這種情況下,前端120還可被配置來(lái)促進(jìn)對(duì)第一事件的處理,檢驗(yàn)在路由隨后的、第二或第三事件用于由虛擬計(jì)算系統(tǒng)處理/執(zhí)行之前第一事件完成的狀態(tài)。
在處理/執(zhí)行用于事件消息的用戶(hù)代碼之后,前端120還可被配置來(lái)提供另外的后處理。例如,前端120可執(zhí)行某些清除操作(例如,釋放對(duì)相關(guān)聯(lián)事件消息/包裝器的租用),執(zhí)行結(jié)果計(jì)算,提供返回值(如果需要的話),執(zhí)行檢驗(yàn)點(diǎn)操作(其例如如上文所述可在處理期間或在處理與聚合的事件消息相關(guān)的子事件之間發(fā)生)等等。在一些實(shí)施方案中,前端120可執(zhí)行記錄、監(jiān)測(cè)、告警/通知和/或與以用戶(hù)程序的名義(成功或不成功)完成事件相關(guān)聯(lián)的其他報(bào)告。在一些情況下,可執(zhí)行除在執(zhí)行用戶(hù)代碼本身期間執(zhí)行的任何記錄、監(jiān)測(cè)和相關(guān)處理之外的這類(lèi)記錄、監(jiān)測(cè)等。例如,前端120可被配置來(lái)將事件(和響應(yīng)于事件對(duì)用戶(hù)代碼的相關(guān)執(zhí)行)的結(jié)果例如報(bào)告回至事件觸發(fā)服務(wù)106a或用戶(hù)。
本領(lǐng)域中的技術(shù)人員將認(rèn)識(shí)到,本公開(kāi)中描述的所有功能可以在由所公開(kāi)部件和移動(dòng)通信裝置的一個(gè)或多個(gè)物理處理器執(zhí)行的軟件中實(shí)施。所述軟件可以永久地存儲(chǔ)在任何類(lèi)型的非易失性存儲(chǔ)器中。
除非另外特別說(shuō)明,或者在所用上下文中理解,否則諸如“能夠”、“可以”、“可能”或者“也許”等等的條件語(yǔ)言通常意圖表示,盡管其他實(shí)施方案不包括,但某些實(shí)施方案包括特定的特征、元件和/或步驟。因此,此類(lèi)條件語(yǔ)言通常并非意圖暗示無(wú)論如何所述特征、元件和/或步驟都是一個(gè)或多個(gè)實(shí)施方案必需的,或者并非暗示一個(gè)或多個(gè)實(shí)施方案必須包括用于在借助或不借助用戶(hù)輸入或提示下決定是否包括這些特征、元件和/或步驟或者是否在任何特定實(shí)施方案中執(zhí)行這些特征、元件和/或步驟的邏輯。
本文所描述和/或附圖所描繪的流程圖中的任何進(jìn)程說(shuō)明、元件或塊應(yīng)理解成潛在地代表包括用于實(shí)現(xiàn)進(jìn)程中的特定邏輯功能或步驟的一個(gè)或多個(gè)可執(zhí)行指令的模塊、片段或代碼部分。替代的實(shí)施方案包括在本文所述實(shí)施方案的范圍內(nèi),其中與本領(lǐng)域中的技術(shù)人員所理解的那樣相同,元件或功能可以刪除、不按照所示出或描述的順序執(zhí)行,包括基本上同時(shí)執(zhí)行或者逆序執(zhí)行,具體取決于所涉及的功能。還將認(rèn)識(shí)到,上述數(shù)據(jù)和/或部件可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上并使用與存儲(chǔ)計(jì)算機(jī)可執(zhí)行部件的計(jì)算機(jī)可讀介質(zhì)(諸如cd-rom、dvd-rom或網(wǎng)絡(luò)接口)相關(guān)聯(lián)的驅(qū)動(dòng)機(jī)制加載到計(jì)算裝置的存儲(chǔ)器中。另外,所述部件和/或數(shù)據(jù)可以包括在單一裝置中或者以任何方式分布。因此,通用計(jì)算裝置可以被配置來(lái)利用上述各種數(shù)據(jù)和/或部件的處理和/或執(zhí)行來(lái)實(shí)現(xiàn)本公開(kāi)的進(jìn)程、算法和方法。
應(yīng)強(qiáng)調(diào),可以對(duì)上述實(shí)施方案做出許多改變和修改,這些改變和修改的要素應(yīng)被理解為包含在其他可接受的實(shí)例當(dāng)中。在本文中,所有這類(lèi)修改和變化意圖被包括在本公開(kāi)的范圍內(nèi),并且受所附權(quán)利要求書(shū)保護(hù)。
本公開(kāi)的另外的實(shí)施方案可鑒于以下條款來(lái)描述:
1.一種用于提供針對(duì)在虛擬計(jì)算系統(tǒng)上執(zhí)行程序代碼的請(qǐng)求的事件消息的系統(tǒng),所述系統(tǒng)包括:
電子數(shù)據(jù)存儲(chǔ),所述電子數(shù)據(jù)存儲(chǔ)被配置來(lái)存儲(chǔ)與用戶(hù)的程序代碼相關(guān)的至少程序性事件處置信息;以及
事件觸發(fā)計(jì)算系統(tǒng),所述事件觸發(fā)計(jì)算系統(tǒng)包括執(zhí)行特定計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)硬件計(jì)算裝置,所述事件觸發(fā)計(jì)算系統(tǒng)與消息隊(duì)列系統(tǒng)通信,所述事件觸發(fā)計(jì)算系統(tǒng)被配置來(lái)至少:
檢測(cè)所述事件觸發(fā)計(jì)算系統(tǒng)上的事件,其中所述事件在第一時(shí)間處被檢測(cè);
基于與所述用戶(hù)的所述程序代碼相關(guān)的所述程序性事件處置信息來(lái)確定所述事件是否被指定來(lái)觸發(fā)在虛擬計(jì)算系統(tǒng)上執(zhí)行所述用戶(hù)的所述程序代碼,所述程序性事件處置信息從所述電子數(shù)據(jù)存儲(chǔ)訪問(wèn),其中所述虛擬計(jì)算系統(tǒng)被配置來(lái)開(kāi)始在第二時(shí)間處執(zhí)行所述程序代碼,其中被確定為所述第一時(shí)間與所述第二時(shí)間之間的差的時(shí)間段短于預(yù)定持續(xù)時(shí)間;
響應(yīng)于確定所述事件被指定來(lái)觸發(fā)執(zhí)行所述用戶(hù)的所述程序代碼,至少部分地基于從所述電子數(shù)據(jù)存儲(chǔ)訪問(wèn)的與所述用戶(hù)的所述程序代碼相關(guān)的所述程序性事件處置信息來(lái)生成事件消息,
其中所述事件消息至少包括用戶(hù)賬戶(hù)標(biāo)識(shí)符和以可用于以所述用戶(hù)的名義在所述虛擬計(jì)算系統(tǒng)實(shí)例上的容器上執(zhí)行所述程序代碼的模式組織的程序性信息,所述程序性信息指示至少(1)響應(yīng)于所述檢測(cè)到的事件而執(zhí)行的所述程序代碼的函數(shù)以及(2)用于執(zhí)行所述程序代碼的一個(gè)或多個(gè)事件消息參數(shù);并且
向中間消息隊(duì)列系統(tǒng)提供所述事件消息,其中所述中間消息隊(duì)列系統(tǒng)還與所述虛擬計(jì)算系統(tǒng)通信。
2.如條款1所述的系統(tǒng),其中所述事件觸發(fā)系統(tǒng)是遠(yuǎn)程存儲(chǔ)系統(tǒng),并且其中響應(yīng)于上傳到所述遠(yuǎn)程存儲(chǔ)系統(tǒng)的數(shù)據(jù)文件而生成所述事件消息。
3.如條款1所述的系統(tǒng),其中所述事件觸發(fā)系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng),并且其中響應(yīng)于所述數(shù)據(jù)庫(kù)系統(tǒng)中更新的數(shù)據(jù)庫(kù)表而生成所述事件消息
4.如條款1所述的系統(tǒng),其中所述預(yù)定持續(xù)時(shí)間是100ms。
5.一種系統(tǒng),其包括:
輔助計(jì)算系統(tǒng),所述輔助計(jì)算系統(tǒng)包括執(zhí)行特定計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)硬件計(jì)算裝置并且被配置來(lái)至少:
檢測(cè)被指定來(lái)觸發(fā)在虛擬計(jì)算系統(tǒng)上執(zhí)行用戶(hù)程序代碼的事件,其中所述事件在第一時(shí)間處被檢測(cè);
響應(yīng)于所述事件的檢測(cè),至少部分地基于從電子數(shù)據(jù)存儲(chǔ)訪問(wèn)的與所述用戶(hù)的所述程序代碼相關(guān)的程序性事件處置信息來(lái)生成事件消息,
其中所述事件消息至少包括用戶(hù)賬戶(hù)標(biāo)識(shí)符和用于在所述虛擬計(jì)算系統(tǒng)上執(zhí)行程序代碼的事件元數(shù)據(jù),所述事件元數(shù)據(jù)識(shí)別執(zhí)行所述程序代碼的函數(shù)以及到所述函數(shù)的一個(gè)或多個(gè)輸入?yún)?shù),其中所述虛擬計(jì)算系統(tǒng)被配置來(lái)開(kāi)始在第二時(shí)間處執(zhí)行所述程序代碼,其中被確定為所述第一時(shí)間與所述第二時(shí)間之間的差的時(shí)間段短于預(yù)定持續(xù)時(shí)間;并且
向中間消息隊(duì)列系統(tǒng)提供所述事件消息,其中所述中間消息隊(duì)列系統(tǒng)還與所述虛擬計(jì)算系統(tǒng)通信。
6.如條款5所述的系統(tǒng),其中所述輔助計(jì)算系統(tǒng)是遠(yuǎn)程存儲(chǔ)系統(tǒng),并且其中所述檢測(cè)到的事件是被上傳到所述遠(yuǎn)程存儲(chǔ)系統(tǒng)的數(shù)據(jù)文件。
7.如條款5所述的系統(tǒng),其中所述輔助計(jì)算系統(tǒng)是數(shù)據(jù)庫(kù)系統(tǒng),并且其中所述檢測(cè)到的事件是所述數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)庫(kù)表更新操作。
8.如條款5所述的系統(tǒng),其中所述輔助計(jì)算系統(tǒng)是獨(dú)立并不同于所述虛擬計(jì)算系統(tǒng)的第三方計(jì)算系統(tǒng)。
9.如條款5所述的系統(tǒng),其中所述事件元數(shù)據(jù)根據(jù)由所述輔助計(jì)算系統(tǒng)和所述虛擬計(jì)算系統(tǒng)兩者使用的共享模式而被格式化以處理與執(zhí)行所述程序代碼的所述函數(shù)相關(guān)的事件消息。
10.如條款9所述的系統(tǒng),其中所述共享模式呈遠(yuǎn)程過(guò)程調(diào)用的形式。
11.如條款5所述的系統(tǒng),其中所述事件元數(shù)據(jù)包括至少以下的指示符:(1)所述程序代碼在其上被執(zhí)行的操作系統(tǒng)以及(2)寫(xiě)入所述程序代碼所用的程序語(yǔ)言。
12.一種計(jì)算機(jī)實(shí)現(xiàn)的方法,其包括:
當(dāng)由被配置有特定可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算裝置實(shí)現(xiàn)時(shí),
檢測(cè)事件觸發(fā)服務(wù)上的事件,所述事件被指定來(lái)觸發(fā)在虛擬計(jì)算系統(tǒng)上執(zhí)行用戶(hù)的程序代碼,所述檢測(cè)發(fā)生在第一時(shí)間處;
響應(yīng)于檢測(cè)到所述事件,至少部分地基于從電子數(shù)據(jù)存儲(chǔ)訪問(wèn)的與所述用戶(hù)的所述程序代碼相關(guān)的程序性事件處置信息來(lái)生成事件消息,
其中所述事件消息至少包括用戶(hù)賬戶(hù)標(biāo)識(shí)符和可用于在所述虛擬計(jì)算系統(tǒng)上執(zhí)行程序代碼的事件元數(shù)據(jù);以及
向所述虛擬計(jì)算系統(tǒng)提供所述事件消息。
13.如條款12所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述事件觸發(fā)服務(wù)由獨(dú)立并不同于所述虛擬計(jì)算系統(tǒng)的第三方計(jì)算系統(tǒng)提供。
14.如條款12所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述虛擬計(jì)算系統(tǒng)被配置來(lái)開(kāi)始在第二時(shí)間處執(zhí)行所述程序代碼,其中被確定為所述第一時(shí)間與所述第二時(shí)間之間的差的時(shí)間段短于預(yù)定持續(xù)時(shí)間。
15.如條款14所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中響應(yīng)于來(lái)自所述虛擬計(jì)算系統(tǒng)的請(qǐng)求而將所述事件消息直接提供給所述虛擬計(jì)算系統(tǒng)。
16.如條款12所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述事件消息由中間消息隊(duì)列間接提供給所述虛擬計(jì)算系統(tǒng)。.
17.一種存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在由一個(gè)或多個(gè)計(jì)算裝置執(zhí)行時(shí)將所述一個(gè)或多個(gè)計(jì)算裝置配置來(lái)執(zhí)行包括以下的操作:
在第一時(shí)間處檢測(cè)輔助服務(wù)上的事件,所述事件被指定來(lái)觸發(fā)在虛擬計(jì)算系統(tǒng)上執(zhí)行用戶(hù)的程序代碼;
響應(yīng)于檢測(cè)到所述事件,至少部分地基于與所述用戶(hù)的所述程序代碼相關(guān)的事件處置信息來(lái)生成事件消息,所述事件處置信息從電子數(shù)據(jù)存儲(chǔ)訪問(wèn),
其中所述事件消息至少包括用戶(hù)賬戶(hù)標(biāo)識(shí)符和用于在所述虛擬計(jì)算系統(tǒng)上執(zhí)行程序代碼的事件元數(shù)據(jù),所述事件元數(shù)據(jù)包括可由所述虛擬計(jì)算系統(tǒng)用來(lái)確定執(zhí)行所述程序代碼的函數(shù)和到所述函數(shù)的一個(gè)或多個(gè)輸入?yún)?shù)的數(shù)據(jù);并且
提供針對(duì)在所述虛擬計(jì)算系統(tǒng)上執(zhí)行所述程序代碼的所述事件消息,其中所述虛擬計(jì)算系統(tǒng)被配置來(lái)開(kāi)始在第二時(shí)間處執(zhí)行所述程序代碼,其中被確定為所述第一時(shí)間與所述第二時(shí)間之間的差的時(shí)間段短于預(yù)定持續(xù)時(shí)間。
18.如條款17所述的非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中所述輔助服務(wù)由獨(dú)立并不同于所述虛擬計(jì)算系統(tǒng)的第三方計(jì)算系統(tǒng)提供。
19.如條款17所述的非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中所述輔助服務(wù)是遠(yuǎn)程存儲(chǔ)系統(tǒng),其中所述事件是所述遠(yuǎn)程存儲(chǔ)系統(tǒng)上的數(shù)據(jù)文件上傳事件,并且其中執(zhí)行所述程序代碼的所述函數(shù)是被指定來(lái)響應(yīng)于檢測(cè)到所述遠(yuǎn)程存儲(chǔ)系統(tǒng)上的所述數(shù)據(jù)文件上傳事件而執(zhí)行的文件上傳事件處理程序。
20.如條款17所述的非暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中所述事件元數(shù)據(jù)根據(jù)由所述輔助服務(wù)和所述虛擬計(jì)算系統(tǒng)兩者使用的共享模式而被格式化以處理與執(zhí)行所述程序代碼的所述函數(shù)相關(guān)的事件消息。