CN114930295A - 利用预留容量而不抑制缩放的无服务器调用分配 - Google Patents

利用预留容量而不抑制缩放的无服务器调用分配 Download PDF

Info

Publication number
CN114930295A
CN114930295A CN202080091438.9A CN202080091438A CN114930295A CN 114930295 A CN114930295 A CN 114930295A CN 202080091438 A CN202080091438 A CN 202080091438A CN 114930295 A CN114930295 A CN 114930295A
Authority
CN
China
Prior art keywords
arc
task
execution
demand code
call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202080091438.9A
Other languages
English (en)
Other versions
CN114930295B (zh
Inventor
大卫·C·亚纳切克
肖恩·泰勒·迈尔斯
约格什·阿加瓦尔
纳韦恩·达萨·苏布拉马尼亚姆
阿米特·拉古纳特·库尔卡尼
阿里特拉·班迪奥帕迪亚
J·崔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/698,845 external-priority patent/US11119826B2/en
Priority claimed from US16/698,829 external-priority patent/US10942795B1/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN114930295A publication Critical patent/CN114930295A/zh
Application granted granted Critical
Publication of CN114930295B publication Critical patent/CN114930295B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5072Grid computing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

描述了用于通过提供针对代码而预留的一组环境来减少无服务器代码执行系统内的冷启动代码的系统及方法。前端利用一致性散列环来在管理所述系统中的环境的一组管理器装置当中分配用于执行的调用,所述调用是以将调用分组在一起并尝试将同一群组的调用分配到所述管理器装置的稳定子组的方式来分配的。每一群组都指派有弧,表示一子组管理器装置。当接收到预留有环境的用以执行一组代码的调用时,所述前端将所述调用分配给预留弧的管理器装置。当接收到没有预留环境的用以执行一组代码的调用时,所述前端将所述调用分配给与非预留执行的弧相关联的弧。

Description

利用预留容量而不抑制缩放的无服务器调用分配
背景技术
计算装置可利用通信网络来交换数据。公司及组织操作将若干计算装置互连以支持操作或向第三方提供服务的计算机网络。计算系统可位于单个地理位置中或位于(例如,经由私有或公共通信网络互连的)多个不同地理位置中。具体来说,数据中心或数据处理中心(本文通常称为“数据中心”)可包括若干个经互连计算系统以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的私有数据中心,或者可以是代表公众或为公众利益运营的公共数据中心。
为了促进提高对数据中心资源的利用率,虚拟化技术允许单个物理计算装置对对于数据中心的用户来说就像独立计算装置一样出现及操作的一个或多个虚拟机实例进行托管。利用虚拟化,单个物理计算装置可以动态方式创建、维护、删除或以其它方式管理虚拟机。继而,用户可从包括单个计算装置或联网计算装置的配置且配备有不同数目的虚拟机资源的数据中心请求计算机资源。
在一些场景中,可根据若干个虚拟机实例类型来配置虚拟机实例以提供特定功能性。举例来说,各种计算装置可与操作系统或操作系统配置、虚拟化硬件资源及软件应用的不同组合相关联,以使得计算装置能够提供不同所期望功能性或者更有效地提供类似功能性。通常在装置映像中含有这些虚拟机实例类型配置,所述装置映像包括含有虚拟机一旦启动就会运行的软件的静态数据(例如,OS及应用连同其配置及数据文件等)。装置映像通常存储在用于创建或初始化实例的磁盘上。因此,计算装置可处理装置映像以便实施所期望软件配置。
附图说明
图1是描绘说明性环境的框图,在所述环境中,按需代码执行系统可操作以分配用以执行任务的调用,所述调用包括与预留容量相关联的调用以及与预留容量不相关联的调用,同时不抑制系统上这类调用的可缩放性,并且同时避免冷启动;
图2描绘了提供前端的计算装置的一般架构,所述前端经配置以促进在图1的按需代码执行系统上分配用以执行任务的调用;
图3是描绘用于在图1的按需代码执行系统上分配调用以执行任务的说明性交互的流程图,包括基于任务是否与预留容量相关联来确定在分配任务时所使用的弧;
图4是可在图1的按需代码执行系统的每一前端处进行维护的一致性散列环及相关联弧的说明性图形描绘;以及
图5是描绘用于分配调用的说明性例程的流程图,所述例程可由图1的按需代码执行系统的前端实施;
图6是描绘用于在图1的按需代码执行系统上处置用以执行任务的调用的溢出的说明性交互的流程图,所述调用溢出与预留容量相关联但超过所述容量;以及
图7是描绘可由图1的按需代码执行系统的前端实施的用于分配调用的说明性例程的流程图,包括用于有效处置与预留容量相关联但超过所述容量的调用溢出的元素。
具体实施方式
如一般所描述,本公开的各方面涉及管理按需代码执行系统上的任务执行,所述按需代码执行系统也可称为“无服务器”执行系统,以便通过增加将执行分配给具有经预配置以处置所述执行的执行环境的主机计算装置的概率来减少执行时间。具体来说且如下文所更详细描述,本公开的实施方案通过在无服务器系统中提供预留经预加温容量来解决无服务器计算中的“冷启动”问题,所述容量可用于服务对特定代码集(“任务”)的调用。此外,本公开提供了多种路由机制,使得即使在超过任务的预留容量的情形中,无服务器系统的前端也能够以增加调用被路由到“温”(例如,预先供应的)环境的机会的方式在系统内路由调用。
如本文中所描述,按需代码执行系统使得能够快速地执行可由按需代码执行系统的用户供应的源代码。举例来说,用户可提交特定编程语言(例如,PYTHONTM语言)的脚本,所述脚本在被执行时实施面向用户的应用(例如,移动装置“app”)的基于网络的处理。然后,按需代码执行系统可使得用户能够提交“调用”来执行所述脚本,此时系统将安全地执行所述脚本以提供所需功能性。与一些其它基于网络的服务不同,按需代码执行系统可消除用户维护或配置虚拟或物理计算装置以支持代码执行的需要。由于用户不需要维护装置,因此按需代码执行系统有时被称为“无服务器”系统(当然,尽管与各个用户相反,按需代码执行系统本身可维护服务器以支持代码执行)。
为了促进快速按需执行代码,系统可维护预先供应有在代码执行期间所使用的软件(诸如操作系统、代码库等)的各种执行环境(例如,虚拟机实例、软件容器等)。当接收到执行代码的请求时,系统可尝试将所述请求路由到这种预先供应的环境,使得代码能够在所述环境中快速执行而没有由于向环境供应执行代码所必需的软件而导致的延迟。然而,由于系统可能支持的代码种类繁多,预先供应的环境可能并不总是可用。此外,在给定系统的分布式性质的情况下,即使预先供应的环境确实存在,在合理时间内(例如,在比仅仅重新供应环境所花费的时间更短的时间内)定位所述环境也可能是一项重要任务。当无法定位预先供应的环境时,在环境供应有必要软件时,用以执行代码的调用可能会延迟。这一延迟有时被称为“冷启动”,这是因为没有针对调用定位到“温”(例如,预先供应的)环境。冷启动会给用以执行任务的调用增加显著延时,并且在一些情形中会抑制按需代码执行系统的采用。
在一些实例中,按需代码执行系统基于过去的使用来供应环境。举例来说,第一次调用表示任务的一组代码时,调用可能会导致冷启动。然而,在代码执行之后,系统可在给定时间段(例如,5分钟)内维护现在所供应的环境。如果在所述时段内接收到对所述任务的另一调用,那么系统可尝试将所述调用路由到现在的温环境,从而避免冷启动。因此,到系统的“稳态”流量(例如,在每秒的调用数目相对稳定的情况下)可减少冷启动的问题。然而,不稳定的流量可能更容易受到冷启动的影响。虽然系统可实施各种预测技术来尝试预先供应环境以处置不稳定流量,但在一些情形中,用户需要减少冷启动,这一点基于这类预测技术是无法保证的。
为了解决这一问题,本公开的实施方案使得能够使用按需代码执行系统上的预留容量,表示针对给定任务的代码而维护在预先供应状态中的一组执行环境。举例来说,用户可能要求按需代码执行系统处置任务的至少500个并发执行,并且因此所述系统可维护预先供应有任务的代码所需的软件的至少500个执行环境,而不管系统处接收到的用以执行任务的实际调用数目。因此,可预期,当任务的并发执行数目不超过500时,不会发生冷启动。然而,为了支持许多不同任务的许多执行,按需代码执行系统通常可以分布式方式运行,使得许多装置协同工作以实施系统的每一功能。举例来说,用以执行任务的调用被寻址到的系统的“前端”实际上可由各种不同前端装置实施。如在分布式系统中常见的那样,对于每一前端,维护关于状态的完美及最新信息可能是不可能或不切实际的。此外,对于不同功能或不同客户,可能存在若干个不同组的预留容量,并且可将每一组预留容量分布在若干个主机装置上。此外,可期望每一前端不仅处置执行具有预留容量的任务的调用,还处置执行不具有预留容量的任务的调用。因此,实施一种路由机制是很重要的,所述机制可在每一前端处很大程度上独立地实施,使得用以执行任务的所有调用——具有或不具有预留容量——都有高概率被路由到预先供应有软件之处,以执行任务的代码。
本公开的实施方案提供了实现这一目标的路由机制。具体来说,如本文中所公开,按需代码执行系统的执行环境可由一组分布式“工作器管理器”管理,所述一组“工作器管理器”表示管理由主机装置(“工作器”)托管的一组执行环境的装置。一组分布式前端中的每一者可实施一致性散列环路由机制,所述机制在工作器管理器当中划分用以执行任务的调用,使得每一调用被路由到基于与所述调用相关联的散列值而从环选择的个别工作器管理器。举例来说,对于一般调用(例如,对于不具有预留容量的任务),调用实体的账户识别符可被散列到散列环内的位置,并且所述调用可被路由到与所述位置相关联的工作器管理器。由于个别工作器管理器的容量通常是有限的,因此可能不期望每一前端将来自给定账户的所有调用路由到同一工作器管理器。而是,前端可基于按需代码执行系统所支持的账户的所期望并发执行数目(所述数目在本文中通常可被称为账户的“节流限制”)来选择工作器管理器数目,在所述工作器管理器当中分配与账户相关联的调用。举例来说,系统可被配置成使得每一工作器管理器都支持与给定账户相关联的任务的500个并发执行。因此,在账户被配置成支持2000个并发任务执行的节流限制的情况下,与所述账户相关联的执行调用可在四个工作器管理器当中进行划分,所述四个工作器管理器可以是与散列环中对应于账户识别符的散列的位置相关联的工作器管理器加上环上的三个后续工作器管理器。因为这四个工作器管理器占据了整个散列环的子组,所以与给定群组的任务调用(例如,与给定账户相关联的调用)相关联的所述一组工作器管理器通常可被称为一群组调用的“弧”。每一前端可实施相同弧创建逻辑,并且因此可预期一群组调用的弧在所有前端上都是相同的。
在一些实施方案中,可将节流限制及相关联账户弧配置成基于与弧相关联的负载来缩放。举例来说,在一组时段中的每一时段(例如,每5分钟)处,前端可基于过去时段内弧的平均数目并发执行来使节流限制及相关联账户弧递增或递减。因此,当弧上的负载达到总容量的阈值百分比(例如,弧容量的80%,诸如由一个工作器管理器的弧长度表示的500个并发执行容量)时,前端可将节流限制增加500,并且还通过向弧添加工作器管理器来增加弧长度,因此将弧的容量增加由所述工作器管理器提供的并发执行数目。当弧上的负载下降到低于阈值容量(例如,弧容量的60%,例如表示为由两个工作器管理器的弧长度表示的1000个执行容量)时,前端可将节流限制减少500个执行,并且还通过移除弧的工作器管理器来减少弧长度,因此将弧的容量减少由所述工作器管理器提供的并发执行数目。因此,节流限制及账户弧的大小可缩放以考虑弧上的负载。
当在前端处接收到与弧相关联的调用时,前端然后可将所述调用分配给从弧内的那些工作器管理器选择的工作器管理器。虽然可在弧内使用各种负载平衡技术,但在一个实施方案中,每一前端实施循环选择来选择弧内的工作器管理器。与维护每一任务的弧相比,将每一账户的调用分组到每个账户弧中可有益地减少实施每一前端所需的资源。此外,使用每个账户弧可提供系统的更高效率,这是因为在一些情形中,在特定工作器管理器处对账户的任务执行进行分组可提高这类工作器管理器的操作效率。举例来说,系统可被配置成使得与给定账户相关联的不同任务执行可在同一虚拟机实例上实施(例如,作为实例上的不同容器),而不同账户的任务执行可能需要在不同虚拟机实例上执行(以提高安全性)。然而,每个账户弧也可减少给定任务的调用被路由到管理所述任务的温环境的工作器管理器的机会。举例来说,当一个账户的一个弧包括四个工作器管理器并且对给定前端进行两个迭代调用以执行任务时,前端处的循环选择可能导致第一工作器管理器管理第一调用且第二工作器管理器管理第二调用。这样一来,第二调用可能会经历冷启动。
在具有预留容量的任务的情况下,为了使得能够将调用一致地路由到为那些任务所预留的环境,每一前端可经配置以维护具有预留容量的每一任务的相异弧。具体来说,每一前端可将对具有预留容量的任务的调用视为一群组调用,并且因此将一致性散列环内的弧(例如,基于作为环内的位置的函数识别符的散列值而选择的一组n个工作器管理器)分配给所述群组。弧内的一组工作器管理器是说明性地基于任务的预留环境数目来选择的。举例来说,如果工作器管理器经配置以处置给定弧的不超过500个环境,并且用户已请求了800个预留环境,那么可将弧大小设置为2,其中每一工作器管理器处置环境的相等部分(400)。弧内的每一工作器管理器可被配置为访问预留环境的其相应部分,使得当每一前端将用以执行任务的调用路由到两个工作器管理器中的一者时,该工作器管理器可将调用分派给所述任务的预留环境,因此使得任务的执行不会发生冷启动。与账户弧不同,预留容量弧在一些配置中经静态地定大小,使得所述弧以对应于总预留容量的特定长度开始并继续。
类似地,与预留容量相关联的任务可与不同于账户的节流限制的节流限制相关联。在不考虑预留容量的当前使用的情况下,可将所述容量节流限制设置为等于当前预留容量(例如,500个环境)。
因此,当在前端处接收到调用时,前端可确定一致性散列环的适当弧以用于路由调用(例如,账户弧,或者在预留容量存在的情况下,预留容量弧)。然后,前端可选择与所述弧相关联的工作器管理器并将所述调用分配给工作器管理器。然后,工作器管理器可定位调用的环境(优选地,预先供应的环境)且在所述环境内执行所调用任务。因为对具有预留容量的任务的调用被路由到维护那些调用的预留环境的工作器管理器,所以这类调用被路由到具有经预加温环境的管理器的概率非常高(并且在一些情形中,可能是100%)。因此,本文中所描述的路由机制使得每一前端能够在不干扰其它调用的路由的情况下准确地路由与预留容量相关联的调用。
在按需代码执行系统中使用预留并发可能引起的另一问题是执行超过了预留容量。按需代码执行的一个益处是可缩放性——因为用户不需要配置及管理其自身装置,系统使得用户能够缩放操作,从而仅仅调用用户可能需要的尽可能多的并发任务执行。然而,当用户预留了特定数目的环境时,可能期望系统也会处置超出所述环境数目的调用。也就是说,仅仅因为用户预留了500个环境,可能不期望系统拒绝用以执行任务的第501调用。此外,通常,可能期望像处置系统上的其它更一般的调用一样处置超过预留容量的节流限制的调用,诸如通过基于账户弧而不是预留容量弧来进行路由。因此,可将本公开的实施方案中的每一前端配置成允许处置“溢出”调用——对具有超过预留容量的节流限制的预留容量的函数的调用。具体来说,按需代码执行系统可供应有“计数服务”,所述“计数服务”使得每一前端能够报告与特定节流限制(例如,预留容量节流限制或账户节流限制)相关联的执行,并获得与所有前端上的所述节流限制相关联的执行计数。当前端获得对具有超过所述预留容量的节流限制的预留容量的任务的调用(例如,对具有500个预留环境的任务的第501调用)时,可将前端配置为将这种调用作为来自账户的一般调用而不是对预留容量的调用来处置。
以这种方式处置超过预留容量的调用的一个潜在副作用是这类溢出调用的冷启动的可能性。举例来说,在将对具有500个预留环境的任务的第501调用路由到一般弧内的工作器管理器的情况下,所述管理器很可能没有可用于所述调用的经预加温环境,并且这样一来,所述调用可能经历冷启动。虽然这一点在许多情况下可能是可接受的(例如,因为调用数目超过了预留容量,并且因此用户大概接受冷启动的可能性),但这通常是不期望的,并且在一些情形中可能导致不直观操作。举例来说,如上文所论述,即使不具有预留容量,按需代码执行系统通常也可在任务的稳态执行水平下最小化冷启动,其中并发执行数目通常随时间保持恒定。因此,如果用户最初预留了任务的容量,但后来认识到所述任务正在经历稳态执行水平,那么用户可尝试减少或撤销预留容量(例如,以减少系统对预留容量强加的用户成本,从而考虑了维护预留容量所需的计算成本)。然而,在前端将超过预留容量的调用“溢出”到账户弧的情况下,减少或撤销预留容量可导致所述稳态调用的所有或一部分溢出到账户弧并且因此经历冷启动。在稳态执行水平下,由于预留容量减少而发生的冷启动表示非所期望操作。此外,这些冷启动实际上可增加系统的计算负载,这是因为冷启动需要在账户弧上供应新环境,尽管事实是在预留容量弧上存在经预加温环境。
为了解决由于预留容量的减少而导致的冷启动的这一问题,根据本公开的实施方案的前端可继续将溢出调用路由到预留容量弧,只要所述弧的工作器管理器具有所述任务的温(但不是“热”,例如,当前正在使用中)环境即可。具体来说,每一前端可经配置以针对弧来维护弧的负载信息,所述负载信息指示在工作器管理器处使用的弧的环境与温的但并非使用中的环境相比的比例。当前端接收到对将以其它方式作为溢出请求处置(例如,超过预留容量的节流限制)的任务的请求时,只要弧的负载低于给定阈值(例如,95%、99%等),前端就可替代地经配置以基于预留容量弧来路由任务。此外,弧上的工作器管理器(并且可能通常)可经配置以当温环境在阈值时段(例如,5分钟)内未被利用时将那些环境释放到可用资源池中。因此,即使当预留容量及对应节流限制减少时,对具有现在减少的预留容量的任务的请求将继续被路由到预留容量弧,多达所述弧的容量(如在预留容量减少之前所建立)。在稳态执行水平下,所述容量将保持恒定并可用于服务于请求。然而,如果任务的并发执行数目(“并发性水平”)下降,那么所述弧的工作器管理器可能会释放经预加温环境,因此导致所述弧的容量减小。这一配置可实现预留容量弧“适度”缩小,使得在稳态并发性水平下不会经历冷启动。
现将论述按需代码执行系统的一般操作。具体来说,本文中所公开的按需代码执行系统可使得用户能够通过提交或指定计算机可执行源代码来创建请求驱动服务,所述计算机可执行源代码将响应于用以访问这类服务的用户请求而由按需代码执行系统上的虚拟机实例执行。按需代码执行系统上的每一组代码可定义“任务”,并且当在按需代码执行系统的虚拟机实例上执行时实施对应于所述任务的特定功能性(例如,基于网络的服务的功能性)。按需代码执行系统上的任务的个别实现方式可被称为任务的“执行”(或“任务执行”)。按需代码执行系统可进一步使得用户能够基于多种潜在事件来触发任务的执行,所述潜在事件诸如为在基于网络的存储系统处检测到新的数据、向按需代码执行系统传输应用编程接口(“API”)调用或向按需代码执行系统传输特殊格式的超文本传输协议(“HTTP”)包。因此,用户可在不需要配置或维护在其上执行代码的基础硬件或基础设施的情况下利用按需代码执行系统“按需”执行任何指定的可执行代码。此外,按需代码执行系统可经配置以便以快速方式(例如,在100毫秒[ms]以下)执行任务,因此使得能够“实时”(例如,在终端用户几乎不可感知延迟的情况下)执行任务。为了实现这种快速执行,按需代码执行系统可包括一个或多个虚拟机实例,所述虚拟机实例经“预加温”或预初始化(例如,被引导到操作系统中并执行完整或基本完整的运行时环境)并经配置以使得能够执行用户定义的代码,使得可响应于用以执行代码的请求而在没有由初始化虚拟机实例引起的延迟的情况下快速地执行代码。因此,当触发任务的执行时,可在极短时间内在经预初始化虚拟机内执行对应于所述任务的代码。
具体来说,为了执行任务,本文中所描述的按需代码执行系统可维护经预初始化虚拟机实例池,一旦接收到用户请求,所述实例就准备好使用。由于这些虚拟机的预初始化性质,与执行用户代码相关联的延迟(有时称为延时)(例如,实例及语言运行时启动时间)可显著减少,通常减少到100毫秒以下的水平。说明性地,按需代码执行系统可在一个或多个物理计算装置上维护虚拟机实例池,其中每一虚拟机实例上加载有一个或多个软件部件(例如,操作系统、语言运行时、库等)。当按需代码执行系统接收到用以执行用户的程序代码(“任务”)的调用时,所述调用规定了用于执行用户的程序代码的一个或多个计算约束,按需代码执行系统可基于由请求规定的一个或多个计算约束来选择用于执行用户的程序代码的虚拟机实例,并且可导致用户的程序代码在所选择虚拟机实例上执行。可在虚拟机实例上所创建的隔离容器中执行程序代码。由于在接收到请求时,池中的虚拟机实例已被引导并加载有特定操作系统及语言运行时,因此与找到能够处置请求(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)的计算容量相关联的延迟显著减少。
按需代码执行系统可包括虚拟机实例管理器(“工作器管理器”),所述虚拟机实例管理器经配置以接收用户代码(通过多种编程语言中的任一者编撰的线程、程序等)并在无需虚拟机实例的用户配置的情况下通过高度可缩放、低延时方式执行代码。具体来说,虚拟机实例管理器可在接收到用户代码之前以及在从用户接收关于任何特定虚拟机实例配置的任何信息之前根据一预定组配置来创建并配置虚拟机实例,每一组配置对应于多种运行时环境中的任何一者或多者。此后,虚拟机实例管理器接收用户发起的用以执行代码的请求,并基于与所述请求相关联的配置信息来识别经预配置虚拟机实例以执行代码。虚拟机实例管理器可进一步分派所识别虚拟机实例以至少部分地通过以下操作来执行用户的代码:在所分派虚拟机实例内部创建及配置容器;以及为所述容器供应任务的代码以及相依性代码对象。在标题为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FORREQUESTS TO EXECUTE PROGRAM CODE”且在2014年9月30日提出申请的美国专利第9,323,556号(“‘556专利”)中更详细地描述了用于实施虚拟机实例管理器并在虚拟机实例上执行用户代码的各种实施方案,所述专利的全部内容在此以引用方式并入。
如本文中所使用,术语“虚拟机实例”旨在指代仿真硬件以提供软件可在其上执行的环境或平台(“执行环境”)的软件或其它可执行代码的执行。虚拟机实例通常由硬件装置执行,所述硬件装置与虚拟机实例所仿真的物理硬件可能有所不同。举例来说,虚拟机可仿真第一类型的处理器及存储器,同时在第二类型的处理器及存储器上执行。因此,可利用虚拟机在正在执行第二执行环境(例如,第二操作系统)的物理装置上执行旨在针对第一执行环境(例如,第一操作系统)的软件。在一些实例中,由虚拟机实例仿真的硬件可与基础装置的硬件相同或类似。举例来说,具有第一类型的处理器的装置可实施多个虚拟机实例,每一虚拟机实例仿真所述第一类型的处理器的实例。因此,可使用虚拟机实例将装置划分为一定数目的逻辑子装置(每一逻辑子装置被称为“虚拟机实例”)。虽然虚拟机实例通常可提供远离基础物理装置的硬件的抽象水平,但此抽象并非所需的。举例来说,假设装置实施了多个虚拟机实例,所述多个虚拟机实例中的每一者仿真与由装置提供的硬件相同的硬件。在这种情景下,每一虚拟机实例可允许软件应用在不转译的情况下在基础硬件上执行代码,同时维护在其它虚拟机实例上运行的软件应用之间的逻辑分离。通常被称为“本机执行”的这一过程可用于增加虚拟机实例的速度或性能。还可使用允许直接利用基础硬件的其它技术,诸如硬件直通技术。
虽然本文中将执行操作系统的虚拟机描述为执行环境的一个示例,但其它执行环境也是可能的。举例来说,可在软件“容器”中执行任务或其它过程,所述软件“容器”提供运行时环境而其本身并不提供硬件的虚拟化。可在虚拟机内实施容器以提供额外安全性,或者可在虚拟机实例的外部运行所述容器。
通过参考在结合附图进行时的以下描述,本公开的前述方面及许多附带优点将变得更容易理解并且变得更好理解。
图1是说明性操作环境100的框图,在所述说明性操作环境中,按需代码执行系统110可基于与用户计算装置102、辅助服务106及基于网络的数据存储服务108的通信进行操作。通过说明方式,将包括桌上型计算机、膝上型计算机及移动电话的各种示例性用户计算装置102展示为与按需代码执行系统110通信。一般来说,用户计算装置102可以是任何计算装置,诸如桌上型计算机、膝上型计算机或平板计算机、个人计算机、可穿戴计算机、服务器、个人数字助理(PDA)、混合PDA/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、相机、数字媒体播放器等等。按需代码执行系统110可向用户计算装置102提供一个或多个用户接口、命令行接口(CLI)、应用编程接口(API)和/或用于以下操作的其它编程接口:生成并上传用户可执行源代码(例如,包括识别所上传代码的相依性代码对象的元数据);叫用用户提供的源代码(例如,提交在按需代码执行系统110上执行源代码的请求);调度基于事件的作业或定时的作业;跟踪用户提供的源代码;和/或查看与其请求和/或源代码相关的其它日志记录或监控信息。虽然可能在本文中将一个或多个实施方案描述为使用用户接口,但应了解,另外或可替代地,这类实施方案可使用任何CLI、API或其它编程接口。
说明性环境100进一步包括可与按需代码执行环境110交互以代表用户实施所期望功能性的一个或多个辅助服务106。辅助服务106可对应于诸如服务器等经网络连接计算装置,所述经网络连接计算装置生成可由按需代码执行环境110访问的数据或者以其它方式与按需代码执行环境110通信。举例来说,辅助服务106可包括web服务(例如,与用户计算装置102相关联、与按需代码执行系统110相关联或者与第三方相关联)、数据库、真正简易聚合(“RSS”)阅读器、社交网站、或者网络可访问服务或数据源的任何其它源。在一些实例中,辅助服务106可通过按需代码执行系统110上的代码执行来叫用,诸如通过对辅助服务106的API调用来叫用。在一些实例中,辅助服务106可与按需代码执行系统110相关联,例如,向按需代码执行系统110提供计费或日志记录服务。在一些实例中,辅助服务106主动向按需代码执行系统110传输信息,诸如API调用或其它任务触发信息。在其它实例中,辅助服务106可以是被动的,使得数据可供按需代码执行系统110访问。举例来说,按需代码执行系统110的部件可周期性地轮询这类被动数据源,并且基于所提供的数据触发按需代码执行系统110内的任务的执行。虽然在图1中被描绘为不同于用户计算装置102及按需代码执行系统110,但在一些实施方案中,各种辅助服务106可由用户计算装置102或按需代码执行系统110实施。
说明性环境100进一步包括一个或多个基于网络的数据存储服务108,所述一个或多个基于网络的数据存储服务经配置以使得按需代码执行系统110能够存储数据以及从一个或多个持久的或基本上持久的数据源检索数据。说明性地,基于网络的数据存储服务108可使得按需代码执行系统110能够:存储对应于任务的信息,诸如源代码或元数据;存储表示任务的相依性的额外代码对象;检索将要在执行任务期间处理的数据;以及存储关于所述执行的信息(例如,结果)。基于网络的数据存储服务108可表示(例如)关系或非关系数据库。在另一示例中,基于网络的数据存储服务108可表示网络附接存储装置(NAS),所述网络附接存储装置经配置以提供对被布置成文件系统的数据的访问。基于网络的数据存储服务108可进一步使得按需代码执行系统110能够诸如通过以下操作来查询及检索关于存储在按需代码执行系统110内的数据的信息:查询若干相关文件或记录、那些文件或记录的大小、文件或记录名称、文件或记录创建时间等。在一些实例中,基于网络的数据存储服务108可提供额外功能性,诸如将数据分离成逻辑群组(例如,与个别账户相关联的群组等)的能力。虽然展示为不同于辅助服务106,但基于网络的数据存储服务108在一些实例中也可表示一种类型的辅助服务106。
用户计算装置102、辅助服务106及基于网络的数据存储服务108可经由网络104与按需代码执行系统110通信,所述网络可包括任何有线网络、无线网络或其组合。举例来说,网络104可以是个域网、局域网、广域网、空中广播网络(例如,用于收音机或电视)、电缆网络、卫星网络、蜂窝电话网络或其组合。作为另一示例,网络104可以是可能由各个不同方操作的经链接网络的可公开访问网络,诸如互联网。在一些实施方案中,网络104可以是专用或半专用网络,诸如公司或大学内联网。网络104可包括一个或多个无线网络,诸如全球移动通信系统(GSM)网络、码分多址(CDMA)网络、长期演进(LTE)网络或任何其它类型的无线网络。网络104可使用用于经由互联网或其它前述类型的网络中的任一者进行通信的协议及部件。举例来说,由网络104使用的协议可包括超文本传输协议(HTTP)、HTTP安全(HTTPS)、消息队列遥测传输(MQTT)、受约束应用协议(CoAP)等等。经由互联网或其它前述类型的通信网络中的任一者进行通信的协议及部件是所属领域的技术人员所公知的,并且因此未在本文进行更详细描述。
按需代码执行系统110在图1中被描绘为在分布式计算环境中操作,所述分类式计算环境包括使用一个或多个计算机网络(图1中未展示)进行互连的数个计算机系统。按需代码执行系统110还可在具有比图1中所图解说明的装置更少或更多数目的装置的计算环境内操作。因此,应将图1中对按需代码执行系统110的描绘视为说明性的而非限制本公开。举例来说,按需代码执行系统110或其各种构成可实施各种Web服务部件、托管或“云”计算环境和/或对等网络配置以实施本文中所描述的过程的至少一部分。
此外,按需代码执行系统110可直接在硬件或由硬件装置执行的软件中实施,并且可(例如)包括在经配置以执行计算机可执行指令从而用于执行将在本文中描述的各种特征的物理计算机硬件上实施的一个或多个物理或虚拟服务器。一个或多个服务器可以是地理位置分散的或在地理上共同位于例如一个或多个数据中心中。在一些实例中,一个或多个服务器可作为快速供应及释放的计算资源的系统(通常称为“云计算环境”)的一部分来操作。
在图1的示例中,将按需代码执行系统110图解说明为连接到网络104。在一些实施方案中,按需代码执行系统110内的部件中的任一者可经由网络104与按需代码执行系统110的其它部件通信。在其它实施方案中,并非按需代码执行系统110的所有部件都能够与虚拟环境100的其它部件通信。在一个示例中,仅前端120可连接到网络104,并且按需代码执行系统110的其它部件可经由前端120与环境100的其它部件通信。
在图1中,用户可通过用户计算装置102与按需代码执行系统110交互以提供源代码,并且建立界定应何时以及如何在按需代码执行系统110上执行这种代码的规则或逻辑,因此建立“任务”。举例来说,用户可能希望结合用户已开发的web或移动应用来运行一条代码。运行所述代码的一种方式将是:从提供基础设施作为服务的服务提供者获取虚拟机实例;配置所述虚拟机实例以满足用户的需要;以及使用所配置虚拟机实例来运行所述代码。为了避免这一过程的复杂性,用户可替代地向按需代码执行系统110提供代码,并请求按需代码执行系统110使用一个或多个预先建立的虚拟机实例来执行代码。按需代码执行系统110可基于代码执行请求来处置计算容量(例如,在下文更详细地描述的容器、实例等)的获取及配置,并且使用所述计算容量来执行所述代码。按需代码执行系统110可基于量进行自动放大和缩小,由此减轻用户不得不担忧过度利用(例如,获取太少计算资源并遭受性能问题)或利用不足(例如,获取比运行代码所需的计算资源多的计算资源,并且因此付出过多)的负担。
为了实现与按需代码执行系统110的交互,系统110包括实现与按需代码执行系统110的交互的多个前端120。在说明性实施方案中,前端120用作由按需代码执行系统110提供的其它服务的“前门”,从而使得用户能够(经由用户计算装置102)提供计算机可执行源代码、请求执行计算机可执行源代码并查看计算机可执行源代码的结果。前端120包括用以实现在按需代码执行系统110与其它计算装置之间的交互的多种部件。举例来说,每一前端120可包括请求接口,所述请求接口向用户计算装置102提供以下能力:将用户规定的代码上传或以其它方式传送到按需代码执行系统110;及其后请求执行所述代码。在一个实施方案中,所述请求接口经由图形用户接口(GUI)、CLI或API与外部计算装置(例如,用户计算装置102、辅助服务106等)通信。前端120处理所述请求并确保所述请求被恰当地授权。举例来说,前端120可确定与所述请求相关联的用户是否被授权访问在所述请求中规定的源代码。
本文中所使用的对源代码的引用可指代以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“源代码”、“用户代码”及“程序代码”可互换使用。为在特定装置上执行而编译的源代码在本文中通常称为“机器代码”。“源代码”及“机器代码”两者都是相同指令的表示,可统称为“代码”。举例来说,可结合用户开发的特定web应用或移动应用执行这种代码以实现特定功能。如上文所述,代码的个别集合(例如,用以实现特定功能)在本文中称为“任务”,而对所述代码的特定执行称为“任务执行”或简称为“执行”。可通过非限制性示例以JavaScript(例如,node.js)、Java、Python和/或Ruby(和/或另一编程语言)来编写任务的源代码。可以多种方式“触发”任务以供在按需代码执行系统110上执行。在一个实施方案中,用户或其它计算装置可传输执行任务的请求,所述请求通常可称为执行所述任务的“调用”。这类调用可包括将要执行的源代码(或其位置)以及要用于执行源代码的一个或多个自变量。举例来说,调用可提供任务的源代码以及用以执行任务的请求。在另一示例中,调用可通过先前上传的任务名称或识别符来识别先前上传的任务。在再一示例中,对应于任务的源代码可包括于对所述任务的调用中,以及在按需代码执行系统110接收到所述请求之前上传于单独位置(例如,辅助服务106的存储装置或在按需代码执行系统110内部的存储系统)中。前端120的请求接口可从用户接收调用以执行作为超文本传输协议安全(HTTPS)请求的任务。而且,还可在执行任务时处理及利用包括于HTTPS请求中的任何信息(例如,报头及参数)。如上文所论述,可使用任何其它协议(包括例如HTTP、MQTT及CoAP)将含有任务调用的消息传送到请求接口122。
用以执行任务的调用可规定一个或多个第三方库(包括本机库)连同对应于任务的用户代码一起使用。在一个实施方案中,所述调用可向按需代码执行系统110提供ZIP文件,所述ZIP文件含有对应于请求执行的任务的源代码及任何库(和/或对其存储位置的识别)。在一些实施方案中,所述调用包括元数据,所述元数据指示要执行的任务的源代码、编写所述源代码的语言、与所述调用相关联的用户和/或被预留以用于执行所述源代码的计算资源(例如,存储器等)。举例来说,任务的源代码可配备有调用、先前由用户上传、由按需代码执行系统110提供(例如,标准例程)和/或由第三方提供。说明性地,通过使用与代码相关联的URI,可在任务的元数据内引用不包括于调用内或先前由用户上传的代码。在一些实施方案中,这类资源级约束是针对特定任务规定的(例如,要分派多少存储器用于执行特定代码),并且在任务的每一执行时都不会发生变化。在这类情形中,按需代码执行系统110可在接收到每一个别调用之前具有对这类资源级约束的访问权,并且个别调用可能未规定这类资源级约束。在一些实施方案中,所述调用可规定诸如许可数据等其它约束,所述许可数据指示所述调用叫用何种种类的许可或权限来执行所述任务。这种许可数据可由按需代码执行系统110使用以访问专用资源(例如,在专用网络上)。在一些实施方案中,个别代码集还可与许可或授权相关联。举例来说,第三方可提交代码对象并将所述对象指定为仅一子组用户可读。按需代码执行系统110可包括用以执行关于代码集的这些许可或授权的功能性。
在一些实施方案中,调用可规定为了处置所述调用应采取的行为。在这类实施方案中,调用可包括用于启用执行调用中所引用的任务的一个或多个执行模式的指示符。举例来说,调用可包括用于指示是否应以调试模式执行任务的旗标或报头,在所述调试模式中,将可结合所述任务的执行而生成的调试和/或日志记录输出往回提供给用户(例如,经由控制台用户接口)。在这种示例中,按需代码执行系统110可检验所述调用并寻找旗标或报头,并且如果存在所述旗标或报头,那么按需代码执行系统110可修改在其中执行所述任务的容器的行为(例如,日志记录设施),且致使将输出数据往回提供给用户。在一些实施方案中,通过由按需代码执行系统110提供给用户的用户接口将行为/模式指示符添加到所述调用。也可基于调用中所提供的指示来启用或禁用其它特征,诸如源代码剖析、远程调试等。
为了管理对代码执行的请求,前端120可包括执行队列(图1中未展示),所述执行队列可维护所请求任务执行的记录。说明性地,按需代码执行系统110同时执行的任务的数目是有限的,并且因此,可将在按需代码执行系统110处发起(例如,经由API调用、经由从被执行或正在执行的任务的调用等)的新任务执行放置在执行队列124上并例如以先进先出次序进行处理。在一些实施方案中,按需代码执行系统110可包括多个执行队列,诸如用于每一用户账户的个别执行队列。举例来说,按需代码执行系统110的用户可期望限制按需代码执行系统110上的任务执行的速率(例如,出于成本原因)。因此,按需代码执行系统110可利用账户专有执行队列来节制特定用户账户进行的同时任务执行的速率。在一些实例中,按需代码执行系统110可优先考虑任务执行,使得特定账户或所规定优先级的任务执行绕过或者在执行队列内优先考虑。在其它实例中,按需代码执行系统110可在接收到对任务的调用之后立即或基本上立即执行所述任务,并且因此,可省略执行队列。
如上文所述,可基于来自用户计算装置102的显式调用(例如,如在请求接口122处接收)来触发任务以便在按需代码执行系统110处进行执行。可替代地或另外,可基于从一个或多个辅助服务106或基于网络的数据存储服务108检索到的数据来触发任务以便在按需代码执行系统110处进行执行。为了促进与辅助服务106的交互,前端120可包括轮询接口(图1中未展示),所述轮询接口操作以向辅助服务106或数据存储服务108轮询数据。说明性地,轮询接口可周期性地将请求传输到一个或多个用户规定的辅助服务106或数据存储服务108以检索任何新的可用数据(例如,社交网络“帖子”、新闻文章、文件、记录等),并且确定所述数据是否对应于触发在按需代码执行系统110上执行任务的用户建立的标准。说明性地,任务的执行标准可包括但不限于在辅助服务106或数据存储服务108处是否可获得新数据、数据的类型或内容或者对应于所述数据的定时信息。在一些实例中,辅助服务106或数据存储服务108可用以向前端120通知新数据的可用性,并且因此,关于这类服务,轮询服务可以是不必要的。
除了基于显式用户调用以及来自辅助服务106的数据而执行的任务以外,按需代码执行系统110在一些实例中可操作以独立触发执行任务。举例来说,按需代码执行系统110可操作(基于来自用户的指令)以触发在一定数目的所规定时间间隔(例如,每10分钟)中的每一者处执行任务。
前端120可进一步包括经配置以输出关于在按需代码执行系统110上执行任务的信息的输出接口(图1中未展示)。说明性地,所述输出接口可将关于任务执行的数据(例如,任务的结果、与任务执行相关的错误或者任务执行的细节,诸如完成所述执行所需的总时间、经由所述执行所处理的总数据等)传输到用户计算装置102或辅助服务106,所述辅助服务可包括例如计费或日志记录服务。所述输出接口可进一步实现将诸如服务调用的数据传输到辅助服务106。举例来说,可在任务的执行期间利用所述输出接口将API请求传输到外部服务106(例如,以存储在任务的执行期间所生成的数据)。
根据本公开的实施方案,每一前端说明性地包括用于识别特定工作器管理器140的调用分配器122,将调用路由到所述特定工作器管理器140以执行任务。下文更详细地描述了与调用分配器相关联的例程及交互;然而,简单地说,调用分配器122可利用一致性散列环算法在工作器管理器140当中分配调用,其中将调用分组成相关组(例如,与账户相关联的调用、与预留并发性相关联的调用等),并且每一组与选自这类管理器的循环组织(“散列环”)的一群组工作器管理器140(“弧”)相关联。对于每一调用,分配器122可识别与所述调用相关联的弧,且然后将所述调用分配给所述弧的工作器管理器(例如,在这类工作器管理器当中以循环方式)。在预留容量弧发生溢出的实例中,分配器122可基于预留容量弧或者基于账户弧、基于账户弧的剩余容量来路由调用,以避免可能以其它方式与溢出相关联的冷启动。
为了促进调用分配器122的操作,系统110还包括表示分布式网络可访问服务的计数服务170,所述计数服务经配置以维护与按需代码执行系统110上的每一节流限制(例如,账户、预留容量等的节流限制)相关联的当前执行的计数。具体来说,计数服务170可提供诸如包括“countUp”及“countDown”函数的API等接口,所述接口可由每一分配器122调用以使与节流限制相关联的计数递增或递减(例如,分别在接收调用及完成所调用任务的执行时)。响应于countUp或countDown调用或者响应于另一函数(诸如“getCount”函数),服务170可向调用分配器122返回在所有前端120的所有分配器122上聚集的节流限制的计数。为了促进缩放,计数服务170可以分布式方式操作,诸如通过服务170的多个实例,每一实例对应于经配置以实施服务170的实例的计算装置(物理的或物理上虚拟的)。实例可相互通信,以尝试跨实例统一计数,且可利用诸如Paxos-family协议的一致协议来提供当前计数。在给定服务170的分布式特性及对给定弧的潜在调用频率的情况下,可设想由服务170提供的对节流限制的计数可能不总是完全准确的。然而,值得注意的是,本公开的实施方案使得调用分配器122能够在不需要完全了解给定节流限制的并发性水平的情况下进行操作。
为了执行任务,按需代码执行系统110包括一个或多个加温池管理器130,其“预加温”(例如,初始化)虚拟机实例以尝试使得能够在不具有由虚拟机的初始化导致的延迟的情况下快速执行任务。按需代码执行系统110进一步包括管理活动虚拟机实例(例如,当前经分配以响应于任务调用而执行任务)的一个或多个工作器管理器140。虽然图1中未展示,但将每一虚拟机实例说明性地托管在物理主机计算装置(在本文中有时称为“工作器”)上。加温池管理器130及工作器管理器140——其中之每一者也说明性地实施为物理或物理上虚拟装置——说明性地维护关于其当前正在管理的实例的状态信息,且可彼此通信以变更对实例的管理。举例来说,工作器管理器140可与加温池管理器130通信以转移对实例的管理,使得管理器140可指示实例(在工作器上)执行任务的代码。因此,尽管出于说明性目的将实例展示为在加温池管理器130或工作器管理器140“上”,但这些实例可能不存在于与相应管理器130及140相同的物理装置上,并且因此实例的“转移”可能不需要实例的重新定位,而仅仅是管理实例的管理器130/140的改变。
加温池管理器130通常可经配置以当按需代码执行系统110检测到触发按需代码执行系统110上的任务的执行的事件时尝试确保虚拟机实例准备好被工作器管理器140使用。在图1中所图解说明的示例中,每一加温池管理器130管理对应加温池130A,所述加温池是可用于响应于任务的触发来执行那些任务的一群组(有时称为一池)经预初始化及预配置虚拟机实例。在一些实施方案中,加温池管理器130致使虚拟机实例在按需代码执行系统110内的一个或多个物理计算机器上启动并被添加到对应加温池130A。举例来说,每一加温池管理器130可致使基于用以服务于传入调用的对应加温池130A中的可用容量将额外实例添加到对应加温池130A。如下文将描述,加温池管理器130可进一步结合按需代码执行系统110的其它部件(诸如工作器管理器140)工作,以基于所接收预触发通知来添加或以其他方式管理加温池130A中的实例和/或容器。在一些实施方案中,加温池管理器130可使用按需代码执行系统110内的物理计算装置及一个或多个虚拟机实例服务来获取并维护可用于服务由前端120接收的调用的计算容量。此外,按需代码执行系统110可包括一个或多个逻辑旋钮或开关,用于控制(例如,增加或减少)加温池130A中的可用容量。举例来说,系统管理员可使用这种旋钮或开关在高峰时间增加加温池130A中的可用容量(例如,所预启动实例的数目)。在一些实施方案中,可基于独立于执行任务的特定调用的预定一组配置来配置加温池130A中的虚拟机实例。预定一组配置可对应于用以执行任务的各种类型的虚拟机实例。加温池管理器130可基于与当前或先前任务执行相关的一个或多个度量来优化加温池130A中的虚拟机实例的类型及数目。此外,加温池管理器130可基于预触发通知来建立或修改加温池130A中的虚拟机实例的类型及数目(例如,通过基于预期基于所接收预触发通知执行的任务的要求来预初始化一个或多个虚拟机实例)。在工作器管理器140向加温池管理器130请求虚拟机实例的特定配置但这种配置不可用的实例中,管理器130可通过选择主机装置来托管所述实例并向所述实例供应所述配置所需的软件(例如,在任务的执行期间所使用的软件)来操作以生成并配置所述实例。
如图1中所展示,实例可在其上加载有操作系统(OS)和/或语言运行时。举例来说,由加温池管理器130管理的加温池130A可包括实例152、154。实例152包括OS 152A及运行时152B。实例154包括OS 154A。在一些实施方案中,加温池130A中的实例还可包括容器(其可进一步含有操作系统、运行时、用户代码等的副本)。尽管实例152在图1中展示为包括单个运行时,但在其它实施方案中,图1中所描绘的实例可包括两个或更多个运行时,其中之每一者可用于运行不同用户代码。在一些实施方案中,加温池管理器130可维护对应加温池130A中的实例列表。实例列表可进一步规定实例的配置(例如,OS、运行时、容器等)。
在一些实施方案中,加温池130A中的虚拟机实例可用于服务任何用户的调用。在一个实施方案中,以相同或基本类似方式配置加温池130A中的所有虚拟机实例。在另一实施方案中,可以不同方式配置加温池130A中的虚拟机实例以适应不同用户的需要。举例来说,虚拟机实例可在其上加载有不同操作系统、不同语言运行时和/或不同库。在再一实施方案中,可以相同或基本类似方式配置加温池130A中的虚拟机实例(例如,具有相同OS、语言运行时和/或库),但那些实例中的一些可具有不同容器配置。举例来说,一个实例可具有在其中所创建的用于运行以Python编写的代码的容器,并且另一实例可具有在其中所创建的用于运行以Ruby编写的代码的容器。
加温池管理器130可预先配置加温池130A中的虚拟机实例,使得每一虚拟机实例经配置以满足用户在定义任务时可能请求或规定的操作条件中的至少一者。在一个实施方案中,操作条件可包括可编写任务的潜在源代码的程序语言。举例来说,这类语言可包括Java、JavaScript、Python、Ruby等等。在一些实施方案中,可用来编写任务的源代码的语言集可限于预定语言集(例如,4种语言的语言集,尽管在一些实施方案中提供多于或少于四种语言的语言集),以便促进可满足用以执行任务的调用的虚拟机实例的预初始化。举例来说,当用户经由按需代码执行系统110提供的用户接口配置任务时,用户接口可提示用户规定用于执行任务的预定操作条件中的一者。在另一示例中,利用按需代码执行系统110提供的服务的服务级别协议(SLA)可规定任务应满足的一组条件(例如,编程语言、计算资源等),并且按需代码执行系统110可假设任务在处置请求时满足所述一组条件。在另一示例中,由任务规定的操作条件可包括:用于执行任务的计算能力的量;任务的触发事件的类型(例如,API调用、HTTP包传输、辅助服务106处特定数据的检测);任务的超时(例如,阈值时间,在所述时间之后可终止任务的执行);及安全性策略(例如,可控制加温池130A中的哪些实例可由哪个用户使用),以及其它所规定条件。
一个或多个工作器管理器140管理用于服务于用以执行任务的传入调用的实例。在图1所图解说明的示例中,每一工作器管理器140管理活动池140A,所述活动池是当前指派给一个或多个用户的由一个或多个物理主机计算装置实施的一群组(有时称为一池)虚拟机实例。虽然在此处将虚拟机实例描述为指派给特定用户,但在一些实施方案中,可将实例指派给一群组用户,使得所述实例被捆绑到所述一群组用户并且所述一群组的任何成员可利用所述实例上的资源。举例来说,同一群组中的用户可属于同一安全群组(例如,基于其安全证书),使得在特定实例上的容器中执行一个成员的任务之后在同一实例上的另一容器中执行另一成员的任务不会造成安全风险。类似地,工作器管理器140可根据一个或多个策略来指派实例及容器,所述一个或多个策略规定可在哪些容器中执行哪些请求以及可将哪些实例指派给哪些用户。示例性策略可规定将实例指派给共享同一账户的用户的集合(例如,考虑到访问由按需代码执行系统110提供的服务)。在一些实施方案中,与同一用户群组相关联的请求可共享同一容器(例如,如果与所述请求相关联的用户代码是等同的)。在一些实施方案中,任务不在所述群组的不同用户之间进行区分,而是仅仅指示与任务相关联的用户所属的群组。
如图1中所展示,实例可具有操作系统(OS)、语言运行时及容器。容器可在其上加载有对应于各种任务的OS、运行时及用户代码的个别副本。在图1的示例中,由工作器管理器140管理的活动池140A包括实例156、158。实例156具有OS 156A、运行时156B、156C及容器156D、156E。容器156D包括OS 156A的副本、运行时156B的副本及代码156D-1的副本。容器156E包括OS 156A的副本、运行时156C的副本及代码156E-1的副本。实例158具有OS 158A、运行时158B、158C、158E、158F、容器158D及代码158G、158H。容器158D具有OS 158A的副本、运行时158B的副本及代码158D-1的副本。如图1中所图解说明,实例可在其上加载有用户代码,并且那些实例中的容器也可在其中加载有用户代码。在一些实施方案中,运行时也可以是用户提供的。运行时——有时被称为运行时系统——一般来说包括经设计以支持以给定计算机语言编写的源代码的执行的一组软件。在一些实施方案中,工作器管理器140可维护活动池140A中的实例列表。实例列表可进一步规定实例的配置(例如,OS、运行时、容器等)。在一些实施方案中,工作器管理者140可访问加温池130A中的实例列表(例如,包括实例的数目及类型)。在其它实施方案中,工作器管理器140在不知道加温池130A中的虚拟机实例的情况下从加温池管理器130请求计算容量。
在图1所图解说明的示例中,在被称为容器(例如,容器156D、156E、158D)的隔离执行环境中执行任务。容器是使用虚拟机实例上可用的资源在所述实例中创建的逻辑单元。举例来说,每一工作器管理器140可基于在用以执行任务的调用中所规定的信息在活动池140A中的实例中的一者中创建新容器或定位现有容器并将所述容器指派给所述调用以处置任务的执行。在一个实施方案中,将这类容器实施为Linux容器。
一旦前端120已成功地处理了用以执行任务的触发事件,前端120就将请求传递到工作器管理器140以执行所述任务。在接收到用以执行任务的请求时,工作器管理器140找到在按需代码执行系统110上执行任务的容量。举例来说,如果在活动池140A中存在具有其中已加载任务的用户代码的容器(例如,容器156D中所展示的代码156D-1)(例如,“温”容器)的特定虚拟机实例,那么工作器管理器140可将所述容器指派给所述任务并致使将在所述容器中执行所述任务。可替代地,如果任务的用户代码在虚拟机实例中的一者的本地高速缓存中可用(例如,存储在实例158上但不属于任何个别容器的代码158G、158H),那么工作器管理器140可在这种实例上创建新容器,将容器指派给任务,并致使将在容器中加载及执行任务的用户代码。
如果工作器管理器140确定在活动池140A中的实例中的任一者上(例如,在实例的容器或本地高速缓存中)没有找到与所触发任务相关联的源代码,那么工作器管理器140可确定活动池140A中的实例中的任一者当前是否被指派给与所触发任务相关联的用户并且是否具有用以处置所触发任务的计算容量。如果存在这种实例,那么工作器管理器140可在所述实例上创建新容器并指派所述容器执行所触发任务。可替代地,工作器管理器140可进一步在指派给用户的实例上配置现有容器并将所述容器指派给所触发任务。举例来说,如果将任务所要求的特定库加载到现有容器上,那么工作器管理器140可确定可使用现有容器来执行任务。在这种情形中,工作器管理器140可将特定库及任务的代码加载到容器上并使用所述容器来执行任务。
如果活动池140未含有当前指派给用户的任何实例,那么工作器管理器140从加温池130A拉出新虚拟机实例,将所述实例指派给与所触发任务相关联的用户,在所述实例上创建新容器,将所述容器指派给所触发任务,并且致使在所述容器上下载并执行任务的源代码。
在一些实施方案中,按需代码执行系统110适于在任务被接收(例如,由前端120)之后不久开始执行任务。可将时间段确定为发起任务的执行(例如,在与用户相关联的虚拟机实例上的容器中)与检测到触发任务的执行的事件(例如,前端120接收到的调用)之间的时间差。按需代码执行系统110适于在小于预定持续时间的时间段内开始执行任务。在一个实施方案中,预定持续时间是500ms。在另一实施方案中,预定持续时间是300ms。在另一实施方案中,预定持续时间是100ms。在另一实施方案中,预定持续时间是50ms。在另一实施方案中,预定持续时间是10ms。在另一实施方案中,预定持续时间可以是选自10ms到500ms的范围的任何值。在一些实施方案中,如果满足一个或多个条件,那么按需代码执行系统110适于在小于预定持续时间的时间段内开始执行任务。举例来说,一个或多个条件可包括以下各项中的任何一个:(1)在接收到请求时,将任务的源代码加载到活动池140中的容器上;(2)在接收到对任务的调用时,将任务的源代码存储在活动池140中的实例的代码高速缓存中;(3)在接收到调用时活动池140A含有指派给与所述调用相关联的用户的实例;或者(4)在检测到触发任务的执行的事件时,加温池130A具有处置任务的容量。
一旦工作器管理器140在加温池130A中定位到可用于执行任务的虚拟机实例中的一者,加温池管理器130或工作器管理器140就将所述实例带出加温池130A并将所述实例指派给与所述请求相关联的用户。将所指派虚拟机实例带出加温池130A并放置在活动池140A中。在一些实施方案中,一旦将虚拟机实例指派给特定用户,就不能使用同一虚拟机实例来执行任何其它用户的任务。这通过防止用户资源的可能的多根并合来为用户提供安全益处。可替代地,在一些实施方案中,属于不同用户(或指派给与不同用户相关联的请求)的多个容器可共存于单个虚拟机实例上。这种方法可提高可用计算容量的利用率。
在一些实施方案中,按需代码执行系统110可维护在其中存储任务代码的单独高速缓存,以用作虚拟机实例的本地高速缓存与账户数据存储区164(或图1中未展示的其它基于网络的存储装置)之间的中间级别的高速缓存系统。工作器管理器140在服务于调用时可能遇到的各种场景在‘556专利内有更详细描述,所述专利在上文(例如,在‘556专利的图4处)通过引用方式并入。
在任务已执行之后,工作器管理器140可拆除用于执行任务的容器以释放其所占据的资源以供实例中的其它容器使用。可替代地,工作器管理器140可保持容器运行以使用其来服务于来自同一用户的额外调用。举例来说,如果另一调用与已加载在容器中的同一任务相关联,那么可将所述调用指派给同一容器,由此消除与创建新容器及将任务的代码加载在容器中相关联的延迟。在一些实施方案中,工作器管理器140可拆除创建用于执行任务的容器的实例。可替代地,工作器管理器140可保持实例运行以使用其来服务于来自同一用户的额外调用。在完成任务执行之后是否保持容器和/或实例运行的确定可基于阈值时间、用户的类型、用户的平均任务执行量和/或其它操作条件。举例来说,在没有任何活动(例如,任务执行)的情况下经过阈值时间(例如,5分钟、30分钟、1小时、24小时、30天等)之后,将容器和/或虚拟机实例关闭(例如,删除、终止等),并且释放分派给其的资源。在一些实施方案中,在拆除容器之前经过的阈值时间短于在拆除实例之前经过的阈值时间。
根据本公开的实施方案,加温池管理器130及工作器管理器140可共同操作以确保,对于与预留容量相关联的给定任务,跨管理器130及140为所述任务供应的执行环境数目(例如,VM实例或VM实例上的容器)不会低于预留容量的水平。因此,这些环境可被排除在管理器130及140的典型“拆除”策略之外,使得它们即使在未被使用时也被破坏。说明性地,工作器管理器130可在接收到对保留容量的请求时在加温池130A内创建所需数目的环境,并且可基于对环境的请求将这类环境“出售”给不同工作器管理器140。当环境在给定工作器管理器140处未使用时,管理器140对环境的“租约”可能到期,并且环境将恢复到由一组加温池管理器130管理。因此,管理器130及140可确保环境可用于服务于任务的前n个请求,其中n是任务的预留容量。在一些实例中,为一组预留容量维护的环境数目可能会超过预留容量很少的量(例如,1%、5%、10%等)。这可使得系统110能够避免在所获得的调用数目接近预留容量时原本可能会发生的冷启动(例如,由于在分布式系统中维护完整状态信息的困难)。
在一些实施方案中,按需代码执行系统110可在其响应于触发事件而执行任务时向辅助服务106中的一个或多个提供数据。举例来说,前端120可与包括于辅助服务106中的监控/日志记录/计费服务通信。监控/日志记录/计费服务可包括:监控服务,用于管理从按需代码执行系统110接收到的监控信息,诸如按需代码执行系统110上的容器及实例的状态;日志记录服务,用于管理从按需代码执行系统110接收到的日志记录信息,诸如由按需代码执行系统110上的容器及实例执行的活动;以及计费服务,用于生成与在按需代码执行系统110上执行用户代码相关联的计费信息(例如,基于由监控服务及日志记录服务管理的监控信息和/或日志记录信息)。除了可由监控/日志记录/计费服务(例如,代表按需代码执行系统110)执行的系统级活动之外,监控/日志记录/计费服务可代表在按需代码执行系统110上执行的任务提供应用级服务。举例来说,监控/日志记录/计费服务可代表在按需代码执行系统110上执行的任务监控和/或记录各种输入、输出或者其它数据及参数。
在一些实施方案中,工作器管理器140可对由工作器管理器140管理的实例及容器(例如,对应活动池140A中的那些实例及容器)执行健康检查。举例来说,由工作器管理器140执行的健康检查可包括确定由工作器管理器140管理的实例及容器是否具有以下各项的任何问题:(1)错误配置的联网和/或启动配置;(2)耗尽的存储器;(3)损坏的文件系统;(4)不兼容的内核;和/或可能损害实例及容器的性能的任何其它问题。在一个实施方案中,工作器管理器140周期性地执行健康检查(例如,每5分钟、每30分钟、每小时、每24小时等)。在一些实施方案中,可基于健康检查的结果自动调整健康检查的频率。在其它实施方案中,可基于用户请求调整健康检查的频率。在一些实施方案中,工作器管理器140可对加温池130A中的实例和/或容器执行类似健康检查。可与活动池140A中的那些实例及容器一起对加温池130A中的实例和/或容器进行管理或可对所述实例和/或容器进行分开管理。在一些实施方案中,在将加温池130A中的实例和/或容器的健康与活动池140A分开管理的情况下,加温池管理器130而不是工作器管理器140可对加温池130A中的实例和/或容器执行上文所描述的健康检查。
在所描绘示例中,在由加温池管理器130管理的加温池130A中展示虚拟机实例(“实例”)152、154,并且在由工作器管理器140管理的活动池140A中展示实例156、158。按需代码执行系统110内的各种部件的图解说明本质上是逻辑的,并且部件中的一个或多个可由单个计算装置或多个计算装置实施。举例来说,可在各种不同地理区域的一个或多个物理计算装置上实施实例152、154、156、158。类似地,可跨多个物理计算装置实施每一前端120、加温池管理器130及工作器管理器140。可替代地,可在单个物理计算装置上实施前端120、加温池管理器130及工作器管理器140中的一者或多者。尽管在图1的示例中展示了四个虚拟机实例,但本文中所描述的实施方案不限于此,并且所属领域的技术人员将了解,按需代码执行系统110可包括使用任何数目的物理计算装置实施的任何数目的虚拟机实例。类似地,尽管在图1的示例中展示了多个加温池130A及活动池140A,但本文中所描述的实施方案不限于此,并且所属领域的技术人员将了解,按需代码执行系统110可包括任何数目的加温池及活动池。
虽然本文中参考了按需代码执行系统110的个别部件来大致描述一些功能性,但另外或可替代地,其它部件或部件组合可实施这些功能性。举例来说,与包括相异服务170相反,前端120可以对等方式操作来提供对应于计数服务170的功能性。
图2描绘了计算系统(被称为前端120)的一般架构,所述计算系统操作以促进跟踪信息在按需代码执行系统上的跨环境应用。图2中所描绘的前端120的一般架构包括可用于实施本公开的各方面的计算机硬件及软件模块的布置。可利用物理电子装置来实施硬件模块,如下文将更详细论述。前端120可包括比图2中所展示的更多(或更少)的元件。然而,为了提供能够实现的公开,没有必要展示所有这些一般常规的元件。另外,图2中所图解说明的一般架构可用于实施图1中所图解说明的其它部件中的一者或多者。如所图解说明,前端120包括处理单元290、网络接口292、计算机可读介质驱动器294及输入/输出装置接口296,所有这些都可通过通信总线方式彼此通信。网络接口292可提供对一个或多个网络或计算系统的连接性。处理单元290因此可经由网络104接收来自其它计算系统或服务的信息及指令。处理单元290还可与存储器280通信并进一步经由输入/输出装置接口296为任选显示器(未展示)提供输出信息。输入/输出装置接口296还可从任选输入装置(未展示)接受输入。
存储器280可含有处理单元290执行以便实施本公开的一个或多个方面的计算机程序指令(在一些实施方案中分组为模块)。存储器280通常包括随机存取存储器(RAM)、只读存储器(ROM)和/或其它持续的、辅助的或非暂时性计算机可读介质。存储器280可存储操作系统284,所述操作系统提供供处理单元290在代码分析系统160的一般管理及操作中使用的计算机程序指令。存储器280可进一步包括用于实施本公开的各方面的计算机程序指令及其它信息。举例来说,在一个实施方案中,存储器280包括用户接口单元282,所述用户接口单元例如经由安装在计算装置上的诸如浏览器或应用等导航和/或浏览接口生成用于在计算装置上显示的用户接口(和/或用于所述用户接口的指令)。另外,存储器280可包括一个或多个数据存储库(未展示)和/或与所述一个或多个数据存储库通信,例如,以访问用户程序代码和/或库。
除了用户接口单元282以外和/或结合用户接口单元282,存储器280可包括可由处理单元290执行的调用分配器122。在一个实施方案中,调用分配器122实施本公开的各个方面(例如,图5及图7的例程)。
在一些实施方案中,前端120可进一步包括除了图2中所图解说明的那些部件之外的部件。举例来说,存储器280可进一步包括用以促进执行环境内任务的执行的用户代码执行单元、用于管理虚拟机实例中容器的创建、准备及配置的容器管理器等。
参考图3,描绘了用于分配用以在按需代码执行系统110上执行任务的调用的说明性交互,包括识别用于分配调用的弧以及选择要向其分配调用的所述弧的工作器管理器140。将结合图4描述图3,图4是一致性散列环数据结构400及可在每一前端120处维护的相关联弧的说明性图形描绘。
图3的交互开始于(1)处,其中用户装置102向前端120提交调用以执行任务。请求的提交可包括将专用数据传输到前端120,诸如引用所述任务的HTTP包或API调用。虽然将图3的交互描述为包括由用户装置102进行的用以执行任务的显式请求,但用以执行任务的请求可以各种方式发生,包括由辅助服务106(图3A中未展示)提交调用或由按需代码执行系统110生成调用(例如,基于在满足特定标准时调用别名的规则,诸如经过一个时间段或检测到辅助服务106上的数据)。请求可包括执行任务所需的任何信息,诸如执行参数、执行任务或在执行任务期间使用的认证信息等。在一些情形中,请求可以是用以执行与预留容量相关联的任务的调用。在其它情形中,所述请求可以是用以执行与预留容量不相关联的任务的调用。
在一些实例中,用户可为任务请求预留容量,但请求仅对所述任务的一些调用使用这种预留容量。因此,在一个实施方案中,系统110可实现任务的多个“副本”的创建,每一“副本”与不同识别符(或“别名”)相关联。因此,对任务的第一别名的调用可使用预留容量,而对第二别名的调用可能不会。
在(2)处,前端120向计数服务170传输调用以使与当前所调用任务的节流限制相关联的计数递增。举例来说,在调用是针对具有预留容量的任务的情况下,前端120可使与预留容量的节流限制相关联的计数递增。在调用与预留容量不相关联的情况下,前端120可使与将在其下执行调用的账户的节流限制相关联的计数递增。作为响应,服务170在(3)处将与所述节流限制相关联的当前计数返回给前端120。为了便于描述,将假定所述计数不超过相关联节流限制。然而,将在下文更详细地论述用于处置超过相关联节流限制的调用的交互。
此后,在(4)处,前端120识别一致性散列环的弧以用于路由调用。图4中将这种环的示例展示为作为环400。如图4中所展示,环400表示潜在散列值的范围,说明性地以0开始并以n结束(其可表示潜在散列值的上限或由散列函数提供的潜在值的总范围中的任何其它值)。系统110的每一工作器管理器140(展示为“WM”1-8,但是可使用任何数目的管理器140)与环上的一个位置相关联,对应于由环表示的范围中的散列值。根据对一致性散列环400的利用,可根据识别在前端120处获得的每一群组调用的划分关键字通过散列算法(本领域中已知的多种散列算法)来处理所述一群组调用。举例来说,与账户相关联的一群组调用可将账户识别符用作划分关键字,而与任务(或任务别名)相关联的一群组调用可将任务识别符用作划分关键字。作为通过散列算法处理关键字的结果,为所述群组指派落入环400的范围内的散列值。在一些实例中,在环400的范围不等于散列函数的所有潜在值的总范围的情况下,前端120可对由散列函数提供的散列值执行模数除法(例如,散列值%n),以获得环400的范围中的值。
在获得环400内的位置时,前端120可选择与调用的弧相关联的初始工作器管理器140(所述弧表示一群组调用内的调用可被分配给的所有工作器管理器140)。在一个实施方案中,前端120选择与在环上的调用的位置(如由调用的散列值所设置)之后的环中的管理器140的第一位置相关联的工作器管理器140。在其它实施方案中,前端120基于调用在环上的位置选择环中的另一工作器管理器140(例如,调用的位置之前的第一管理器140),尽管值得注意的是,这也可表示为管理器140在环中的位置的移位。举例来说,在一群组调用的散列值(例如,账户识别符的散列值)落在点402与404之间的情况下,可向所述群组指派以“WM2”开始的弧、与点404相关联的说明性管理器140。类似地,在一群组调用的散列值(例如,账户识别符的散列值)落在点404与406之间的情况下,可向所述群组指派以“WM3”开始的弧、与点406相关联的说明性管理器140等。因为可预期每一调用群组的散列值是相对随机的并且分布在范围400当中,所以也可预期每一弧的初始工作器管理器140均匀分布在管理器140上。此外,环400实现了一致性路由,使得给定群组内的调用一致地导致相同散列值。结果,相对于诸如随机路由的不一致路由,将调用路由到具有可用温环境的管理器140的可能性会增加。
如上文所论述,在一些实例中,每一工作器管理器140可配置有用于给定调用群组的阈值容量。举例来说,每一管理器140可经配置以对于每群组调用具有500的容量。因此,在调用群组的所支持并发性(例如,节流限制)超过个别管理器140的容量的情况下,可将多个管理器指派给调用群组。说明性地,管理器的数目可计算为所支持并发性除以个别管理器140的并发性容量。在一些实例中,所支持并发性可缩放。举例来说,系统110可经配置以对给定群组(例如,账户识别符)最初支持多达500个调用,并且可随着时间增加该所支持并发性(例如,通过对于所使用并发性超过所支持并发性的阈值百分比的每一5分钟时段,将所支持并发性增加500个调用)。在其它实例中,所支持并发性可以是静态的。举例来说,可将对应于具有预留容量的任务的一群组调用的所支持并发性设置为预留容量水平。
支持给定群组内的调用的一组工作器管理器140说明性地表示所述群组的“弧”,所述“弧”可对应于基于所述群组的散列值(如上文所论述)为所述群组选择的初始管理器140以及提供所支持并发性所需的任何额外工作器管理器140。举例来说,如果给定群组具有1000的所支持并发性,并且每一管理器140具有所述群组的500个并发执行的容量,那么所述群组的弧长度将是2。如果所述群组的散列值导致环400中WM5的初始选择(例如,因为所述值位于环上的点408与410之间),那么所述群组的弧将由管理器140WM5及WM6组成。对于不具有预留容量的群组,将弧维持在尽可能最短的长度以支持弧的所支持并发性可能是有益的,这是因为提供较大弧可进一步在群组内分配调用并增加调用登陆不具有可用温环境的管理器140的机会。对于具有预留容量的群组,可将弧长度设置为预留容量的最大值,这是因为可预期所述弧内的每一管理器140具有用于调用的预留温环境。
图4中展示了弧的说明性表420,可在每一前端120处对所述表的副本进行维护。具体来说,如图4中所展示,每一弧可与散列值相关联,诸如函数识别符或账户识别符的散列。基于散列值在环中相对于初始工作器管理器140的位置,每一这种散列值与环400内的初始工作器管理器140相关联。每一弧进一步与长度相关联,表示提供所支持并发性所需的工作器管理器140的数目。因此,表420内的第一条目指示对于对应于“function_A”的给定调用群组,前端120应从群组选择开始于WM2处且弧长度为1(例如,仅WM2)的工作器管理器140。表420内的第二条目指示对于对应于“function_B”的调用群组,前端120应从群组选择开始于WM4处且长度为5(例如,WM4-WM8)的管理器140。针对不同调用群组展示对应于函数或帐户的类似条目。在一个实施方案中,每一前端120维护关于系统110的所有潜在弧的信息。在另一实施方案中,前端120可共同维护每一群组调用的所支持并发性,并且当个别前端120首先获得一群组调用内的调用时,前端120可确定所述群组调用的所支持并发性并生成基于所支持并发性为所述群组识别弧的信息。
返回到图3,在获得用以执行任务的调用时,前端120在(4)处确定环400的弧以用于分配所述调用。在一个实施方案中,如果函数与预留容量相关联,那么前端120利用对应于所述函数的弧,并以其它方式利用对应于所述函数的账户的弧。因此,举例来说,对“account_A”的“function_A”的调用将利用由表420中的第一条目表示的弧,而对所述账户的另一函数(例如,“function_E”)的调用将利用由表420中的第4条目表示的弧。
此后,在(5)处,前端120选择与要向其分配调用的弧相关联的工作器管理器140。说明性地,前端120可以“循环”方式从弧中的那些管理器选择管理器140,从而相对于为弧的过去调用选择的弧中的管理器140而选择弧中的下一管理器140。
在选择管理器140时,前端120然后在(6)处将调用分配给管理器140。管理器140继而将调用放置在执行环境(例如,虚拟机实例或容器)中,使得在环境中执行所调用任务。另外,在(8)处,管理器120向前端120返回管理器140的加载信息,所述加载信息可表示为与给定弧相关联的当前执行的数目除以由工作器管理器140管理的弧的可用环境的数目。如下文所论述,加载信息此后可被前端120用来处置对弧的后续请求。
虽然图3的交互大致论述了将调用分配给工作器管理器140,但前端120与管理器140之间的交互在一些情形中可有所不同。举例来说,在一些情形中,管理器140可识别环境,并将对环境的识别信息返回给前端120,而不是直接导致环境中任务的执行。前端120继而可将指令传输给所识别环境以执行任务。参考图6提供这类交互的示例,如下文所论述。
因此,根据本公开的实施方案,图3的交互可使得前端120能够以实现一些调用的预留容量同时不抑制分配不具有预留容量的调用的方式并且以提供将调用路由到具有用于调用的经预加温环境的管理器140的高概率的方式分配用以执行任务的调用。
参考图5,将描述用于在按需代码执行系统内分配调用的说明性例程500。例程500可例如由图1的前端120实施。
例程500开始于框502处,其中前端120获得用以执行任务的调用。如上文所论述,所述调用可由用户装置102传输(例如,作为API调用)、从另一外部装置传输、在前端120处生成等。
在框504处,前端120确定所述调用是否是针对具有预留容量的任务。在一个实施方案中,前端120可为具有预留并发性的每一任务维护识别弧的信息(例如,在这种信息的表内)。因此,前端120可通过检验这种信息来确定所述调用是否针对具有预留容量的任务。在另一实施方案中,每一前端120可维护识别具有预留容量的任务的其它信息,并且可响应于对任务的执行的第一调用而创建识别用于所述任务的弧的信息。如上文所论述,用于预留容量的弧可说明性地创建为具有基于预留容量水平而设置的静态长度。可基于非预留容量的弧(例如,账户弧)的负载在前端120处对所述弧进行缩放。
如果所调用任务与预留容量不相关联,那么例程500前进到框506,其中前端120使与一般(例如,账户)节流限制相关联的计数器递增。说明性地,前端120可向计数服务(例如,服务170)传输指示与节流限制相关联的额外并发执行的调用。例程120然后行进到框508,其中前端120从一般(例如,账户)弧选择工作器管理器140。如上文所论述,管理器140的选择可包括基于弧的识别符(例如,账户识别符)的散列值并基于弧长度来识别弧内的管理器140,并且然后基于负载平衡机制在管理器140当中进行选择,诸如循环选择。如上文所述,前端120可基于与节流限制相关联的并发执行的数目来周期性地(例如,每5分钟)增加或减少节流限制及弧的长度。
如果所调用任务与预留容量相关联,那么例程500行进到框510,其中前端120使与预留容量节流限制相关联的计数器递增。说明性地,前端120可向计数服务(例如,服务170)传输指示与节流限制相关联的额外并发执行的调用。例程120然后行进到框512,其中前端120从预留容量弧选择工作器管理器140。如上文所论述,管理器140的选择可包括基于弧的识别符(例如,账户识别符)的散列值并基于弧长度(例如,基于预留容量而建立)来识别弧内的管理器140,并且然后基于负载平衡机制在管理器140当中进行选择,诸如循环选择。
虽然图5中未展示,但在使节流限制计数器递增的每一实例(例如,框506及510)处,前端120可获得与所述节流限制相关联的当前计数。在一般节流限制的当前计数超过所述节流限制的情况下,前端120可响应于所述请求而返回错误。在与预留容量节流限制相关联的当前计数超过预留容量节流限制的情况下,前端120可将所述请求视为溢出请求。下文将参考图7描述用于实施溢出请求处置的替代例程。
在任一实例中,例程500然后行进到框514,其中前端120向所选择管理器140请求用以执行任务的执行环境。在从预留弧请求环境的情形中,预期管理器140已为所述任务预留了多个经预加温环境,并且因此返回这种经预加温环境。在从一般弧请求环境的这一情形中,经预加温环境可用于管理器140(例如,如先前由管理器140管理的或如在加温池130A中维护的),在这一情形中,使经预加温环境返回。在没有经预加温环境可用(例如,在管理器140处或在加温池130A内)的情形中,管理器140可为任务供应新环境。虽然图5中未展示,但每一管理器140也可经配置以拒绝对将超过管理器140的每一弧容量的环境的请求(例如,在创建环境将导致管理器为弧管理多于n个环境的情况下)。在这种拒绝的情形中,前端120可利用弧上的替代工作器管理器140重试所述请求,直到定位到环境为止,或者(如果重试不成功),例程500在错误中结束。
在框516处,在从工作器管理器140获得执行环境之后,前端120致使在所述环境中执行所调用任务。然后在框518处,例程500结束。因此,通过执行例程500,使得前端120能够路由调用以便以在管理器140当中实现负载平衡同时仍以增加能够定位调用的经预加温环境的可能性的方式提供分配调用的方式执行与预留容量相关联的任务及与预留容量不相关联的任务。
如上文所论述,在一些实例中,前端120可接收对与预留容量相关联的函数的调用,其中那些调用中的至少一些超过了预留容量的节流限制。超过预留容量的节流限制的那些调用在本文中通常被称为“溢出”调用。在一些实例中,前端120可经配置以利用比与预留容量相关联的弧更一般的弧(例如,账户弧)来路由这类溢出调用。然而,如上文所论述,在一些实例中,即使任务执行的并发性保持稳定,利用更一般的弧来路由溢出调用也可能导致冷启动。举例来说,在执行保持稳定的同时降低预留容量的水平(或完全消除预留容量)可能导致一些新调用(表示稳定执行率的一部分)变成溢出调用。如果将这类调用路由到更一般的弧,那么那些调用可能导致冷启动延迟,并且另外致使系统110导致更大资源使用,这是因为与预留容量弧相关联的管理器140可能仍管理先前用于支持预留容量弧的环境。
图6描述了用于通过使得前端120能够在预留容量减少的情况下路由调用同时避免冷启动延迟来解决这一问题的一组交互。图6的交互开始于(1)处,其中用户装置102以类似于图3的交互(1)的方式向前端120传输执行与预留容量相关联的任务的调用。然而,出于说明目的,假设图6的调用请求在超过任务的预留容量的节流限制的水平上并发执行任务。举例来说,所述调用可表示执行节流限制为500个执行的任务的第501调用,并且所述任务的前500个执行可能仍在发生。
为了检测调用超过任务的预留容量,在(2)处,前端120向计数服务170传输指令以使与任务的预留容量的节流限制相关联的计数器递增。如上文所论述,服务170可操作以基于来自所有前端120的输入来监控并发执行,并且因此可维护跨系统110的并发执行的计数。在(3)处,响应于所述调用,服务170向前端120返回与预留容量节流限制相关联的并发执行的计数。然后,在(4)处,前端120可检测到并发执行的计数超过预留容量节流限制。
如上文所论述,前端120可经配置使得当并发执行的计数超过预留容量节流限制时,为任务利用更一般的(例如,账户)弧。然而,为了防备由于预留容量的减少而导致的稳态流量实例中的潜在冷启动,在切换到更一般的弧之前,在(5)处,前端120评估了预留容量弧上的负载。在一个实施方案中,将弧上的负载表示为所述弧中跨所有工作器管理器140的平均负载,并且将每一工作器管理器140的负载表示为与所述弧相关联的使用中(例如,“热”)环境的数目除以由工作器管理器140管理的所述弧的环境(例如,“热”或“温”)的总数。因此,在预留容量没有改变并接收到溢出调用的情形中,可预期弧上的负载超过阈值量(例如,95%、99%等)。换句话说,在用户为给定任务请求500预留环境并传输(在某一足够短的时段内)501调用以执行所述任务的情况下,可预期执行所述任务的第501调用会导致(i)预留容量的计数器超过预留容量的水平以及(ii)弧上的负载接近100%。
然而,当预留容量的水平已改变(例如,减少)时,可设想,虽然预留容量节流限制的计数器可能超过(现在减少的)预留容量的水平,但弧上的负载可能显著小于100%。这一低负载是可预期的,例如,因为虽然前端可立即辨识出用户的预留容量的降低水平,但每一工作器管理器140可经配置以基于其空闲来释放环境。因此,在预留容量水平已改变但任务的并发率保持稳定的实例中,可预期用于任务的弧具有足够容量来继续处置并发执行的该稳定率。为了图6的图解说明目的,将假设这一实例已发生,因此,在(5)处,前端120确定预留容量弧上的负载小于阈值量(可将所述阈值设置为接近100%,诸如95%或99%)。
因此,在(6)处,并且即使调用超过当前预留容量节流限制,前端120也根据上文所描述的选择机制从预留容量弧选择工作器管理器140。虽然图6中未展示,但即使前端120从预留容量弧选择了工作器管理器140,前端120也可与计数服务170交互,以调整预留容量节流限制及更一般的(例如,账户)节流限制的计数,以便反映作为溢出调用处置的调用。举例来说,前端120可调用计数服务170来使与预留容量节流限制相关联的计数器递减,并且使与用于溢出请求的更一般的节流限制相关联的计数器递增。虽然图6出于图解说明目的假设没有超过更一般的节流限制,但在超过该更一般的节流限制的情形中,前端120可向用户返回指示缺乏处置请求的容量的错误。(注意,这种缺乏可能是暂时的,诸如在更一般的节流限制基于与所述节流限制相关联的历史并发性水平来进行缩放的情形中。)
另外,在(7)处,前端120向所选择工作器管理器140传输对执行任务的执行环境的请求。然而,与从前端120发送到工作器管理器140的对环境的其它请求相反,在(7)处,前端120可对所述请求使用“不放大”标志。说明性地,管理器140通常可经配置使得如果管理器140当前没有管理用于调用的适当环境,那么管理器140就从加温池管理器130检索这种环境。工作器管理器140对环境的这一采用可被称为“放大”管理器的环境。因为工作器管理器140是从预留容量弧选择的(期望所述弧具有空闲容量),所以通常可能不期望由于放大而增加所述容量。因此,通过在交互(7)处使用“不放大”标志,前端120可向管理器140请求环境,而不会潜在地致使管理器140增加其容量。
出于描述图6的目的,将假设管理器140当前管理可用于执行任务的温环境。这样一来,在(8)处,管理器140识别所述环境(在图6中展示为环境602),并且在(9)处向前端120返回识别所述环境602的信息。然而,在管理器140当前没有管理温环境的情形中(例如,如果先前的温环境由于空闲而被释放给加温池130A),管理器140可向前端120返回错误。在一个配置中,前端120可通过从弧选择替代工作器管理器140并重复交互请求(7)来尝试在预留容量弧内重试调用放置阈值次数(例如,1次重试、2次重试等)。如果每一重试的交互(7)失败,那么前端120可将调用放置在更一般的弧(例如,账户弧)内。
在接收到执行环境602的识别信息时,然后在(10)处,前端可指示环境602执行所调用任务。在(11)处,环境602执行任务。因为图6的交互假设环境602是从预留容量弧的过剩容量识别的,所以环境602说明性地表示经预加温环境,并且这样一来,任务的执行可在不招致冷启动延时的情况下完成。值得注意的是,即使所述调用表示超过了为所述任务预留的容量的调用,也会有利地发生冷启动的这一避免。
参考图7,将描述用于在按需代码执行系统内分配调用同时处置对具有预留容量的任务的调用溢出的说明性例程700。例程700可例如由图1的前端120实施。可将例程700说明性地视为对图5的例程500的修改,并且因此可以类似于例程500的对应元素的方式实施例程700的一些元素。为简洁起见,以下描述集中于对例程500的修改,并且因此可省略先前关于例程500论述的细节。然而,应理解,关于例程500论述的细节也可适用于例程700,除非下文另有陈述。
例程700开始于框702处,其中前端120获得用以执行任务的调用。可以类似于例程500的框502的方式实施框702。然后,例程700行进到框706,其中前端120确定调用是否与预留容量相关联,并且如果是,那么分别在框708及710处使与预留容量节流限制或一般(例如,账户)节流限制相关联的计数器递增。可以类似于例程500内的对应框(例如,框504、510及506)的方式实施框706-710。
与例程500相比,例程700包括在框708处使针对预留并发性节流限制的计数器递增之后的决策框712。在框712处,前端120确定与预留节流限制相关联的并发执行的计数是否在所述节流限制之外。说明性地,响应于使与节流限制相关联的计数器递增,前端120可获得跨系统110的与节流限制相关联的并发执行的数目。因此,决策框712的实施可包括将所述数目与总节流限制进行比较。
在未超过预留容量节流限制的情形中,例程700行进到框722,其中前端120从预留容量弧选择工作器管理器并向所述管理器请求环境(类似于例程500的框512及514)。然后,例程700行进到框724,其中前端120致使环境执行任务(类似于图5的框516)。
然而,如果在框712处,与预留容量节流限制相关联的调用计数超过了节流限制,那么例程700转而行进到框710,其中将所述调用作为溢出调用来处置。这样一来,在框710处,前端120使与一般节流限制相关联的计数器递增。虽然在图7中未展示,但前端120可使预留容量节流限制的计数器进一步递减,使得在这一情形中,框708不会导致与预留并发性节流限制相关联的并发执行的过计数。
此后,在框714处,前端120确定与所调用任务相关联的预留容量弧上的负载是否低于阈值,将所述阈值设置为等于或接近100%(例如,95%、99%等)。值得注意的是,在例程700中,在调用与当前预留容量相关联(并且就并发执行计数来说超过了所述预留容量的节流限制)及调用与当前预留容量不相关联的两种情形中都实施框714。通常,在调用与预留容量不相关联的情况下,预期不存在用于所述任务的预留容量弧。在超过预留容量的情况下,通常可预期预留容量弧上的负载将超过阈值。在这类情形中,例程700行进到框718,其中前端120向从一般弧选择的工作器管理器140请求环境(类似于例程500的框506及508)。然后,例程700行进到框724,其中前端120致使环境执行任务(类似于图5的框516)。
然而,这些情况可能存在例外,尤其是在任务先前与预留容量相关联且所述容量被减少或消除的情况下。在这种实例中,尽管事实上调用当前与预留容量不相关联(或者就并发执行计数来说超过了预留容量),但预留容量弧可能存在并具有低于阈值的负载。因此,如果框714评估为真,那么例程700行进到框716,其中前端120向从预留容量弧选择的工作器管理器140请求环境(例如,如上文关于图5的框512所论述地选择)。具体来说,在框716处,前端120向管理器140提交具有“不放大”标志的请求,指示管理器140仅在温环境当前由管理器140管理时才应提供环境,并且管理器140不应尝试从加温池130A请求这种环境。因此,框714的请求确保了利用与预留容量相关联的工作器管理器140上的现有温环境,但管理器140不采用新环境(例如,假定当前调用与预留容量不相关联或者超过预留容量的限制,则预留弧的环境不“放大”)。
在框720处,例程700根据响应于框716的请求从预留容量弧选择的管理器140是否具有可用环境而发生变化。如果是,那么例程700行进到框724,其中前端120致使环境执行任务(类似于图5的框516)。然而,如果管理器140不具有可用环境,那么例程700行进到框718,其中从一般弧选择的管理器140请求环境(类似于例程500的框506及508)。因为框718的请求没有与不放大标志一起提交,所以预期从管理器140成功地获得环境的机会增加。注意,虽然图7描绘了在对预留弧的管理器140的单个请求之后故障转移到一般弧,但在一些实例中,在最终故障转移到框718之前,在框720处,否定评估可能导致框716的一次或多次重试。每一重试可相对于预留容量弧的不同管理器140(例如,循环轮换中的下一个)而发生。类似地,如果一般弧的管理器140没有返回环境,那么框718的实施可重试一次或多次。
然后,例程700行进到框724,其中前端120致使环境执行任务(类似于图5的框516)。然后在框726处,例程700结束。因此,类似于例程500,例程700的执行使得前端120能够路由调用以便以在管理器140当中实现负载平衡同时仍以增加能够定位调用的经预加温环境的可能性的方式提供分配调用的方式执行与预留容量相关联的任务及与预留容量不相关联的任务。此外,例程700进一步降低了在预留容量减少但任务负载稳定的情况下发生冷启动的概率。
可鉴于以下条款来描述本公开的实施方案的示例:
条款1.一种按需代码执行系统,其包括:
一组计算装置,其实施所述按需代码执行系统的执行环境池,所述池包括:
为在所述按需代码执行系统上执行第一任务而预留的第一组执行环境,所述任务对应于可执行以在所述按需代码执行系统上实施所期望功能性的代码,其中所述第一组内的每一环境供应有执行所述任务的所述代码所需的软件,且其中根据所述任务的预留限制来维护所述第一组内的环境数目;以及
支持在所述按需代码执行系统上执行一个或多个其它任务的第二组执行环境;
其中在所述一组计算装置当中分配所述池的所述环境;以及
前端计算装置,其经配置以维护:
促进在所述一组计算装置当中分配调用的一致性散列环数据结构;
识别所述一致性散列环数据结构的第一弧的信息,所述第一弧包括根据对应于所述第一任务的散列值及所述第一任务的预留限制而识别的来自所述一组计算装置的第一子组计算装置;
识别所述一致性散列环数据结构的第二弧的信息,所述第二弧包括根据对应于一个或多个其它任务的散列值而识别的来自所述一组计算装置的第二子组计算装置;
其中所述前端计算装置还经配置以:
获取用以执行所请求任务的调用;
当所述所请求任务对应于所述第一任务时:
从所述第一弧选择计算装置,从所述计算装置请求为执行所述第一任务而预留的所述第一组执行环境中的执行环境;以及
指示所述第一组执行环境中的所述执行环境执行所述第一任务;并且
当所述所请求任务对应于一个或多个其它任务中的任务时:
从所述第二弧选择计算装置,从所述计算装置请求所述第二组执行环境中的执行环境;且
指示所述第二组执行环境中的所述执行环境执行所述所请求任务。
条款2.根据条款1所述的系统,其中所述前端计算装置是第一前端计算装置,且其中所述系统还包括与所述第一前端计算装置的配置相匹配的多个额外前端计算装置。
条款3.根据条款1所述的系统,其中根据对应于所述第二弧的调用量来设置所述第二子组中的计算装置的数目。
条款4.根据条款3所述的系统,其还包括实施计数服务的一个或多个计算装置,所述计数服务经配置以维护指示对应于所述第二弧的所述调用量的信息。
条款5.根据条款1所述的系统,其中所述前端还经配置以当所述所请求任务对应于所述第一任务时:
检测到所述第一任务在所述按需代码执行系统上的并发执行数目超过了所述任务的所述预留限制;以及
检测到相对于所述第一组内的所述环境数目的当前正在执行所述第一任务的所述第一组执行环境的比例低于阈值比例;
其中从所述第一弧选择所述计算装置响应于检测到所述第一任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制并且所述比例低于所述阈值比例。
条款6.一种计算机实施方法,其包括:
实施促进在一组计算装置当中分配调用的一致性散列环,所述一组计算装置分布式地管理用于按需代码执行系统的执行环境池,所述池包括:
为在所述按需代码执行系统上执行第一任务而预留的第一组执行环境,所述任务对应于能执行以在所述按需代码执行系统上实施所期望功能性的代码,其中根据所述第一任务的预留限制来维护所述第一组内的环境数目;以及
支持在所述按需代码执行系统上执行一个或多个其它任务的第二组执行环境;
生成识别所述一致性散列环的第一弧的数据,所述第一弧包括根据对应于所述第一任务的散列值及所述任务的所述预留限制来识别的来自所述一组计算装置的第一子组计算装置;
生成识别所述一致性散列环的第二弧的数据,所述第二弧包括根据对应于所述一个或多个其它任务的散列值来识别的来自所述一组计算装置的第二子组计算装置;
获得用以执行所请求任务的调用;
至少部分地基于对应于与所述所请求任务相关联的识别符的散列值来识别所述调用的弧,所识别弧对应于所述第一弧或所述第二弧;
从所述所识别弧选择计算装置,从所述计算装置请求执行所述所请求任务的执行环境;以及
在由所选择计算装置提供的执行环境内执行所述所请求任务。
条款7.根据条款6所述的方法,其中对应于所述第一任务的所述散列值是应用于所述第一任务的识别符的散列函数的输出,且其中对应于所述一个或多个其它任务的所述散列值是应用于与所述一个或多个其它任务相关联的账户的识别符的所述散列函数的输出。
条款8.根据条款6所述的方法,其还包括:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;以及
在从所述所识别弧选择所述计算装置之前,验证与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目没有超过所述所识别弧的所支持并发性水平。
条款9.根据条款8所述的方法,其中所述第一弧的所述所支持并发性水平等于所述第一任务的所述预留限制,且其中根据与所述第二弧相关联的过去调用量来设置所述第二弧的所述所支持并发性水平。
条款10.根据条款6所述的方法,其中所述所识别弧是所述第一弧,所述方法还包括:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;
确定与所述所识别弧相关联的所述按需代码执行环境上的所述并发执行数目超过了所述所识别弧的所支持并发性水平;以及
检测到相对于所述第一组内的所述环境数目的当前正在执行所述第一任务的所述第一组执行环境的比例低于阈值比例;以及
其中从所述第一弧选择所述计算装置响应于检测到所述第一任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制并且所述比例低于所述阈值比例。
条款11.根据条款9所述的方法,其还包括将对所述执行环境的所述请求传输到所述所选择计算装置,所述请求指示所述所选择计算装置应在不扩展所述第一组执行环境的情况下提供所述执行环境。
条款12.根据条款6所述的方法,其中从所述所识别弧选择所述计算装置包括对所述所识别弧实施循环选择。
条款13.根据条款6所述的方法,其中所述第一子组中的每一计算装置配置有针对个别弧可支持的最大数目的执行环境,且其中基于将所述任务的所述预留限制除以通过每一计算装置针对个别弧可支持的最大数目的执行环境来确定所述第一子组内的计算装置数目。
条款14.非暂时性计算机可读介质,其包括当由按需代码执行系统的前端装置执行时致使所述前端装置进行以下操作的计算机可执行指令:
生成识别一致性散列环的第一弧的数据,所述一致性散列环促进在分布式地管理按需代码执行系统的执行环境池的一组计算装置当中分配调用,所述第一弧包括根据对应于第一任务的散列值所识别的来自所述一组计算装置的第一子组计算装置,其中所述第一子组计算装置维护了为所述第一任务的执行而预留的第一组执行环境,且其中根据所述第一任务的预留限制来维护所述第一组内的环境数目;
生成识别所述一致性散列环的第二弧的数据,所述第二弧包括根据对应于一个或多个其它任务的散列值来识别的来自所述一组计算装置的第二子组计算装置,其中所述第二子组计算装置维护了支持在所述按需代码执行系统上执行所述一个或多个其它任务的第二组执行环境;
获取用以执行所请求任务的调用;
至少部分地基于对应于与所述所请求任务相关联的识别符的散列值来识别所述调用的弧,所识别弧对应于所述第一弧或所述第二弧;
从所述所识别弧选择计算装置,从所述计算装置请求执行所述所请求任务的执行环境;以及
在由所选择计算装置提供的执行环境内执行所述所请求任务。
条款15.根据条款14所述的非暂时性计算机可读介质,其中所述请求任务是所述第一任务,其中所述第一组执行环境供应有执行所述第一任务所需的软件,且其中在所述执行环境内执行所述所请求任务包括响应于调用而执行未供应有所述执行环境的所述所请求任务。
条款16.根据条款14所述的非暂时性计算机可读介质,其中所述指令致使所述前端利用循环选择从所述所识别弧选择所述计算装置。
条款17.根据条款14所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;以及
在从所述所识别弧选择所述计算装置之前,验证与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目没有超过所述所识别弧的所支持并发性水平。
条款18.根据条款17所述的非暂时性计算机可读介质,其中所述第一弧的所述所支持并发性水平等于所述第一任务的所述预留限制,且其中根据与所述第二弧相关联的过去调用量来设置所述第二弧的所述所支持并发性水平。
条款19.根据条款14所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;
确定与所述所识别弧相关联的所述按需代码执行环境上的所述并发执行数目超过了所述所识别弧的所支持并发性水平;以及
检测到相对于所述第一组内的所述环境数目的当前正在执行所述第一任务的所述第一组执行环境的比例低于阈值比例;以及
其中从所述第一弧选择所述计算装置响应于检测到所述第一任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制并且所述比例低于所述阈值比例。
条款20.根据条款14所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端将对所述执行环境的所述请求传输到所述所选择计算装置,所述请求指示所述所选择计算装置应在不扩展所述第一组执行环境的情况下提供所述执行环境。
可鉴于以下额外条款来描述本公开的其它示例性实施方案:
条款1.一种按需代码执行系统,其包括:
一个或多个计算装置,其实施用于所述按需代码执行系统的执行环境池,所述池包括为在所述按需代码执行系统上执行任务而预留的一组执行环境,所述任务对应于可执行以在所述按需代码执行系统上实施所期望功能性的代码,其中所述一组内的每一环境供应有执行所述任务的所述代码所需的软件,且其中根据所述任务的预留限制来维护所述一组内的环境数目;
前端计算装置,其经配置以:
获取用以执行所述任务的调用;
检测到所述任务在所述按需代码执行系统上的并发执行数目超过了所述任务的所述预留限制;
检测到相对于所述一组内的所述环境数目的当前正在执行所述任务的所述一组执行环境的比例低于阈值比例;且
响应于检测到所述任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制且所述比例低于所述阈值比例:
将请求传输到所述一个或多个计算装置以从所述一组识别其中发起对所述任务的额外执行的执行环境;
获取识别所述执行环境的信息;以及
在所识别执行环境中发起所述额外执行。
条款2.根据条款1所述的系统,其中所述前端计算装置是第一前端计算装置,且其中所述系统还包括与所述第一前端计算装置的配置相匹配的多个额外前端计算装置。
条款3.根据条款1所述的系统,其中所述一个或多个计算装置包括:第一子组计算装置,其经配置以管理所述一组执行环境中最近已用来支持所述任务的执行的第一子组环境;以及第二子组计算装置,其经配置以管理所述一组执行环境中最近尚未用来支持所述任务的执行的第二子组环境。
条款4.根据条款3所述的系统,其中所述请求被传输到所述第一子组计算装置内的计算装置并指示所述计算装置应在不将环境从所述第一子组环境移动到所述第二子组的情况下识别执行环境。
条款5.根据条款1所述的系统,其中所述前端计算装置还经配置以:
实施促进在所述一个或多个计算装置当中分配调用的一致性散列环;以及
识别所述一致性散列环的第一弧,所述第一弧包括根据对应于所述任务的散列值及所述任务的所述预留限制来识别的来自所述一个或多个计算装置的第一子组计算装置;且
其中将所述请求传输到选自所述第一子组的计算装置。
条款6.一种由按需代码执行系统的前端计算装置实施的方法,所述方法包括:
获得用以在所述按需代码执行系统上执行与预留容量相关联的任务的调用,所述预留容量表示为执行所述任务而预留并供应有执行所述任务的代码所需的软件的一组执行环境,其中根据所述任务的预留限制来维护所述一组内的环境数目;
检测到所述任务在所述按需代码执行系统上的并发执行数目超过了所述任务的所述预留限制;
检测到相对于所述一组内的所述环境数目的当前正在执行所述任务的所述一组执行环境的比例低于阈值比例;且
响应于检测到所述任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制且所述比例低于所述阈值比例:
将请求传输到管理所述一组执行环境的一个或多个计算装置以从所述一组识别出其中发起对所述任务的额外执行的执行环境;
获取识别所述执行环境的信息;以及
在所识别执行环境中发起所述额外执行。
条款7.根据条款6所述的方法,其还包括:
获取用以减少所述任务的所述预留限制的请求;以及
对于一组时段中的每一时段,从所述一组执行环境移除在过去时段期间尚未被用来支持所述任务的执行的任何环境。
条款8.根据条款6所述的方法,其中用以减少所述任务的所述预留限制的请求将所述预留限制减少到零。
条款9.根据条款6所述的方法,其中将所述请求传输到所述一组计算装置以识别执行环境包括:
从所述一组计算装置选择个别计算装置;以及
将所述请求传输到个别计算装置。
条款10.根据条款9所述的方法,其中从所述一组计算装置选择所述个别计算装置包括至少部分地基于与所述任务相关联的散列值以及将所述一组计算装置组织成一致性散列环来选择所述个别计算装置。
条款11.根据条款10所述的方法,其中至少部分地基于与所述第一任务相关联的所述散列值以及将所述一组计算装置组织成一致性散列环来选择所述个别计算装置包括:
识别与所述任务相关联的所述一致性散列环的弧,所述弧包括至少部分地基于所述散列值选择的所述一致性散列环的初始计算装置以及所述一致性散列环上的所述初始计算装置之后的一个或多个额外计算装置,其中根据所述任务的所述预留限制来设置所述弧内的计算装置数目;以及
从所述弧的所述计算装置选择所述个别计算装置。
条款12.根据条款10所述的方法,其中所述方法由所述按需代码执行系统上的多个前端计算装置中的第一前端计算装置实施,且其中检测到所述任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制包括:
在获得所述调用之后,将指令传输到所述按需代码执行系统上的计数服务,以使所述任务在所述按需代码执行系统上的所述并发执行数目递增;以及
从所述计数服务获取所述任务在所述按需代码执行系统上的所述并发执行数目,其中所述并发执行数目由所述计数服务基于来自所述多个前端计算装置的指令确定。
条款13.根据条款6所述的方法,其中将所述请求传输到所述一组计算装置以从所述一组识别出其中发起所述任务的额外执行的执行环境包括:
将所述请求传输到选自一个或多个计算装置的第一计算装置;
从所述计算装置获取指示所述计算装置不能提供所述执行环境的响应;以及
将所述请求传输到选自一个或多个计算装置的第二计算装置。
条款14.非暂时性计算机可读介质,其包括当由按需代码执行系统的前端装置执行时致使所述前端装置进行以下操作的计算机可执行指令:
获得用以在所述按需代码执行系统上执行与预留容量相关联的任务的调用,所述预留容量表示为执行所述任务而预留并供应有执行所述任务的代码所需的软件的一组执行环境,其中根据所述任务的预留限制来维护所述一组内的环境数目;
检测到所述任务在所述按需代码执行系统上的并发执行数目超过了所述任务的所述预留限制;
检测到相对于所述一组内的所述环境数目的当前正在执行所述任务的所述一组执行环境的比例低于阈值比例;且
响应于检测到所述任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制且所述比例低于所述阈值比例,在从为所述任务的执行预留的所述一组识别出的执行环境中发起额外执行。
条款15.根据条款14所述的非暂时性计算机可读介质,其中所述一组执行环境由一个或多个工作器管理器装置管理,且其中所述指令进一步致使所述前端装置将用于执行环境的请求传输到选自所述一个或多个工作器管理器装置的工作器管理器装置。
条款16.根据条款15所述的非暂时性计算机可读介质,其中传输到所述工作器管理器装置的所述请求指示所述工作器管理器装置应在不扩展所述一组执行环境的情况下识别所述执行环境。
条款17.根据条款15所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端装置:
实施促进在所述一个或多个工作管理器装置当中分配调用的一致性散列环;以及
识别所述一致性散列环的第一弧,所述第一弧包括根据所述任务的散列值及所述任务的所述预留限制来识别的来自所述一个或多个工作管理器装置的第一子组工作管理器装置;以及
从所述第一子组选择所述工作管理器装置。
条款18.根据条款17所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端装置使用循环选择从所述第一子组选择所述工作管理器装置。
条款19.根据条款15所述的非暂时性计算机可读介质,其中所述指令进一步致使所述前端装置:
获得所述任务的所述预留限制已降低的指示;
对于一组时段中的每一时段:
检测到相对于所述一组内的所述环境数目的当前正在执行所述任务的所述一组执行环境的所述比例是否低于第二阈值比例;且
如果所述比例低于所述第二阈值比例,那么减少所述第一子组内的工作管理器装置数目。
条款20.根据条款14所述的非暂时性计算机可读介质,其中所述前端装置包括于所述按需代码执行系统上的多个前端装置中,且其中所述指令致使所述前端装置至少部分地通过以下方式来检测所述任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制:
在获得所述调用之后,将指令传输到所述按需代码执行系统上的计数服务,以使所述任务在所述按需代码执行系统上的所述并发执行数目递增;以及
从所述计数服务获取所述任务在所述按需代码执行系统上的所述并发执行数目,其中所述并发执行数目由所述计数服务基于来自所述多个前端计算装置的指令确定。
上文所描述的所有方法及过程可在由一个或多个计算机或处理器执行的软件代码模块中体现并且经由所述软件代码模块来完全自动化。所述代码模块可存储在任何类型的非暂时性计算机可读介质或其它计算机存储装置中。所述方法中的一些或所有可替代地体现在专用计算机硬件中。
除非另外特别说明,否则诸如“能够(can)”、“可以(could)”、“可能(might)”或“也许(may)”等的条件语言在上下文内通常应理解为用于呈现:虽然其它实施方案不包括,但某些实施方案包括某些特征、元件和/或步骤。因此,这类条件语言一般并不旨在暗示一个或多个实施方案无论如何需要特征、元件和/或步骤,或者一个或多个实施方案一定包括用于在具有或不具有用户输入或提示的情况下决定是否在任何特定实施方案中包括或将执行这些特征、元件和/或步骤的逻辑。
除非另有特别说明,否则诸如短语“X、Y或Z中的至少一者”等分离性语言在上下文中应理解为通常使用的情况以呈现项目、项等可以是X、Y或Z或者其任何组合(例如,X、Y和/或Z)。因此,这种分离性语言一般并不旨在且不应暗示某些实施方案要求X中的至少一者、Y中的至少一者或Z中的至少一者各自存在。
除非另外明确规定,否则诸如‘一(a)’或‘一(an)’等冠词一般应理解为包括一个或多个所描述物品。因此,诸如“经配置以……的装置”等措辞旨在包括一个或多个所列举装置。这类一个或多个所列举装置还可共同地经配置以实行所陈述叙述。例如,“经配置以实行叙述A、B及C的处理器”可包括与经配置以实行叙述B及C的第二处理器联合工作的经配置以实行叙述A的第一处理器。
本文中所描述的和/或附图中所描绘的流程图中的任何例程描述、元件或框应被理解为潜在地表示代码的模块、分段或部分,其包括用于实施例程中的特定逻辑功能或元件的一个或多个可执行指令。替代实现方式包括于本文中所描述的实施方案的范围内,其中如所属领域的技术人员所理解,取决于所涉及的功能性,元素或功能可被删除、或不按照所展示或所论述的顺序执行,包括基本上同步执行或逆序执行。
应强调的是,可对上文所描述的实施方案做出许多变化及修改,所述变化及修改的元件应被理解为是在其它可接受示例当中。在本文中,所有这类修改及变化旨在包括于本公开的范围内并受以下权利要求书保护。

Claims (15)

1.一种计算机实施方法,其包括:
实施促进在一组计算装置当中分配调用的一致性散列环,所述一组计算装置分布式地管理用于按需代码执行系统的执行环境池,所述池包括:
为在所述按需代码执行系统上执行第一任务而预留的第一组执行环境,所述任务对应于能执行以在所述按需代码执行系统上实施所期望功能性的代码,其中根据所述第一任务的预留限制来维护所述第一组内的环境数目;以及
支持在所述按需代码执行系统上执行一个或多个其它任务的第二组执行环境;
生成识别所述一致性散列环的第一弧的数据,所述第一弧包括根据对应于所述第一任务的散列值及所述任务的所述预留限制来识别的来自所述一组计算装置的第一子组计算装置;
生成识别所述一致性散列环的第二弧的数据,所述第二弧包括根据对应于所述一个或多个其它任务的散列值来识别的来自所述一组计算装置的第二子组计算装置;
获得用以执行所请求任务的调用;
至少部分地基于对应于与所述所请求任务相关联的识别符的散列值来识别所述调用的弧,所识别弧对应于所述第一弧或所述第二弧;
从所述所识别弧选择计算装置,从所述计算装置请求执行所述所请求任务的执行环境;以及
在由所选择计算装置提供的执行环境内执行所述所请求任务。
2.根据权利要求1所述的方法,其中对应于所述第一任务的所述散列值是应用于所述第一任务的识别符的散列函数的输出,且其中对应于所述一个或多个其它任务的所述散列值是应用于与所述一个或多个其它任务相关联的账户的识别符的所述散列函数的输出。
3.根据权利要求1所述的方法,其还包括:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;以及
在从所述所识别弧选择所述计算装置之前,验证与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目没有超过所述所识别弧的所支持并发性水平。
4.根据权利要求3所述的方法,其中所述第一弧的所述所支持并发性水平等于所述第一任务的所述预留限制,且其中根据与所述第二弧相关联的过去调用量来设置所述第二弧的所述所支持并发性水平。
5.根据权利要求1所述的方法,其中所述所识别弧是所述第一弧,所述方法还包括:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;
确定与所述所识别弧相关联的所述按需代码执行环境上的所述并发执行数目超过了所述所识别弧的所支持并发性水平;以及
检测到相对于所述第一组内的所述环境数目的当前正在执行所述第一任务的所述第一组执行环境的比例低于阈值比例;以及
其中从所述第一弧选择所述计算装置响应于检测到所述第一任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制并且所述比例低于所述阈值比例。
6.根据权利要求5所述的方法,其还包括将对所述执行环境的所述请求传输到所述所选择计算装置,所述请求指示所述所选择计算装置应在不扩展所述第一组执行环境的情况下提供所述执行环境。
7.根据权利要求1所述的方法,其中从所述所识别弧选择所述计算装置包括对所述所识别弧实施循环选择。
8.根据权利要求1所述的方法,其中所述第一子组中的每一计算装置配置有针对个别弧能支持的最大数目的执行环境,且其中基于将所述任务的所述预留限制除以通过每一计算装置针对个别弧能支持的所述最大数目的执行环境来确定所述第一子组内的计算装置数目。
9.一种系统,其包括:
数据存储区,其包括计算机可执行指令;以及
一个或多个处理器,其经配置以执行所述计算机可执行指令,其中所述计算机可执行指令的执行致使所述一个或多个处理器:
生成识别一致性散列环的第一弧的数据,所述一致性散列环促进在分布式地管理按需代码执行系统的执行环境池的一组计算装置当中分配调用,所述第一弧包括根据对应于第一任务的散列值所识别的来自所述一组计算装置的第一子组计算装置,其中所述第一子组计算装置维护了为所述第一任务的执行而预留的第一组执行环境,且其中根据所述第一任务的预留限制来维护所述第一组内的环境数目;
生成识别所述一致性散列环的第二弧的数据,所述第二弧包括根据对应于一个或多个其它任务的散列值来识别的来自所述一组计算装置的第二子组计算装置,其中所述第二子组计算装置维护了支持在所述按需代码执行系统上执行所述一个或多个其它任务的第二组执行环境;
获取用以执行所请求任务的调用;
至少部分地基于对应于与所述所请求任务相关联的识别符的散列值来识别所述调用的弧,所识别弧对应于所述第一弧或所述第二弧;
从所述所识别弧选择计算装置,从所述计算装置请求执行所述所请求任务的执行环境;以及
在由所选择计算装置提供的执行环境内执行所述所请求任务。
10.根据权利要求9所述的系统,其中所述请求任务是所述第一任务,其中所述第一组执行环境供应有执行所述第一任务所需的软件,且其中在所述执行环境内执行所述所请求任务包括响应于调用而执行未供应有所述执行环境的所述所请求任务。
11.根据权利要求9所述的系统,其中所述指令致使所述一个或多个处理器利用循环选择从所述所识别弧选择所述计算装置。
12.根据权利要求9所述的系统,其中所述指令进一步致使所述一个或多个处理器:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;以及
在从所述所识别弧选择所述计算装置之前,验证与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目没有超过所述所识别弧的所支持并发性水平。
13.根据权利要求12所述的系统,其中所述第一弧的所述所支持并发性水平等于所述第一任务的所述预留限制,且其中根据与所述第二弧相关联的过去调用量来设置所述第二弧的所述所支持并发性水平。
14.根据权利要求9所述的系统,其中所述指令进一步致使所述一个或多个处理器:
使用于所述所识别弧的计数器递增,所述计数器指示与所述所识别弧相关联的所述按需代码执行环境上的并发执行数目;
确定与所述所识别弧相关联的所述按需代码执行环境上的所述并发执行数目超过了所述所识别弧的所支持并发性水平;以及
检测到相对于所述第一组内的所述环境数目的当前正在执行所述第一任务的所述第一组执行环境的比例低于阈值比例;以及
其中从所述第一弧选择所述计算装置响应于检测到所述第一任务在所述按需代码执行系统上的所述并发执行数目超过了所述任务的所述预留限制并且所述比例低于所述阈值比例。
15.根据权利要求9所述的系统,其中所述指令进一步致使所述一个或多个处理器将对所述执行环境的所述请求传输到所述所选择计算装置,所述请求指示所述所选择计算装置应在不扩展所述第一组执行环境的情况下提供所述执行环境。
CN202080091438.9A 2019-11-27 2020-11-24 利用预留容量而不抑制缩放的无服务器调用分配方法及系统 Active CN114930295B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/698,829 2019-11-27
US16/698,845 US11119826B2 (en) 2019-11-27 2019-11-27 Serverless call distribution to implement spillover while avoiding cold starts
US16/698,829 US10942795B1 (en) 2019-11-27 2019-11-27 Serverless call distribution to utilize reserved capacity without inhibiting scaling
US16/698,845 2019-11-27
PCT/US2020/062060 WO2021108435A1 (en) 2019-11-27 2020-11-24 Serverless call distribution to utilize reserved capacity without inhibiting scaling

Publications (2)

Publication Number Publication Date
CN114930295A true CN114930295A (zh) 2022-08-19
CN114930295B CN114930295B (zh) 2024-03-15

Family

ID=73856321

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080091438.9A Active CN114930295B (zh) 2019-11-27 2020-11-24 利用预留容量而不抑制缩放的无服务器调用分配方法及系统

Country Status (3)

Country Link
EP (1) EP4066112A1 (zh)
CN (1) CN114930295B (zh)
WO (1) WO2021108435A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9588790B1 (en) 2015-02-04 2017-03-07 Amazon Technologies, Inc. Stateful virtual compute system
US9733967B2 (en) 2015-02-04 2017-08-15 Amazon Technologies, Inc. Security protocols for low latency execution of program code
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US11099870B1 (en) 2018-07-25 2021-08-24 Amazon Technologies, Inc. Reducing execution times in an on-demand network code execution system using saved machine states
US11243953B2 (en) 2018-09-27 2022-02-08 Amazon Technologies, Inc. Mapreduce implementation in an on-demand network code execution system and stream data processing system
US11943093B1 (en) 2018-11-20 2024-03-26 Amazon Technologies, Inc. Network connection recovery after virtual machine transition in an on-demand network code execution system
US11861386B1 (en) 2019-03-22 2024-01-02 Amazon Technologies, Inc. Application gateways in an on-demand network code execution system
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
US11593270B1 (en) 2020-11-25 2023-02-28 Amazon Technologies, Inc. Fast distributed caching using erasure coded object parts
US11550713B1 (en) 2020-11-25 2023-01-10 Amazon Technologies, Inc. Garbage collection in distributed systems using life cycled storage roots
US11388210B1 (en) 2021-06-30 2022-07-12 Amazon Technologies, Inc. Streaming analytics using a serverless compute system

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9977691B2 (en) * 2016-06-29 2018-05-22 Amazon Technologies, Inc. Adjusting variable limit on concurrent code executions based on communication between frontends
WO2018098443A1 (en) * 2016-11-28 2018-05-31 Amazon Technologies, Inc. On-demand code execution in a localized device coordinator
CN108885568A (zh) * 2016-03-30 2018-11-23 亚马逊技术有限公司 在按需代码执行环境处处理先已存在的数据集
CN109564525A (zh) * 2016-06-28 2019-04-02 亚马逊技术有限公司 按需网络代码执行环境中的异步任务管理

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8904008B2 (en) * 2012-01-09 2014-12-02 Microsoft Corporation Assignment of resources in virtual machine pools
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108885568A (zh) * 2016-03-30 2018-11-23 亚马逊技术有限公司 在按需代码执行环境处处理先已存在的数据集
CN109564525A (zh) * 2016-06-28 2019-04-02 亚马逊技术有限公司 按需网络代码执行环境中的异步任务管理
US9977691B2 (en) * 2016-06-29 2018-05-22 Amazon Technologies, Inc. Adjusting variable limit on concurrent code executions based on communication between frontends
WO2018098443A1 (en) * 2016-11-28 2018-05-31 Amazon Technologies, Inc. On-demand code execution in a localized device coordinator

Also Published As

Publication number Publication date
WO2021108435A1 (en) 2021-06-03
EP4066112A1 (en) 2022-10-05
CN114930295B (zh) 2024-03-15

Similar Documents

Publication Publication Date Title
US10942795B1 (en) Serverless call distribution to utilize reserved capacity without inhibiting scaling
CN114930295B (zh) 利用预留容量而不抑制缩放的无服务器调用分配方法及系统
US11119826B2 (en) Serverless call distribution to implement spillover while avoiding cold starts
US11188391B1 (en) Allocating resources to on-demand code executions under scarcity conditions
US10360067B1 (en) Dynamic function calls in an on-demand network code execution system
CN109478134B (zh) 用跨账户别名执行按需网络代码
US10203990B2 (en) On-demand network code execution with cross-account aliases
US10277708B2 (en) On-demand network code execution with cross-account aliases
US10528390B2 (en) Idempotent task execution in on-demand network code execution systems
US10564946B1 (en) Dependency handling in an on-demand network code execution system
US10445140B1 (en) Serializing duration-limited task executions in an on demand code execution system
US10303492B1 (en) Managing custom runtimes in an on-demand code execution system
US10437629B2 (en) Pre-triggers for code execution environments
US10725826B1 (en) Serializing duration-limited task executions in an on demand code execution system
US11016815B2 (en) Code execution request routing
US10725752B1 (en) Dependency handling in an on-demand network code execution system
US10282229B2 (en) Asynchronous task management in an on-demand network code execution environment
US9952896B2 (en) Asynchronous task management in an on-demand network code execution environment
US11836516B2 (en) Reducing execution times in an on-demand network code execution system using saved machine states
US10754701B1 (en) Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions
US9830449B1 (en) Execution locations for request-driven code
CN108885568B (zh) 用于通过按需代码执行环境处理数据源内的多个数据项的系统和计算机实现的方法
US10884787B1 (en) Execution guarantees in an on-demand network code execution system
CA2969812C (en) Automatic management of resource sizing
US20190391841A1 (en) Execution of auxiliary functions in an on-demand network code execution system

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant