CN108885568B - 用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法 - Google Patents

用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法 Download PDF

Info

Publication number
CN108885568B
CN108885568B CN201780022789.2A CN201780022789A CN108885568B CN 108885568 B CN108885568 B CN 108885568B CN 201780022789 A CN201780022789 A CN 201780022789A CN 108885568 B CN108885568 B CN 108885568B
Authority
CN
China
Prior art keywords
data
data items
task
execution environment
code execution
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
CN201780022789.2A
Other languages
English (en)
Other versions
CN108885568A (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/085,902 external-priority patent/US10891145B2/en
Priority claimed from US15/085,885 external-priority patent/US10162672B2/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN108885568A publication Critical patent/CN108885568A/zh
Application granted granted Critical
Publication of CN108885568B publication Critical patent/CN108885568B/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

描述了***和方法,其用于将数据源内的数据集转换成对按需代码执行环境或其他分布式代码执行环境的一系列任务调用。此类环境利用预初始化的虚拟机实例来使得能够以快速方式执行用户指定的代码,而没有通常由所述虚拟机实例的初始化引起的延迟,并且此类环境通常用来在其被创建时近实时地处理数据。然而,计算资源的限制可能阻碍用户利用按需代码执行环境来同时处理大的、现有的数据集。本申请提供一种任务生成***,所述任务生成***可迭代地从现有数据集检索数据项并生成对所述按需计算环境的对应的任务调用,同时确保针对所述现有数据集内的每个数据项进行至少一个任务调用。

Description

用于通过按需代码执行环境处理数据源内的多个数据项的系 统和计算机实现的方法
技术领域
本发明涉及利用通信网络交换数据的计算装置领域。更具体地,本发明涉及利用数据存储库内的数据项集合生成任务执行并将其提交到按需代码执行环境。
背景技术
计算装置可利用通信网络来交换数据。许多公司和组织运营将多个计算装置加以互连以支持操作或者向第三方提供服务的计算机网络。计算***可位于单个地理位置中或者位于多个不同的地理位置中(例如,通过专用或公共通信网络加以互连)。具体地,数据中心或数据处理中心(在本文中总体称为“数据中心”)可包括多个互连的计算***,以向数据中心的用户提供计算资源。数据中心可以是为了组织运营的私有数据中心,或为了公众运营或者为了公众的利益运营的公共数据中心。
为了提高数据中心资源的利用率,虚拟化技术允许单个物理计算装置托管虚拟机的一个或多个实例,所述虚拟机作为数据中心的用户的独立计算装置出现和操作。通过虚拟化,单个物理计算装置能够以动态方式创建、维持、删除或以其他方式管理虚拟机。进而,用户可从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并且配备有不同数量的虚拟机资源。
在一些情境下,虚拟机实例可根据多种虚拟机实例类型来配置以提供特定功能。例如,各种计算装置可与操作***或操作***配置、虚拟化硬件资源和软件应用程序的不同组合相关联,以使得计算装置能够提供不同的所需功能,或者更有效地提供类似功能。这些虚拟机实例类型配置通常包含在装置镜像(image)内,所述装置镜像包括包含虚拟机一旦启动就将运行的软件(例如,OS和应用程序及其配置和数据文件等)的静态数据。装置镜像通常存储在用来创建或初始化实例的磁盘上。因此,计算装置可处理装置镜像以便实现所需的软件配置。
发明内容
相应地,本发明提供一种用于通过按需代码执行环境处理数据源内的多个数据项的***,所述***包括:
非暂时性数据存储库,所述非暂时性数据存储库被配置来实现:
进程内数据高速缓存,所述进程内数据高速缓存指示来自所述多个数据项的已由所述***标识但尚未在所述按需代码执行环境处处理的数据项;以及
结果数据高速缓存,所述结果数据高速缓存指示来自所述多个数据项的已在所述按需代码执行环境处处理的数据项;
被配置来实现用户接口子***的一个或多个处理器,所述用户接口子***从用户计算装置获得标识所述数据源以及所述按需代码执行环境上的用于处理所述多个数据项的任务的信息;
被配置来实现数据检索子***的一个或多个处理器,所述数据检索子***:
从所述数据源检索来自所述多个数据项的第一数据项集合;并且
针对所述数据项集合中的数据项:
生成所述数据项的标识符;
根据所述标识符确定所述数据项未被标识在所述进程内数据高速缓存或所述结果数据高速缓存内;并且
将所述数据项入列在所述进程内数据高速缓存中;
被配置来实现调用生成子***的一个或多个处理器,所述调用生成子***:
从所述进程内数据高速缓存标识一个或多个数据项;
向所述按需代码执行环境提交用于执行处理所述一个或多个数据项的所述任务的调用;
确定所述任务已成功处理所述一个或多个数据项;并且
将所述一个或多个数据项置于所述结果数据高速缓存中;
其中当所述多个数据项已在所述按需代码执行环境处被处理时,所述用户接口子***进一步向所述用户计算装置发送通知。
在本发明的某些实施例中,实现所述用户接口子***的所述一个或多个处理器、实现所述数据检索子***的所述一个或多个处理器、以及实现所述调用生成子***的所述一个或多个处理器是相同的一个或多个处理器。
在本发明的某些实施例中,所述数据源对应于多个不同的数据源。
在本发明的某些实施例中,所述任务对应于多个任务,并且其中从所述用户计算装置获得的所述信息还包括用于确定来自所述多个任务中的要调用以用于处理来自所述多个数据项的给定数据项的单独任务的信息。
在本发明的某些实施例中,所述数据检索子***被配置来通过以下方式中的至少一者来生成所述数据项的所述标识符:标识所述数据源内的所述数据项的密钥、联合所述数据项的一个或多个属性、或根据散列函数处理所述数据项的至少一部分。
在本发明的某些实施例中,实现所述调用生成子***的所述一个或多个处理器通过列出指向所述结果数据高速缓存内的所述一个或多个数据项的指针来将所述一个或多个数据项置于所述结果数据高速缓存中。
根据本发明的另一方面,本发明涉及一种计算机实现的方法,其包括:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
迭代地从所述数据源检索来自所述多个数据项的数据项;
将来自所述多个数据项的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
在本发明的某些实施例中,将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内包括:使所述入列数据项的标识符与所述数据高速缓存相关联。
在本发明的某些实施例中,还包括:生成所述检索到的数据项的标识符。
在本发明的某些实施例中,还包括:从用户计算装置获得标识所述数据源和所述任务的信息。
在本发明的某些实施例中,迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用、并且记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果,与迭代地从所述数据源检索来自所述多个数据项的数据项、并且将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内,至少部分地同时发生。
在本发明的某些实施例中,还包括:至少部分地基于从所述按需代码执行环境接收到的错误来确定针对所述按需代码执行环境的调用提交速率。
在本发明的某些实施例中,还包括:基于所述调用提交速率来修改迭代地从所述数据源检索数据项的速率。
在本发明的某些实施例中,还包括:
确定检索到的数据项表示对当前标识在所述数据高速缓存内的先前数据项的修改;
将所述检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于处理所述检索到的数据项的调用;以及
利用所述检索到的数据项的结果覆写针对所述先前数据项提交的调用的结果。
根据本发明的另一方面,本发明涉及一种用于通过按需代码执行环境处理数据源内的多个数据项的***,所述***包括:
一个或多个处理器;以及
一个或多个存储器,所述一个或多个存储器在其上存储有指令,其中当在所述一个或多个处理器上执行时,所述指令致使所述一个或多个处理器:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
从所述数据源检索来自所述多个数据项的数据项;
将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
附图说明
图1是描绘说明性环境的框图,其中任务生成***可与数据源和按需代码执行环境交互以基于数据源内的数据生成对按需代码执行环境的请求流;
图2描绘提供任务生成***的计算装置的总体架构;
图3是描绘用于利用数据源内的数据来生成对按需代码执行环境的请求的说明***互的流程图;
图4是描绘用于根据分界时间处理数据源内的数据的说明***互的流程图;
图5A和图5B描绘示出了用于利用数据存储库内的数据来生成对按需代码执行环境的任务调用流的说明性例程的流程图;
图6描绘示出了用于利用数据源同时处理根据分界点定义的新数据项和积压数据项的说明性例程的流程图;并且
图7描绘示出了用于基于数据源内的数据项的依赖关系标准来排序对按需代码执行环境的任务调用的说明性例程的流程图。
具体实施方式
总的来说,本公开的各方面涉及利用数据存储库内的数据项集合生成任务执行并将其提交到按需代码执行环境。如本文所详细描述,按需代码执行环境可提供网络可访问服务,从而使得用户能够提交或指定要由按需代码执行环境的虚拟机实例执行的计算机可执行代码。按需代码执行环境上的每组代码可定义“任务”,并且当在按需代码执行环境上执行时实现与该任务相对应的特定功能。按需代码执行环境上的任务的单独实现方式可称为任务的“执行”。一般来讲,按需代码执行环境可通过响应于用户指定的事件执行任务来操作,所述用户指定的事件也可称为“触发”事件,诸如应用程序编程接口(“API”)调用或特殊格式的超文本传输协议(“HTTP”)分组的传输。这样的执行可使得用户能够利用按需代码执行环境来执行任何指定的可执行代码,而无需配置或维持在其上执行代码的底层硬件或基础结构。通常,触发事件对应于远程数据存储库处的数据的变化,诸如上传新文档或照片、或发布新闻项。该触发事件导致在按需代码执行环境处执行代码以处理最近改变的数据(例如,通过根据用户的规格转换数据)。因此,按需代码执行环境提供用于基于数据“流”执行任务的机制,其中对数据源的增加的改变随时间的推移而发生。然而,在一些情况下,用户还可能期望利用按需代码执行环境来处理现有数据,诸如先前提交到数据存储库的文档或照片的历史记录。在该现有数据相对较小的情况下,用户可简单地将每个数据项提交到按需代码执行环境,以用于通过定义的任务进行处理。然而,在现有数据较大的情况下(例如,在数据库中存在大量过去的文档、照片或新闻项的情况下),同时执行任务以处理来自现有数据集的所有数据项可能是不可能的或不能实行的(例如,由于数据存储库与按需执行环境之间的通信速度的约束或者由于数据存储库或按需代码执行环境处的计算容量的限制)。与大的、现有的数据集的处理相关联的问题对于此类***的新用户可能特别普遍,如此可能要求用户迁移先前根据其他***组织或处理的数据集。因此,这些问题可能阻碍用户采用按需代码执行环境。本公开的实施方案通过以下方式来解决此问题:提供使得来自现有数据集的数据项能够被提交以用于随时间的推移在按需代码执行环境处进行处理的请求生成***。说明性地,任务生成***可利用来自现有数据集的数据项来生成对按需代码执行环境的调用“流”,从而有效地将总体静态的现有数据集转换成类似于通常由按需代码执行环境处理的动态数据集的格式。
在一些情况下,现有数据集内的数据项可以是静态的且唯一标识的。因此,本文所公开的任务生成***可迭代地从数据源(例如,网络可访问的数据存储库)检索数据项,生成对按需代码执行环境的任务调用以处理数据项,并且确认已成功执行所调用的任务,直到所有数据项已在按需代码执行环境处被处理为止。然而,在其他情况下,现有数据集内的数据项可能不是完全静态的,或者可能不是唯一标识的。因此,本文所公开的任务生成***可操作以确保现有数据集内的每个数据项至少被处理一次,并且检测并适当地处理在按需代码执行环境处处理数据集期间在数据源内改变的数据项。
为了确保现有数据集内的每个数据项至少被处理一次,本文所公开的任务生成***可针对每个数据项生成或获得唯一标识符,并利用该唯一标识符来跟踪按需代码执行环境上关于该数据项的任务的状态。说明性地,任务生成***可维持尚未提交到按需代码执行环境以进行处理的数据项的列表、已经提交以用于在按需代码执行环境处进行处理但尚未处理的数据项的列表、以及已在按需代码执行环境处处理的数据项的列表。当从数据源读取数据项时,任务生成***可将数据项的唯一标识符与上述数据项的列表进行比较,以确保数据项尚未处理或并未正在处理。然后,任务生成***可继续向数据源查询数据项,直到所有数据项已经被读取并被验证为在任务生成***中已被处理或在进程内。另外,任务生成***可与按需代码执行环境交互,以确保对单个数据项的处理是成功的,并且如果不成功,那么重新提交单个数据项以用于在按需代码执行环境处进行处理,或者将数据项记录为不能够成功处理。因此,任务生成***可操作以确保数据源内的每个数据项在按需代码执行环境处被(成功或未成功)处理。
在数据集内的每个数据项的唯一标识符(例如,数据库密钥)不可用的情况下,任务生成***可用于生成数据项的唯一标识符。说明性地,任务生成***可通过散列函数(其实例在本领域中是已知的)将数据转换成散列值来传递对应于数据项的全部或一部分数据,并且此后可将散列值用作数据项的唯一标识符。在另一个实施方案中,任务生成***可利用来自数据项的属性的组合(诸如最后编辑的时间和数据项的前128个字节的组合)作为数据项的唯一标识符。如上所述,可随后在整个任务生成***中利用此唯一标识符来跟踪数据项是否已在按需代码执行环境处被处理。如本文所用,术语“唯一”结合标识符使用以指示标识符唯一地标识数据项的可接受统计可能性,并且不一定指示标识符的绝对唯一性。例如,任务生成***可利用散列函数将数据从数据项转换成散列值,并利用该散列值作为唯一标识符,尽管存在两个散列值的冲突是可能的但在统计上不太可能这一事实。数据项供任务生成***使用所需的标识符的“唯一性”可根据***的要求而变化。例如,更多的唯一标识符可能计算起来更加困难,但提供了标识符之间不发生重叠的更大可能性。相反地,更少的唯一标识符可能需要更少的计算容量来生成,但增加了标识符重叠的可能性(例如,这可能导致数据项未被按需代码执行环境处理)。
虽然数据集内的数据项通常可以是静态的,但在一些情况下,可在最初由任务生成***读取之后修改一个或多个数据项。因此,任务生成***可被配置来检测所修改的数据项,并且按照由任务生成***的管理员或由已经请求在按需代码执行环境处处理数据项集合的用户规定的方式来处理此类修改。可以多种方式检测所修改的数据项,所述方式包括检测对数据项的特定属性(例如,“时间修改的”属性)的改变、或对数据项内的底层数据(例如,如由通过借助于散列函数传递底层数据而生成的散列值所表示的)的改变。在一些情况下,所修改的数据项可由任务生成***处理为新数据项,并且可用来生成对按需代码执行环境处的任务的新调用。另外地或可选地,可将所修改的数据项报告给任务生成***的用户。在其他情况下,所修改的数据项可用来生成对按需代码执行环境上的不同任务的调用,所述不同任务诸如对应于用户定义的可执行代码的任务,所述任务为处理所修改的数据项,同时覆写或弃用针对数据项的先前版本执行的任何过去任务的结果。因此,任务生成***可被配置来将现有数据项集合转换成对按需代码执行环境的调用“流”,即使在该转换期间修改来自所述集合的一些数据项时也是如此。
在一些情况下,用户可能期望既处理数据源内的现有数据项,又在添加数据项(从而创建来自数据源的输入“流”)时继续处理数据源中的数据项。然而,可能不期望顺序地处理数据存储库中的所有项,使得仅在完成所有现有数据项的处理之后才处理新添加的数据项。这对于保存数千或数百万先已存在的项的数据存储库来说可能是尤其不期望的,使得处理所有先已存在的项将花费相对长的时间段(例如,几小时、几天、几周等)。因此,本公开可使得数据源能够同时被认为是先已存在的数据项的“积压”以及“新”数据项的流。此外,本公开的实施方案可同时处理“新”数据项和“积压”数据项,从而实现新数据项的实时(或基本上实时)处理,同时还使得最终能够处理积压数据项。
为了实现新数据项和积压数据项的同时处理,本公开的实施方案可设立分界点,这设立了将数据源内的一些数据项指定为“积压”而将其他数据项指定为“新”的一个或多个标准。分界点可以是时间点,使得在该时间点之前创建或修改的数据项被认为是积压的,而在该时间点之后(或可能在该时间点处)创建或修改的数据项被认为是新的。在一些情况下,任务生成***可基于数据源的处理何时开始来设立分界点(例如,使得在处理开始之后创建或修改的任何数据项将被认为是新数据项)。然而,在其他情况下,出于处理数据源的目的,可能期望将数据源内的至少一些先已存在的数据项认为是“新的”。说明性地,如果按需任务执行环境能够以比将数据项添加到数据源更高的速率来处理数据项,那么将一些先已存在的数据项指定为“新的”可能不显著影响所述环境迅速处理后来添加的数据项的容量。另外,在最近将此类先已存在的数据项添加到数据源的情况下,可能期望迅速处理这些数据项,因为相对于较旧的数据项,用户更可能执行关于最近提交的项的新引入的功能(例如,对应于在按需代码执行环境上执行的任务)。因此,本公开的实施方案可设立分界时间以将至少一些先已存在的数据项包括在数据源内。说明性地,可设立分界时间,使得对“新”数据项(例如,在分界时间之时或之后)的处理在处理开始之后的阈值时段内“赶上”数据项在数据源上的创建(例如,使得在“赶上”之后新添加的或修改的数据项能够被立刻处理)。该阈值时段可例如由任务生成***的操作者设立,或者在由用户提交的一个或多个处理标准内设立。例如,用户可请求设立分界时间,使得对分界时间之后的数据项的处理在相对短的时段(诸如五分钟至十分钟)内“赶上”新添加或修改的数据项。说明性地,任务生成***可从数据源检索历史信息以确定在数据源内创建或修改数据项的估计速率,并利用该估计速率来确定任务处理***能够多快地赶上新添加的数据项,并且因此确定要过去多长时间才可设定分界时间。
在一些实施方案中,任务生成***可以不同于“积压”数据项的方式处理“新”数据项(例如,在分界点之后)。例如,“新”数据项可被立即处理,而“积压”数据项可以较慢的速率或者以基于“新”数据项的处理速率而变化的速率来处理。在一些情况下,处理“积压”数据项的速度可基于数据源、任务生成***或按需代码执行***的状态而变化(例如,以利用这些***内的过剩容量,或者确保在这些***中检索、提交或处理数据项的速率不超过阈值)。例如,任务生成***可根据在按需代码执行环境处出现新任务的速率来改变处理“积压”数据项的速度,而不管任务是由任务生成***来控制还是由于其他一些原因引起的。作为另一实例,“新”数据项可按时间顺序处理,而“积压”数据项可根据可选顺序(例如,逆时间顺序)处理。对“新”数据项和“积压”数据项的处理可同时发生,使得任务生成***可将数据源认为是数据项的动态流和积压数据项的静态源。
尽管本文关于单个分界时间提供了实例,但本公开的实施方案可使得能够使用多个分界时间,诸如将数据源内的数据项分成“新”数据项、“积压”数据项和“存档”数据项的时间。此类分界时间中的一些或全部可由任务生成***的用户手动指定。另外地或可选地,此类分界时间中的一些或全部可由任务生成***自动确定。例如,如以上所描述,可在“新”数据项与“积压”数据项之间设立分界时间,以使任务生成***在阈值时段内“赶上”新添加的数据项。类似地,可在“积压”数据项与“存档”数据项之间设立分界时间,使得在第二阈值时段(例如,长于“新”数据项的阈值)内预期发生对“积压”数据项的处理。任务生成***可包括任何数量的此类分界时间,从而将数据源分成任何数量的数据流,所述数据流可串行、并行或者通过串行和并行处理的组合来处理。此外,在一些情况下,任务生成***可拒绝处理数据源内的一个或多个数据集(例如,“存档”数据项)。
在一些情况下,数据项可由按需代码执行环境独立地或“无状态地”处理,而无需取决于按需代码执行环境在处理来自数据源的其他数据项时的状态。然而,在其他情况下,对数据源内的第一数据项的处理可能取决于处理第二数据项。例如,在利用按需代码执行环境从数据源内的较大图像生成拼贴图像的情况下,从缩略图图像生成拼贴画的第一任务可能取决于将大图像的大小调整为缩略图大小的先前任务的数量。另外,对给定数据项集合的处理可能取决于公共信息,使得所述处理在同时实施(例如,在公用机器上)时更有效地发生。例如,在用公共加密密钥对一批数据项进行加密的情况下,在单个虚拟机实例上处理所述批中的每个数据项可能比在许多虚拟机实例之间划分对所述批的处理更有效。因此,本公开的各方面可使得数据项能够以基于依赖关系信息确定的排序提交到按需代码执行环境。例如,在第一数据项的处理取决于第二数据项的处理的情况下,第一数据项可仅在成功处理第二数据项之后提交到按需代码执行环境,即使在第二数据项之前从数据源检索到第一数据项也是如此。作为另一实例,在存在共享依赖关系(例如,关于加密密钥或其他信息的共享依赖关系)以处理多个数据项的情况下,可将多个数据项作为一批提交到按需任务执行环境,使得数据项的执行有效地发生。
现在将讨论在按需任务执行环境上执行任务。具体地,为了执行任务,本文所描述的按需代码执行环境可维持预初始化的虚拟机实例池,一旦接收到用户请求,所述预初始化的虚拟机实例池就可投入使用。由于这些虚拟机的预初始化性质,与执行用户代码相关联的延迟(有时称为等待时间)(例如,实例和语言运行时启动时间)可显著减少,通常减少到亚100毫秒的水平。说明性地,按需代码执行环境可在一个或多个物理计算装置上维持虚拟机实例池,其中每个虚拟机实例在其上加载有一个或多个软件组件(例如,操作***、语言运行时、库等)。当按需代码执行环境接收到执行用户程序代码的指定用于执行用户程序代码的一个或多个计算约束的请求时,按需代码执行环境可基于由所述请求指定的一个或多个计算约束来选择用于执行用户程序代码的虚拟机实例,并且致使用户程序代码在所选择的虚拟机实例上执行。程序代码可在虚拟机实例上创建的隔离容器中执行。由于池中的虚拟机实例已经被启动并且在接收到请求时加载有特定的操作***和语言运行时,所以与发现可处理请求(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)的计算容量相关联的延迟显著减少。
按需代码执行环境可包括虚拟机实例管理器,所述虚拟机实例管理器被配置来接收用户代码(以各种编程语言中的任何一种编写的线程、程序等),并以高度可伸缩、低等待时间的方式执行代码,而无需用户配置虚拟机实例。具体地,虚拟机实例管理器可在接收用户代码之前以及在从用户接收有关任何特定虚拟机实例配置的任何信息之前,根据预先确定的配置集来创建和配置虚拟机实例,每个配置对应于各种运行时环境处的任何一个或多个。此后,虚拟机实例管理器接收用户发起的执行代码的请求,并基于与所述请求相关联的配置信息标识预先配置的虚拟机实例以执行代码。虚拟机实例管理器可进一步分配所标识的虚拟机实例以至少部分地通过在所分配的虚拟机实例内创建和配置容器来执行用户的代码。用于实现虚拟机实例管理器和在虚拟机实例上执行用户代码的各种实施方案在标题为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTS TOEXECUTE PROGRAM CODE”并且于2014年9月30日提交的美国专利申请号14/502,648(所述‘648申请)中加以更详细的描述,其全部内容特此以引入方式并入。
如本文所用,术语“虚拟机实例”旨在指代软件或其他可执行代码的执行,其仿真硬件以提供软件可在其上执行的环境或平台(“执行环境”)。虚拟机实例通常由硬件装置执行,所述硬件装置可与由虚拟机实例仿真的物理硬件不同。例如,虚拟机在第二类型的处理器和存储器上执行时可仿真第一类型的处理器和存储器。因此,虚拟机可用来执行旨在用于正在执行第二执行环境(例如,第二操作***)的物理装置上的第一执行环境(例如,第一操作***)的软件。在一些情况下,由虚拟机实例仿真的硬件可与底层装置的硬件相同或相似。例如,具有第一类型处理器的装置可实现多个虚拟机实例,每个虚拟机实例仿真该第一类型处理器的实例。因此,虚拟机实例可用来将装置分成多个逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例通常可提供偏离底层物理装置的硬件的抽象层次,但并不需要这种抽象。例如,假设装置实现多个虚拟机实例,每个虚拟机实例仿真与由该装置提供的硬件完全相同的硬件。在这种情境下,每个虚拟机实例可允许软件应用程序在没有转换的情况下在底层硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用程序之间的逻辑分离。此过程(通常称为“本地执行”)可用来提高虚拟机实例的速度或性能。也可使用允许直接利用底层硬件的其他技术,诸如硬件直通技术。
虽然在本文中将执行操作***的虚拟机描述为执行环境的一个实例,但其他执行环境也是可能的。例如,任务或其他过程可在软件“容器”内执行,所述软件“容器”提供运行时环境而其本身不提供硬件的虚拟化。容器可在虚拟机内实现以提供另外的安全性,或者可在虚拟机实例之外运行。
如本领域技术人员将明白,本文所描述的实施方案用于通过使得现有数据集能够在按需代码执行环境内处理来改进计算装置的功能。因此,本文所描述的实施方案将这种按需代码执行环境的益处(例如,可伸缩性、灵活性、效率等)扩展到现有数据集。此外,本申请的实施方案解决了在按需代码执行环境内尝试处理现有数据集、特别是大的、现有的数据集时出现的挑战,包括对可从数据集读取数据项或在按需代码执行环境处处理数据项的速度的限制以及数据集内的数据项不与唯一标识符相关联或在处理期间发生变化的可能性。因此,本文所描述的实施方案解决了与计算装置可通信和处理大的数据集的有限速度有关的技术问题。本文所描述的实施方案通过以下方式解决了此类技术问题:使用技术解决方案,即,使用可将来自数据集的数据项转换成对应的对“按需”代码执行环境的调用“流”的任务生成***,同时维持使得任务生成***能够确保来自数据集的每个数据项在按需代码执行环境处得到处理的信息。因此,本领域技术人员将凭借本公开内容而明白,本文所描述的实施方案大体上代表对数据处理技术领域和计算装置的重大贡献。
当结合附图参阅以下详细描述时,可更好地理解本公开的上述方面和许多伴随的优点,因此将更易于了解所述方面和优点。
图1是说明性操作环境100的框图,其中任务生成***170可操作以从存储在数据源160处的数据项集合中读取数据项,并且向按需代码执行环境110提交对应的调用以基于这些数据项执行任务。用户利用用户计算装置102可提供任务生成***170的操作标准,包括对数据源160、数据源160内的数据项以及基于数据项在按需代码执行环境处执行的任务的标识。通过说明,各种示例性用户计算装置102被示出与按需代码执行环境110(包括台式计算机、膝上型计算机和移动电话)通信。一般来讲,用户计算装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可佩戴计算机、服务器、个人数字助理(PDA)、混合型PDA/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、照相机、数字媒体播放器等。任务生成***170可向用户计算装置102提供一个或多个用户接口、命令行接口(CLI)、应用程序编程接口(API)和/或其他程序化接口,用于与任务生成***170交互以指定用于任务生成***170的操作的一个或多个处理标准并接收这种操作的结果。另外,按需代码执行环境110可向用户计算装置102提供一个或多个用户接口、命令行接口(CLI)、应用程序编程接口(API)和/或其他程序化接口,用于生成并上传用户可执行代码,请求用户提供的代码(例如,提交在按需代码执行环境110中执行用户代码的请求),调度基于事件的作业或定时作业,跟踪用户提供的代码和/或查看与其请求和/或用户代码相关的其他日志或监视信息。尽管一个或多个实施方案在本文中可描述为使用用户接口,但应当理解,这类实施方案能够另外地或可选地使用任何CLI、API或其他程序化接口。
数据源160可对应于网络连接的计算装置,诸如服务器,所述计算装置生成按需代码执行环境110、任务生成***170或两者可访问的数据。例如,数据源160可包括web服务(例如,与用户计算装置102相关联、与按需代码执行环境110相关联、或与第三方相关联)、数据库、简易信息聚合(“RSS”)服务或阅读器、社交网站或任何其他网络可访问服务源或数据源。在一些情况下,数据源160主动地将信息(诸如API调用或其他任务触发信息)在其被输入到数据源160时发送到按需代码执行环境110。在其他情况下,数据源160可以是被动的,使得数据在其被输入到数据源160中时可供按需代码执行环境110访问。如下文所描述,按需代码执行环境110的组件可周期性地轮询此类被动数据源,并基于所提供的数据触发按需代码执行环境110内的任务的执行。此外,根据本公开的实施方案,数据源160可包括先已存在的数据集,所述先已存在的数据集太大而不能同时提交到按需代码执行环境以进行处理,并且因此可在任务生成***170中得到处理。虽然在图1中被描绘为与用户计算装置102、按需代码执行环境110和任务生成***170不同,但在一些实施方案中,各种数据源160可由相应的用户计算装置102、任务生成***或按需代码执行环境110实现。
图1的各种元件,包括用户计算装置102、数据源160、任务生成***170和按需代码执行环境110可通过网络104进行通信,网络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可包括多种组件,以实现按需代码执行环境110与其他计算装置之间的交互。例如,虽然未在图1中示出,但前端120可包括请求接口、作业队列、分发管理器、轮询接口和输出接口。请求接口可向用户计算装置102提供将用户指定的代码上传或以其他方式传送到按需代码执行环境110,并且此后请求执行该代码的容量。在一个实施方案中,请求接口通过图形用户接口(GUI)、CLI或API与外部计算装置(例如,用户计算装置102、辅助服务106等)通信。前端120处理请求并确保请求被正确地授权。例如,前端120可确定与请求相关联的用户是否被授权访问在请求中指定的用户代码。
如本文所用的用户代码可指以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可互换使用。可例如结合由用户开发的特定web应用程序或移动应用程序来执行这种用户代码以实现特定功能。如上所述,用户代码(例如,为了实现特定功能)的单独集合在本文中称为“任务”,而该代码的特定执行称为“任务执行”或简称为“执行”。作为非限制性实例,可以JavaScript(例如,node.js)、Java、Python和/或Ruby(和/或另一种编程语言)编写任务。可以各种方式“触发”任务以在按需代码执行环境110上执行。在一个实施方案中,用户或其他计算装置可发送执行任务的请求,所述请求通常可称为对执行任务的“调用”。此类调用可包括将要执行的用户代码(或其位置)和将要用于执行用户代码的一个或多个变元。例如,调用可提供任务的用户代码连同执行任务的请求。在另一个实例中,调用可通过任务的名称或标识符来标识先前上传的任务。在又一实例中,对应于任务的代码可被包括在对任务的调用中,以及在由按需代码执行环境110接收到请求之前被上传到单独的位置(例如,辅助服务106的存储库或按需代码执行环境110内部的存储***)中。按需代码执行环境110可基于在处理对任务的调用时任务的代码可用的位置来改变其任务的执行策略。
请求接口可接收对执行任务的调用作为来自用户的超文本传输协议安全(HTTPS)请求。此外,当执行任务时,还可处理并利用包括在HTTPS请求中的任何信息(例如,标头和参数)。如以上所讨论,可使用任何其他协议(包括例如HTTP、MQTT和CoAP)来将包含任务调用的消息传递到请求接口。
对执行任务的调用可指定将要与对应于任务的用户代码一起使用的一个或多个第三方库(包括本地库)。在一个实施方案中,调用可向按需代码执行环境110提供包含与请求执行的任务相对应的用户代码和任何库(和/或其存储位置的标识)的ZIP文件。在一些实施方案中,调用包括指示将要执行的任务的程序代码、写入程序代码的语言、与调用相关联的用户和/或专供执行程序代码使用的计算资源(例如,存储器等)的元数据。例如,可向调用提供先前由用户上传的、由按需代码执行环境110(例如,标准例程)提供的和/或由第三方提供的任务的程序代码。在一些实施方案中,这种资源级约束(例如,将要分配多少存储器用于执行特定用户代码)被指定用于特定任务,并且可在任务的每次执行时不改变。在此类情况下,按需代码执行环境110可在接收到每个单独的调用之前访问此类资源级约束,并且单独的调用可不指定此类资源级约束。在一些实施方案中,调用可指定其他约束,诸如指示调用请求执行任务的什么种类的许可或权限的许可数据。这种许可数据可由按需代码执行环境110用来(例如,在专用网络上)访问私有资源。
在一些实施方案中,调用可指定应当被采用以用于处理所述调用的行为。在此类实施方案中,调用可包括用于启用其中执行在调用中提及的任务的一种或多种执行模式的指示符。例如,调用可包括用于指示任务是否应当以调试模式执行的标志或标头,在所述调试模式下可结合任务的执行而生成的调试和/或日志输出被(例如,通过控制台用户接口)提供回给用户。在这种实例中,按需代码执行环境110可检查调用并寻找标志或标头,并且如果标志或标头存在,那么按需代码执行环境110可修改在其中执行任务的容器的行为(例如,日志功能),并且致使输出数据将要被提供回给用户。在一些实施方案中,通过由按需代码执行环境110提供给用户的用户接口将行为/模式指示符添加到调用。还可基于调用中提供的指示来启用或禁用其他特征,诸如源代码分析、远程调试等。
为了管理对代码执行的请求,前端还可包括执行队列,其可维持对用户请求的任务执行的记录。说明性地,按需代码执行环境110同时执行任务的数量是有限的,并且因此,在按需代码执行环境110中发起的新任务执行(例如,通过API调用)可被置于执行队列上并且例如以先入先出顺序处理。在一些实施方案中,按需代码执行环境110可包括多个执行队列,诸如用于每个用户账户的单独执行队列。例如,按需代码执行环境110的用户可能期望限制按需代码执行环境110上的任务执行的速率(例如,出于成本原因)。因此,按需代码执行环境110可利用帐户特定的执行队列来限制特定用户帐户同时执行任务的速率。在一些情况下,按需代码执行环境110可对任务执行进行优先级排序,使得特定帐户的或指定优先级的任务执行绕过或优先于执行队列。在其他情况下,按需代码执行环境110可在接收到对该任务的调用之后立即或基本上立即执行任务,因此,可省略执行队列。
如上所述,可基于来自用户计算装置102的显式调用(例如,当在请求接口120处接收到时)来触发任务以在按需代码执行环境110中执行。可选地或另外地,可基于从一个或多个数据源160检索到的数据来触发任务以在按需代码执行环境110中执行。为了促进与数据源160的交互,前端120可包括轮询接口,所述轮询接口操作以轮询数据源160以获取新的可用数据。说明性地,轮询接口可周期性地向一个或多个用户指定的数据源160发送请求以检索任何新的可用数据(例如,社交网络“帖子”、新闻文章等),并确定该数据是否对应于触发在按需代码执行环境110上执行任务的用户设立的标准。说明性地,用于任务执行的标准可包括但不限于数据源160处是否有新数据、数据的类型或内容、或者与数据相对应的定时信息。
除了基于显式用户调用和来自数据源160的数据执行的任务之外,在一些情况下,按需代码执行环境110可操作以独立地触发任务的执行。例如,按需代码执行环境110可(基于来自用户的指令)操作以在多个指定时间间隔(例如,每10分钟)的每一个处触发任务的执行。
前端120还可包括被配置来在按需代码执行环境110上输出有关任务的执行的信息的输出接口。说明性地,输出接口可向用户计算装置102、数据源160、或记账服务或日志服务(图1中未示出)发送有关任务执行的数据(例如,任务的结果、与任务执行相关的错误、或任务执行的细节,诸如完成执行所需的总时间、通过执行处理的总数据等)。输出接口进一步可使得能够将数据(诸如服务调用)发送到数据源160。例如,可在任务执行期间利用输出接口将API请求发送到数据源160(例如,以存储在任务执行期间生成的数据)。
为了执行任务,按需代码执行环境110包括预热池管理器130,所述预热池管理器130“预热”(例如,初始化)虚拟机实例以使得任务能够被快速执行,而没有由虚拟机的初始化引起的延迟。按需代码执行环境110还包括工作者管理器140,所述工作者管理器140管理活动的虚拟机实例(例如,当前被指派以响应于任务调用而执行任务)。
当按需代码执行环境110检测到触发按需代码执行环境110上的任务执行的事件时,预热池管理器130确保虚拟机实例已准备好供工作者管理器140使用。在图1所示的实例中,预热池管理器130管理预热池130A,所述预热池130A是预初始化且预配置的虚拟机实例的组(有时称为池),其可用来响应于触发那些任务而执行任务。在一些实施方案中,预热池管理器130致使虚拟机实例在按需代码执行环境110内的一个或多个物理计算机器上启动并添加到预热池130A。例如,预热池管理器130可基于预热池130A中的可用容量来致使另外的实例被添加到预热池130A,以服务传入的调用。在一些实施方案中,预热池管理器130可利用按需代码执行环境110内的物理计算装置和一个或多个虚拟机实例服务来获取并维持可用来服务由前端120接收的调用的计算容量。另外,按需代码执行环境110可包括用于控制(例如,增加或减少)预热池130A中的可用容量的一个或多个逻辑旋钮或开关。例如,***管理员可使用这种旋钮或开关来在高峰时间期间增加预热池130A中可用的容量(例如,预启动实例的数量)。在一些实施方案中,预热池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可维持单独的高速缓存,其中存储任务代码以用作虚拟机实例的本地缓存与基于web的网络存储装置(例如,图1中未示出)之间的中间级高速缓存***。工作者管理器140在服务调用时可能遇到的各种情境将在上面以引用方式并入的所述‘648申请中(例如,在所述‘648申请的图4中)加以更详细的描述。
在已经执行任务之后,工作者管理器140可拆除用来执行任务的容器以释放其占用的资源,以用于实例中的其他容器。可选地,工作者管理器140可保持容器运行以使用所述容器来服务来自同一用户的另外的调用。例如,如果另一个调用与已经加载在容器中的同一个任务相关联,那么所述调用可被分配给同一个容器,从而消除与创建新容器并在容器中加载任务代码相关联的延迟。在一些实施方案中,工作者管理器140可拆除其中创建用来执行任务的容器的实例。可选地,工作者管理器140可保持实例运行以使用所述实例来服务来自同一用户的另外的调用。在任务完成执行之后是否保持容器和/或实例运行的确定可基于阈值时间、用户类型、用户的平均任务执行量和/或其他操作条件。例如,在没有任何活动(例如,任务执行)的情况下已过去阈值时间(例如,5分钟、30分钟、1小时、24小时、30天等)之后,容器和/或虚拟机实例被关闭(例如,删除、终止等),并且分配给其的资源被释放。在一些实施方案中,在容器被拆除之前所经过的阈值时间比在实例被拆除之前所经过的阈值时间更短。
在一些实施方案中,按需代码执行环境110可在其响应于触发事件执行任务时向一个或多个辅助服务(图1中未示出)提供数据。例如,前端120可与监视/记录/记帐服务通信。监视/日志/记帐服务可包括:监视服务,其用于管理从按需代码执行环境110接收的监视信息,诸如按需代码执行环境110上的容器和实例的状态;日志服务,其用于管理从按需代码执行环境110接收的日志信息,诸如由按需代码执行环境110上的容器和实例执行的活动;以及记帐服务,其用于(例如基于由监视服务和日志服务管理的监视信息和/或日志信息)生成与在按需代码执行环境110上执行用户代码相关联的记帐信息。除了可由所述监视/日志/记帐服务(例如,为了按需代码执行环境110)执行的***级活动之外,监视/日志/记帐服务还可提供为了在按需代码执行环境110上执行的任务的应用级服务。例如,监视/日志/记帐服务可为了在按需代码执行环境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的示例性配置将在上面以引用方式并入的所述‘648申请中(例如,在所述‘648申请的图2中)加以更详细的描述。说明性地,实例分配单元可与动态分配的网络存储服务(图1中未示出)交互,以增加可用于虚拟机实例的数据存储量。
在所描绘的实例中,虚拟机实例(“实例”)152、154在由预热池管理器130管理的预热池130A中示出,并且实例156、158在由工作者管理器140管理的活动池140A中示出。按需代码执行环境110内的各种组件的图示在本质上是逻辑的,并且组件中的一个或多个可由单个计算装置或多个计算装置实现。例如,实例152、154、156、158可在不同的各种地理区域中的一个或多个物理计算装置上实现。类似地,前端120、预热池管理器130和工作者管理器140中的每一个可跨多个物理计算装置实现。可选地,前端120、预热池管理器130和工作者管理器140中的一个或多个可在单个物理计算装置上实现。在一些实施方案中,按需代码执行环境110可包括多个前端、多个预热池管理器和/或多个工作者管理器。尽管在图1的实例中示出四个虚拟机实例,但本文所描述的实施方案不限于此,并且本领域技术人员将理解,按需代码执行环境110可包括使用任何数量的物理计算装置实现的任何数量的虚拟机实例。类似地,尽管在图1的实例中示出单个预热池和单个活动池,但本文所描述的实施方案不限于此,并且本领域技术人员将理解,按需代码执行环境110可包括任何数量的预热池和活动池。
虽然图1中未示出,但在一些实施方案中,按需代码执行环境110可包括多个前端120。在此类实施方案中,可提供负载均衡器以例如以循环方式将传入的调用分发给多个前端120。在一些实施方案中,负载均衡器将传入的调用分发给多个前端120的方式可基于预热池130A和/或活动池140A的状态。例如,如果认为预热池130A中的容量足够,那么可基于前端120的单独容量(例如,基于一个或多个负载平衡限制)将调用分发给多个前端120。在另一方面,如果预热池130A中的容量小于阈值量,那么可去除此类负载平衡限制中的一个或多个,使得可以减少或最小化从预热池130A取出的虚拟机实例的数量的方式来将调用分发给多个前端120。例如,即使根据负载平衡限制,调用将要被引导至前端A,如果前端A需要从预热池130A中取出实例以服务所述调用但前端B可使用其活动池中的一个实例来服务同一个调用,那么所述调用可被引导至前端B。
根据本公开的实施方案,图1的操作环境100还包括任务生成***170,所述任务生成***170被配置来利用一个或多个数据源160内的先已存在的数据项目集合来生成到按需代码执行环境的任务执行调用流。如图1所示,任务生成***170包括用户接口171、数据检查器172、调用生成器174、进程内高速缓存176和结果高速缓存178,其中的每一者将在下文加以更详细的描述。任务生成***170内的各种组件的图示在本质上是逻辑的,并且组件中的一个或多个可由单个计算装置或多个计算装置实现。例如,用户接口171、数据检查器172、调用生成器174、进程内高速缓存176和结果高速缓存178中的每一者可在不同的各种地理区域中的多个物理计算装置上实现,所述计算装置可共同操作以实现相应的用户接口171、数据检查器172、调用生成器174、进程内高速缓存176或结果高速缓存178的单个实例,或者可独立操作以实现用户接口171、数据检查器172、调用生成器174、进程内高速缓存176或结果高速缓存178的不同实例。此外,虽然任务生成***170在图1中被说明性地描绘为与按需代码执行环境110不同,但在某些情况下,任务生成***170可与按需代码执行环境110整合为单个(可能是分布式)***。
任务生成***170的用户接口171提供一个或多个接口(例如,包括GUI、CLI、API等),通过所述一个或多个接口,用户能够使用用户计算装置102来指示任务生成***170利用数据源160内的数据项生成对按需代码执行环境110的调用。说明性地,用户接口171可使得用户计算装置102能够提交有关任务生成***170的操作的一个或多个处理标准,包括例如从其访问数据项的一个或多个数据源160、用来生成到按需代码执行环境110的对应调用的特定数据项(例如,形成数据项集合)、用于访问数据源160的参数(例如,访问速度、协议、凭证等)、基于数据源160内的数据项进行调用的按需代码执行环境110上的任务、用于对按需代码执行环境110上的任务的执行进行调用的参数(例如,任务调用的频率、用于进行任务调用的机制、凭证等)、用于处理对数据项或处理期间发生的错误的修改的进程以及用于报告处理结果的进程。
在接收到来自用户计算装置102的请求以基于数据源160内的数据项生成对按需代码执行环境120的调用之后,任务生成***170可利用数据检查器172来访问数据源160内的数据项,确保所述数据项先前未被任务生成***170处理,并且将数据项入列以用于生成对按需代码执行环境的任务调用。说明性地,可将数据项入列在进程内高速缓存176中,所述进程内高速缓存176可维持由数据检查器172读取的数据项列表,但针对所述数据项的按需代码执行环境110中的对应任务尚未成功完成。
任务生成***170可进一步利用调用生成器174,所述调用生成器174可从进程内高速缓存176中读取数据项,并且针对来自进程内高速缓存176的每个数据项生成对按需代码执行环境110的调用。调用生成器174可进一步与按需代码执行环境110交互以确定对应于数据项的调用的结果,并将该结果记录在结果高速缓存178中。在一些情况下,调用生成器174可被配置来确定针对数据项的对按需代码执行环境110的调用何时失败,并且重新提交所述调用,将该数据项返回到进程内高速缓存176,或者将针对数据项的错误记录在结果高速缓存178中。
虽然进程内高速缓存176和结果高速缓存178在图1中被示出为任务生成***170的元件,但在一些情况下,这些高速缓存可在物理上与任务生成***170不同。例如,在任务生成***170具有将数据写入到数据源160的情况下,进程内高速缓存176和/或结果高速缓存178可在数据源160上实现,并且因此从任务生成***170内的物理包含物中省略。
任务生成***170的各种元件可(例如,根据上面的描述以时间顺序)串行操作,或者可至少部分地并行操作。例如,数据检查器172(或数据检查器172的多个实例)可连续地从数据源160读取数据项,同时将这些数据项入列在进程内高速缓存176中。同时,调用生成器174(或调用生成器176的多个实例)可操作以使来自进程内高速缓存176的数据项出列,并将对应于数据项的任务调用提交到按需代码执行环境110。数据检查器172和调用生成器174可以此方式继续操作直到在数据源160处看不到未读数据项为止,此时用户接口171可向用户计算装置102报告数据源160的处理已完成(例如,连同如存储在结果高速缓存178中的处理结果)。
图2描绘计算***的可实现任务生成***170的总体架构。图2中描绘的任务生成***170的总体架构包括可用来实现本公开的各方面的计算机硬件和软件模块的布置。硬件模块可用物理电子装置来实现,如下文更详细地讨论。任务生成***170可包括比图2所示的元件更多(或更少)的元件。如图所示,任务生成***170包括处理单元202、网络接口204、计算机可读介质驱动器206、输入/输出装置接口208,它们全部都可通过通信总线彼此通信。网络接口204可提供到一个或多个网络或计算***的连接性。因此,处理单元200可通过网络104从其他计算***或服务接收信息和指令。处理单元200还可与存储器210进行来回通信,并且进一步通过输入/输出装置接口208提供用于任选显示器(未示出)的输出信息。输入/输出装置接口208还可接受来自任选输入装置(未示出)的输入。另外地,处理单元200可与一个或多个数据存储库220通信,所述一个或多个数据存储库220可对应于任何持久性的或基本上持久性的数据存储装置,诸如硬盘驱动器(HDD)、固态驱动器(SDD)、网络附属存储(NAS)、磁带驱动器或其任何组合。说明性地,数据存储库220可用来实现进程内高速缓存176和结果高速缓存178。
存储器210可包含计算机程序指令(在一些实施方案中被分组成模块),处理单元202执行所述计算机程序指令以便实现本公开的一个或多个方面。存储器210通常包括RAM、ROM和/或其他持久性、辅助性或非暂时性计算机可读介质。存储器210可存储操作***214,所述操作***214提供计算机程序指令以供任务生成***170的一般管理和操作中的处理单元200使用。存储器210还可包括用于实现本公开的各方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器210包括对应于计算机可执行指令的数据检查器软件186,其在由任务生成***170执行时实现上文关于数据检查器172所描述的功能;以及调用生成器软件218,其在由任务生成***170执行时实现上文关于调用生成器174所描述的功能。虽然数据检查器软件216和调用生成器软件218在图2中被示出为任务生成***170的一部分,但在其他实施方案中,数据检查器172和调用生成器174的全部或一部分可由按需代码执行环境110和/或另一个计算装置的其他组件实现。例如,在本公开的某些实施方案中,与按需代码执行环境110通信的另一个计算装置可包括与被展示为任务生成***170的一部分的模块和组件类似地操作的若干模块或组件。
虽然将图2的计算装置描述为实现任务生成***170,但相同的或类似的计算装置能够另外地或可选地用来实现图1的其他组件,包括按需代码执行环境110的组件。例如,这种计算装置可独立地或与其他组件(例如,数据存储库)结合使用以实现图1的预热池管理器130或工作者管理器140。可修改置于存储器180内的软件或计算机可执行指令,以使得能够执行本文关于预热池管理器130或工作者管理器140所描述的功能。
参考图3,描绘了用于利用一个或多个数据源160内的数据来生成到按需代码执行环境110的对应任务调用的说明***互。图3的交互开始于(1)处,其中用户计算装置102(例如,通过用户接口171)将指令发送到任务生成***170,以基于数据源160内的数据项来生成到按需代码执行环境110的任务调用。如上所述,作为非限制性实例,用户计算装置102可提供有关任务生成***170的操作的一个或多个标准,所述一个或多个标准可包括:从其访问数据项的一个或多个数据源160、用来生成到按需代码执行环境110的对应调用的特定数据项(例如,形成数据项集合)、用于访问数据源160的参数(例如,访问速度、协议、凭证等)、基于数据源160内的数据项进行调用的按需代码执行环境110上的任务、用于对按需代码执行环境110上的任务的执行进行调用的参数(例如,任务调用的频率、用于进行任务调用的机制、凭证等)、用于处理对数据项或处理期间发生的错误的修改的进程以及用于报告处理结果的进程。虽然由用户计算装置102提供的一个或多个标准可标识任何数量的不同数据源106(例如,逻辑上不同的数据集合,诸如不同的数据库、服务、物理服务器等),但将针对来自单个数据源160的数据项的处理描述图3。
此后,在(2)处,任务生成***170可开始(例如,通过数据检查器172)从用户计算装置102指定的数据源160检索相关数据项。虽然可从多个数据源检索数据项,但为了简单起见,将针对单个数据源描述图3的交互。如上所述,当数据源160内的相关数据项的数量太大而不允许针对每个数据项进行到按需代码执行环境110的同时任务调用时,可主要实现任务生成***170的一些益处。因此,任务生成***170可成组或成批地从数据源160检索数据项。每批可包括数据源160内的基于由用户计算装置102提供的一个或多个标准标识的一个或多个数据项(例如,与数据源上对应于用户计算装置102的账户相关联的数据项)。一批内的特定数据项可根据数据源160的能力而变化。例如,在数据源160允许根据数据项的属性进行访问的情况下,任务生成***170可确定指定所有相关数据项的子集的属性,并请求将这些数据项返回到任务生成***170。说明性地,在用户计算装置102已经请求针对在2000年1月1日与2015年1月1日之间创建的所有数据项完成按需代码执行环境110上的任务的情况下,任务生成***170可根据其创建月份从数据源检索数据项(例如,其中每批包含在相关时间段内的给定月份期间创建的数据项)。作为进一步的说明,在用户计算装置102已经请求针对具有特定范围内的标识符的数据项完成按需代码执行环境110上的任务的情况下,任务生成***170可根据其标识符从数据源检索数据,其中每批包括在指定标识符范围内的数据项的子集。在数据源160不允许根据数据项的属性进行访问或者那些属性未知的情况下,任务生成***170可尝试根据数据源160处可用的任何标准来检索成批数据项。例如,任务生成***170可尝试根据由数据源强加的排序(例如,数据项1-100、101-200等)或随机地检索数据项。在一些情况下,任务生成***170可尝试控制数据项的数量,以例如减少在任务生成***170、数据源160处或在网络104上所需的计算资源。在一个实施方案中,可由用户计算装置102指定一批内数据项的预期数量。在另一个实施方案中,一批内数据项的预期数量可由任务生成***170自动确定,使得任务生成***170、数据源160或网络104上所需的计算资源落在阈值极限之下,并且使得错误(例如,由于请求的超时)得以减少或最小化。一批内数据项的预期数量可在任务生成***170的操作期间变化,以将计算资源使用维持在阈值水平之下,同时使错误率最小化。
此后,在(3)处,任务生成***170(例如,通过数据检查器)验证检索到的数据项在任务生成***170处尚未被处理或不在进程内。说明性地,任务生成***170可将每个数据项的标识符与进程内高速缓存176和结果高速缓存178内的一组标识符进行比较,以确定数据项是当前正在任务生成***170处进行处理还是先前已在任务生成***170中处理过。如果数据项尚未处理并且未正在处理,那么在(4)处,任务生成***170可将数据项入列到进程内高速缓存176中以供稍后用于生成到按需代码执行环境110的任务调用。数据项的标识符可全部或部分地从数据源160获得,例如,通过检索分配给数据源160处的数据项的主数据库密钥。另外地或可选地,可由任务生成***170生成数据项的标识符,例如,通过组合数据项的属性或者通过根据散列函数处理关于数据项(或数据项全体)的信息。
此后,在(5)处,任务生成***170(例如,利用调用生成器174)可向按需代码执行环境110提交针对进程内高速缓存176内的每个数据项的任务调用。可至少部分地通过由用户计算装置102提供的一个或多个标准来指定任务调用的参数。在一个实施方案中,用户计算装置102可指定整个任务调用。例如,用户计算装置102可指定要进行的特定HTTP请求,其中HTTP请求的一部分基于用来生成任务调用的数据项而变化。在另一个实施方案中,用户计算装置102可简单地指定基于数据项进行调用的按需代码执行环境110上的特定任务,并进一步指定应当将所述数据项传递给任务以用于处理。在一些实施方案中,响应于数据项调用的特定任务可根据数据项本身而变化。例如,用户计算装置102可指定对于满足第一组标准的数据项,应当调用第一任务,并且对于满足第二组标准的数据项,应当调用第二任务。作为另一实例,自任务生成***170开始从数据源160检索数据项以来,用户计算装置102可基于数据项是否在数据源160处已被修改而改变针对该数据项调用的任务。例如,在将要检索的数据项与先前检索的数据项共享一些属性(例如,数据库密钥),但不共享相同的唯一标识符(例如,通过数据项的散列数据生成)的情况下,用户计算装置102可请求使用数据项来调用按需代码执行环境上的不同任务(诸如处理新数据项的任务),同时还覆写或弃用基于数据项的先前版本调用的先前任务的结果。因此,可根据用户的需要定制基于数据项进行的任务调用的参数。在一些情况下,任务生成***170可修改进程内高速缓存176内的数据项的条目,以指示已经针对数据项进行了到按需代码执行环境110的任务调用,但任务调用尚未完成。这种修改可能是有利的,例如,在任务生成***170利用调用生成器174的多个实例的情况下,从而避免调用生成器174的不同实例向按需代码执行环境110提交冗余任务调用。
在(6)处,任务生成***可从针对数据项进行的到按需代码执行环境110的任务调用获得结果。然后,在(7)处,任务生成***170可根据所述结果进一步处理数据项。在任务调用已成功完成的情况下,任务生成***170可将数据项从进程内高速缓存176中去除,并在结果高速缓存178内指示任务调用的结果(例如,任务调用已成功完成、任务调用的输出、关于在按需代码执行环境110中执行任务的细节等)。在任务调用未成功完成的情况下,任务生成***170可尝试向按需代码执行***110重新提交任务调用(例如,在先前的失败是由按需代码执行环境110中的限制或其他临时条件引起的情况下),或者将针对数据项的任务调用的失败记录在结果高速缓存178内。在高(例如,超过阈值)数量的任务调用未成功完成的情况下,任务生成***170在一些情况下可修改提交任务调用的速率,以便减少或消除不成功的调用。
此后,可重复如以上所描述的交互(2)至(7),直到完成针对数据源160内的所有相关数据项的任务调用为止。在一个实施方案中,数据源160可被配置成使得任务生成***170可准确地确定何时处理了数据源160处的所有相关数据项(例如,包括自交互发起以来修改的数据项),并且因此,交互可在此时结束。在另一个实施方案中,任务生成***170可继续从数据源160检索项,直到在任务生成***170处看不到新数据项(例如,具有新的唯一标识符)为止。在又一实施方案中,任务生成***170可在看不到新数据项之后继续从数据源160检索数据项一段时间(例如,以绝对时间、数据项的数量、批的数量等指定的),以确保在数据源160处不可能存在新数据项。此后,可将处理数据源的结果返回到用户计算装置102。
虽然顺序描述了图3的交互,但交互中的一个或多个可同时发生。例如,交互(2)至(4)可由数据检查器172重复执行,而交互(5)至(7)由调用生成器174同时且重复执行。另外,在一些实施方案中,任务生成***170可利用数据检查器172或调用生成器174中的任一者或两者的多个实例,并且因此,可同时多次执行交互(2)至(7)中的任何交互。因此,以上所描述的交互的任何时间关联应认为是说明性的而非限制本公开。
在一些情况下,可能期望任务生成***170内的不同元件进行交互以控制从数据源160检索数据项的速度、在按需代码执行环境110中调用的任务、或两者。说明性地,在数据检查器172用于以远高于调用生成器174对按需代码执行环境174进行调用的速率的速率从数据源160检索数据项的情况下,进程内高速缓存176中的数据项的数量可能增长超过阈值极限。在此类情况下,调用生成器174可增加生成任务调用的速率,数据检查器172可降低从数据源160检索数据项的速率,或两者,以将进程内高速缓存176内的数据项的数量维持在阈值极限之下。此外,可由用户计算装置102将从数据源160检索的最大速率或对按需代码执行环境110的任务调用的速率指定为有关任务生成***170的操作的一个或多个标准。
虽然图3的交互可涉及数据项本身的传输(例如,从数据源160检索数据项、将数据项入列在进程内高速缓存176中、将数据项提交到按需代码执行环境110等),但本公开的实施方案能够另外地或可选地利用对数据项的引用来代替数据项本身。例如,任务生成***170可改为检索对数据项的引用,以及实现上述功能所需的任何信息(例如,数据项的属性),而不是从数据源160检索数据项的实际内容。此后,任务生成***170可传递对数据项的引用,而不是将数据项本身提交到按需代码执行环境110,使得按需代码执行环境110在此之后可与数据源160交互以检索与数据项有关的相关信息。类似地,虽然在上文将数据项描述为入列或存储在任务生成***170的不同元件(例如,进程内高速缓存176和结果高速缓存178)内,但本公开的实施方案可利用对(例如,如存储在数据源160内或在任务生成***176的通用数据存储库中的)数据项的指针或其他引用来列出如逻辑上包括在这些元件内的数据项,从而减少或消除在各种元件之间实际复制数据项的需要。
如上所述,在一些情况下,可能期望将数据源内的数据项认为是新数据项的“流”和静态(或相对静态)的先已存在的数据项集合,并单独处理此类集合。将参考图4描述用于利用数据源来同时处理这种新数据项的流和静态数据项集合的说明***互。更具体地,说明***互将被描述成用于设立可用来区分(例如,作为数据流立即处理的)“新”数据项与(例如,作为“静态”数据单独处理的)“积压”数据项的分界时间。出于描述图4的目的,将假设用户计算装置先前已经将标准提交到任务生成***170以用于处理数据源160(例如,数据源160的标识符、用于访问数据源160的凭证、按需代码执行环境110上的任务等,通过所述任务处理来自数据源160的数据项),并且因此,将不再关于图4重新描述用于接收此类标准的交互。因此,图4的交互开始于(1)处,其中任务生成***170检索数据源160内的数据项的时间信息。这样的时间信息可包括例如添加数据源160内的每个数据项(或数据项的子集)的时间、或修改每个数据项(或数据项的子集)的时间。一般来讲,检索到的时间信息可包括任务生成***170可用来确定数据源160的估计更新频率的任何信息,然后可利用该信息来对数据源160设立分界时间。因此,尤其是在数据源160保存大量数据项的情况下,任务生成***160可检索仅最近创建或修改的数据项(例如,最近创建或修改的前n个数据项,在最后n分钟、小时、天等中创建或修改的数据项)的子集的时间信息。此后,在(2)处,任务生成***170可处理检索到的时间信息以确定数据源160的估计更新频率。说明性地,可通过使用先前创建或修改的数据项的时间信息来确定估计更新频率,以推断将创建或修改数据项的未来时间。例如,在先前已经在数据源160中以平均每秒一个数据项添加或修改数据项的情况下,任务生成***可将更新频率估计为每秒一个数据项。除了简单地求平均之外,用于使用一系列数据来推断未来值的许多统计技术在本领域中是已知的,并且所述统计技术可应用来根据先前存储的数据项的时间信息确定更新频率。
此后,在(3)处,任务生成***对数据源160设立分界时间。出于关于图4进行描述的目的,任务生成***170可利用检索到的时间信息和确定的更新频率两者来设立分界时间,使得预期任务到按需代码执行环境110的提交在阈值时间段内“赶上”数据源160中的数据项的创建或修改或者与其同步。例如,对于任何给定的分界时间,任务生成***170可确定在分界时间之后数据源160中有多少先已存在的数据项被添加或修改。任务生成***170可进一步基于预期的按需代码执行环境处的任务处理速率来确定何时将预期完成那些分界时间后的数据项的处理。类似地,任务生成***170可确定预期有多少新数据项在处理那些分界时间后的数据项期间被添加到数据源160、预期何时完成哪些新数据项的处理等,直到任务生成***170确定可立即处理添加到数据源160中的新数据项的预期时间(从而“赶上”数据源160处的新修改或添加或者使任务生成***170与数据源160处的新修改或添加同步)。然后,任务生成***170可设立分界时间,使得该预期同步时间落入阈值(例如,五分钟、一小时等)内。虽然参考图3描述了基于预期同步时间来设立分界时间,但任务生成***170的其他实施方案可以其他方式设立分界时间。例如,任务生成***170可将分界时间设立为从用户计算装置102接收指令以处理数据源160的时间。
此后,在(4’)和(4”)处,任务生成***170可从数据源170检索“新”数据项(例如,在分界时间之时或之后创建或修改的数据项)和“积压”数据项(例如,在分界时间之前创建或修改的数据项)。类似地,在(5’)和(5”)处,任务生成***170可通过对按需代码执行环境110进行对应于单独新数据项和积压数据项的调用来开始同时处理新数据项和积压数据项。因此,分界时间的设立可使得任务生成***170能够将给定数据源160用作两个不同的数据集。
虽然图4中未示出,但根据本文所描述的各种实施方案,对“新”数据项和“积压”数据项中的任一者或两者的处理可发生。例如,可在调用按需代码执行环境110之前将“新”数据项或“积压”数据项入列在进程内高速缓存176内,由任务生成***170对这些数据项进行验证所述项未经处理,并在完成调用之后将其入列到结果高速缓存178中(如以上关于图3所描述)。另外,任务生成***170可以不同的方式检索或处理“新”数据项和“积压”数据项。例如,可基本上立即检索并处理“新”数据项,使得在检测到“新”数据项之后实际上尽可能快地发出到按需代码执行环境110的调用。相反地,可以有限的速率检索和处理“积压”数据项,以减少检索和处理那些数据项所需的计算资源。在一个实施方案中,检索或处理“积压”数据项的速率可至少部分地基于检索和处理“新”数据项的估计速率或实际速率(例如,呈逆相关)。此外,“新”数据项可按时间顺序(例如,按照在数据源160上创建或修改它们的顺序)检索和处理,而“积压”数据项可根据其他排序(诸如以逆时间顺序)处理。因此,通过根据分界点划分数据源160中的数据项,可逻辑地创建不同的数据项集合,并且可独立地处理每个集合。
参考图5A和图5B,将描述示出了用于利用数据源内的数据来生成对按需代码执行环境的任务调用的说明性例程500的流程图。例程500可例如由任务生成***170实现。例程500开始于框502处,其中任务生成***170获得用于处理数据源的一个或多个标准,以便基于数据源内的相关数据项生成对按需代码执行环境的任务调用。作为非限制性实例,所述标准可由用户利用用户计算装置来指定,并且可包括:从其访问数据项的一个或多个数据源160、用来生成到按需代码执行环境110的对应调用的特定数据项(例如,形成数据项集合)、用于访问数据源160的参数(例如,访问速度、协议、凭证等)、基于数据源160内的数据项进行调用的按需代码执行环境110上的任务、用于对按需代码执行环境110上的任务的执行进行调用的参数(例如,任务调用的频率、用于进行任务调用的机制、凭证等)、用于处理对数据项或处理期间发生的错误的修改的进程以及用于报告处理结果的进程。
此后,在框506处,任务生成***170开始根据先前获得的标准从数据源检索数据项。出于描述的目的,将假设在“成批的”一个多个数据项中检索数据项。然而,也可连续检索数据项(可将其描述为以恒定速率检索“成批的”单个数据项)。如上所讨论,在数据源160允许根据特定属性(诸如数据项的唯一标识符或数据项的创建时间)检索数据项的情况下,任务生成***170可向数据源160指定这些属性,使得以优选速率检索数据项。优选速率可由用户指定(例如,作为所获得的标准的一部分),或者可在任务生成***170处自动确定(例如,基于与数据源160通信的错误率、基于任务生成***170处可用的计算资源、基于进程内数据高速缓存176中所包括的数据项的数量等)。在数据源160不允许根据特定属性检索数据项的情况下,任务生成***170可请求在每批中提供n个另外数据项,其中n由优选速率指示。
在框508处,任务生成***170将来自检索到的集合内的未处理数据项(例如,先前未处理或当前正在处理的数据项)入列在进程内数据高速缓存172中。将关于图5A的子例程510对单独未处理数据项的入列加以更详细的描述。子例程510开始于框512处,其中获得512数据项的标识符。在一个实施方案中,标识符可从数据源160获得,例如,通过检索与由数据源160使用的数据项相对应的密钥。另外地或可选地,可通过以下方式来获得标识符:组合或联合数据项的属性以生成唯一标识符,或者将数据项(例如,包括数据项的属性)通过散列函数以生成唯一标识符。此后,在框514处,任务生成***170确定数据项的标识符是否当前正在被处理或者先前已经在任务生成***170处处理过。在一个实施方案中,任务生成***170(例如,通过数据检查器172)可将数据项的标识符与进程内数据高速缓存174内的标识符列表以及结果高速缓存176中的标识符列表进行比较,以确定标识符是否存在于任一高速缓存中(并且因此,是否先前已经处理过或在进程内)。如果框514处的估计结果为肯定的,那么子例程510可在框518处结束。如果框514处的估计结果为否定的,那么子例程510在框516处继续,其中将数据项置于队列中以用于生成对按需代码执行环境110的对应调用。例如,可在进程内数据高速缓存174内维持队列。然后,子例程510在框518处结束。
在框508处将未处理的数据项入列之后,例程500在框520处继续,其中任务生成***170确定数据源160处的所有相关数据项是否已经由任务生成***170检索。在一些情况下,数据源160可被配置成使得任务生成***170可准确地确定何时处理了数据源160处的所有相关数据项(例如,包括自发起交互以来所修改的数据项),并且因此,框520的实现方式可包括向数据源查询是否还有任何相关数据项尚未检索到(和/或自检索以来是否已经修改了先前检索到的数据项)。在另一个实施方案中,任务生成***170可继续从数据源160检索项,直到在任务生成***170处看不到新数据项(例如,具有新的唯一标识符)为止。因此,框520的实现方式可包括确定在框506的先前实现方式处检索到的任何数据项是否包括未处理的数据项。在又一实施方案中,任务生成***170可在看不到新数据项之后继续从数据源160检索数据项一段时间(例如,以绝对时间、数据项的数量、批的数量等指定的),以确保在数据源160处不可能存在新数据项。因此,框520的实现方式可包括确定至少已经过去了一段时间而没有检索到任何新数据项。在框520处的估计结果为否定的情况下,例程500返回到框506并如上所述地继续进行。在框520处的估计结果为肯定的情况下,例程500进行到通过连接器‘A’到框522至框542,如图5B所示。
如图5B所示,例程500继续通过连接器‘A’到框522,其中任务生成***170从进程内队列检索一批的一个或多个数据项。说明性地,这种检索可包括确定数据项的一个或多个标识符在进程内队列中列出,并修改此类数据项的列表以指示对按需代码执行环境110的任务调用是针对数据项的“飞行中(in-flight)”。然后,例程500继续到框225,其中在任务生成***170处针对从进程内队列检索到的每个数据项生成任务调用。针对数据项生成任务调用的进程将在子例程526中加以更详细的描述。子例程526开始于框528处,其中将对应于数据项的任务调用提交到按需代码执行环境110。说明性地,调用可包括根据按需代码执行环境110的参数格式化的API调用或HTTP分组,以指定特定任务(例如,对应于请求在按需代码执行环境110处执行的一组用户定义代码),以及传递给任务的参数。在一个实施方案中,参数可包括数据项本身或对(例如,数据源160处的)数据项的引用。在另一个实施方案中,参数可包括从数据项导出的数据(例如,数据项的一部分、数据项的属性等)。因为任务的执行可对应于各种用户指定代码中的任何一个的执行,所以框528的实现方式可使得几乎任何计算机实现的处理能够针对数据项发生。例如,在数据项是照片的情况下,该照片可被压缩或重新格式化以在特定平台上使用(例如,作为“缩略图”图像)。作为另一实例,在数据项是新闻帖子的情况下,可针对出现的特定单词或短语分析所述帖子,并且可将这种分析的结果提供给第三方服务。本领域的技术人员可设想许多另外的实例。在提交任务调用之后,子例程526进行到框530,其中任务生成***170确定是否应当重试任务调用。说明性地,在任务调用成功完成,或者完成时针对任务调用发生本质上不是时间的错误的情况下,框530可肯定地估计。例如,在任务调用导致任务的完成不具有或具有与数据项的内容有关的错误的情况下,框530可肯定地估计。相反地,当任务调用导致“超时”错误、或指示任务调用正以过高的速率被提交到按需代码执行环境110的错误时,框530可否定地估计。在肯定地估计框530的情况下,子例程526进行到框534,其中任务生成***170将用来生成任务调用的数据项标记为用于通过重试任务调用来重新处理的候选者。说明性地,框534的实现方式可包括去除进程内队列内的数据项的“飞行中”指示符,使得框522的未来实现方式可以从进程内队列中检索数据项。框534的实现方式还可包括将其他指示符附加到进程内队列内的数据项,诸如“延迟”指示符,其指示仅在适当的延迟之后针对数据项生成后续任务调用(例如,由任务生成***170的管理员指定、在由用户指定的标准内等)。在否定地估计框530的情况下,子例程526进行到框532,其中任务生成***170记录调用的结果。说明性地,任务生成***170可记录任务调用的返回指示符(例如,调用导致任务的成功执行),以及有关任务调用的执行的任何数据(例如,任务的执行结果)。在一个实施方案中,任务生成***170可通过将用来生成任务调用的数据项的标识符记录在结果高速缓存178内来指示任务调用成功执行。在框532或框534的实现方式之后,子例程526在框536处结束。
返回到例程500,在框524的实现方式(例如,通过子例程526的实现方式)之后,例程500在框538处继续,其中任务生成***170确定在进程内队列中是否存在任何另外数据项。如果存在,那么例程500返回到框522,并且重复直到所有数据项都已用来生成对按需代码执行环境110的任务调用为止(例如,并且已导致任务的成功完成或者发生了通过重试任务调用不可能缓解的错误)。如果在进程内队列中不存在另外数据项,那么例程500进行到框540,其中例程500的结果在用户计算装置102处返回给用户。说明性地,此类结果可以是以下的指示:数据源内的数据项已被处理、关于单独数据项的特定结果(例如,针对数据项生成的任务调用的结果、关于数据项引起的错误等)、或与数据项的总体处理有关的信息(例如,所花费的总时间、对按需代码执行环境110的请求的数量等)。然后,例程500在框542处结束。
虽然上文顺序地描述了例程500,但在一些情况下,例程500可由单独计算装置或多个计算装置至少部分地并行地实现。例如,关于框506至框520所示的循环可与关于框522至框538所示的循环同时重复,使得在任务生成***170处生成针对先前检索到的数据项的任务调用时,继续从数据源检索数据项。另外,子例程510和526的多个实例可由相同或不同的计算装置同时实现,使得可将多个数据项置于进程内队列中(相对于子例程510),并且可以同时地或同时期地从该队列内的数据项生成多个任务调用(相对于子例程526)。此外,可基于任务生成***170、按需代码执行环境110或数据源160的要求来修改例程500。例如,例程500可被修改成包括另外的框,所述框在任务生成***170、按需代码执行环境110和数据源160之间提供另外信息交换,诸如关于数据传输速率的协商。在一些实施方案中,例程500的一个或多个部分可由其他***或装置实施,包括按需代码执行环境110内的***或装置。
参考图6,将描述示出了用于利用数据源同时处理根据分界点定义的新数据项和积压数据项的说明性例程600的流程图。例程600可例如由任务生成***170实现。出于描述图6的目的,将假设用户计算装置先前已经将标准提交到任务生成***170以用于处理数据源160(例如,数据源160的标识符、用于访问数据源160的凭证、按需代码执行环境110上的任务等,通过所述任务处理来自数据源160的数据项),并且因此,将不再关于图6重新描述用于接收此类标准。因此,图6的例程600开始于框602处,其中任务生成***170检索数据源160内的一个或多个数据项的时间信息。一般来讲,检索到的时间信息可包括任务生成***170可用来确定数据源160的估计更新频率的任何信息,然后可利用该信息来对数据源160设立分界时间。因此,任务生成***160可检索最近创建或修改的前n个数据项、在最后n分钟、小时、天等中创建或修改的数据项的时间信息。此后,在框604处,任务生成***170处理检索到的时间信息以确定数据源160的估计更新频率。说明性地,可通过使用先前创建或修改的数据项的时间信息来确定估计更新频率,以推断将创建或修改数据项的未来时间。例如,在先前已经在数据源160中以平均每秒一个数据项添加或修改数据项的情况下,任务生成***可将更新频率估计为每秒一个数据项。除了简单地求平均之外,用于使用一系列数据来推断未来值的许多统计技术在本领域中是已知的,并且所述统计技术可应用来根据先前存储的数据项的时间信息确定更新频率。
在框606处,任务生成***170对数据源160设立分界时间。说明性地,可将分界时间设定成使得预期任务到按需代码执行环境110的提交在阈值时间段内“赶上”数据源160中的数据项的创建或修改或者与其同步。例如,对于任何给定的分界时间,任务生成***170可确定在分界时间之后数据源160中有多少先已存在的数据项被添加或修改。任务生成***170可进一步基于预期的按需代码执行环境处的任务处理速率来确定何时将预期完成那些分界时间后的数据项的处理。类似地,任务生成***170可确定预期有多少新数据项在处理那些分界时间后的数据项期间被添加到数据源160、预期何时完成哪些新数据项的处理等,直到任务生成***170确定可立即处理添加到数据源160中的新数据项的预期时间(从而“赶上”数据源160处的新修改或添加或者使任务生成***170与数据源160处的新修改或添加同步)。然后,任务生成***170可设立分界时间,使得该预期同步时间落入阈值(例如,五分钟、一小时等)内。
基于分界时间的设立,任务生成***170此后可开始同时处理“新”数据项(例如,在分界时间之时或之后创建或修改的数据项)和“积压”数据项(例如,在分界时间之前创建或修改的数据项)。因此,在框608处,任务生成***170可开始将“新”数据项处理为动态数据流。例如,任务生成***170可增量地处理每个“新”数据项,直到不再存在“新”数据项为止。此后,任务生成***170可周期性地监视数据源160以寻找任何“新”数据项,并立即或基本上立即处理此类数据项,从而在数据项被添加到数据源160时提供对数据项的实时(或基本上实时)处理。同时地,在框610处,任务生成***170可开始处理“积压”数据项。说明性地,积压数据项的处理可按照关于图5A和图5B描述的例程500发生。在一些情况下,积压数据项的处理可按照逆时间顺序发生(与处理新数据项的时间顺序相反)。另外,在框612处,任务生成***612可基于新数据项的“流”的活动来修改如何处理积压数据项。例如,任务生成***612可基于处理新数据项的速率来改变处理积压数据项的速率。说明性地,积压数据项的处理速率可被修改成使得处理数据项(例如,新的和积压的两者)的总速率满足阈值。除了基于处理新数据项来修改积压处理的速率之外或可选地,在一些情况下,任务生成***170可改变先前设立的分界时间以考虑新数据项流的变化。例如,在以高于预期的速率将数据项添加到数据源的情况下,分界时间可在时间上向前移动,使得“赶上”时间保持在阈值处或接近阈值。相反地,在以低于预期的速率将数据项添加到数据源的情况下,分界时间可向后移动,使得更多的数据项被包括在“新”数据流中。
此后,例程600在框614处结束。因此,通过例程600的实现方式,任务生成***170可被配置来快速“赶上”以处理新数据项,并且继续基本上立即处理新数据项,同时确保最终处理积压数据项。
虽然在上文将例程600描述为单个例程600,但例程600也可作为子例程或相关例程的集合来执行。例如,框608可实现为第一独立例程,而框610和框612被实现为第二独立例程。虽然将例程600描述为由任务生成***170来实现,但在一些实施方案中,例程600的一个或多个部分可由其他***或装置实施,包括按需代码执行环境110内的***或装置。
如上所述,在一些情况下(诸如在第一数据项的处理取决于第二数据项的先前处理的情况下、或在多个数据项的处理共享公共依赖关系(例如,解密密钥)的情况下),可能期望控制在按需代码执行环境处处理数据项所按照的排序。图7包括描绘用于以基于数据项的依赖关系信息控制的排序将来自数据源的数据项提交到按需代码执行环境的一个说明性例程700的流程图。例程600可例如由任务生成***170实现。
图7的例程700开始于框702处,其中任务生成***170获取数据源处理和依赖关系标准。如以上进一步描述,数据源处理标准可包括一个或多个信息项,诸如从其访问数据项的数据源160的标识、用于访问数据源的参数、要调用以用于处理数据项的按需代码执行环境上的任务等。依赖关系标准通常可包括在处理来自数据源的数据项时标识依赖关系的任何信息。在一个实施方案中,依赖关系标准可标识数据存储库内单独数据项之间的依赖关系,使得用于处理第一数据项的任务取决于或成功执行用于处理第二数据项的任务。在另一个实施方案中,依赖关系信息可指示多个数据项对一条共同信息的共享依赖关系,使得期望(例如,出于效率目的)将多个数据项一起处理。在又一实施方案中,依赖关系信息可包括用于处理数据项的任务的排序或分组的其他标准,诸如要同时处理的期望数量的数据项、提交用于处理的数据项的期望时间等。例如,可通过用户接口、编程接口、API、CLI、GUI等从用户或由用户标识的其他源获得数据源处理和依赖关系标准。
在框704处,任务生成***170从数据源检索未处理数据项并将其入列,如在图5A中(例如,在框506至框520处)所详细描述。虽然为了便于描述,将数据项的检索和入列描述为图7中的不同进程,但框704的实现方式可迭代地发生,使得在例程700的实现方式期间持续检索数据项并将其入列。
在框706处,任务生成***170根据获得的依赖关系信息处理入列的数据项,以在框708处确定用于是否满足将任务提交到按需代码执行环境的标准。在一个实施方案中,提交标准可确定哪些入列的数据项可用于提交到按需代码执行环境以进行处理。例如,在第一数据项的处理取决于第二数据项的处理的情况下,任务生成***170可利用第一数据项的依赖关系信息来设立用于第一数据项的提交标准,使得可仅在成功处理第二数据项之后将第一数据项提交到按需代码执行环境以进行处理。在一些情况下,提交标准还可要求至少阈值数量的数据项可用于提交到按需代码执行环境以进行处理。例如,在依赖关系信息指示数据项集合与共享依赖关系相关联的情况下,任务生成***170可设立提交标准,使得仅在可提交阈值数量的数据项时或者在没有更多的数据项可用(例如,基于从数据源的检索、其他任务的执行等)时,才将数据项集合内的数据项提交到按需代码执行环境以进行处理。例如,可基于可由任务同时处理的数据项的数量,或者通过实现多个任务的通用计算装置来设置这样的阈值数量。在一些情况下,框706的实现方式可包括任务生成***基于依赖关系数据生成对高速缓存内的数据项的排序,使得数据项在其满足提交标准时根据排序进行提交。在框706的后续实现方式中,任务生成***可对初始排序进行重新排序以考虑已知数据项中的任何变化(例如,成功处理一个或多个数据项或将新数据项添加到队列中,这导致这些数据项或其他数据项满足提交标准)。
在不满足提交标准的情况下,例程700返回到框704,其中从数据源检索另外数据项并将其入列。可选地,在满足提交标准的情况下,例程700继续到框710,其中任务生成***710向按需代码执行环境提交与可用于提交的数据项(如在框708中所确定的)相对应的一个或多个任务。调用可包括根据按需代码执行环境的参数格式化的API调用或HTTP分组,以指定特定任务(例如,对应于请求在按需代码执行环境处执行的一组用户定义代码),以及传递给任务的参数,所述参数可包括数据项本身或对(例如,数据源处的)数据项的引用。在一些情况下,在按需代码执行环境上调用的特定任务可基于数据项或数据项的参数而改变(例如,使得通过第一任务处理第一类型的数据项,并且根据第二任务处理第二类型的数据项)。此外,在一些情况下,特定任务可基于任务生成***已知的一组数据项而改变,包括未处理数据项和经处理数据项。例如,用户可向任务生成***提供任务标准,其可使任务生成***能够基于先前处理的数据项来改变任务(例如,使得第一任务用于处理前n个数据项,第二任务用于处理其次的n个数据项等),或者基于入列的数据项来改变任务(例如,使得所使用的任务基于队列中的数据项的数量、这些数据项的属性等而改变)。更进一步地,在一些情况下,特定任务可基于与任何给定数据项相关联的依赖关系而改变。例如,在处理一个数据项不取决于处理任何其他数据项的情况下,可使用第一任务来处理数据项。在其他数据项不取决于处理一个数据项的情况下,可使用第二任务来处理数据项。在处理一个数据项取决于处理其他数据项的情况下,以及在其他数据项取决于处理所述一个数据项的情况下,可使用第三任务来处理数据项等。作为另一实例,可将依赖关系信息映射为图表,并且可使用图表的形状来确定在处理单独数据项时调用的任务(例如,在图表内形成节点)。说明性地,可在宽的依赖关系图(例如,比其高度更宽)内使用第一任务来处理数据项,而在高的依赖关系图(例如,比其宽度更高)内使用第二任务来处理数据项。可使用另外的或可选的因素来根据任务生成***的需要来修改按需代码执行环境上的任务。
在框712处,任务生成***712确定是否已经通过向按需代码执行环境提交任务来处理来自数据源的所有数据项。如果数据项尚未处理,那么例程700返回到框704,其中从数据源检索另外的未处理数据项(如果有的话),并将其入列在任务生成***712中以用于处理。然后,例程700如上所描述地继续,直到所有数据项都已处理过为止(例如,对于每个数据项,任务已完成或在一些情况下未能完成)。然后,那么例程700进行到框714,其中例程700的结果在用户计算装置102处返回给用户。例如,此类结果可指示:数据源内的数据项已被处理、关于单独数据项的特定结果(例如,针对数据项生成的任务调用的结果、关于数据项引起的错误等)、或与数据项的总体处理有关的信息(例如,所花费的总时间、对按需代码执行环境110的请求的数量等)。然后,例程700在框716处结束。
虽然在上文将例程600描述为单个例程700,但例程700也可作为子例程或相关例程的集合来执行。例如,框704可实现为第一独立例程,而框706和框714被实现为第二独立例程。虽然将例程700描述为由任务生成***170来实现,但在一些实施方案中,例程700的一个或多个部分可由其他***或装置实施,包括按需代码执行环境110内的***或装置。
以上所描述的方法和进程中的所有可在由一个或多个通用计算机或处理器执行的软件代码模块中具体化并且通过所述软件代码模块来完全自动化。所述代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。所述方法中的一些或所有能够可选地在专用计算机硬件中具体化。
除非另外特别说明,否则诸如“可”、“可以”、“可能”或“能够”等的条件性语言在上下文中通常应理解为用来表示:尽管其他实施方案不包括某些特征、元件和/或步骤,但某些实施方案包括某些特征、元件和/或步骤。因此,此类条件性语言通常并不意图暗示特征、元件和/或步骤是一个或多个实施方案以任何方式所要求的,或一个或多个实施方案一定包括用于在有或没有用户输入或提示的情况下决定这些特征、元件和/或步骤被包括在任何特定实施方案中或将要在任何特定实施方案中进行的逻辑。
除非另外特别说明,否则诸如短语“X、Y或Z中的至少一个”的析取语言在上下文中通常应理解为用来表示项、术语等可以是X、Y或Z或它们的任何组合(例如,X、Y和/或Z)。因此,这种析取语言通常并不意图且不应暗示某些实施方案要求X中的至少一个、Y中的至少一个或Z中的至少一个均存在。
除非另外明确地说明,否则诸如“一个”(“a”或“an”)的冠词通常应被解释为包括一个或多个所描述项。因此,诸如“被配置来……的装置”的短语意图包括一个或多个所列举的装置。此类一个或多个所列举装置也可被共同地配置来执行所陈述的列举项。例如,“被配置来执行列举项A、B和C的处理器”可包括被配置来执行列举项A的第一处理器,所述第一处理器与被配置来与执行列举项B和C的第二处理器相结合地工作。
本文所描述的流程图和/或附图中所描绘的任何例程说明、元件或方框应理解成潜在地代表包括用于实现例程中的特定逻辑功能或元素的一个或多个可执行指令的代码模块、代码片段或代码部分。可选的实现方式被包括在本文所描述实施方案的范围内,其中如与本领域中的技术人员所理解的那样,元件或功能可删除、不按照所示出或所讨论的顺序执行,包括基本上同时执行或者逆序执行,具体取决于所涉及的功能。
可鉴于以下条款更好地理解上述内容:
条款1.一种用于通过按需代码执行环境处理数据源内的数据项的***,所述***包括:
非暂时性数据存储库,所述非暂时性数据存储库被配置来实现积压高速缓存,所述积压高速缓存指示来自所述数据源的已被标识用于在所述按需代码执行环境处作为积压项进行处理的数据项;
与所述非暂时性数据存储库通信的一个或多个处理器,所述一个或多个处理器被配置来:
检索所述数据源内的数据项集合、指示在所述数据源内创建或修改来自所述数据项集合的单独数据项的时间点的时间数据;
根据所述时间数据确定所述数据源的估计修改频率,所述估计修改频率指示创建或修改所述数据源内的数据项的估计频率;
利用所述数据源的所述估计修改频率以及所述时间数据来对所述数据源设立分界时间,其中在所述分界时间之前在所述数据源中创建或修改的数据项被认为是积压数据项;
将来自所述数据存储库的第一数据项集合入列在所述积压高速缓存内,所述第一数据项集合是在所述分界时间之前在所述数据源中创建或修改的;
迭代地向按需代码执行环境提交数据流调用,所述数据流调用请求所述按需代码执行环境通过执行任务来处理来自所述数据源的在所述分界时间之后创建或修改的数据项;
当数据流调用被提交到所述按需代码执行环境时,向所述按需代码执行环境提交积压调用,所述积压调用请求所述按需代码执行环境通过执行所述任务来处理来自所述积压高速缓存的数据项。
条款2.如条款1所述的***,其中所述一个或多个处理器进一步被配置来:根据将数据流调用提交到所述按需代码执行环境的速率或由所述按需代码执行环境完成对应于所述数据流调用的任务的速率中的至少一者,改变将积压调用提交到所述按需代码执行环境的速率。
条款3.如条款2所述的***,其中所述一个或多个处理器进一步被配置来:至少根据在所述按需代码执行环境处发生调用的速率,改变将积压调用提交到所述按需代码执行环境的速率。
条款4.如条款1所述的***,其还包括被配置来实现用户接口子***的一个或多个处理器,所述用户接口子***从用户计算装置获得标识所述数据源以及所述按需代码执行环境上的用于处理来自所述数据源的数据项的所述任务的信息。
条款5.如条款1所述的***,其中所述数据源对应于多个不同的数据源。
条款6.如条款1所述的***,其中所述任务对应于多个任务,并且其中从所述用户计算装置获得的所述信息还包括用于确定来自所述多个任务中的要调用以用于处理来自所述多个数据项的给定数据项的单独任务的信息。
条款7.如条款1所述的***,其中所述一个或多个处理器进一步被配置来:至少部分地基于所述数据项集合的标识符来确定所述***先前尚未处理所述第一数据项集合。
条款8.一种用于通过按需代码执行环境处理数据源内的数据项的计算机实现的方法,所述计算机实现的方法包括:
检索所述数据源内的数据项集合、指示在所述数据源内创建或修改来自所述数据项集合的单独数据项的时间点的时间数据;
利用所述时间数据来对所述数据源设立分界时间,其中在所述分界时间之前在所述数据源中创建或修改的数据项被认为是积压数据项;
将来自所述数据存储库的第一数据项集合入列在积压高速缓存内,所述第一数据项集合是在所述分界时间之前在所述数据源中创建或修改的;
迭代地向按需代码执行环境提交数据流调用,所述数据流调用请求所述按需代码执行环境通过执行任务来处理来自所述数据源的在所述分界时间之后创建或修改的数据项;
当数据流调用被提交到所述按需代码执行环境时,向所述按需代码执行环境提交积压调用,所述积压调用请求所述按需代码执行环境通过执行所述任务来处理来自所述积压高速缓存的数据项。
条款9.如条款8所述的计算机实现的方法,其还包括:根据将数据流调用提交到所述按需代码执行环境的速率或由所述按需代码执行环境完成对应于所述数据流调用的任务的速率中的至少一者,改变将积压调用提交到所述按需代码执行环境的速率。
条款10.如条款8所述的计算机实现的方法,其中利用所述时间数据来对所述数据源设立分界时间包括:
根据所述时间数据确定所述数据源的估计修改频率,所述估计修改频率指示创建或修改所述数据源内的数据项的估计频率;
利用所述时间数据和所述估计修改频率来确定在某个时间点的所述分界时间,使得预期所述数据源内在所述分界之后创建或修改的数据项在阈值时间内被处理。
条款11.如条款8所述的计算机实现的方法,其还包括:从用户计算装置获得标识所述数据源和所述任务的信息。
条款12.如条款8所述的计算机实现的方法,其中从所述用户计算装置获得的所述信息还包括提交至少一个数据流调用或积压调用的最大速率。
条款13.如条款8所述的计算机实现的方法,其还包括:至少部分地基于从所述按需代码执行环境接收的错误来确定数据流调用速率。
条款14.如条款8所述的计算机实现的方法,其还包括:至少部分地基于所述第一数据项集合的标识符来确定先前尚未处理所述数据项集合。
条款15.如条款14所述的计算机实现的方法,其中所述第一数据项集合的所述标识符是检索自所述数据源。
条款16.一种非暂时性计算机可读介质,其包括用于通过按需代码执行环境处理数据源内的数据项的计算机可执行指令,其中当由计算***执行时,所述计算机可执行指令致使所述计算***:
基于指示在所述数据源内创建或修改来自所述数据项的单独数据项的时间点的时间数据,对所述数据源设立分界时间,其中在所述分界时间之前在所述数据源中创建或修改的数据项被认为是积压数据项;
将来自所述数据存储库的第一数据项集合入列在积压高速缓存内,所述第一数据项集合是在所述分界时间之前在所述数据源中创建或修改的;
迭代地向按需代码执行环境提交数据流调用,所述数据流调用请求所述按需代码执行环境通过执行任务来处理来自所述数据源的在所述分界时间之后创建或修改的数据项;
在将数据流调用提交到所述按需代码执行环境的同时,向所述按需代码执行环境提交积压调用,所述积压调用请求所述按需代码执行环境通过执行所述任务来处理来自所述积压高速缓存的数据项。
条款17.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:根据将数据流调用提交到所述按需代码执行环境的速率或由所述按需代码执行环境完成对应于所述数据流调用的任务的速率中的至少一者,改变将积压调用提交到所述按需代码执行环境的速率。
条款18.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令致使所述计算***:至少部分地通过以下方式对所述数据源设立所述分界时间:
根据所述时间数据确定所述数据源的估计修改频率,所述估计修改频率指示创建或修改所述数据源内的数据项的估计频率;
利用所述时间数据和所述估计修改频率来确定在某个时间点的所述分界时间,使得预期所述数据源内在所述分界之后创建或修改的数据项在阈值时间内被处理。
条款19.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:从用户计算装置获得标识所述数据源和所述任务的信息。
条款20.如条款16所述的非暂时性计算机可读介质,其中从所述用户计算装置获得的所述信息还包括提交至少一个数据流调用或积压调用的最大速率。
条款21.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:至少部分地基于从所述按需代码执行环境接收的错误来确定数据流调用速率。
条款22.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:对所述数据源设立第二分界时间,其中仅当在所述第二分界时间之时或之后进行创建或修改时才将数据项认为是积压数据项,并且其中在所述第二分界时间之前创建或修改的数据项被认为是存档项。
条款23.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:对所述数据源设立第二分界时间,其中仅当在所述第二分界时间之时或之后进行创建或修改时才将数据项认为是积压数据项,并且其中在所述第二分界时间之前创建或修改的数据项被认为是存档项。
条款24.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:至少部分地基于以下中的至少一者来修改所述分界时间:将数据流调用提交到所述按需代码执行环境的速率或由所述按需代码执行环境完成对应于所述数据流调用的任务的速率。
以及以下附加条款:
条款1.一种用于通过按需代码执行环境处理数据源内的多个数据项的***,所述***包括:
非暂时性数据存储库,所述非暂时性数据存储库被配置来实现:
进程内数据高速缓存,所述进程内数据高速缓存指示来自所述多个数据项的已由所述***标识但尚未在所述按需代码执行环境处处理的数据项;以及
结果数据高速缓存,所述结果数据高速缓存指示来自所述多个数据项的已在所述按需代码执行环境处处理的数据项;
被配置来实现用户接口子***的一个或多个处理器,所述用户接口子***从用户计算装置获得标识所述数据源以及所述按需代码执行环境上的用于处理所述多个数据项的任务的信息;
被配置来实现数据检索子***的一个或多个处理器,所述数据检索子***:
从所述数据源检索来自所述多个数据项的第一数据项集合;并且
针对所述数据项集合中的数据项:
生成所述数据项的标识符;
根据所述标识符确定所述数据项未被标识在所述进程内数据高速缓存或所述结果数据高速缓存内;并且
将所述数据项入列在所述进程内数据高速缓存中;
被配置来实现调用生成子***的一个或多个处理器,所述调用生成子***:
从所述进程内数据高速缓存标识一个或多个数据项;
向所述按需代码执行环境提交用于执行处理所述一个或多个数据项的所述任务的调用;
确定所述任务已成功处理所述一个或多个数据项;并且
将所述一个或多个数据项置于所述结果数据高速缓存中;
其中当所述多个数据项已在所述按需代码执行环境处被处理时,所述用户接口子***进一步向所述用户计算装置发送通知。
条款2.如条款1所述的***,其中实现所述用户接口***的所述一个或多个处理器、实现所述数据检索子***的所述一个或多个处理器、以及实现所述调用生成子***的所述一个或多个处理器是相同的一个或多个处理器。
条款3.如条款1所述的***,其中所述数据源对应于多个不同的数据源。
条款4.如条款1所述的***,其中所述任务对应于多个任务,并且其中从所述用户计算装置获得的所述信息还包括用于确定来自所述多个任务中的要调用以用于处理来自所述多个数据项的给定数据项的单独任务的信息。
条款5.如条款1所述的***,其中所述数据检索子***被配置来通过以下方式中的至少一者来生成所述数据项的所述标识符:标识所述数据源内的所述数据项的密钥、联合所述数据项的一个或多个属性、或根据散列函数处理所述数据项的至少一部分。
条款6.如条款1所述的***,其中实现所述调用生成子***的所述一个或多个处理器通过列出指向所述结果数据高速缓存内的所述一个或多个数据项的指针来将所述一个或多个数据项置于所述结果数据高速缓存中。
条款7.一种计算机实现的方法,其包括:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
迭代地从所述数据源检索来自所述多个数据项的数据项;
将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
条款8.如条款7所述的计算机实现的方法,其中将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内包括:使所述入列数据项的标识符与所述数据高速缓存相关联。
条款9.如条款7所述的计算机实现的方法,其还包括:生成所述检索到的数据项的标识符。
条款10.如条款9所述的计算机实现的方法,其还包括:至少部分地通过将所述检索到的数据项的标识符与当前与所述数据高速缓存相关联的标识符进行比较来标识来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项。
条款11.如条款7所述的计算机实现的方法,其还包括:从用户计算装置获得标识所述数据源和所述任务的信息。
条款12.如条款10所述的计算机实现的方法,其中从所述用户计算装置获得的所述信息还包括从所述数据源检索数据项或向所述按需代码执行环境提交调用中的至少一者的最大速率。
条款13.如条款7所述的计算机实现的方法,其中迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用、并且记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果,与迭代地从所述数据源检索来自所述多个数据项的数据项、并且将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内,至少部分地同时发生。
条款14.如条款7所述的计算机实现的方法,其还包括:至少部分地基于从所述按需代码执行环境接收到的错误来确定针对所述按需代码执行环境的调用提交速率。
条款15.如条款12所述的计算机实现的方法,其还包括:基于所述调用提交速率来修改迭代地从所述数据源检索数据项的速率。
条款16.如条款12所述的计算机实现的方法,其还包括:
确定检索到的数据项表示对当前标识在所述数据高速缓存内的先前数据项的修改;
将所述检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于处理所述检索到的数据项的调用;以及
利用所述检索到的数据项的结果覆写针对所述先前数据项提交的调用的结果。
条款17.如条款16所述的计算机实现的方法,其中用于处理所述检索到的数据项的到所述按需代码执行环境的所述调用的所述调用是对执行与修改的数据项相关联的第二任务的调用。
条款18.一种非暂时性计算机可读介质,其包括计算机可执行指令,其中当由计算***执行时,所述计算机可执行指令致使所述计算***:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
从所述数据源检索来自所述多个数据项的数据项;
将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
条款19.如条款15所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:
从所述数据高速缓存标识一个或多个另外数据项;
利用飞行中指示符标记所述数据高速缓存内的所述一个或多个另外数据项;
向所述按需代码执行环境提交用于通过执行任务来处理所述一个或多个另外数据项的调用;
确定所述任务未成功处理所述一个或多个另外数据项;并且
将所述飞行中指示符从所述一个或多个另外数据项中去除。
条款20.如条款15所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:生成所述检索到的数据项的标识符。
条款21.如条款15所述的非暂时性计算机可读介质,其中所述计算机可执行指令进一步致使所述计算***:至少部分地通过将所述检索到的数据项的标识符与当前与所述数据高速缓存相关联的标识符进行比较来标识来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项。
条款22.如条款15所述的非暂时性计算机可读介质,其中所述计算机可执行指令致使所述计算***:迭代地从所述数据源检索数据项。
条款23.如条款15所述的非暂时性计算机可读介质,其中所述计算机可执行指令致使所述计算***:通过将所述数据项的标识符记录在所述数据高速缓存内来将所述数据项入列在所述数据高速缓存内。
应当强调,可对上述实施方案作出许多改变和修改,所述改变和修改的元素应被理解为包括在其他可接受的实例当中。所有此类修改和改变在本文中意图被包括在本公开的范围内,并且受以下权利要求的保护。

Claims (15)

1.一种用于通过按需代码执行环境处理数据源内的多个数据项的***,所述***包括:
非暂时性数据存储库,所述非暂时性数据存储库被配置来实现:
进程内数据高速缓存,所述进程内数据高速缓存指示来自所述多个数据项的已由所述***标识但尚未在所述按需代码执行环境处处理的数据项;以及
结果数据高速缓存,所述结果数据高速缓存指示来自所述多个数据项的已在所述按需代码执行环境处处理的数据项;
被配置来实现用户接口子***的一个或多个处理器,所述用户接口子***从用户计算装置获得标识所述数据源以及所述按需代码执行环境上的用于处理所述多个数据项的任务的信息;
被配置来实现数据检索子***的一个或多个处理器,所述数据检索子***:
从所述数据源检索来自所述多个数据项的第一数据项集合;并且
针对所述数据项集合中的数据项:
生成所述数据项的标识符;
根据所述标识符确定所述数据项未被标识在所述进程内数据高速缓存或所述结果数据高速缓存内;并且
将所述数据项入列在所述进程内数据高速缓存中;
被配置来实现调用生成子***的一个或多个处理器,所述调用生成子***:
从所述进程内数据高速缓存标识一个或多个数据项;
向所述按需代码执行环境提交用于执行处理所述一个或多个数据项的所述任务的调用;
确定所述任务已成功处理所述一个或多个数据项;并且
将所述一个或多个数据项置于所述结果数据高速缓存中;
其中当所述多个数据项已在所述按需代码执行环境处被处理时,所述用户接口子***进一步向所述用户计算装置发送通知。
2.如权利要求1所述的***,其中实现所述用户接口子***的所述一个或多个处理器、实现所述数据检索子***的所述一个或多个处理器、以及实现所述调用生成子***的所述一个或多个处理器是相同的一个或多个处理器。
3.如权利要求1所述的***,其中所述数据源对应于多个不同的数据源。
4.如权利要求1所述的***,其中所述任务对应于多个任务,并且其中从所述用户计算装置获得的所述信息还包括用于确定来自所述多个任务中的要调用以用于处理来自所述多个数据项的给定数据项的单独任务的信息。
5.如权利要求1所述的***,其中所述数据检索子***被配置来通过以下方式中的至少一者来生成所述数据项的所述标识符:标识所述数据源内的所述数据项的密钥、联合所述数据项的一个或多个属性、或根据散列函数处理所述数据项的至少一部分。
6.如权利要求1所述的***,其中实现所述调用生成子***的所述一个或多个处理器通过列出指向所述结果数据高速缓存内的所述一个或多个数据项的指针来将所述一个或多个数据项置于所述结果数据高速缓存中。
7.一种计算机实现的方法,其包括:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
迭代地从所述数据源检索来自所述多个数据项的数据项;
将来自所述多个数据项的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
8.如权利要求7所述的计算机实现的方法,其中将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内包括:使所述入列数据项的标识符与所述数据高速缓存相关联。
9.如权利要求7所述的计算机实现的方法,其还包括:生成所述检索到的数据项的标识符。
10.如权利要求7所述的计算机实现的方法,其还包括:从用户计算装置获得标识所述数据源和所述任务的信息。
11.如权利要求7所述的计算机实现的方法,其中迭代地向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用、并且记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果,与迭代地从所述数据源检索来自所述多个数据项的数据项、并且将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内,至少部分地同时发生。
12.如权利要求7所述的计算机实现的方法,其还包括:至少部分地基于从所述按需代码执行环境接收到的错误来确定针对所述按需代码执行环境的调用提交速率。
13.如权利要求12所述的计算机实现的方法,其还包括:基于所述调用提交速率来修改迭代地从所述数据源检索数据项的速率。
14.如权利要求7所述的计算机实现的方法,其还包括:
确定检索到的数据项表示对当前标识在所述数据高速缓存内的先前数据项的修改;
将所述检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于处理所述检索到的数据项的调用;以及
利用所述检索到的数据项的结果覆写针对所述先前数据项提交的调用的结果。
15.一种用于通过按需代码执行环境处理数据源内的多个数据项的***,所述***包括:
一个或多个处理器;以及
一个或多个存储器,所述一个或多个存储器在其上存储有指令,其中当在所述一个或多个处理器上执行时,所述指令致使所述一个或多个处理器:
维持数据高速缓存,所述数据高速缓存指示来自数据源内的多个数据项的已被标识用于在按需代码执行环境处进行处理的数据项;
从所述数据源检索来自所述多个数据项的数据项;
将来自所述数据项集合的当前未被标识在所述数据高速缓存内的那些检索到的数据项入列在所述数据高速缓存内;
向所述按需代码执行环境提交用于通过执行任务来处理来自所述数据高速缓存的数据项的调用;
记录针对来自所述数据高速缓存的所述数据项提交的所述调用的结果;
确定没有来自所述多个数据项的另外数据项等待通过执行所述任务进行处理;以及
向与所述多个数据项相关联的用户计算装置发送指示所述多个数据项的处理已完成的通知。
CN201780022789.2A 2016-03-30 2017-03-22 用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法 Active CN108885568B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/085,902 US10891145B2 (en) 2016-03-30 2016-03-30 Processing pre-existing data sets at an on demand code execution environment
US15/085,885 2016-03-30
US15/085,885 US10162672B2 (en) 2016-03-30 2016-03-30 Generating data streams from pre-existing data sets
US15/085,902 2016-03-30
PCT/US2017/023564 WO2017172440A1 (en) 2016-03-30 2017-03-22 Processing pre-existing data sets at an on-demand code execution environment

Publications (2)

Publication Number Publication Date
CN108885568A CN108885568A (zh) 2018-11-23
CN108885568B true CN108885568B (zh) 2022-01-28

Family

ID=59966350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780022789.2A Active CN108885568B (zh) 2016-03-30 2017-03-22 用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法

Country Status (3)

Country Link
EP (1) EP3436927B1 (zh)
CN (1) CN108885568B (zh)
WO (1) WO2017172440A1 (zh)

Families Citing this family (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10048974B1 (en) 2014-09-30 2018-08-14 Amazon Technologies, Inc. Message-based computation request scheduling
US9715402B2 (en) 2014-09-30 2017-07-25 Amazon Technologies, Inc. Dynamic code deployment and versioning
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code
US9600312B2 (en) 2014-09-30 2017-03-21 Amazon Technologies, Inc. Threading as a service
US9678773B1 (en) 2014-09-30 2017-06-13 Amazon Technologies, Inc. Low latency computational capacity provisioning
US9830193B1 (en) 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
US9146764B1 (en) 2014-09-30 2015-09-29 Amazon Technologies, Inc. Processing event messages for user requests to execute program code
US9537788B2 (en) 2014-12-05 2017-01-03 Amazon Technologies, Inc. Automatic determination of resource sizing
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
US9930103B2 (en) 2015-04-08 2018-03-27 Amazon Technologies, Inc. Endpoint management system providing an application programming interface proxy service
US9785476B2 (en) 2015-04-08 2017-10-10 Amazon Technologies, Inc. Endpoint management system and virtual compute system
US10042660B2 (en) 2015-09-30 2018-08-07 Amazon Technologies, Inc. Management of periodic requests for compute capacity
US9811434B1 (en) 2015-12-16 2017-11-07 Amazon Technologies, Inc. Predictive management of on-demand code execution
US10754701B1 (en) 2015-12-16 2020-08-25 Amazon Technologies, Inc. Executing user-defined code in response to determining that resources expected to be utilized comply with resource restrictions
US10013267B1 (en) 2015-12-16 2018-07-03 Amazon Technologies, Inc. Pre-triggers for code execution environments
US9910713B2 (en) 2015-12-21 2018-03-06 Amazon Technologies, Inc. Code execution request routing
US10067801B1 (en) 2015-12-21 2018-09-04 Amazon Technologies, Inc. Acquisition and maintenance of compute capacity
US10002026B1 (en) 2015-12-21 2018-06-19 Amazon Technologies, Inc. Acquisition and maintenance of dedicated, reserved, and variable compute capacity
US10891145B2 (en) 2016-03-30 2021-01-12 Amazon Technologies, Inc. Processing pre-existing data sets at an on demand code execution environment
US11132213B1 (en) 2016-03-30 2021-09-28 Amazon Technologies, Inc. Dependency-based process of pre-existing data sets at an on demand code execution environment
US10162672B2 (en) 2016-03-30 2018-12-25 Amazon Technologies, Inc. Generating data streams from pre-existing data sets
US10282229B2 (en) 2016-06-28 2019-05-07 Amazon Technologies, Inc. Asynchronous task management in an on-demand network code execution environment
US10102040B2 (en) 2016-06-29 2018-10-16 Amazon Technologies, Inc Adjusting variable limit on concurrent code executions
US10277708B2 (en) 2016-06-30 2019-04-30 Amazon Technologies, Inc. On-demand network code execution with cross-account aliases
US10203990B2 (en) 2016-06-30 2019-02-12 Amazon Technologies, Inc. On-demand network code execution with cross-account aliases
US10884787B1 (en) 2016-09-23 2021-01-05 Amazon Technologies, Inc. Execution guarantees in an on-demand network code execution system
US10061613B1 (en) 2016-09-23 2018-08-28 Amazon Technologies, Inc. Idempotent task execution in on-demand network code execution systems
US11119813B1 (en) 2016-09-30 2021-09-14 Amazon Technologies, Inc. Mapreduce implementation using an on-demand network code execution system
US10303492B1 (en) 2017-12-13 2019-05-28 Amazon Technologies, Inc. Managing custom runtimes in an on-demand code execution system
US10564946B1 (en) 2017-12-13 2020-02-18 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10572375B1 (en) 2018-02-05 2020-02-25 Amazon Technologies, Inc. Detecting parameter validity in code including cross-service calls
US10831898B1 (en) 2018-02-05 2020-11-10 Amazon Technologies, Inc. Detecting privilege escalations in code including cross-service calls
US10733085B1 (en) 2018-02-05 2020-08-04 Amazon Technologies, Inc. Detecting impedance mismatches due to cross-service calls
US10353678B1 (en) 2018-02-05 2019-07-16 Amazon Technologies, Inc. Detecting code characteristic alterations due to cross-service calls
US10725752B1 (en) 2018-02-13 2020-07-28 Amazon Technologies, Inc. Dependency handling in an on-demand network code execution system
US10776091B1 (en) 2018-02-26 2020-09-15 Amazon Technologies, Inc. Logging endpoint in an on-demand code execution system
US10853115B2 (en) 2018-06-25 2020-12-01 Amazon Technologies, Inc. Execution of auxiliary functions in an on-demand network code execution system
US10649749B1 (en) 2018-06-26 2020-05-12 Amazon Technologies, Inc. Cross-environment application of tracing information for improved code execution
US11146569B1 (en) 2018-06-28 2021-10-12 Amazon Technologies, Inc. Escalation-resistant secure network services using request-scoped authentication information
US10949237B2 (en) 2018-06-29 2021-03-16 Amazon Technologies, Inc. Operating system customization 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
US11099917B2 (en) * 2018-09-27 2021-08-24 Amazon Technologies, Inc. Efficient state maintenance for execution environments in an on-demand code execution system
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
US10884812B2 (en) 2018-12-13 2021-01-05 Amazon Technologies, Inc. Performance-based hardware emulation in an on-demand network code execution system
US11010188B1 (en) 2019-02-05 2021-05-18 Amazon Technologies, Inc. Simulated data object storage using on-demand computation of data objects
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
CN110347476B (zh) * 2019-06-27 2022-03-22 苏州浪潮智能科技有限公司 一种信息化***的耗时任务管理方法和装置
CN110347403A (zh) * 2019-06-28 2019-10-18 北京你财富计算机科技有限公司 一种程序开关控制方法、装置、电子设备
US11159528B2 (en) 2019-06-28 2021-10-26 Amazon Technologies, Inc. Authentication to network-services using hosted authentication information
US11190609B2 (en) 2019-06-28 2021-11-30 Amazon Technologies, Inc. Connection pooling for scalable network services
US11115404B2 (en) 2019-06-28 2021-09-07 Amazon Technologies, Inc. Facilitating service connections in serverless code executions
US11023416B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. Data access control system for object storage service based on owner-defined code
WO2021061932A1 (en) * 2019-09-27 2021-04-01 Amazon Technologies, Inc. User-specific data manipulation system for object storage service based on user-submitted code
US11055112B2 (en) 2019-09-27 2021-07-06 Amazon Technologies, Inc. Inserting executions of owner-specified code into input/output path of object storage service
US11550944B2 (en) 2019-09-27 2023-01-10 Amazon Technologies, Inc. Code execution environment customization system for object storage service
US11394761B1 (en) 2019-09-27 2022-07-19 Amazon Technologies, Inc. Execution of user-submitted code on a stream of data
US10996961B2 (en) 2019-09-27 2021-05-04 Amazon Technologies, Inc. On-demand indexing of data in input path of object storage service
US11263220B2 (en) 2019-09-27 2022-03-01 Amazon Technologies, Inc. On-demand execution of object transformation code in output path of object storage service
US11386230B2 (en) 2019-09-27 2022-07-12 Amazon Technologies, Inc. On-demand code obfuscation of data in input path of object storage service
WO2021061605A1 (en) * 2019-09-27 2021-04-01 Amazon Technologies, Inc. On-demand execution of object filter code in output path of object storage service
US11250007B1 (en) 2019-09-27 2022-02-15 Amazon Technologies, Inc. On-demand execution of object combination code in output path of object storage service
US11360948B2 (en) 2019-09-27 2022-06-14 Amazon Technologies, Inc. Inserting owner-specified data processing pipelines into input/output path of object storage service
US11106477B2 (en) 2019-09-27 2021-08-31 Amazon Technologies, Inc. Execution of owner-specified code during input/output path to object storage service
US11023311B2 (en) 2019-09-27 2021-06-01 Amazon Technologies, Inc. On-demand code execution in input path of data uploaded to storage service in multiple data portions
CN114586011B (zh) * 2019-09-27 2023-06-06 亚马逊技术有限公司 将所有者指定的数据处理流水线***到对象存储服务的输入/输出路径
US11656892B1 (en) 2019-09-27 2023-05-23 Amazon Technologies, Inc. Sequential execution of user-submitted code and native functions
US10908927B1 (en) 2019-09-27 2021-02-02 Amazon Technologies, Inc. On-demand execution of object filter code in output path of object storage service
US11416628B2 (en) 2019-09-27 2022-08-16 Amazon Technologies, Inc. User-specific data manipulation system for object storage service based on user-submitted code
US11119826B2 (en) 2019-11-27 2021-09-14 Amazon Technologies, Inc. Serverless call distribution to implement spillover while avoiding cold starts
US10942795B1 (en) 2019-11-27 2021-03-09 Amazon Technologies, Inc. Serverless call distribution to utilize reserved capacity without inhibiting scaling
WO2021108435A1 (en) * 2019-11-27 2021-06-03 Amazon Technologies, Inc. Serverless call distribution to utilize reserved capacity without inhibiting scaling
US11714682B1 (en) 2020-03-03 2023-08-01 Amazon Technologies, Inc. Reclaiming computing resources in an on-demand code execution system
US11188391B1 (en) 2020-03-11 2021-11-30 Amazon Technologies, Inc. Allocating resources to on-demand code executions under scarcity conditions
US11775640B1 (en) 2020-03-30 2023-10-03 Amazon Technologies, Inc. Resource utilization-based malicious task detection in an on-demand code execution system
CN112181485B (zh) * 2020-10-20 2024-03-15 平安银行股份有限公司 脚本执行方法、装置、电子设备及存储介质
US11256493B1 (en) 2020-11-03 2022-02-22 Bank Of America Corporation Container image optimizer
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
US11968280B1 (en) 2021-11-24 2024-04-23 Amazon Technologies, Inc. Controlling ingestion of streaming data to serverless function executions
US12015603B2 (en) 2021-12-10 2024-06-18 Amazon Technologies, Inc. Multi-tenant mode for serverless code execution

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463509B1 (en) * 1999-01-26 2002-10-08 Motive Power, Inc. Preloading data in a cache memory according to user-specified preload criteria
CN101627388A (zh) * 2007-03-05 2010-01-13 微软公司 动态地呈现数据集的可视化
CN102880557A (zh) * 2012-09-13 2013-01-16 浙江金大科技有限公司 一种异构数据源的多级分布式高速缓存
CN105122243A (zh) * 2013-03-15 2015-12-02 亚马逊科技公司 用于半结构化数据的可扩展分析平台
US9298633B1 (en) * 2013-09-18 2016-03-29 Emc Corporation Adaptive prefecth for predicted write requests

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8719326B2 (en) * 2003-08-18 2014-05-06 S.F. Ip Properties 14 Llc Adaptive data transformation engine
US7028030B2 (en) * 2001-08-30 2006-04-11 Bea Systems, Inc. Cluster caching with concurrency checking
US7228354B2 (en) * 2002-06-28 2007-06-05 International Business Machines Corporation Method for improving performance in a computer storage system by regulating resource requests from clients
US8086605B2 (en) * 2005-06-28 2011-12-27 Yahoo! Inc. Search engine with augmented relevance ranking by community participation
US7644204B2 (en) * 2006-10-31 2010-01-05 Hewlett-Packard Development Company, L.P. SCSI I/O coordinator
US9928260B2 (en) * 2008-02-11 2018-03-27 Nuix Pty Ltd Systems and methods for scalable delocalized information governance
US8290926B2 (en) * 2010-01-21 2012-10-16 Microsoft Corporation Scalable topical aggregation of data feeds
CN103109279B (zh) * 2010-06-22 2016-08-31 富士通株式会社 多核处理器***,控制程序以及控制方法
US8904190B2 (en) * 2010-10-20 2014-12-02 Advanced Micro Devices, Inc. Method and apparatus including architecture for protecting sensitive code and data
US8863082B2 (en) * 2011-09-07 2014-10-14 Microsoft Corporation Transformational context-aware data source management
US10635644B2 (en) * 2013-11-11 2020-04-28 Amazon Technologies, Inc. Partition-based data stream processing framework
WO2016010932A1 (en) * 2014-07-14 2016-01-21 Oracle International Corporation Age-based policies for determining database cache hits

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463509B1 (en) * 1999-01-26 2002-10-08 Motive Power, Inc. Preloading data in a cache memory according to user-specified preload criteria
CN101627388A (zh) * 2007-03-05 2010-01-13 微软公司 动态地呈现数据集的可视化
CN102880557A (zh) * 2012-09-13 2013-01-16 浙江金大科技有限公司 一种异构数据源的多级分布式高速缓存
CN105122243A (zh) * 2013-03-15 2015-12-02 亚马逊科技公司 用于半结构化数据的可扩展分析平台
US9298633B1 (en) * 2013-09-18 2016-03-29 Emc Corporation Adaptive prefecth for predicted write requests

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高速数据采集***中高速缓存与海量缓存的实现;鲍晓宇 等;《国外电子元器件》;20030722;第4-7页 *

Also Published As

Publication number Publication date
EP3436927A4 (en) 2019-11-20
EP3436927B1 (en) 2023-12-13
EP3436927A1 (en) 2019-02-06
CN108885568A (zh) 2018-11-23
WO2017172440A8 (en) 2017-11-02
WO2017172440A1 (en) 2017-10-05

Similar Documents

Publication Publication Date Title
CN108885568B (zh) 用于通过按需代码执行环境处理数据源内的多个数据项的***和计算机实现的方法
US10891145B2 (en) Processing pre-existing data sets at an on demand code execution environment
US10162672B2 (en) Generating data streams from pre-existing data sets
US11132213B1 (en) Dependency-based process of pre-existing data sets at an on demand code execution environment
CN114930295B (zh) 利用预留容量而不抑制缩放的无服务器调用分配方法及***
CN109478134B (zh) 用跨账户别名执行按需网络代码
US10942795B1 (en) Serverless call distribution to utilize reserved capacity without inhibiting scaling
US10528390B2 (en) Idempotent task execution in on-demand network code execution systems
US10564946B1 (en) Dependency handling in an on-demand network code execution system
KR102541295B1 (ko) 온-디맨드 네트워크 코드 실행 시스템에서의 운영 체제 커스터마이제이션
US10725826B1 (en) Serializing duration-limited task executions in an on demand code execution system
US9928108B1 (en) Metaevent handling for on-demand code execution environments
US11467890B2 (en) Processing event messages for user requests to execute program code
US10445140B1 (en) Serializing duration-limited task executions in an on demand code execution system
CN107111508B (zh) 用于执行程序代码的请求的程序性事件检测和消息生成
US11119826B2 (en) Serverless call distribution to implement spillover while avoiding cold starts
US11119813B1 (en) Mapreduce implementation using an on-demand network code execution system
US10884787B1 (en) Execution guarantees in an on-demand network code execution system
US10203990B2 (en) On-demand network code execution with cross-account aliases
US20190391841A1 (en) Execution of auxiliary functions in an on-demand network code execution system
CN109564525B (zh) 按需网络代码执行环境中的异步任务管理
US11119829B2 (en) On-demand provisioning of customized developer environments

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