CN109564525B - 按需网络代码执行环境中的异步任务管理 - Google Patents

按需网络代码执行环境中的异步任务管理 Download PDF

Info

Publication number
CN109564525B
CN109564525B CN201780045148.9A CN201780045148A CN109564525B CN 109564525 B CN109564525 B CN 109564525B CN 201780045148 A CN201780045148 A CN 201780045148A CN 109564525 B CN109564525 B CN 109564525B
Authority
CN
China
Prior art keywords
execution
code
task
executable code
executable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201780045148.9A
Other languages
English (en)
Other versions
CN109564525A (zh
Inventor
蒂莫西·艾伦·瓦格纳
马克·约翰·布鲁克
阿贾伊·奈尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US15/195,920 external-priority patent/US10282229B2/en
Priority claimed from US15/195,897 external-priority patent/US9952896B2/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN109564525A publication Critical patent/CN109564525A/zh
Application granted granted Critical
Publication of CN109564525B publication Critical patent/CN109564525B/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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution

Landscapes

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

Abstract

描述了用于管理按需代码执行系统或其他分布式代码执行环境中的异步代码执行的系统和方法,其中可使用诸如虚拟机实例的多个执行环境来实现用户提交的代码的快速执行。当异步执行发生时,一个执行可能在等待另一个执行完成时被阻塞。因为所述按需代码执行系统包含多个执行环境,所以所述系统能够通过保存所述执行的状态并将所述执行从其执行环境中移除来有效地处理阻塞的执行。当阻塞依赖性操作完成时,所述系统可在相同或不同的执行环境中使用所述状态信息恢复所述阻塞的执行。

Description

按需网络代码执行环境中的异步任务管理
背景技术
计算装置可利用通信网络来交换数据。许多公司和组织运营将多个计算装置加以互连以支持操作或者向第三方提供服务的计算机网络。计算系统可位于单个地理位置中或者位于多个不同的地理位置中(例如,通过专用或公共通信网络加以互连)。具体地,数据中心或数据处理中心(在本文中总体称为“数据中心”)可包括多个互连的计算系统,以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的私有数据中心,或代表公众运营或者为了公众的利益运营的公共数据中心。
为了提高数据中心资源的利用率,虚拟化技术允许单个物理计算装置托管虚拟机的一个或多个实例,所述虚拟机作为数据中心的用户的独立计算装置出现和操作。通过虚拟化,单个物理计算装置能够以动态方式创建、维持、删除或以其他方式管理虚拟机。进而,用户可从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并且配备有不同数量的虚拟机资源。
在一些情境下,虚拟机实例可根据多种虚拟机实例类型来配置以提供特定功能。例如,各种计算装置可与操作系统或操作系统配置、虚拟化硬件资源和软件应用程序的不同组合相关联,以使得计算装置能够提供不同的所需功能,或者更有效地提供类似功能。这些虚拟机实例类型配置通常包含在装置镜像(image)内,所述装置镜像包括包含虚拟机一旦启动就将运行的软件(例如,OS和应用程序及其配置和数据文件等)的静态数据。装置镜像通常存储在用来创建或初始化实例的磁盘上。因此,计算装置可处理装置镜像以便实现所需的软件配置。
附图说明
图1是描绘按需代码执行系统可操作的说明性环境的框图,所述按需代码执行系统包括异步控制器,所述异步控制器用于管理在按需代码执行系统上执行的任务之间的异步调用;
图2描绘提供图1的异步控制器的计算装置的一般体系结构;
图3A和图3B是描绘用于通过使用图1的异步控制器来处理由于异步依赖性而导致的任务的被阻塞执行以暂停在按需代码执行系统上执行所述任务的说明性交互的流程图;
图4A至图4C是描绘用于基于与任务相关联的截止期限管理按需代码执行系统中的异步任务调用的执行的说明性交互的流程图;
图5是描绘用于在按需代码执行系统中处理异步任务执行的说明性例程的流程图;
图6是描绘用于基于与任务相关联的截止期限管理按需代码执行系统中的异步任务调用的执行的说明性例程的流程图;并且
图7是描绘用于处理由于异步依赖性而导致的任务的被阻塞执行的说明性例程的流程图。
具体实施方式
一般来讲,本公开的各方面涉及处理按需代码执行系统中的异步任务的执行,并且更具体地,涉及使用与异步任务相关联的截止期限信息来有效地执行任务,并且通过使任务的执行暂停来减少由于异步依赖性而被阻塞执行的任务的低效率。如本文所详细描述,按需代码执行系统可提供网络可访问服务,从而使得用户能够提交或指定要由按需代码执行系统上的虚拟机实例执行的计算机可执行代码。按需代码执行系统上的每组代码可限定“任务”,并且当在按需代码执行系统的虚拟机实例上执行时实现与该任务相对应的特定功能。按需代码执行系统上的任务的单独实现方式可称为任务的“执行”。按需代码执行系统可进一步使得用户能够基于各种潜在事件触发任务的执行,所述各种潜在事件诸如应用程序编程接口(“API”)调用或特殊格式的超文本传输协议(“HTTP”)分组的传输。因此,用户可利用按需代码执行系统来“按需”执行任何指定的可执行代码,而无需配置或维持在其上执行代码的底层硬件或基础结构。另外,按需代码执行系统可被配置来以快速方式(例如,在100毫秒[ms]内)执行任务,从而使得能够“实时”执行任务(例如,对最终用户具有很少或没有明显的延迟)。为了实现这种快速执行,按需代码执行系统可包括一个或多个虚拟机实例,所述一个或多个虚拟机实例被“预热”或预初始化(例如,引导到操作系统中并执行完整或基本上完整的运行时环境),并且被配置来实现用户限定的代码的执行,使得可响应于执行代码的请求而迅速执行代码,而没有由初始化虚拟机实例引起的延迟。因此,当触发任务的执行时,可在非常短的时间内在预初始化的虚拟机内执行与该任务相对应的代码。
传统环境中的常见编程技术是允许异步操作,使得两个不同的操作(例如,线程和网络请求、两个线程等)可以彼此异步地发生。通常,异步操作由代码在其中执行的执行环境(例如,代码在其上执行的操作系统、浏览器、虚拟机等)管理。然而,在按需代码执行系统中,在执行环境的级别处理异步操作可能是低效的。例如,异步操作通常会导致一个操作被“阻塞”,从而等待另一个操作的实例。在此类情况下,执行环境可采取动作来减少专用于该操作的计算资源(例如,通过使被阻塞的线程暂停直到它被解除阻塞)。在按需代码执行系统中,在执行环境的级别执行此类动作可能是低效的,因为执行环境本身通常必须保持存在以检测操作何时被解除阻塞。结果是环境继续可能不必要地利用按需代码执行系统的资源。此外,有可能(并且在一些情况下可能)按需代码执行系统的状态将在操作开始的时间与它被“解除阻塞”的时间之间改变。因此,在按需时代码执行系统可尝试有效地将计算资源分配给任务的初始执行时,不同分配在任务被解除阻塞时变得更有效。然而,在操作被解除阻塞时,在局部执行环境内发生的传统暂停技术不允许有效地改变底层计算资源。
本申请的各方面通过使得在被阻塞时有效地暂停异步任务,至少部分地通过使任务操作的执行环境暂停来解决上述问题。例如,当按需代码执行系统上的任务被阻塞时,按需代码执行系统可以保存有关任务的状态信息(诸如任务内的对象状态),并暂停或解构其中状态已运行的执行环境。然后,按需代码执行系统可生成与任务的依赖性相关联的通知符(例如,任务已被阻塞的操作),并且在完成该依赖性时,针对按需代码执行系统上的任务重新生成执行环境,使得任务的执行可以继续。以这种方式,可以减少或消除与维持被阻塞任务的执行环境相关联的计算资源,从而提高按需代码执行系统的效率。
异步操作的另一个特性是,在一些情况下,依赖性操作(另一操作所依赖的操作)可以在依赖操作(依赖于另一操作的操作)实际需要这种完成之前完成。例如,第一操作(依赖操作)可异步调用第二操作(依赖性操作)并被编程为继续执行其他过程,直到需要第二操作的结果。在某些条件下,第二操作可在第一操作需要结果之前完成。在传统环境中,这通常不会导致不利影响,因为第二操作的结果可存储直到被第一操作需要。然而,在按需代码执行系统中,许多操作可在多个执行环境上同时发生,并且按需代码执行系统可尝试以有效的方式分发那些操作,以减少按需代码执行系统在任何给定时间所需的总体计算资源。此外,许多操作可能是时间相关的,使得非常快速地(例如,在几毫秒内)需要结果,并且这些操作可能受到诸如入列的负载平衡努力的负面影响。因此,在需要结果之前完成操作可能对系统具有负面的整体影响(例如,因为完成操作所需的计算资源可能已经用于完成其他更紧急的操作)。
本申请的各方面通过使得在按需代码执行系统上执行的异步任务与“截止期限”相关联来解决该问题,所述“截止期限”指示依赖任务将需要任务结果的预测时间。当调用异步依赖性任务时,按需代码执行系统可确定任务的截止期限,并在截止期限之前将要执行的任务入列。例如,不是立即执行依赖性任务,而是按需代码执行系统可延迟执行,直到在按需代码执行系统处有多余资源可用,或者直到达到截止期限。因此,可以命令在按需代码执行系统处执行异步任务,以提高使用系统的计算资源的效率。
现在将讨论在按需任务执行系统上执行任务。具体地,为了执行任务,本文所描述的按需代码执行系统可维持预初始化的虚拟机实例池,一旦接收到用户请求,所述预初始化的虚拟机实例池就可投入使用。由于这些虚拟机的预初始化性质,与执行用户代码相关联的延迟(有时称为等待时间)(例如,实例和语言运行时启动时间)可显著减少,通常减少到亚100毫秒的水平。说明性地,按需代码执行系统可在一个或多个物理计算装置上维持虚拟机实例池,其中每个虚拟机实例在其上加载有一个或多个软件组件(例如,操作系统、语言运行时、库等)。当按需代码执行系统接收到执行用户程序代码(“任务”)的指定用于执行用户程序代码的一个或多个计算约束的请求时,按需代码执行系统可基于由所述请求指定的一个或多个计算约束来选择用于执行用户程序代码的虚拟机实例,并且致使用户程序代码在所选择的虚拟机实例上执行。程序代码可在虚拟机实例上创建的隔离容器中执行。由于池中的虚拟机实例已经被启动并且在接收到请求时加载有特定的操作系统和语言运行时,所以与发现可处理请求(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)的计算容量相关联的延迟显著减少。
按需代码执行系统可包括虚拟机实例管理器,所述虚拟机实例管理器被配置来接收用户代码(以各种编程语言中的任何一种编写的线程、程序等),并以高度可伸缩、低等待时间的方式执行代码,而无需用户配置虚拟机实例。具体地,虚拟机实例管理器可在接收用户代码之前以及在从用户接收有关任何特定虚拟机实例配置的任何信息之前,根据预先确定的配置集来创建和配置虚拟机实例,每个配置对应于各种运行时环境处的任何一个或多个。此后,虚拟机实例管理器接收用户发起的执行代码的请求,并基于与所述请求相关联的配置信息标识预先配置的虚拟机实例以执行代码。虚拟机实例管理器可进一步分配所标识的虚拟机实例以至少部分地通过在所分配的虚拟机实例内创建和配置容器来执行用户的代码。用于实现虚拟机实例管理器和在虚拟机实例上执行用户代码的各种实施方案在标题为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TOEXECUTE PROGRAM CODE”并且于2014年9月30日提交的美国专利号9,323,556(“所述‘556申请”)中加以更详细的描述,其全部内容特此以引入方式并入。
如本文所用,术语“虚拟机实例”旨在指代软件或其他可执行代码的执行,其仿真硬件以提供软件可在其上执行的环境或平台(“执行环境”)。虚拟机实例通常由硬件装置执行,所述硬件装置可与由虚拟机实例仿真的物理硬件不同。例如,虚拟机在第二类型的处理器和存储器上执行时可仿真第一类型的处理器和存储器。因此,虚拟机可用来执行旨在用于正在执行第二执行环境(例如,第二操作系统)的物理装置上的第一执行环境(例如,第一操作系统)的软件。在一些情况下,由虚拟机实例仿真的硬件可与底层装置的硬件相同或相似。例如,具有第一类型处理器的装置可实现多个虚拟机实例,每个虚拟机实例仿真该第一类型处理器的实例。因此,虚拟机实例可用来将装置分成多个逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例通常可提供偏离底层物理装置的硬件的抽象层次,但并不需要这种抽象。例如,假设装置实现多个虚拟机实例,每个虚拟机实例仿真与由该装置提供的硬件完全相同的硬件。在这种情境下,每个虚拟机实例可允许软件应用程序在没有转换的情况下在底层硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用程序之间的逻辑分离。此过程(通常称为“本地执行”)可用来提高虚拟机实例的速度或性能。也可使用允许直接利用底层硬件的其他技术,诸如硬件直通技术。
虽然在本文中将执行操作系统的虚拟机描述为执行环境的一个实例,但其他执行环境也是可能的。例如,任务或其他过程可在软件“容器”内执行,所述软件“容器”提供运行时环境而其本身不提供硬件的虚拟化。容器可在虚拟机内实现以提供另外的安全性,或者可在虚拟机实例之外运行。
如本领域技术人员将明白,本文所描述的实施方案用于通过使得计算装置能够在按需代码执行系统内迅速执行许多用户的代码来改进这些装置的功能。此外,在按需代码执行系统的上下文中,本公开使得能够有效地在执行环境(例如,虚拟机实例、容器等)内执行代码,同时减少与异步操作相关联的低效率。具体地,本公开通过使得被阻塞操作的执行环境能够被暂停,并且使得能够在操作被解除阻塞时重新创建该环境来使得能够减少与被阻塞操作相关联的计算资源。此外,本公开通过使用与那些操作相关联的截止期限来实现异步操作的有效调度。因此,本领域技术人员将凭借本公开内容而明白,本文所描述的实施方案大体上代表对虚拟机使用管理、基于网络的代码执行技术领域和计算装置的重大贡献。
当结合附图参阅以下详细描述时,可更好地理解本公开的上述方面和许多伴随的优点,因此将更易于了解所述方面和优点。
图1是说明性操作环境100的框图,其中按需代码执行系统110可基于与用户计算装置102和辅助服务106的通信来操作。通过说明,各种示例性用户计算装置102被示出与按需代码执行系统110(包括台式计算机、膝上型计算机和移动电话)通信。一般来讲,用户计算装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可佩戴计算机、服务器、个人数字助理(PDA)、混合型PDA/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、照相机、数字媒体播放器等。按需代码执行系统110可向用户计算装置102提供一个或多个用户接口、命令行接口(CLI)、应用程序编程接口(API)和/或其他程序化接口,用于生成并上传用户可执行代码,召用用户提供的代码(例如,提交在按需代码执行系统110上执行用户代码的请求),调度基于事件的作业或定时作业,跟踪用户提供的代码和/或查看与其请求和/或用户代码相关的其他日志或监视信息。尽管一个或多个实施方案在本文中可描述为使用用户接口,但应当理解,这类实施方案能够另外地或可选地使用任何CLI、API或其他程序化接口。
说明性环境100还包括一个或多个辅助服务106,所述一个或多个辅助服务106可与单一需求代码执行环境110交互以便代表用户实现所需功能。辅助服务106可对应于网络连接的计算装置(诸如服务器),所述计算装置生成单一需求代码执行环境110可访问的或以其他方式传达到单一需求代码执行环境110的数据。例如,辅助服务106可包括web服务(例如,与用户计算装置102相关联、与按需代码执行系统110相关联、或与第三方相关联)、数据库、简易信息聚合(“RSS”)阅读器、社交网站或任何其他网络可访问服务源或数据源。在一些情况下,辅助服务106可与按需代码执行系统110相关联,例如以便向按需代码执行系统110提供记账服务或日志服务。在一些情况下,辅助服务106主动地将信息(诸如API调用或其他任务触发信息)传输到按需代码执行系统110。在其他情况下,辅助服务106可以是被动的,使得数据可供按需代码执行系统110访问。如下文所描述,按需代码执行系统110的组件可周期性地轮询此类被动数据源,并基于所提供的数据触发按需代码执行系统110内的任务的执行。虽然在图1中被描绘为与用户计算装置102、按需代码执行系统110不同,但在一些实施方案中,各种辅助服务106可由用户计算装置102或按需代码执行系统110实现。
用户计算装置102和辅助服务106可通过网络104与按需代码执行系统110进行通信,所述网络104可包括任何有线网络、无线网络或其组合。例如,网络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包括前端120,所述前端120实现与按需代码执行系统110的交互。在说明性实施方案中,前端120用作由按需代码执行系统110提供的其他服务的“前门”,从而使得用户(通过用户计算装置102)能够提供计算机可执行代码、请求执行计算机可执行代码以及查看计算机可执行代码的结果。前端120包括多种组件(图1中未示出),以实现按需代码执行系统110与其他计算装置之间的交互。例如,前端120可包括请求接口,所述请求接口向用户计算装置102提供将用户指定的代码上传或以其他方式传达到按需代码执行系统110,并且此后请求执行该代码的容量。在一个实施方案中,请求接口通过图形用户接口(GUI)、CLI或API与外部计算装置(例如,用户计算装置102、辅助服务106等)通信。前端120处理请求并确保请求被正确地授权。例如,前端120可确定与请求相关联的用户是否被授权访问在请求中指定的用户代码。
如本文所用的用户代码可指以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可互换使用。可例如结合由用户开发的特定web应用程序或移动应用程序来执行这种用户代码以实现特定功能。如上所述,用户代码(例如,为了实现特定功能)的单独集合在本文中称为“任务”,而该代码的特定执行称为“任务执行”或简称为“执行”。作为非限制性实例,可以JavaScript(例如,node.js)、Java、Python和/或Ruby(和/或另一种编程语言)编写任务。可以各种方式“触发”任务以在按需代码执行系统110上执行。在一个实施方案中,用户或其他计算装置可发送执行任务的请求,所述请求通常可称为对执行任务的“调用”。此类调用可包括将要执行的用户代码(或其位置)和将要用于执行用户代码的一个或多个变元。例如,调用可提供任务的用户代码连同执行任务的请求。在另一个实例中,调用可通过任务的名称或标识符来标识先前上传的任务。在又一实例中,对应于任务的代码可被包括在对任务的调用中,以及在由按需代码执行系统110接收到请求之前被上传到单独的位置(例如,辅助服务106的存储库或按需代码执行系统110内部的存储系统)中。按需代码执行系统110可基于在处理对任务的调用时任务的代码可用的位置来改变其任务的执行策略。
前端120的请求接口可接收对执行任务的调用作为来自用户的超文本传输协议安全(HTTPS)请求。此外,当执行任务时,还可处理并利用包括在HTTPS请求中的任何信息(例如,标头和参数)。如以上所讨论,可使用任何其他协议(包括例如HTTP、MQTT和CoAP)来将包含任务调用的消息传递到请求接口122。
对执行任务的调用可指定将要与对应于任务的用户代码一起使用的一个或多个第三方库(包括本地库)。在一个实施方案中,调用可向按需代码执行系统100提供包含与请求执行的任务相对应的用户代码和任何库(和/或其存储位置的标识)的ZIP文件。在一些实施方案中,调用包括指示将要执行的任务的程序代码、写入程序代码的语言、与调用相关联的用户和/或专供执行程序代码使用的计算资源(例如,存储器等)的元数据。例如,可向调用提供先前由用户上传的、由按需代码执行系统110(例如,标准例程)提供的和/或由第三方提供的任务的程序代码。在一些实施方案中,这种资源级约束(例如,将要分配多少存储器用于执行特定用户代码)被指定用于特定任务,并且可在任务的每次执行时不改变。在此类情况下,按需代码执行系统110可在接收到每个单独的调用之前访问此类资源级约束,并且单独的调用可不指定此类资源级约束。在一些实施方案中,调用可指定其他约束,诸如指示调用请求执行任务的什么种类的许可或权限的许可数据。这种许可数据可由按需代码执行系统110用来(例如,在专用网络上)访问私有资源。
在一些实施方案中,调用可指定应当被采用以用于处理所述调用的行为。在此类实施方案中,调用可包括用于启用其中执行在调用中提及的任务的一种或多种执行模式的指示符。例如,调用可包括用于指示任务是否应当以调试模式执行的标志或标头,在所述调试模式下可结合任务的执行而生成的调试和/或日志输出被(例如,通过控制台用户接口)提供回给用户。在这种实例中,按需代码执行系统110可检查调用并寻找标志或标头,并且如果标志或标头存在,那么按需代码执行系统110可修改在其中执行任务的容器的行为(例如,日志功能),并且致使输出数据将要被提供回给用户。在一些实施方案中,通过由按需代码执行系统110提供给用户的用户接口将行为/模式指示符添加到调用。还可基于调用中提供的指示来启用或禁用其他特征,诸如源代码分析、远程调试等。
为了管理对代码执行的请求,前端120还可包括执行队列(图1中未示出),其可维持对用户请求的任务执行的记录。说明性地,按需代码执行系统110同时执行任务的数量是有限的,并且因此,在按需代码执行系统110中发起的新任务执行(例如,通过API调用)可被置于执行队列上并且例如以先入先出顺序处理。在一些实施方案中,按需代码执行系统110可包括多个执行队列,诸如用于每个用户账户的单独执行队列。例如,按需代码执行系统110的用户可能期望限制按需代码执行系统110上的任务执行的速率(例如,出于成本原因)。因此,按需代码执行系统110可利用帐户特定的执行队列来限制特定用户帐户同时执行任务的速率。在一些情况下,按需代码执行系统110可对任务执行进行优先级排序,使得特定帐户的或指定优先级的任务执行绕过或优先于执行队列。在一些情况下,可基于在按需代码执行系统110处接收到的预触发通知(例如,基于根据预触发通知要接收的后续任务调用的预计数量)来修改执行队列的数量和配置。在其他情况下,按需代码执行系统110可在接收到对该任务的调用之后立即或基本上立即执行任务,因此,可省略执行队列。
如上所述,可基于来自用户计算装置102的显式调用(例如,当在请求接口120处接收到时)来触发任务以在按需代码执行系统110处执行。可选地或另外地,可基于从一个或多个辅助服务106检索到的数据来触发任务以在按需代码执行系统110处执行。为了促进与辅助服务106的交互,前端120可包括轮询接口(图1中未示出),所述轮询接口操作以轮询辅助服务106以获取数据。说明性地,轮询接口可周期性地向一个或多个用户指定的辅助服务106传输请求以检索任何新的可用数据(例如,社交网络“帖子”、新闻文章等),并确定该数据是否对应于触发在按需代码执行系统110上执行任务的用户设立的标准。说明性地,用于任务执行的标准可包括但不限于辅助服务106处是否有新数据、数据的类型或内容、或者与数据相对应的定时信息。除了基于显式用户调用和来自辅助服务106的数据执行的任务之外,在一些情况下,按需代码执行系统110可操作以独立地触发任务的执行。例如,按需代码执行系统110可(基于来自用户的指令)操作以在多个指定时间间隔(例如,每10分钟)的每一个处触发任务的执行。
前端120还可包括被配置来在按需代码执行系统110上输出有关任务的执行的信息的输出接口(图1中未示出)。说明性地,输出接口可将有关任务执行(例如,任务的结果、与任务执行相关的错误、或诸如完成执行所需的总时间、通过执行处理的总数据的任务执行的细节等)或预触发通知(接收到的预触发通知、基于预触发通知采取的动作、所确定的预触发通知与后续任务执行之间的相关性等)的数据传输到用户计算装置102或辅助服务106(其可包括例如记账服务或日志服务)。输出接口可进一步使得能够将数据(诸如服务调用)传输到辅助服务106。例如,可在执行任务期间利用输出接口将API请求传输到外部服务106(例如,以存储在任务执行期间生成的数据)。
虽然未在图1中示出,但在一些实施方案中,按需代码执行系统110可包括多个前端120。在此类实施方案中,可提供负载均衡器以例如以循环方式将传入的调用分发给多个前端120。在一些实施方案中,负载均衡器将传入的调用分发给多个前端120的方式可基于预热池130A和/或活动池140A的状态。例如,如果认为预热池130A中的容量足够,那么可基于前端120的单独容量(例如,基于一个或多个负载平衡限制)将调用分发给多个前端120。在另一方面,如果预热池130A中的容量小于阈值量,那么可去除此类负载平衡限制中的一个或多个,使得可以减少或最小化从预热池130A取出的虚拟机实例的数量的方式来将调用分发给多个前端120。例如,即使根据负载平衡限制,调用将要被引导至前端A,如果前端A需要从预热池130A中取出实例以服务所述调用但前端B可使用其活动池中的一个实例来服务同一个调用,那么所述调用可被引导至前端B。
为了执行任务,按需代码执行系统110包括预热池管理器130,所述预热池管理器130“预热”(例如,初始化)虚拟机实例以使得任务能够被快速执行,而没有由虚拟机的初始化引起的延迟。按需代码执行系统110还包括工作者管理器140,所述工作者管理器140管理活动的虚拟机实例(例如,当前被指派以响应于任务调用而执行任务)。
当按需代码执行系统110检测到触发按需代码执行系统110上的任务执行的事件时,预热池管理器130确保虚拟机实例已准备好供工作者管理器140使用。在图1所示的实例中,预热池管理器130管理预热池130A,所述预热池130A是预初始化且预配置的虚拟机实例的组(有时称为池),其可用来响应于触发那些任务而执行任务。在一些实施方案中,预热池管理器130致使虚拟机实例在按需代码执行系统110内的一个或多个物理计算机器上启动并添加到预热池130A。例如,预热池管理器130可基于预热池130A中的可用容量来致使另外的实例被添加到预热池130A,以服务传入的调用。如下文将描述的,预热池管理器130可进一步与按需代码执行系统110的其他组件(诸如工作者管理器140)相结合地工作,以基于接收到的预触发通知添加或以其他方式管理预热池中的实例和/或容器。在一些实施方案中,预热池管理器130可利用按需代码执行系统110内的物理计算装置和一个或多个虚拟机实例服务来获取并维持可用来服务由前端120接收的调用的计算容量。另外,按需代码执行系统110可包括用于控制(例如,增加或减少)预热池130A中的可用容量的一个或多个逻辑旋钮或开关。例如,系统管理员可使用这种旋钮或开关来在高峰时间期间增加预热池130A中可用的容量(例如,预启动实例的数量)。在一些实施方案中,预热池130A中的虚拟机实例可基于独立于执行任务的特定调用的预先确定的配置集来进行配置。预先确定的配置集可对应于执行任务的各种类型的虚拟机实例。预热池管理器130可基于与当前或先前任务执行相关的一个或多个度量来优化预热池130A中的虚拟机实例的类型和数量。此外,预热池管理器130可基于预触发通知(例如,通过基于根据接收到的预触发通知预期要执行的任务的要求预初始化一个或多个虚拟机实例)来设立或修改预热池130A中的虚拟机实例的类型和数量。
如图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编写的代码的容器。在一些实施方案中,提供多个预热池130A,每个预热池130A具有相同配置的虚拟机实例。
预热池管理器130可在预热池130A中预配置虚拟机实例,使得每个虚拟机实例被配置来满足在限定任务时可由用户请求或指定的操作条件中的至少一个。在一个实施方案中,操作条件可包括其中可写入任务的潜在用户代码的程序语言。例如,这类语言可包括Java、JavaScript、Python、Ruby等。在一些实施方案中,可写入任务的用户代码的语言集可限于预先确定的集合(例如,4种语言的集合,尽管在一些实施方案中提供多于或少于四种语言的集合),以便有助于可满足对执行任务的调用的虚拟机实例的预初始化。例如,当用户正通过由按需代码执行系统110提供的用户接口来配置任务时,用户接口可提示用户指定用于执行任务的预先确定的操作条件中的一个。在另一个实例中,用于利用由按需代码执行系统110提供的服务的服务级别协议(SLA)可指定任务应当满足的一组条件(例如,编程语言、计算资源等),并且按需代码执行系统110可假设所述任务满足在处理请求时的所述一组条件。在另一个实例中,由任务指定的操作条件可包括:将要用于执行任务的计算功率的量;任务的触发事件的类型(例如,API调用、HTTP分组传输、辅助服务106处的特定数据的检测);任务的超时(例如,在其后可终止任务的执行的阈值时间);和安全策略(例如,可控制预热池130A中的哪些实例可由哪个用户使用),以及其他指定的条件。
工作者管理器140管理用于服务对执行任务的传入调用的实例。在图1所展示的实例中,工作者管理器140管理活动池140A,所述活动池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从预热池管理器130请求计算容量,而无需知道预热池130A中的虚拟机实例。
在图1所展示的实例中,在称为容器(例如,容器156D、156E、158D)的隔离的按需代码执行系统处执行任务。容器是在虚拟机实例内使用该实例上可用的资源创建的逻辑单元。例如,工作者管理器140可基于在对执行任务的调用中指定的信息来创建新容器或者定位活动池140A中的实例之一中的现有容器,并将所述容器指派给所述调用以处理任务的执行。在一个实施方案中,此类容器被实现为Linux容器。
一旦前端120成功处理了执行任务的触发事件,工作者管理器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天等)之后,容器和/或虚拟机实例被关闭(例如,删除、终止等),并且分配给其的资源被释放。在一些实施方案中,在容器被拆除之前所经过的阈值时间比在实例被拆除之前所经过的阈值时间更短。
在一些实施方案中,按需代码执行系统110可在其响应于触发事件执行任务时向辅助服务106中的一个或多个提供数据。例如,前端120可与包括在辅助服务106内的监视/日志/记账服务通信。监视/日志/记账服务可包括:监视服务,其用于管理从按需代码执行系统110接收的监视信息,诸如按需代码执行系统110上的容器和实例的状态;日志服务,其用于管理从按需代码执行系统110接收的日志信息,诸如由按需代码执行系统110上的容器和实例执行的活动;以及记账服务,其用于(例如基于由监视服务和日志服务管理的监视信息和/或日志信息)生成与在按需代码执行系统110上执行用户代码相关联的记账信息。除了可由所述监视/日志/记账服务(例如,代表按需代码执行系统110)执行的系统级活动之外,监视/日志/记账服务还可提供代表在按需代码执行系统110上执行的任务的应用级服务。例如,监视/日志/记账服务可代表在按需代码执行系统110上执行的任务来监视和/或日志记录各种输入、输出或其他数据和参数。如下文将更详细描述的,前端120可另外与辅助服务106交互以接收预触发通知,所述预触发通知指示在按需代码执行系统110上执行任务的后续调用的可能性。
在一些实施方案中,工作者管理器140可对由工作者管理器140管理的实例和容器(例如,活动池140A中的那些)执行健康检查。例如,由工作者管理器140执行的健康检查可包括确定由工作者管理器140管理的实例和容器是否具有任何以下问题:(1)错误配置的联网和/或启动配置、(2)耗尽的存储器、(3)损坏的文件系统、(4)不兼容的内核和/或可能损害实例和容器的性能的任何其他问题。在一个实施方案中,工作者管理器140定期(例如每5分钟、每30分钟、每小时、每24小时等)执行健康检查。在一些实施方案中,健康检查的频率可基于健康检查的结果自动调整。在其他实施方案中,健康检查的频率可基于用户请求来调整。在一些实施方案中,工作者管理器140可对预热池130A中的实例和/或容器执行类似的健康检查。预热池130A中的实例和/或容器可与活动池140A中的那些实例和容器一起或分开管理。在一些实施方案中,在预热池130A中的实例和/或容器的健康与活动池140A分开管理的情况下,预热池管理器130而不是工作者管理器140可对预热池130A中的实例和/或容器执行上述健康检查。
工作者管理器140可包括用于发现用来服务传入的代码执行请求的计算容量(例如,容器)的实例分配单元以及用于有助于在那些容器上执行用户代码的用户代码执行单元。工作者管理器140的示例性配置将在上面以引用方式并入的所述‘556专利中(例如,在所述‘556专利的图2中)加以更详细的描述。在一些情况下,可基于预期传入的代码执行请求来修改实例分配单元的操作,如基于接收到的预触发通知所预测的那样。例如,在按需代码执行系统110利用或可访问动态供应的计算资源(诸如动态供应的基于网络的存储空间,对处理能力的可缩放访问等)的情况下,实例分配单元可被配置来修改这些动态供应的计算资源中的一个或多个的量。例如,实例分配单元可与动态分配的网络存储服务(图1中未示出)交互,以增加可用于虚拟机实例的数据存储量。
在所描绘的实例中,虚拟机实例(“实例”)152、154在由预热池管理器130管理的预热池130A中示出,并且实例156、158在由工作者管理器140管理的活动池140A中示出。按需代码执行系统110内的各种组件的图示在本质上是逻辑的,并且组件中的一个或多个可由单个计算装置或多个计算装置实现。例如,实例152、154、156、158可在不同的各种地理区域中的一个或多个物理计算装置上实现。类似地,前端120、预热池管理器130和工作者管理器140中的每一个可跨多个物理计算装置实现。可选地,前端120、预热池管理器130和工作者管理器140中的一个或多个可在单个物理计算装置上实现。在一些实施方案中,按需代码执行系统110可包括多个前端、多个预热池管理器和/或多个工作者管理器。尽管在图1的实例中示出四个虚拟机实例,但本文所描述的实施方案不限于此,并且本领域技术人员将理解,按需代码执行系统110可包括使用任何数量的物理计算装置实现的任何数量的虚拟机实例。类似地,尽管在图1的实例中示出单个预热池130A和单个活动池140A,但本文所描述的实施方案不限于此,并且本领域技术人员将理解,按需代码执行系统110可包括任何数量的预热池和活动池。
虽然在图1中未示出,在一些实施方案中,按需代码执行系统110可包括多个预热池管理器130和/或多个工作者管理器140,每个预热池管理器130和每个工作者管理器140操作不同的预热池130A和活动池140A。例如,可以在不同的地理位置处设立各种预热池130A和活动池140A,每个预热池和活动池具有对应的预热池管理器130和工作者管理器140。前端120可以根据各种标准在不同的活动池140A之间分发任务,所述标准诸如池的负载平衡、任务所需的资源的位置、或者池中的虚拟机实例对执行任务的适合性。
根据本公开的实施方案,按需代码执行系统110还包括异步控制器160,所述异步控制器160包括用于管理按需代码执行系统110上的异步操作的组件。如本文所用,异步操作可以是指操作类型的任何组合,包括例如按需代码执行系统160上的两个任务、或按需代码执行系统160上的第一任务以及第二非任务操作(例如,HTTP请求、对外部服务的API调用)。为了有效地执行利用异步操作的任务,异步控制器160可包括异步调度器162,所述异步调度器162与按需代码执行系统110的组件交互以使得已经“阻塞”等待操作的任务能够从执行环境中移除(可能导致暂停或解构执行环境),以减少与任务相关联的计算资源。为了使得一旦依赖性操作完成后就能够恢复任务,异步调度器162可将任务的状态信息存储在状态数据存储库166内。异步调度器162可进一步将关于任务的依赖性的信息存储在依赖性数据存储库168内,使得当已经满足依赖性时可以恢复任务。例如,异步控制器162可操作以通过使用来自状态数据存储库166的信息将任务放置在具有与其从其初始执行环境移除之前相同的状态的新执行环境中,或者通过重新创建先前的执行环境来接收依赖性操作何时完成的通知,并与按需代码执行系统110的其他组件交互以恢复任务。此外,在不需要立即执行那些依赖性的情况下,异步调度器162可操作以有效地命令依赖性的执行。具体地,异步调度器162可以被通知依赖性操作、以及预期完成依赖性操作的截止期限,并且与按需代码执行系统110的其他组件交互以在截止期限之前的有效时间(例如,按需代码执行环境110具有多余容量的时间)调度依赖性操作的执行。为了便于描述,异步依赖性操作,特别是那些不需要立即执行的操作,在本文中有时称为“承诺”(例如,表示操作将来在需要时完成的象征“承诺”))。同样为了便于描述,异步依赖性操作的结果(“承诺”)在本文中有时可称为“期货”(例如,表示最初不可用但预期将来可用的值)。有关承诺和期货的信息可以存储在承诺数据存储库164中。承诺数据存储库164、状态数据存储库166和依赖性数据存储库168中的每一者可对应于任何持久性的或基本上持久性的数据储存装置,诸如硬盘驱动器(HDD)、固态驱动器(SDD)、网络附属存储(NAS)、磁带驱动器或其任何组合。虽然被示出为多个数据存储库,但承诺数据存储库164、状态数据存储库166和依赖性数据存储库168中的任一者可以在公共底层数据存储装置上实现。
图2描绘计算系统(称为服务器200)的一般体系结构,其实现本公开的实施方案以便使得能够处理按需代码执行系统110上的异步任务执行。图2中描绘的服务器200的一般体系结构包括可用于实现本公开的各方面的计算机硬件和软件模块的布置。硬件模块可用物理电子装置来实现,如下文更详细地讨论的。服务器200可包括比图2所示的那些元件多得多(或更少)的元件。然而,没有必要示出所有这些通常的常规元件以便提供可用的公开内容。另外,图2所示的一般体系结构可用于实现图1所示的其他组件中的一个或多个。如图所示,服务器200包括处理单元210、网络接口212、计算机可读介质驱动器214、输入/输出装置接口216,它们全部都可通过通信总线彼此通信。网络接口212可提供到一个或多个网络或计算系统的连接性。因此,处理单元210可通过网络104从其他计算系统或服务接收信息和指令。处理单元210还可与存储器220进行来回通信,并且进一步通过输入/输出装置接口216提供用于任选显示器(未示出)的输出信息。输入/输出装置接口216还可接受来自任选输入装置(未示出)的输入。
存储器220可包含计算机程序指令(在一些实施方案中被分组成模块),处理单元210执行所述计算机程序指令以便实现本公开的一个或多个方面。存储器210通常包括RAM、ROM和/或其他持久性、辅助性或非暂时性计算机可读介质。存储器210可存储操作系统224,所述操作系统224提供计算机程序指令以供服务器200的一般管理和操作中的处理单元210使用。存储器220还可包括用于实现本公开的各方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器220包括用户接口单元222,所述用户接口单元222生成用于例如通过导航和/或浏览接口(诸如安装在计算装置上的浏览器或应用程序)在计算装置上显示的用户接口(和/或其指令)。另外,存储器220可包括和/或与一个或多个数据储存库(诸如数据存储库202)通信,所述一个或多个数据储存库可对应于任何持久性的或基本上持久性的数据存储装置,诸如硬盘驱动器(HDD)、固态驱动器(SDD)、网络附属存储(NAS)、磁带驱动器或其任何组合。
除了用户接口单元222之外和/或与用户接口单元222组合,存储器220可包括对应于计算机可执行指令的异步控制器软件226,所述计算机可执行指令在由服务器200执行时实现上面关于异步控制器160所描述的功能。虽然异步控制器软件226在图2中被示出为服务器200的一部分,但在其他实施方案中,异步控制器160的全部或一部分可由按需代码执行系统110的其他组件和/或另一个计算装置实现。例如,在本公开的某些实施方案中,与按需代码执行系统110通信的另一个计算装置可包括与被展示为账户管理器160的一部分的模块和组件类似地操作的若干模块或组件。
虽然将图2的计算装置描述为实现异步控制器160,但相同的或类似的计算装置能够另外地或可选地用来实现按需代码执行系统110的其他组件。例如,这种计算装置可独立地或与其他组件(例如,数据存储库)结合使用以实现图1的预热池管理器130或工作者管理器140。可修改置于存储器220内的软件或计算机可执行指令,以使得能够执行本文关于预热池管理器130或工作者管理器140所描述的功能。
参考图3A和图3B,描绘了用于通过在任务被阻塞时从活动池140A内的执行环境中移除任务,并在任务被解除阻塞时在相同或不同的执行环境内恢复任务来有效地处理按需代码执行系统110上的被阻塞的任务执行的说明性交互。具体地,图3A描绘用于检测任务被阻塞、用于在阻塞期间保存任务的状态以及用于从执行环境移除任务的交互。图3B描绘用于检测任务的依赖性已经完成、以及用于在新的或重新创建的执行环境中恢复任务的执行的交互。虽然在两个图中示出,但为了清楚起见,保持了图3A和图3B中的交互的编号。
图3A的交互开始于(1),其中用户装置102向前端120提交对按需代码执行系统上的任务的调用。如上所述,调用的提交可包括向前端120传输专用数据,诸如引用任务别名的HTTP分组或API调用。虽然图3A的交互被描述为包括由用户装置102进行对任务的显式调用,但是对任务的调用可以各种方式发生,包括由辅助服务106提交调用(图3A中未示出)或由按需代码执行洗头110生成调用(例如,基于在满足特定标准(诸如经过一段时间或检测到辅助服务106上的数据)时调用别名的规则)。调用可包括执行任务所需的任何信息,诸如用于执行的参数、用于执行任务或在任务执行期间使用的认证信息等。
此后,在(2)处,前端120分发任务以便由工作者管理器140执行。虽然在图3A中未示出,在一些情况下,前端120可以在将任务分发给工作者管理器140之前执行附加操作,诸如确定是否存在足够的容量来执行任务、将任务入列、确定将任务的执行归属到的帐户等。此类操作在‘556专利中更详细地描述。
在接收到任务的分发之后,工作者管理器140在(3)处利用活动池140内的虚拟机实例来执行任务。虚拟机实例的选择可包括各种标准,诸如满足用于执行任务的要求或偏好(例如,所需许可、资源访问、依赖关系、执行环境等)的虚拟机实例在活动池140A内是否可用。在这种机器在活动池140A内不可用的情况下,工作者管理器140可与预热池管理器130(图4中未示出)交互,以将这种虚拟机实例添加到活动池140A,如在'556专利中所描述的。在满足用于执行任务的要求或偏好的多个虚拟机实例在活动池140内可用的情况下,工作者管理器140可基于多个标准(包括但不限于虚拟机实例的负载平衡)在虚拟机之间进行选择。
在执行任务期间,在(4)处,工作者管理器140(例如,通过使用正在执行任务的虚拟机)检测到,任务的执行由于对单独的异步操作(与任务不同的操作)的依赖性而阻塞。异步操作可包括例如按需代码执行系统110上的第二任务或外部系统上的操作,诸如网络服务。因为任务的执行已被阻塞,所以任务无法继续进一步处理,并且在活动池140A内保持活动,因此无效地利用活动池140A的计算资源。
为了减少资源的这种低效使用,工作者管理器140可确定任务是否应当暂停,直到依赖性操作完成为止。在一个实施方案中,工作者管理器140可基于阻塞的预测持续时间来利用各种不同的暂停技术。说明性地,当阻塞的预测持续时间增加时,工作者管理器140可采用一系列逐渐更积极的暂停技术,使得低于10ms的阻塞持续时间导致无暂停,在10ms与100ms之间的持续时间导致任务的虚拟机实例执行内的任务的线程暂停,并且超过100ms的持续时间导致从其执行环境中移除任务。可以各种方式确定任务的预测阻塞持续时间。在一个实施方案中,与任务相关联的用户可指定依赖性操作的预测持续时间,并且工作者管理器140可基于依赖性操作的预测持续时间在任务阻塞时保留多少来确定预测的阻塞持续时间。在另一个实施方案中,工作者管理器140可基于有关该依赖性操作的历史信息来指派依赖性操作的预测持续时间。例如,如果依赖性操作的每个先前实例在40ms与50ms之间完成,则工作者管理器可将40ms与50ms之间的预测持续时间指派给依赖性操作的后续执行(例如,通过获取历史持续时间范围的平均值、最小值、最大值或其他统计量度)。依赖性操作的历史持续时间可包括源自相同或不同依赖任务以及相同或不同帐户的操作,使得调用相同依赖性操作的不同用户的两个任务可以或可以不贡献于该依赖性操作的历史持续时间数据的共享集。在一些情况下,可基于传递到依赖性操作的参数对该依赖性操作的历史持续时间进行分组,使得相较于对具有第二组参数的依赖性操作的调用,具有第一组参数的依赖性操作的调用与不同的历史持续时间相关联。更进一步,类似的依赖性操作的历史持续时间在一些情况下可以被分组在一起,使得对特定域的一组HTTP调用为了预测后续调用的持续时间的目的而共享历史持续时间,或者使得多个相关任务(例如,从共享模板创建、基于相同的库等)为了预测后续调用的持续时间的目的而共享历史持续时间
出于图3A的目的,将假设工作者管理器140将预测的持续时间指派给任务应当从其执行环境(例如,容器、虚拟机实例等)中移除的具有足够值的阻塞。因此,工作者管理器140在(5)处保存任务的状态,以使得能够在新的或重新生成的执行环境中的稍后时间点恢复任务。
根据该状态,可使用各种机制来保存任务的状态。例如,在虚拟机实例中执行任务的情况下,工作者管理器140可将虚拟机实例的“快照”(虚拟机状态的记录,包括磁盘状态、存储器状态、配置等)作为任务的状态保存。类似地,在任务在容器中(在虚拟机实例内部或外部)执行的情况下,工作者管理器140可“交托(commit)”容器,以将容器的当前状态保存为图像。虽然保存整个执行环境(例如,虚拟机实例或容器)的状态可确保任务在稍后的时间点准确地恢复,但从计算资源的角度来看它也可以是相对昂贵的。此外,如果当前在执行环境中执行多个任务,则保存的状态可包括不必要的和可能不期望的信息。可用于保存任务状态的附加机制可用于保存运行时环境执行任务的状态。例如,工作者管理器140可保存执行任务的node.js或Java虚拟机环境的状态。相较于保存完全执行环境的状态,保存运行时环境的状态可与更低的计算资源使用相关联,并且可允许同一执行环境内的其他运行时环境继续运行。用于保存任务状态的另一机制可用于保存任务内的对象(例如,变量、静态对象等)的状态。在某些情况下,保存对象的状态可由编译器或解释器来完成,所述编译器或解释器用于准备要执行的任务的代码。在其他情况下,保存对象的状态可由虚拟机本身完成。例如,如果任务尚未开始处理(例如,如果在任务的非常早期发生阻塞),则输入到任务的参数可用于保存任务的状态。相反,如果任务已接近完成处理,则从任务输出的参数可用于保存任务的状态。第三方工具还可用于检查执行环境的存储器,以便保存任务的状态(有时称为“检查点”)。
在(6)处,工作者管理器140可从其执行环境中移除任务,从而消除任务对活动池140A内的计算资源的使用。在一些情况下,诸如在任务是执行环境内的唯一任务的情况下,工作者管理器140可进一步拆除或解构执行环境,从而进一步减少计算资源使用。
在(7)处,工作者管理器140将状态信息与有关任务的阻塞的信息一起传输到异步控制器160,诸如任务已被阻塞的依赖性操作的标识符或阻塞的预期持续时间。异步控制器160在(8)处可存储检索到的状态信息和阻塞信息,使得可在稍后的时间(例如,当依赖性操作已经完成或预期很快完成时)恢复任务。在(9)处,异步控制器160可将通知符附接到阻塞依赖性,从而请求工作者管理器140在阻塞依赖性已经完成时通知异步控制器160。例如,在依赖性操作是按需代码执行系统110上的任务的情况下,异步控制器160可请求工作者管理器140在任务已经完成时通知异步控制器160。在依赖性操作是HTTP请求的情况下,异步控制器160可请求工作者管理器140在HTTP请求已经完成时通知异步控制器160。
在图3B中继续图3A的交互,其中,在(10)处,工作者管理器140获得先前暂停的任务的依赖性操作已经完成的通知。说明性地,在依赖性操作是按需代码执行系统110上的第二任务的情况下,工作者管理器140可从该第二任务的执行环境获得第二任务已经完成的通知。在(11)处,工作者管理器140将完成的依赖性的通知传输到异步控制器160。异步控制器160进而在(12)处标识依赖于依赖性操作的先前暂停的任务(例如,来自在图3A的交互中接收到的阻塞信息),并且在(13)处检索先前存储的暂停任务的状态信息。在(14)处,异步控制器160将指令以及任务的状态信息传输到工作者管理器140以恢复先前暂停的任务。
在(15)处,工作者管理器140利用先前暂停的任务的状态信息来恢复任务,并继续执行。在一个实施方案中,工作者管理器140A可通过重新创建在其中执行任务的虚拟机实例或容器来重新生成任务的初始执行环境。然而,执行环境的底层“主机”可以变化,从而使得工作者管理器140能够有效地分配任务。在另一个实施方案中,因为任务先前已从其初始执行环境中移除,所以工作者管理器140在一些情况下可为恢复的任务选择新的执行环境,诸如不同的虚拟机实例或容器。因此,可基于恢复任务时活动池140A的状态,在任何适当的执行环境中恢复任务。这可通过在任务已经暂停之后增加任务分发的灵活性来实现更有效的任务分配。在利用多个活动池140A的情况下,可基于与用于最初将任务的执行指派给活动池140A的标准类似的标准,在不同于其最初执行的活动池140A上恢复任务。因此,通过从其初始执行环境中移除任务并在新的或重新生成的执行环境中恢复任务来暂停和恢复任务都可以通过减少任务在阻塞期间使用的计算资源来减少按需代码执行系统110处所需的计算资源,并且可以通过使任务的执行环境能够在暂停与恢复之间改变或重新定位来增加按需代码执行系统110在分发任务时的灵活性。因此,本领域技术人员将理解,图3A和图3B的交互表示按需代码执行环境的操作的改进,并且解决计算装置内固有的技术问题,诸如难以有效地调度异步任务、以及由于该任务的计算资源使用而维持被阻塞任务的效率低下。
本领域技术人员将理解,图3A和图3B的交互可包括上述那些交互的另外的或替代的交互。例如,虽然一般关于工作者管理器140描述一些交互,但这些交互可以针对由工作者管理器管理的活动池140A内的单独执行环境或虚拟机发生。例如,第一虚拟机实例可实现交互(3)至(7),而交互(9)涉及与依赖性操作相关联的第二虚拟机实例。在一些情况下,图3A的交互可涉及多个工作者管理器140,使得关于第一工作者管理器140实现交互(3)至(7),并且交互(9)涉及第二工作者管理器140。此外,虽然关于工作者管理器140和异步控制器160描述了图3A的交互,但在一些实施方案中,异步控制器160的功能可在工作者管理器140本身内实现,使得工作者管理器140存储任务状态、任务的阻塞信息等。更进一步,虽然图3A的交互描述了将通知符附接到依赖性过程以使得能够恢复被阻塞任务,但异步控制器160可以另外地或可选地基于其他标准(诸如任务的预测的阻塞持续时间)来恢复被阻塞任务。例如,不是使用通知符来确定何时恢复任务,异步控制器160可在预期任务阻塞结束时或之前恢复任务(例如,在阻塞预期结束之前10ms,以便在阻塞完成之前提供恢复任务的时间)。
虽然关于在对应于任务的代码的执行开始之后被阻塞的任务的执行来描述图3A和图3B的交互,但任务可另外地或可选地在执行之前被阻塞。例如,任务可将依赖性操作限定为先决条件,使得任务只能在完成必要操作之后开始执行。在此类情况下,如上所述,工作者管理器140可保存执行的状态(其可以简单地指代执行的输入),并且在完成必要操作之后使用保存的状态开始执行。
本文说明性地描述了实施方案,其中依赖操作和依赖性操作具有一对一的对应关系。因此,可以为每个依赖和依赖性操作指派唯一标识符,并且依赖操作可基于依赖性操作的状态来阻塞或解除阻塞。按需代码执行系统110的其他配置也是可能的。例如,依赖性可由函数的唯一标识符指定,而不是由特定操作(例如,由函数的执行即“function()”指定,而不是由如由依赖操作调用的该函数的特定实例的执行指定)指定。因此,每次依赖性操作完成时,一个或多个先前阻塞的依赖操作可能有资格恢复。取决于先前阻塞的依赖操作的功能,多个操作可能能够基于单个完成的依赖性操作而恢复,或者每个依赖操作可能要求在恢复之前发生依赖性功能的新完成。在依赖操作是按需代码执行系统110上的任务的情况下,任务的创建者可指定任务是否需要独立完成依赖性操作,或者可基于依赖性操作的共享完成来运行。类似地,在依赖性操作是按需代码执行系统110上的任务的情况下,任务的创建者可指定依赖性操作的完成是否使得一个或多个依赖操作能够恢复处理。在完成依赖性操作之后不是所有依赖性操作都有资格恢复的情况下,异步控制器160可基于任何数量的排序算法(诸如先进先出、(对于与截止期限相关联的任务)最短截止期限优先等)来确定哪些依赖性操作有资格恢复。在一些情况下,依赖性可通过函数和参数的组合来限定,使得依赖任务依赖于用特定设置参数、没有参数等调用的函数。
虽然本申请实现了由于异步依赖性而有效处理被阻塞任务,但本申请进一步使得即使在非阻塞情况下也能够有效地调度异步任务执行。具体地,本申请的实施方案可操作以预测将需要异步任务执行的结果的“截止期限”,并且基于该截止期限来调度异步任务的执行。这种调度可实现按需代码执行系统110内的计算资源的负载平衡或时移使用,从而提高系统的整体效率。例如,在第一任务执行异步地调用第二任务的执行,但预期在相对长的时间段内不需要第二任务执行的结果的情况下,本申请的实施方案可使得第二任务的执行能够被延迟直到需要第二任务执行的结果,从而使得第二任务能够在截止期限之前的任何有效时间执行,诸如当按需代码执行环境110具有多余计算容量时。
在图4A至图4C中描述了用于基于截止期限调度异步任务执行的说明性交互。具体地,图4A描绘用于检测对任务的异步执行的调用的说明性交互,图4B描绘用于基于相关联的截止期限处理异步任务执行的队列的说明性交互,并且图4C描绘用于检索完成的异步任务执行的结果的说明性交互。
图4A的交互开始于(1),其中用户装置102向前端120提交对按需代码执行系统上的任务的调用。如上所述,调用的提交可包括向前端120传输专用数据,诸如引用任务别名的HTTP分组或API调用。虽然图4A的交互被描述为包括由用户装置102进行对任务的显式调用,但是对任务的调用可以各种方式发生,包括由辅助服务106提交调用(图4A中未示出)或由按需代码执行洗头110生成调用(例如,基于在满足特定标准(诸如经过一段时间或检测到辅助服务106上的数据)时调用别名的规则)。调用可包括执行任务所需的任何信息,诸如用于执行的参数、用于执行任务或在任务执行期间使用的认证信息等。
此后,在(2)处,前端120分发任务以便由工作者管理器140执行。虽然在图4A中未示出,在一些情况下,前端120可以在将任务分发给工作者管理器140之前执行附加操作,诸如确定是否存在足够的容量来执行任务、将任务入列、确定将任务的执行归属到的帐户等。此类操作在‘556专利中更详细地描述。
在(3)处,工作者管理器140检测到对异步执行按需代码执行系统110上的另一个任务的调用,其可以说明性地对应于对不同任务的调用,或对应于相同任务的第二次执行。为了便于描述,在图4A至图4C内,异步调用的任务将被称为“承诺”。虽然术语“承诺”有时用于指代稍后将提供某个返回值(通常称为“未来”)的代码,但术语在本文的使用并不一定意味着异步调用的任务将返回一个值。相反,如本文所用,术语“承诺”旨在指代对预期完成调用任务所使用的某个功能的任务的调用,其可包括返回一个值、更新外部服务(例如,数据库)或按需代码执行环境110上的任务所使用的其他功能。在一个实施方案中,对应于任务的代码的创建者可将对另一个任务的调用指定为“承诺”。在另一个实施方案中,工作者管理器140可通过检测到对异步执行另一个任务的调用已经发生并且检测到至少在阈值持续时间内将不需要该任务的结果来检测对承诺的调用,,所述阈值持续时间可以是静态持续时间(例如,100ms)或可变持续时间(例如,预期花费比异步调用的任务长至少50ms来完成,这可基于有关任务的执行的历史数据来确定)。调用承诺的时间与预期需要完成承诺的时间之间的持续时间可由用于调用任务的代码的创建者限定,或者由工作者管理器140确定。说明性地,工作者管理器140可通过检测对代码内的承诺的结果的引用,或者检测由从属于承诺的调用任务的创建者指定的代码中的点来确定调用任务的代码中的点,在所述点处预期承诺的结果。然后,工作者管理器140可通过以下方式基于有关调用任务或相关任务的先前执行的先前历史数据来估计对承诺的调用与后续参考点之间的持续时间(例如,从共享模板创建、基于相同的库等):通过对在对承诺的调用与后续参考点之间的调用任务内调用的每个函数的预期持续时间求和(其中每个函数的持续时间本身可基于有关对函数的调用的历史数据),通过基于总代码行估计持续时间等。
在估计在至少阈值时间量内不需要完成承诺的情况下,工作者管理器140可在(4)处设立承诺的截止期限。在一个实施方案中,可将截止期限设置为预期需要完成承诺的时间点。在另一个实施方案中,可减少截止期限以考虑完成承诺的执行所需的估计时间(例如,将在按需代码执行环境上初始化执行功能所需的延迟、存储结果等考虑在内)。虽然说明性地基于预测的执行时间描述了截止期限,但任务的创建者可另外地或可选地手动指定截止期限。例如,任务的创建者可在调用承诺时将承诺指定为具有特定截止期限(例如,100ms)或具有按需代码执行环境可能与特定截止期限相关联的一系列截止期限(例如,短期、中期或长期)。
此后,在(5)处,工作者管理器140将承诺和相关联截止期限的指示传输到异步控制器160,所述异步控制器160可被配置来基于截止期限调度承诺的执行。在(6)处,异步控制器160基于相关联的截止期限将后续执行的承诺入列。在这方面,异步控制器160可利用各种调度算法来基于截止期限将承诺入列,诸如最早的截止期限优先算法、工作保存调度等。
参考图4B描述用于处理一组入列的承诺的说明性交互。具体地,在(1)处,异步控制器160可处理承诺队列以按照基于相关联的截止期限确定的顺序来执行队列上的任务。对于给定的承诺,异步控制器160可确定调用承诺的执行的适当时间,并且在(2)处,呼叫工作者管理器140以执行承诺。在一些情况下,调用承诺的执行的适当时间可基于工作者管理器140的用于执行任务的容量。例如,异步控制器160可等待调用承诺的执行,直到活动池140A具有多余容量为止。在其他情况下,异步控制器160可尝试限制在任何给定时间执行的承诺的总数,或者每秒执行承诺的调用的数量。更进一步,异步控制器160可尝试处理队列,使得队列上的承诺在其相关联的截止期限之前完成。另外地或可选地,可至少部分地基于与承诺的执行相关联的底层账户的配置来管理每个承诺的入列。例如,如果帐户被配置成使得在给定时间执行不超过n个任务,则与所述帐户相关联的承诺可在执行少于n个与账户相关联的任务的时间处出列并执行。在一些情况下,队列上的承诺可以“懒惰地”处理,使得在调用任务需要完成承诺之后调用它们,或者在至少其他合适的时间处理,使得在调用任务需要完成承诺之前,预期承诺完成处理。
在接收到对执行承诺的调用之后,工作者管理器140在(3)处执行承诺。说明性地,工作者管理器140可以与按需代码执行系统110上的其他任务相同的方式执行承诺,诸如通过为任务选择最适当的执行环境并在所述执行环境内执行任务的代码。在一些情况下,工作者管理器140可基于从属于承诺的任务来选择承诺的执行环境(例如,使得承诺和依赖任务在相同的环境中、在相同的主机装置上等执行)。
在(4)处,工作者管理器140将承诺的执行结果返回到异步控制器160。在一个实施方案中,结果可以仅仅是承诺已成功执行的指示。在另一个实施方案中,结果可以是承诺的输出,诸如返回值。在(5)处,异步控制器160存储承诺的结果(例如,在承诺数据存储库164中)。
参考图4C描述用于使得任务能够利用承诺的结果的说明性交互。具体地,出于图4C的目的,将假设任务正在活动池140A上执行,并且先前已经调用所述任务以执行承诺,如图4A所描述的。进一步假设异步控制器160已经管理了该承诺的执行,如图4B所描述的。因此,在(1)处,工作者管理器140检测到任务已请求履行承诺(例如,在执行期间到达一点以便需要完成承诺)。在(2)处,工作者管理器140将对承诺结果的请求传输到异步控制器160(例如,承诺的返回值、承诺已成功执行的指示等)。异步控制器160进而在(3)处检索承诺的结果,并在(4)处将结果返回给工作者管理器140。
此后,在(5)处,工作者管理器140将承诺的执行结果传递给依赖任务,从而使得任务能够继续执行。因此,可预期依赖任务由于承诺而很少或没有延迟地执行,同时仍然使得按需代码执行系统110能够根据系统110的状态来调度承诺的执行,从而提高按需代码执行系统110内计算资源使用的效率。
本领域技术人员将理解,图4A至图4C的交互可包括上述那些交互的另外的或替代的交互。例如,虽然一般关于工作者管理器140描述一些交互,但这些交互可以针对由工作者管理器管理的活动池140A内的单独执行环境或虚拟机发生。此外,归属于异步控制器160的一些或所有功能可直接在工作者管理器140内实现。例如,不是将承诺的执行结果返回到异步控制器110,工作者管理器140本身可存储承诺的执行结果,或者可将该结果传递给依赖于承诺的执行的调用的执行环境。类似地,同时图4C被描述为“拉”模型,使得工作者管理器140根据依赖任务的要求检索承诺的执行结果,本公开的实施方案可利用“推”模型,使得承诺的执行结果被提供给依赖任务的执行环境,而不需要执行环境发出针对结果的查询。在一些情况下,可修改图4A至图4C中描述的交互的排序。例如,在一些情况下,单个依赖性操作可满足来自多个依赖操作的依赖性。因此,当依赖操作调用先前也由另一个依赖操作调用的承诺时,可能已经履行了所述承诺。因此,不是将承诺和截止期限排队(如上面参考图4A的交互(6)所述)入列,异步控制器160可简单地将承诺的结果返回给工作者管理器140。作为另一示例,在一些情况下,根据承诺的截止期限处理承诺队列可能导致在承诺已完成(例如,通过图4B的交互)之前请求承诺结果(例如,图4C的交互(2))的情况。在此类情况下,检索承诺结果的请求可能导致承诺被执行。因此,在图4C的交互期间,图4B的交互可以作为介入交互发生。
如上所述,可通过对单独执行的特定引用、对函数的一般引用或对具有指定参数的函数的执行的引用来指定操作之间的依赖性。因此,可修改图4C的交互以解决依赖操作与依赖性操作之间的潜在的一对多或多对多映射。例如,在多个依赖操作调用相同的承诺函数(例如,具有相同或不同的参数)的情况下,异步控制器160可将该承诺的多个实例入列在一起,并且利用相同的执行环境(或者相同的虚拟机实例上的不同执行环境)来执行承诺函数,从而提高函数的效率。此外,当承诺函数的完成发生时,异步控制器160可选择应当通知哪些依赖操作这样的完成(例如,所有函数、单个函数、指定数量的函数等),如由依赖操作的配置、承诺的配置或两者确定。说明性地,在不是所有依赖操作应当被通知承诺的完成的情况下,异步控制器160可基于任何数量的排序算法(诸如先进先出、最短截止期限优先(针对与截止期限相关联的任务)等)来通知哪些依赖操作。
参考图5,将描述描绘用于处理按需代码执行环境110上的异步任务的执行的说明性例程500的框图。例程500开始于框502,其中按需代码执行系统110(例如,通过前端120)接收对任务的调用。在框504处,按需代码执行环境110(例如,通过工作者管理器140)进行至执行任务,如‘556专利中更详细地描述。
在框506处,按需代码执行系统110确定执行任务是否已经对承诺进行了调用(例如,调用任务不需要其在至少阈值持续时间内完成的异步执行任务)。如果是,则例程500进行至实现承诺处理例程600。如下所述,承诺处理例程500可使得承诺能够在按需代码执行系统110上以有效方式入列以便执行,使得承诺预期在调用任务需要完成之前或附近完成,但可根据按需代码执行系统110的状态另外调度。此后,例程返回到框504。
如果没有对承诺进行调用,则例程500继续到框510,其中按需代码执行系统110确定任务是否已被阻塞,等待异步操作(诸如外部服务的第二任务或操作)完成。如果是,则例程500进行至实现框处理例程700,如下所述,所述例程使得任务能够被暂停并从执行环境中移除,并且在依赖性完成之后或之前不久就恢复。在一些情况下,例程700可仅在预期任务被阻塞超过阈值时间量(例如,超过100ms)时实现。此后,例程返回到框504。
如果例程尚未被阻塞,则例程500继续到框514,其用于将例程500传递回框504,只要执行继续。当执行停止时,例程500传递到框516,并且例程500结束。
从例程500可以看出,虽然在本公开中有时分开描述了对阻塞的执行的处理和对承诺的处理,但两个功能可以结合实现。例如,在任务的执行调用承诺并且该承诺未能在调用任务需要的时间执行时(例如,由于按需代码执行系统110的过载),调用任务可能被阻塞,并且由按需代码执行系统110暂停。在一些情况下,可实现其他功能。例如,在多个任务之间存在依赖性的层次结构,使得存在阻塞的任务的“树”时,按需代码执行系统110可根据它们的依赖性来对任务的执行进行排序,使得每个阻塞的任务被暂停直到依赖性任务完成或预计很快完成。在一些情况下,按需代码执行系统110可致使“树”内的多个任务由相同的执行环境或相同的物理计算装置执行,以减少任务之间的相互通信时间。在其他情况下,按需代码执行系统110可跨多个执行环境或物理计算装置执行树内的任务,以便至少部分地并行地处理任务树。
参考图6,将描述用于处理对按需代码执行系统110中的承诺的调用的说明性例程600。所述例程可例如结合图5的异步任务处理例程500来实现。例程600开始于框602,其中按需代码执行系统110接收对承诺的调用(例如,来自在按需代码执行系统110上执行的另一个任务)。
在框604处,按需代码执行系统110确定与承诺相关联的截止期限。说明性地,可将截止期限设置为预期需要完成承诺的时间点。如上所述,该时间点可由调用任务的创建者设立,或者由按需代码执行系统110基于调用任务的历史执行来确定。说明性地,按需代码执行系统110可通过检测对代码内的承诺的结果的引用,或者检测由从属于承诺的调用任务的创建者指定的代码中的点来确定调用任务的代码中的点,在所述点处预期承诺的结果。然后,按需代码执行系统110可通过以下方式基于有关调用任务的先前执行的先前历史数据来估计对承诺的调用与后续参考点之间的持续时间:通过对在对承诺的调用与后续参考点之间的调用任务内调用的每个函数的预期持续时间求和(其中每个函数的持续时间本身可基于有关对函数的调用的历史数据),通过基于总代码行估计持续时间等。然后,按需代码执行系统110可基于对承诺的调用与预期在任务的执行期间发生对承诺的后续引用的时间之间的时间长度来设立估计的截止期限。
在框606处,按需代码执行系统110基于截止期限将要执行的承诺入列。在这方面,按需代码执行系统110可利用各种调度算法来基于截止期限将承诺入列,诸如最早的截止期限优先算法、工作保存调度等。
在框608,按需代码执行系统110执行承诺,其时间取决于承诺队列的处理。说明性地,按需代码执行系统110可等待调用承诺的执行,直到活动池140A具有多余容量为止。在其他情况下,按需代码执行系统110可尝试限制在任何给定时间执行的承诺的总数,或者每秒执行承诺的调用的数量。更进一步,按需代码执行系统110可尝试处理队列,使得队列上的承诺在其相关联的截止期限之前完成。另外地或可选地,可至少部分地基于与承诺的执行相关联的底层账户的配置来管理每个承诺的入列。例如,如果帐户被配置成使得在给定时间执行不超过n个任务,则与所述帐户相关联的承诺可在执行少于n个与账户相关联的任务的时间处出列并执行。在一些情况下,队列上的承诺可以“懒惰地”处理,使得在调用任务需要完成承诺之后调用它们,或者在至少其他合适的时间处理,使得在调用任务需要完成承诺之前,预期承诺完成处理。
在框610处,按需代码执行系统110将承诺的结果返回给调用任务。在一些情况下,可将结果直接返回给调用任务。在其他情况下,可存储结果并使关于请求的调用任务可用(例如,基于对任务的执行代码内的调用的引用)。然后,例程600在框612处结束。
参考图7,将描述用于基于异步操作处理按需代码执行系统110中的阻塞的执行的说明性例程700。例程700结合图5的异步任务处理例程500来实现。出于图7的描述的目的,将假设按需代码执行系统110已开始执行由于异步操作而被阻塞的任务。例程700开始于框702,其中按需代码执行系统110保存任务的状态。如上所述,可以使用各种策略来保存任务的状态,例如保存执行环境的状态,运行时环境,执行代码本身或由代码创建的对象(例如,输入,输出,变量等)。
在框704处,按需代码执行系统110从其当前执行环境中移除任务,以便减少维护被阻塞任务所需的计算资源。例如,按需代码执行系统110可以停止虚拟机实例或容器对任务代码的执行,使虚拟机实例或容器能够继续处理其他任务。在某些情况下,例如在不需要被阻塞任务的执行环境来处理其他任务的情况下,按需代码执行系统110可以拆除或解构执行环境,进一步减少按需代码执行中的计算负荷。系统110。
在框706处,按需代码执行系统110可将通知符附接到依赖性操作,使得在依赖性操作完成时(以及因此,当阻塞的任务应当继续操作时)通知按需代码执行系统110。例如,按需代码执行系统110可向执行依赖性操作的虚拟机实例传输在依赖性操作已完成时通知按需代码执行系统110的请求。在一些情况下,依赖性操作可能已经被配置为传输这样的通知(例如,基于依赖性操作本身的性质),并且因此,框706可与调用依赖性操作一起自动发生。
在框708处,按需代码执行系统110接收依赖性操作已完成的通知。此后,在框710处,按需代码执行系统110可利用调用的先前被阻塞的任务的先前保存的状态来恢复任务,并从其先前被阻塞的点恢复任务的执行。在一个实施方案中,按需代码执行系统110可通过重新创建任务的执行环境来恢复任务。在另一个实施方案中,按需代码执行系统110可通过将任务放入新的执行环境中来恢复任务,这可导致任务由按需代码执行系统110内的不同物理计算装置执行。因为任务的执行环境可在初始执行与恢复之间改变,所以按需代码执行系统110能够根据恢复时可用的资源更有效地分配该恢复。在恢复执行之后,例程700在框712处结束。
以上所描述的方法和进程中的所有可在由一个或多个通用计算机或处理器执行的软件代码模块中具体化并且通过所述软件代码模块来完全自动化。所述代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。所述方法中的一些或所有能够可选地在专用计算机硬件中具体化。
除非另外特别说明,否则诸如“可”、“可以”、“可能”或“能够”等的条件性语言在上下文中通常应理解为用来表示:尽管其他实施方案不包括某些特征、元件和/或步骤,但某些实施方案包括某些特征、元件和/或步骤。因此,此类条件性语言通常并不意图暗示特征、元件和/或步骤是一个或多个实施方案以任何方式所要求的,或一个或多个实施方案一定包括用于在有或没有用户输入或提示的情况下决定这些特征、元件和/或步骤被包括在任何特定实施方案中或将要在任何特定实施方案中进行的逻辑。
除非另外特别说明,否则诸如短语“X、Y或Z中的至少一个”的析取语言在上下文中通常应理解为用来表示项、术语等可以是X、Y或Z或它们的任何组合(例如,X、Y和/或Z)。因此,这种析取语言通常并不意图且不应暗示某些实施方案要求X中的至少一个、Y中的至少一个或Z中的至少一个均存在。
除非另外明确地说明,否则诸如“一个”(“a”或“an”)的冠词通常应被解释为包括一个或多个所描述项。因此,诸如“被配置来……的装置”的短语意图包括一个或多个所列举的装置。此类一个或多个所列举装置也可被共同地配置来执行所陈述的列举项。例如,“被配置来执行列举项A、B和C的处理器”可包括被配置来执行列举项A的第一处理器,所述第一处理器与被配置来与执行列举项B和C的第二处理器相结合地工作。
本文所描述的流程图和/或附图中所描绘的任何例程说明、元件或方框应理解成潜在地代表包括用于实现例程中的特定逻辑功能或元素的一个或多个可执行指令的代码模块、代码片段或代码部分。可选的实现方式被包括在本文所描述实施方案的范围内,其中如与本领域中的技术人员所理解的那样,元件或功能可删除、不按照所示出或所讨论的顺序执行,包括基本上同时执行或者逆序执行,具体取决于所涉及的功能。
鉴于以下条款可更好地理解上述内容:
条款1.一种用于管理由于异步操作而导致的按需代码执行系统中的代码执行的阻塞的系统,其中所述按需代码执行系统包括多个执行环境,用户提交的代码可在所述多个执行环境上执行,所述系统包括:
非暂时性数据存储库,其被配置来存储有关所述按需代码执行系统上的暂停的任务执行的状态信息,其中单独任务与可执行以实现与所述单独任务相对应的功能的代码相关联;
一个或多个处理器,其配置有计算机可执行指令以:
获得用于执行与第一可执行代码相关联的第一任务的指令;
在第一执行环境内开始执行所述第一可执行代码,其中所述第一可执行代码的执行调用第一依赖性操作的执行;
在检测到所述第一可执行代码的执行在等待所述第一依赖性操作完成时被阻塞之后:
确定用于所述第一可执行代码的所述执行的预测的阻塞持续时间满足阈值;
生成用于所述第一可执行代码的所述执行的状态信息;
将所生成的状态信息存储在所述非暂时性数据存储库中;并且
从所述第一执行环境中移除所述第一可执行代码的所述执行;以及
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;并且
利用如存储在所述非暂时性数据存储库中的所生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
条款2.如条款1所述的系统,其中所述第一执行环境是虚拟机实例或容器中的至少一者。
条款3.如条款1所述的系统,其中所述第二执行环境是与所述第一执行环境不同的执行环境。
条款4.如条款1所述的系统,其中所述第二执行环境是所述第一执行环境的重新生成的版本。
条款5.如条款1所述的系统,其中用于所述第一可执行代码的所述执行的所述状态信息包括以下中的至少一者:虚拟机状态、容器状态、与所述执行相关联的存储器状态或所述第一可执行代码在所述执行期间的对象的状态。
条款6.一种用于管理按需代码执行系统中的代码执行的阻塞的计算机实现的方法,其中所述按需代码执行系统包括多个执行环境,用户提交的代码可在所述多个执行环境上执行,所述计算机实现的方法包括:
获得用于在所述按需代码执行系统的第一执行环境内执行第一可执行代码的指令;
在检测到所述第一可执行代码的执行在等待第一依赖性操作完成时被阻塞之后:
生成用于所述第一可执行代码的所述执行的状态信息;
将所生成的状态信息存储在与所述第一执行环境不同的非暂时性数据存储库中;并且
从所述第一执行环境中移除所述第一可执行代码的所述执行;以及
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;并且
利用如存储在所述非暂时性数据存储库中的所生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
条款7.如条款6所述的计算机实现的方法,其还包括:
预测用于所述第一可执行代码的所述执行的阻塞持续时间;以及
确定用于所述第一可执行代码的所述执行的所述预测的阻塞持续时间满足阈值。
条款8.如条款7所述的计算机实现的方法,其中预测用于所述第一可执行代码的所述执行的阻塞持续时间包括:
预测所述第一可执行代码的所述执行调用所述第一依赖性操作的执行的时间与所述第一可执行代码的所述执行需要完成所述第一依赖性操作的时间之间的第一时间长度;
预测完成所述第一依赖性操作的执行所需的第二时间长度;以及
将所述第一时间长度与所述第二时间长度之间的差值指派为用于所述第一可执行代码的所述执行的所述预测的阻塞持续时间。
条款9.如条款8所述的计算机实现的方法,其中所述第一时间长度基于所述第一可执行代码的历史执行来预测。
条款10.如条款8所述的计算机实现的方法,其中所述第二时间长度基于所述第一依赖性操作的历史执行来预测。
条款11.如条款6所述的计算机实现的方法,其中选择在其中恢复所述第一可执行代码的执行的第二执行环境包括至少部分地基于所述状态信息选择所述第二执行环境。
条款12.如条款6所述的计算机实现的方法,其中所述第一可执行代码的所述执行致使对执行所述第一依赖性操作的实例的调用,并且其中检测到所述第一依赖性操作已完成包括检测到所述第一依赖性操作的所述实例已完成。
条款13.如条款6所述的计算机实现的方法,其中所述第一可执行代码的多个执行依赖于所述第一依赖性操作的完成,并且其中所述方法还包括:在检测到所述第一依赖性操作已完成时,选择所述第一可执行代码的所述多个执行中的要恢复的至少一者。
条款14.如条款6所述的计算机实现的方法,其还包括,其中计算机可执行指令进一步致使计算系统:
在所述第一执行代码的执行期间,检测对第二依赖性操作的执行的调用;
至少部分地基于有关所述第一可执行代码的先前执行的历史数据来确定所述第二依赖性操作的截止期限;
至少部分地基于所述截止期限将所述第一依赖性操作入列到队列中;并且
至少部分地基于所述按需代码执行系统的用于执行操作的可用容量来处理所述队列,其中处理所述队列包括执行所述第一依赖性操作。
条款15.一种包括计算机可执行指令的非暂时性计算机可读存储介质,所述计算机可执行指令在由计算系统执行时致使所述计算系统:
获得用于在包括多个执行环境的按需代码执行系统的第一执行环境内执行第一可执行代码的指令;
在检测到所述第一可执行代码的执行在等待第一依赖性操作完成时被阻塞之后:
生成用于所述第一可执行代码的所述执行的状态信息;
将所生成的状态信息存储在与所述第一执行环境不同的非暂时性数据存储库中;并且
从所述第一执行环境中移除所述第一可执行代码的所述执行;以及
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;并且
利用如存储在所述非暂时性数据存储库中的所生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
条款16.如条款15所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统:
预测用于所述第一可执行代码的所述执行的阻塞持续时间;并且
确定用于所述第一可执行代码的所述执行的所述预测的阻塞持续时间满足阈值。
条款17.如条款所述的非暂时性计算机可读存储介质,错误!找不到参考源,其中预测用于所述第一可执行代码的所述执行的所述阻塞持续时间包括:
预测所述第一可执行代码的所述执行调用所述第一依赖性操作的执行的时间与所述第一可执行代码的所述执行需要完成所述第一依赖性操作的时间之间的第一时间长度;
预测完成所述第一依赖性操作的执行所需的第二时间长度;以及
将所述第一时间长度与所述第二时间长度之间的差值指派为用于所述第一可执行代码的所述执行的所述预测的阻塞持续时间。
条款18.如条款15所述的非暂时性计算机可读存储介质,其中所述第一时间长度或所述第二时间长度中的至少一者基于所述按需代码执行系统上的历史执行来预测。
条款19.如条款15所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令致使所述计算系统至少部分地基于所述状态信息来选择所述第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行。
条款20.如条款15所述的非暂时性计算机可读存储介质,其中所述第一可执行代码的所述执行致使对执行所述第一依赖性操作的实例的调用,并且其中检测到所述第一依赖性操作已完成包括检测到所述第一依赖性操作的所述实例已完成。
条款21.如条款15所述的非暂时性计算机可读存储介质,其中所述第一可执行代码的多个执行依赖于所述第一依赖性操作的完成,并且其中所述计算机可执行指令致使所述计算系统选择所述第一可执行代码的所述多个执行中的要恢复的至少一者。
条款22.如条款15所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统:
在所述第一执行代码的执行期间,检测对第二依赖性操作的执行的调用;
至少部分地基于有关所述第一可执行代码的先前执行的历史数据来确定所述第二依赖性操作的截止期限;并且
至少部分地基于所述截止期限和所述按需代码执行系统的用于执行操作的可用容量来执行所述第一依赖性操作。
条款23.一种用于管理按需代码执行系统中的任务的异步执行的系统,所述系统包括:
非暂时性数据存储库,其被配置来存储等待在所述按需代码执行系统上执行的操作队列,其中单独操作与可执行以实现与所述单独操作相对应的功能的代码相关联;
一个或多个处理器,其配置有计算机可执行指令以:
获得用于执行与第一可执行代码相关联的第一任务的指令;
开始执行所述第一可执行代码,其中所述第一可执行代码的执行调用第一依赖性操作的执行;
至少部分地基于有关所述第一可执行代码的先前执行的历史数据来确定所述第一依赖性操作的截止期限;
确定所述第一依赖性操作的所述截止期限满足阈值;
至少部分地基于所述截止期限将所述第一依赖性操作入列到队列中;
至少部分地基于所述按需代码执行系统的用于执行操作的可用容量来处理所述队列,其中处理所述队列包括执行所述第一依赖性操作;并且
将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行。
条款24.如条款23所述的系统,其中所述一个或多个处理器被配置来至少部分地通过以下者确定所述第一依赖性操作的所述截止期限:
标识对所述第一可执行代码内的所述第一依赖性操作的完成的参考;
预测直到所述第一依赖性操作的执行到达所述参考的时间长度;以及
将所述时间长度指派为所述第一依赖性操作的所述截止期限。
条款25.如条款23所述的系统,其中所述一个或多个处理器被配置来至少部分地基于完成所述第一依赖性操作的执行所需的预测的时间长度来确定所述阈值。
条款26.如条款23所述的系统,其中所述一个或多个处理器进一步被配置来:
开始执行第二可执行代码,其中所述第二可执行代码的执行调用所述第一依赖性操作的执行;
在执行所述第一依赖性操作之后,选择将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行或所述第二可执行代码的所述执行中的至少一者。
条款27.如条款26所述的系统,其中所述一个或多个处理器进一步被配置来:
响应于所述第二可执行代码的所述执行对所述第一依赖性操作的执行的所述调用,将所述第一依赖性操作的第二实例入列在所述队列中,其中处理所述队列还包括执行所述第一依赖性操作的第二实例;并且
将所述第一依赖性操作已完成通知给所述第二可执行代码的所述执行。
条款28.一种用于管理按需代码执行系统中的异步代码执行的计算机实现的方法,所述计算机实现的方法包括:
在所述按需代码执行系统上发起第一可执行代码的执行,其中所述第一可执行代码的执行调用第一依赖性操作的执行;
至少部分地基于有关所述按需代码执行系统上的所述第一可执行代码的先前执行的历史数据来确定所述第一依赖性操作的截止期限;
至少部分地基于所述截止期限将所述第一依赖性操作入列到执行队列中;
至少部分地基于所述按需代码执行系统的用于执行操作的可用容量来处理所述执行队列,其中处理所述执行队列包括执行所述第一依赖性操作;并且
将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行。
条款29.如条款28所述的计算机实现的方法,其还包括:确定所述第一依赖性操作的所述截止期限满足阈值,其中所述阈值至少部分地基于完成所述第一依赖性操作的执行所需的预测的时间长度来设置。
条款30.如条款28所述的计算机实现的方法,其中确定所述第一依赖性操作的所述截止期限包括:
标识对所述第一可执行代码内的所述第一依赖性操作的完成的参考;
预测直到所述第一依赖性操作的执行到达所述参考的时间长度;以及
将所述时间长度指派为所述第一依赖性操作的所述截止期限。
条款31.如条款30所述的计算机实现的方法,其中确定所述第一依赖性操作的所述截止期限还包括:至少部分地基于完成所述第一依赖性操作的执行所需的预测的时间长度来调整所述截止期限。
条款32.如条款30所述的计算机实现的方法,其中所述执行队列的处理进一步至少部分地基于所述队列内的操作的截止期限。
条款33.如条款30所述的计算机实现的方法,其中所述依赖性操作是所述按需代码执行系统上的任务,并且其中执行所述依赖性操作包括执行所述按需代码执行系统上的第二代码。
条款34.如条款30所述的计算机实现的方法,其中处理所述执行队列还包括:
确定所述执行队列包括相同操作的至少两个实例;
在所述按需代码执行系统中选择执行所述至少两个实例的执行环境;以及
在所选择的执行环境中执行所述至少两个实例。
条款35.如条款30所述的计算机实现的方法,其中将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行包括:从执行所述第一可执行代码的计算装置接收请求,并且用所述第一依赖性操作已完成的通知对所述请求作出响应。
条款36.如条款30所述的计算机实现的方法,其还包括:
在第二可执行代码的执行期间,检测所述第二可执行代码对所述第一依赖性操作的调用;
确定如由所述第一可执行代码调用的所述第一依赖性操作的所述执行满足所述第二可执行代码对所述第一依赖性操作的所述调用;以及
将所述第一依赖性操作已完成通知给所述第二可执行代码的所述执行。
条款37.如条款30所述的计算机实现的方法,其还包括:
检测到所述第一可执行代码的执行在等待所述第一依赖性操作完成时被阻塞;
生成用于所述第一可执行代码的所述执行的状态信息;
从先前执行所述第一可执行代码的所述执行的第一执行环境中移除所述第一可执行代码的所述执行;以及
其中将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行包括:使用所述状态信息来恢复所述第一可执行代码在所述第一执行环境或不同的第二执行环境中的至少一者内的执行。
条款38.一种包括计算机可执行指令的非暂时性计算机可读存储介质,所述计算机可执行指令在由计算系统执行时致使所述计算系统:
在所述按需代码执行系统上发起第一可执行代码的执行,其中所述第一可执行代码的执行调用第一依赖性操作的执行;
确定所述第一依赖性操作的截止期限;
至少部分地基于所述截止期限将所述第一依赖性操作入列到执行队列中;
至少部分地基于所述按需代码执行系统的用于执行操作的可用容量来处理所述执行队列,其中处理所述执行队列包括执行所述第一依赖性操作;并且
将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行。
条款39.如条款38所述的非暂时性计算机可读存储介质,其中所述第一依赖性操作的所述截止期限至少部分地基于以下中的至少一者在所述按需代码执行系统上的先前执行的历史数据来确定:所述第一可执行代码、与所述第一可执行代码相关的其他可执行代码或所述第一可执行代码中引用的函数。
条款40.如条款38所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统确定所述第一依赖性操作的所述截止期限满足阈值,并且其中所述阈值至少部分地基于完成所述第一依赖性操作的执行所需的预测的时间长度来设置。
条款41.如条款38所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统至少部分地通过以下者确定所述第一依赖性操作的所述截止期限:
标识对所述第一可执行代码内的所述第一依赖性操作的完成的参考;
预测直到所述第一可执行代码的执行到达所述参考的时间长度;以及
将所述时间长度指派为所述第一依赖性操作的所述截止期限。
条款42.如条款41所述的非暂时性计算机可读存储介质,其中直到所述第一可执行代码的执行到达所述参考的所述预测的时间长度至少部分地基于对所述第一依赖性操作的所述调用与对完成所述第一依赖性操作的所述参考之间的所述第一可执行代码的一部分的先前执行的统计测量值。
条款43.如条款42所述的非暂时性计算机可读存储介质,其中所述统计测量值是执行所述第一可执行代码的所述部分所需的平均或最小时间长度中的至少一者。
条款44.如条款38所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统:
开始执行第二可执行代码,其中所述第二可执行代码的执行调用所述第一依赖性操作的执行;
在执行所述第一依赖性操作之后,选择将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行或所述第二可执行代码的所述执行中的至少一者。
条款45.如条款38所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统:
检测到所述第一可执行代码的执行在等待所述第一依赖性操作完成时被阻塞;
生成用于所述第一可执行代码的所述执行的状态信息;
从先前执行所述第一可执行代码的所述执行的第一执行环境中移除所述第一可执行代码的所述执行;并且
其中将所述第一依赖性操作已完成通知给所述第一可执行代码的所述执行包括:使用所述状态信息来恢复所述第一可执行代码在所述第一执行环境或不同的第二执行环境中的至少一者内的执行。
条款46.如条款38所述的非暂时性计算机可读存储介质,其中所述计算机可执行指令进一步致使所述计算系统:
在第二可执行代码的执行期间,检测所述第二可执行代码对所述第一依赖性操作的调用;
确定如由所述第一可执行代码调用的所述第一依赖性操作的所述执行满足所述第二可执行代码对所述第一依赖性操作的所述调用;并且
将所述第一依赖性操作已完成通知给所述第二可执行代码的所述执行。
应当强调,可对上述实施方案作出许多改变和修改,所述改变和修改的元素应被理解为包括在其他可接受的实例当中。所有此类修改和改变在本文中意图被包括在本公开的范围内,并且受以下权利要求的保护。

Claims (15)

1.一种用于管理由于异步操作而导致的按需代码执行系统中的代码执行的阻塞的系统,其中所述按需代码执行系统包括多个执行环境,用户提交的代码可在所述多个执行环境上执行,所述系统包括:
非暂时性数据存储库,其被配置来存储有关所述按需代码执行系统上的暂停的任务执行的状态信息,其中单独任务与能够执行以实现与所述单独任务相对应的功能的代码相关联;
一个或多个处理器,其配置有计算机可执行指令以:
获得用于执行与第一可执行代码相关联的第一任务的指令;
在第一执行环境内开始执行所述第一可执行代码,其中所述第一可执行代码的执行调用第一依赖性操作的执行;
在检测到所述第一可执行代码的执行在等待所述第一依赖性操作完成时被阻塞之后:
确定所述第一可执行代码的所述执行的预测的阻塞持续时间满足阈值;
生成所述第一可执行代码的所述执行的状态信息;
将所述生成的状态信息存储在所述非暂时性数据存储库中;并且
从所述第一执行环境中移除所述第一可执行代码的所述执行;并且
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;并且
利用存储在所述非暂时性数据存储库中的所述生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
2.如权利要求1所述的系统,其中所述第一执行环境是虚拟机实例或容器中的至少一者。
3.如权利要求1所述的系统,其中所述第二执行环境是与所述第一执行环境不同的执行环境。
4.如权利要求1所述的系统,其中所述第二执行环境是所述第一执行环境的重新生成的版本。
5.如权利要求1所述的系统,其中所述第一可执行代码的所述执行的所述状态信息包括以下中的至少一者:虚拟机状态、容器状态、与所述执行相关联的存储器状态或所述第一可执行代码在所述执行期间的对象的状态。
6.一种用于管理按需代码执行系统中的代码执行的阻塞的计算机实现的方法,其中所述按需代码执行系统包括多个执行环境,用户提交的代码可在所述多个执行环境上执行,所述计算机实现的方法包括:
获得用于在所述按需代码执行系统的第一执行环境内执行第一可执行代码的指令;
在检测到所述第一可执行代码的执行在等待第一依赖性操作完成时被阻塞之后:
生成所述第一可执行代码的所述执行的状态信息;
将所述生成的状态信息存储在与所述第一执行环境不同的非暂时性数据存储库中;以及
从所述第一执行环境中移除所述第一可执行代码的所述执行;以及
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;以及
利用存储在所述非暂时性数据存储库中的所述生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
7.如权利要求6所述的计算机实现的方法,其还包括:
预测所述第一可执行代码的所述执行的阻塞持续时间;以及
确定所述第一可执行代码的所述执行的所述预测的阻塞持续时间满足阈值。
8.如权利要求7所述的计算机实现的方法,其中预测所述第一可执行代码的所述执行的阻塞持续时间包括:
预测所述第一可执行代码的所述执行调用所述第一依赖性操作的执行的时间与所述第一可执行代码的所述执行需要完成所述第一依赖性操作的时间之间的第一时间长度;
预测完成所述第一依赖性操作的执行所需的第二时间长度;以及
将所述第一时间长度与所述第二时间长度之间的差值指派为所述第一可执行代码的所述执行的所述预测的阻塞持续时间。
9.如权利要求8所述的计算机实现的方法,其中所述第一时间长度基于所述第一可执行代码的历史执行来预测。
10.如权利要求8所述的计算机实现的方法,其中所述第二时间长度基于所述第一依赖性操作的历史执行来预测。
11.如权利要求6所述的计算机实现的方法,其中选择在其中恢复所述第一可执行代码的执行的第二执行环境包括至少部分地基于所述状态信息选择所述第二执行环境。
12.如权利要求6所述的计算机实现的方法,其中所述第一可执行代码的所述执行引起对执行所述第一依赖性操作的实例的调用,并且其中检测到所述第一依赖性操作已完成包括检测到所述第一依赖性操作的所述实例已完成。
13.如权利要求6所述的计算机实现的方法,其中所述第一可执行代码的多个执行依赖于所述第一依赖性操作的完成,并且其中所述方法还包括:在检测到所述第一依赖性操作已完成时,选择所述第一可执行代码的所述多个执行中的要恢复的至少一者。
14.如权利要求6所述的计算机实现的方法,其还包括,其中计算机可执行指令进一步致使计算系统:
在所述第一执行代码的执行期间,检测对第二依赖性操作的执行的调用;
至少部分地基于有关所述第一可执行代码的先前执行的历史数据来确定所述第二依赖性操作的截止期限;
至少部分地基于所述截止期限将所述第一依赖性操作入列到队列中;以及
至少部分地基于所述按需代码执行系统的用于执行操作的可用容量来处理所述队列,其中处理所述队列包括执行所述第一依赖性操作。
15.一种用于管理由于异步操作而导致的按需代码执行系统中的代码执行的阻塞的系统,其包括:
一个或多个处理器;
以及一个或多个存储器,所述一个或多个存储器存储计算机可执行指令,所述计算机可执行指令在由所述一个或多个处理器执行时致使所述一个或多个处理器:
获得用于在包括多个执行环境的按需代码执行系统的第一执行环境内执行第一可执行代码的指令;
在检测到所述第一可执行代码的执行在等待第一依赖性操作完成时被阻塞之后:
生成所述第一可执行代码的所述执行的状态信息;
将所述生成的状态信息存储在与所述第一执行环境不同的非暂时性数据存储库中;并且
从所述第一执行环境中移除所述第一可执行代码的所述执行;并且
在检测到所述第一依赖性操作已完成之后:
选择第二执行环境,在所述第二执行环境中恢复所述第一可执行代码的执行;并且
利用存储在所述非暂时性数据存储库中的所述生成的状态信息来在所述第二执行环境中恢复所述第一可执行代码的执行。
CN201780045148.9A 2016-06-28 2017-06-27 按需网络代码执行环境中的异步任务管理 Active CN109564525B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/195,897 2016-06-28
US15/195,920 US10282229B2 (en) 2016-06-28 2016-06-28 Asynchronous task management in an on-demand network code execution environment
US15/195,920 2016-06-28
US15/195,897 US9952896B2 (en) 2016-06-28 2016-06-28 Asynchronous task management in an on-demand network code execution environment
PCT/US2017/039514 WO2018005500A1 (en) 2016-06-28 2017-06-27 Asynchronous task management in an on-demand network code execution environment

Publications (2)

Publication Number Publication Date
CN109564525A CN109564525A (zh) 2019-04-02
CN109564525B true CN109564525B (zh) 2023-05-02

Family

ID=59388134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780045148.9A Active CN109564525B (zh) 2016-06-28 2017-06-27 按需网络代码执行环境中的异步任务管理

Country Status (3)

Country Link
EP (1) EP3475817A1 (zh)
CN (1) CN109564525B (zh)
WO (1) WO2018005500A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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
WO2020231952A1 (en) * 2019-05-10 2020-11-19 Intel Corporation Container-first architecture
US11119809B1 (en) 2019-06-20 2021-09-14 Amazon Technologies, Inc. Virtualization-based transaction handling in an on-demand network code execution system
CN114930295B (zh) * 2019-11-27 2024-03-15 亚马逊技术有限公司 利用预留容量而不抑制缩放的无服务器调用分配方法及系统
CN110968412B (zh) * 2019-12-13 2022-11-11 武汉慧联无限科技有限公司 一种任务执行方法、系统及存储介质
US20220326982A1 (en) * 2021-04-08 2022-10-13 International Business Machines Corporation Intelligent Identification of an Execution Environment
US11968280B1 (en) 2021-11-24 2024-04-23 Amazon Technologies, Inc. Controlling ingestion of streaming data to serverless function executions
CN113867902B (zh) * 2021-12-03 2022-03-08 北京翼辉信息技术有限公司 一种控制程序执行的方法、装置及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103140828A (zh) * 2010-09-25 2013-06-05 英特尔公司 基于硬件限制利用可调事务尺寸来动态优化代码的装置、方法和系统
CN104111848A (zh) * 2014-06-27 2014-10-22 华中科技大学 一种基于异步检查点的多线程软件动态升级方法
CN104903854A (zh) * 2012-12-14 2015-09-09 国际商业机器公司 用于检测虚拟化环境的用户可信设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100070678A1 (en) * 2008-09-12 2010-03-18 Vmware, Inc. Saving and Restoring State Information for Virtualized Computer Systems
US8578394B2 (en) * 2011-09-09 2013-11-05 Microsoft Corporation Exempting applications from suspension
EP3028210B1 (en) * 2013-08-02 2020-01-08 OLogN Technologies AG Secure server in a system with virtual machines
US9417918B2 (en) * 2013-11-20 2016-08-16 International Business Machines Corporation Computing session workload scheduling and management of parent-child tasks
CN104142858B (zh) * 2013-11-29 2016-09-28 腾讯科技(深圳)有限公司 阻塞任务调度方法及装置
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 (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103140828A (zh) * 2010-09-25 2013-06-05 英特尔公司 基于硬件限制利用可调事务尺寸来动态优化代码的装置、方法和系统
CN104903854A (zh) * 2012-12-14 2015-09-09 国际商业机器公司 用于检测虚拟化环境的用户可信设备
CN104111848A (zh) * 2014-06-27 2014-10-22 华中科技大学 一种基于异步检查点的多线程软件动态升级方法

Also Published As

Publication number Publication date
WO2018005500A1 (en) 2018-01-04
EP3475817A1 (en) 2019-05-01
CN109564525A (zh) 2019-04-02

Similar Documents

Publication Publication Date Title
US9952896B2 (en) Asynchronous task management in an on-demand network code execution environment
US10282229B2 (en) Asynchronous task management in an on-demand network code execution environment
CN109564525B (zh) 按需网络代码执行环境中的异步任务管理
CN109478134B (zh) 用跨账户别名执行按需网络代码
US10437629B2 (en) Pre-triggers for code execution environments
US10528390B2 (en) Idempotent task execution in on-demand network code execution systems
US11354169B2 (en) Adjusting variable limit on concurrent code executions
CN114930295B (zh) 利用预留容量而不抑制缩放的无服务器调用分配方法及系统
US10713080B1 (en) Request-based virtual machine memory transitioning in an on-demand network code execution system
US10303492B1 (en) Managing custom runtimes in an on-demand code execution system
US11836516B2 (en) Reducing execution times in an on-demand network code execution system using saved machine states
US9977691B2 (en) Adjusting variable limit on concurrent code executions based on communication between frontends
US10564946B1 (en) Dependency handling in an on-demand network code execution system
CN108369534B (zh) 代码执行请求路由
CN108885568B (zh) 用于通过按需代码执行环境处理数据源内的多个数据项的系统和计算机实现的方法
US10277708B2 (en) On-demand network code execution with cross-account aliases
US10203990B2 (en) On-demand network code execution with cross-account aliases
US10445140B1 (en) Serializing duration-limited task executions in an on demand code execution system
US10884787B1 (en) Execution guarantees in an on-demand network code execution system
CA2962631C (en) Dynamic code deployment and versioning
US11119813B1 (en) Mapreduce implementation using an on-demand network code execution system
CA2962633C (en) Programmatic event detection and message generation for requests to execute program code
US8756599B2 (en) Task prioritization management in a virtualized environment

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