CN114586010B - 对象存储服务的输出路径中对象过滤代码的按需执行 - Google Patents

对象存储服务的输出路径中对象过滤代码的按需执行 Download PDF

Info

Publication number
CN114586010B
CN114586010B CN202080073280.2A CN202080073280A CN114586010B CN 114586010 B CN114586010 B CN 114586010B CN 202080073280 A CN202080073280 A CN 202080073280A CN 114586010 B CN114586010 B CN 114586010B
Authority
CN
China
Prior art keywords
data
request
data object
function
output
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
CN202080073280.2A
Other languages
English (en)
Other versions
CN114586010A (zh
Inventor
蒂莫西·劳伦斯·哈里斯
凯文·C·米勒
拉米扬舒·达塔
尚东·塔卢克达尔
哈里普里亚·德夫纳特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/586,539 external-priority patent/US10908927B1/en
Priority claimed from US16/586,562 external-priority patent/US11263220B2/en
Priority claimed from US16/586,580 external-priority patent/US11250007B1/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN114586010A publication Critical patent/CN114586010A/zh
Application granted granted Critical
Publication of CN114586010B publication Critical patent/CN114586010B/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

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)

Abstract

对对象存储服务的输入和输出(I/O)可通过对I/O请求实现一个或多个所有者指定的函数来修改。函数可实现数据操纵,诸如在读取或写入敏感数据之前过滤掉所述数据。可在实现所述I/O请求内指定的请求方法之前应用所述函数,使得应用所述方法的所述数据可能与所述请求中指定的对象不匹配。例如,用户可请求获得数据集。可将所述数据集传递到从所述数据集中过滤敏感数据的函数,并且然后可将所述所请求的方法应用于所述函数的输出。以这种方式,向对象存储服务上的对象的所有者提供对存储于所述服务或从所述服务检索的对象的更大控制。

Description

对象存储服务的输出路径中对象过滤代码的按需执行
背景技术
计算装置可利用通信网络来交换数据。公司和组织操作将许多计算装置互连的计算机网络以支持操作或向第三方提供服务。计算系统可位于单个地理位置或位于多个不同的地理位置(例如,经由专用通信网络或公共通信网络进行互连)。具体地,数据中心或数据处理中心(本文通常称为“数据中心”)可包括许多互连的计算系统以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的专用数据中心或者代表公众或为公众利益运营的公共数据中心。
为了便于提高对数据中心资源的利用,虚拟化技术允许单个物理计算装置为数据中心的用户托管作为独立的计算装置来呈现和操作的虚拟机的一个或多个实例。通过虚拟化,单个物理计算装置可以动态方式创建、维护、删除或以其他方式管理虚拟机。进而,用户可从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并且被提供不同数量的虚拟机资源。
除了计算资源之外,数据中心还为客户端装置提供许多其他有益的服务。例如,数据中心可提供数据存储服务,该数据存储服务被配置为存储由客户端装置提交的数据,并且允许通过网络检索该数据。可提供多种类型的数据存储服务,通常根据其输入/输出(I/O)机制而变。例如,数据库服务可允许基于诸如结构化查询语言(SQL)的数据库查询语言的I/O。块存储服务可以类似于操作系统如何与本地存储交互的方式允许基于对一个或多个定义长度块的修改的I/O,并且因此可促进可用于例如存储虚拟机的操作系统的虚拟化磁盘驱动器。对象存储服务可允许在内容和长度可有所不同的各个对象或资源(诸如各个文件)的级别上的I/O。例如,对象存储服务可诸如通过允许基于指定输入数据的调用和要应用于该数据的超文本传输协议请求方法(例如,GET、PUT、POST、DELETE等)的I/O来提供符合表述性状态转移(REST)架构风格的接口。通过传输指定输入数据的调用和请求方法,客户端因此可从对象存储服务检索数据、将数据作为新对象写入对象存储服务、修改现有对象等。
附图说明
图1是描绘对象存储服务可结合按需代码执行系统操作以实现与对对象存储服务的输入/输出(I/O)请求相关的功能的说明性环境的框图。
图2描绘了提供图1的对象存储服务的前端的计算装置的一般架构;
图3是描绘用于使客户端装置能够通过插入经由在按需代码执行系统上执行任务而实现的函数来修改对象存储服务的I/O路径的说明性交互的流程图。
图4是要应用于图1的对象存储服务的I/O路径的函数的流水线的说明性可视化。
图5A至图5B示出了描绘用于处理将输入数据作为对象存储在图1的对象存储服务上的请求的说明性交互的流程图,包括对输入数据执行所有者指定的任务并将任务的输出作为对象进行存储。
图6A至图6B示出了描绘用于处理在图1的对象存储服务上检索对象的数据的请求的说明性交互的流程图,包括对对象执行所有者指定的任务并将任务的输出作为对象传输到请求装置。
图7是描绘用于实现与通过I/O路径在图1的对象存储服务处获得的I/O请求相关的所有者定义的函数的说明性例程的流程图。
图8是描绘用于在图1的按需代码执行系统上执行任务以在实现所有者定义的函数期间实现数据操纵的说明性例程的流程图。
图9是描绘用于在图1的按需代码执行系统上执行任务以使用多个数据对象的组合对数据对象请求作出响应的说明性例程的流程图。
图10是与图9所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
图11是描绘用于在图1的按需代码执行系统上执行任务以使用选择性地模糊的数据对数据对象请求作出响应的说明性例程的流程图。
图12是与图11所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
图13是描绘用于在图1的按需代码执行系统上执行任务以使用动态地确定的请求数据子集对数据对象请求作出响应的说明性例程的流程图。
图14是与图13所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
具体实施方式
一般而言,本公开的方面涉及处理在对象存储系统上的读取数据对象或写入数据对象的请求。更具体地,本公开的方面涉及对象存储服务的输入/输出(I/O)路径的修改,使得可将一个或多个数据操纵插入I/O路径中以修改要应用被调用请求方法的数据,而不要求调用客户端装置指定此类数据操纵。在一个实施方案中,通过执行用户提交的代码来进行数据操纵,该用户提交的代码可例如由对象存储系统上的数据对象集合的所有者提供,以便控制与该数据对象的交互。例如,如果对象集合的所有者希望确保最终用户不向集合提交对象,包括任何个人识别信息(以确保最终用户的隐私),则所有者可提交可执行来从数据输入中去掉这种信息的代码。所有者可进一步指定在每次将数据对象写入集合期间应执行这样的代码。因此,当最终用户尝试将输入数据作为数据对象写入集合(例如,经由HTTP PUT方法)时,可首先针对输入数据执行代码,并且可将得到的输出数据作为数据对象写入集合。应注意,这可能导致最终用户请求的操作(诸如写入操作)未应用于最终用户的输入数据,而是应用于由数据操纵(例如,所有者提交的)代码输出的数据。以此方式,数据集合的所有者控制对这些集合的I/O,而不依赖于最终用户遵守所有者的要求。实际上,最终用户(或任何其他客户端装置)可能不知道正在发生对I/O的修改。因此,本公开的实施方案能够在不修改对服务的接口的情况下修改对对象存储服务的I/O,从而确保与利用该服务的其他预先存在的软件的互兼容性。
在本公开的一些实施方案中,数据操纵可发生在按需代码执行系统(有时称为无服务器执行系统)上。一般而言,按需代码执行系统能够执行任意用户指定的代码,而不要求用户创建、维护或配置执行代码的执行环境(例如,物理机或虚拟机)。例如,尽管常规计算服务通常要求用户提供特定装置(虚拟或物理)、在装置上安装操作系统、配置应用程序、定义网络接口等,但按需代码执行系统可使用户能够提交代码,并且可向用户提供应用程序编程接口(API),该API在被使用时使用户能够请求执行代码。在通过API接收到调用时,按需代码执行系统可为代码生成执行环境、向环境提供代码、执行代码,并且提供结果。因此,按需代码执行系统可消除用户处理用于代码执行的环境的配置和管理的需要。例如,在2014年9月30日提交的名称为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATIONFOR REQUESTS TO EXECUTE PROGRAM CODE”的美国专利号9,323,556(“556专利”)中公开了用于实现按需代码执行系统的示例技术,该专利的全部内容在此以引用方式并入。
由于按需代码执行系统执行任意代码的灵活性,这样的系统可用于创建多种网络服务。例如,这样的系统可用于创建“微服务”,即,实现少量功能(或仅一种功能)并且与其他服务交互以提供应用程序的网络服务。在按需代码执行系统的上下文中,被执行来创建这种服务的代码通常称为“函数”或“任务”,它们可被执行以实现服务。因此,用于在对象存储服务的I/O路径内执行数据操纵的一种技术可以是在按需代码执行系统上创建任务,该任务在被执行时执行所要求的数据操纵。说明性地,任务可提供与对象存储服务的接口相似或相同的接口,并且可操作以响应于请求方法调用(例如,HTTP PUT或GET调用)而获得输入数据、针对输入数据执行任务的代码并且执行对对象存储服务的调用,以对得到的输出数据实现请求方法。这种技术的缺点是复杂性。例如,在这种情况下,最终用户可能需要向按需代码执行系统而不是对象存储服务提交I/O请求,以确保任务的执行。如果最终用户直接向对象存储服务提交调用,则可能不会发生任务执行,并且因此所有者将无法对对象集合实施所期望的数据操纵。此外,该技术可能要求创作任务的代码以向最终用户提供允许处理调用以对输入数据实现请求方法的接口以及能够执行从任务执行到对象存储服务的调用的接口。这些网络接口的实现可能会显著增加所要求的代码的复杂性,从而抑制数据集合的所有者使用该技术。此外,在用户提交的代码直接实现网络通信的情况下,可能需要根据所处理的请求方法来改变该代码。例如,可能需要第一组代码来支持GET操作,可能需要第二组代码来支持PUT操作等。因为本公开的实施方案减轻了用户提交的代码在处理网络通信方面的要求,所以在一些情况下,一组代码可能够多个请求方法。
为了解决上述问题,本公开的实施方案可实现无服务器任务执行与对象存储服务的接口的强集成,使得服务本身被配置为在接收到对数据集合的I/O请求时调用任务执行。此外,可通过配置对象存储服务以促进来自任务执行的数据输入和输出来简化生成代码以执行数据操纵,而不要求任务执行本身实现用于I/O操作的网络通信。具体地,在一个实施方案中,对象存储服务和按需代码执行系统可被配置为以操作系统级输入/输出流的句柄(例如,符合POSIX的描述符)的形式将输入数据“演示”到任务执行,使得任务的代码可经由定义的流操作来操纵输入数据(例如,就好像数据存在于本地文件系统中一样)。对输入数据的这种流级访问可例如与对输入数据的网络级访问进行对比,该网络级访问通常要求代码实现网络通信以检索输入数据。类似地,对象存储服务和按需代码执行系统可被配置为提供输出流句柄,该输出流句柄表示任务执行可向其写入输出的输出流。在检测到对输出流的写入时,对象存储服务和按需代码执行系统可将这样的写入处理为任务执行的输出数据,并且将被调用请求方法应用于输出数据。通过使任务能够根据传递到任务的输入和输出流来操纵数据,而不是要求代码通过网络来处理数据通信,可大大简化任务的代码。
使任务能够基于输入和输出句柄来操纵数据的另一个益处是增加了安全性。通用的按需代码执行系统可相对于来自任务执行的网络通信许可地操作,从而允许来自执行的任何网络通信,除非这种通信被明确拒绝。这种许可模型反映了将任务执行用作微服务,微服务通常要求与各种其他网络服务进行交互。然而,这种许可模型也降低了功能的安全性,因为潜在的恶意网络通信也可能到达执行。与许可模型相反,用于在对象存储系统的I/O路径上执行数据操纵的任务执行可利用限制模型,由此从执行任务的环境中只能发生明确允许的网络通信。说明性地,因为数据操纵可经由输入和输出句柄发生,所以可设想的是,在本公开的实施方案中用于执行数据操纵的许多或大多数任务根本不要求发生网络通信,从而大大增加了这种执行的安全性。在任务执行确实需要一些网络通信(诸如联系外部服务以协助数据操纵)的情况下,可明确地允许此类通信或将其“列入白名单”,从而仅以严格受限的方式暴露该执行。
在一些实施方案中,数据集合所有者可能只要求关于对集合的I/O进行单个数据操纵。因此,对象存储服务可检测到对集合的I/O、实现数据操纵(例如,通过在配备有输入和输出句柄的环境中执行无服务器任务),并且将被调用请求方法应用于得到的输出数据。在其他实施方案中,所有者可请求关于I/O路径进行多个数据操纵。例如,为了增加可移植性和可重用性,所有者可创作多个无服务器任务,该多个无服务器任务可在不同的I/O路径上以不同的方式组合。因此,对于每个路径,所有者可对路径定义要在I/O上执行的一系列无服务器任务。此外,在一些配置中,对象存储系统可本机提供一个或多个数据操纵。例如,对象存储系统可本机接受仅对对象的部分(例如,定义的字节范围)的请求,或者可本机实现对对象的数据的查询(例如,SQL查询)的执行。在一些实施方案中,可为给定的I/O路径指定各种本机操纵和基于无服务器任务的操纵的任何组合。例如,对于读取对象的特定请求,所有者可指定要对对象执行给定的SQL查询,该查询的输出经由第一任务执行来处理,该查询的输出经由第二任务执行来处理等。应用于I/O路径的数据操纵(例如,本地操纵、基于无服务器任务的操纵或它们的组合)的集合在本文中通常称为应用于I/O路径的数据处理“流水线”。
根据本公开的方面,应用于I/O路径的特定路径修改(例如,添加流水线)可根据路径的属性而变化,所述属性是诸如从其发出I/O请求的客户端装置或者请求中的对象或对象集合。例如,流水线可应用于各个对象,使得流水线应用于对象的所有I/O请求,或者只有在某些客户端装置访问对象时才选择性地应用流水线。在一些情况下,对象存储服务可为对象或集合提供多个I/O路径。例如,相同的对象或集合可与对象存储服务上的多个资源标识符相关联,使得可通过说明性地对应于不同的网络可访问端点的多个标识符(例如,统一资源标识符或URI)来访问对象或集合。在一个实施方案中,可将不同的流水线应用于给定对象的每个I/O路径。例如,第一I/O路径可与对数据集的非特权访问相关联,并且因此会受到在检索期间之前从数据集移除机密信息的数据操纵影响。第二I/O路径可与特权访问相关联,并且因此不受这些数据操纵影响。在一些情况下,可基于其他标准来选择性地应用流水线。例如,是否应用流水线可基于一天中的时间、对对象或集合的访问次数或速率等。
如本领域技术人员鉴于本公开将了解,本文公开的实施方案提高了计算系统(诸如对象存储系统)对数据对象提供并实施数据操纵功能的能力。尽管现有技术通常依赖于数据操纵功能的外部实施(例如,请求用户在上传之前去掉个人信息),但本公开的实施方案能够将数据操纵直接插入到对象存储系统的I/O路径中。此外,本公开的实施方案通过在隔离的执行环境内提供操纵功能的无服务器执行来提供用于实现数据操纵的安全机制。本公开的实施方案通过使无服务器功能能够基于本地流(例如,“文件”)句柄进行操作而不是要求所述功能充当网络可访问服务来进一步改进此类功能的操作。因此,当前公开的实施方案解决了计算系统内固有的技术问题,诸如在存储系统处实施数据操纵的困难以及创建外部服务来实施此类数据操纵的复杂性。这些技术问题通过本文描述的各种技术解决方案来解决,包括在可能不知道请求用户的情况下将数据处理流水线插入对象或对象集合的I/O路径中,使用无服务器功能来执行此类流水线的方面,以及使用本地流句柄来实现简化无服务器功能的创建。因此,本公开总体上代表对现有数据处理系统和计算系统的改进。
现在将讨论在按需代码执行系统上的任务的一般执行。如本文详细地描述,按需代码执行系统可提供网络可访问服务,从而使用户能够提交或指定要由按需代码执行系统上的虚拟机实例执行的计算机可执行源代码。按需代码执行系统上的每一组代码可定义“任务”,并且当在按需代码执行系统的虚拟机实例上执行时实现与该任务相对应的特定功能性。在按需代码执行系统上单独地实现任务可称为任务的“执行”(或“任务执行”)。在一些情况下,按需代码执行系统可使用户能够基于多种潜在事件而直接触发任务的执行,所述潜在事件是诸如向按需代码执行系统传输应用程序编程接口(“API”)调用或向按需代码执行系统传输特殊格式的超文本传输协议(“HTTP”)包。根据本公开的实施方案,按需代码执行系统可进一步与对象存储系统交互,以便在将数据操纵流水线应用于I/O路径期间执行任务。因此,按需代码执行系统可“按需”执行任何指定的可执行代码,而不要求配置或维护在其上执行代码的基础硬件或基础设施。此外,按需代码执行系统可被配置为以快速的方式(例如,在100毫秒[ms]以下)执行任务,从而实现“实时”(例如,在终端用户几乎不可感知的延迟的情况下)执行任务。为了实现这种快速执行,按需代码执行系统可包括一个或多个虚拟机实例,该一个或多个虚拟机实例被“预热”或预先初始化(例如,被引导到操作系统中并执行完整或基本上完整的运行时环境)并且被配置为能够执行用户定义的代码,使得可响应于执行代码的请求而快速地执行代码,而不会因初始化虚拟机实例而导致延迟。因此,当任务的执行被触发时,对应于该任务的代码可在很短的时间内在预先初始化的虚拟机中执行。
具体地,为了执行任务,本文描述的按需代码执行系统可维护执行虚拟机实例的池,所述虚拟机实例在一接收到执行任务的请求时就可使用。由于这些虚拟机的预先初始化特性,与执行任务代码(例如,实例和语言运行时启动时间)相关联的延迟(有时称为时延)可显著减少,通常减少至低于100毫秒级。说明性地,按需代码执行系统可在一个或多个物理计算装置上维护虚拟机实例池,其中每个虚拟机实例上加载有一个或多个软件部件(例如,操作系统、语言运行时、库等)。当按需代码执行系统接收到执行程序代码的请求(“任务”)时,按需代码执行系统可基于与任务相关的一个或多个计算约束(例如,所要求的操作系统或运行时)来选择用于执行用户的程序代码放入虚拟机实例,并且致使在该选定的虚拟机实例上执行任务。任务可在虚拟机实例上创建的隔离容器中执行,或者可在与充当其他任务的环境的其他虚拟机实例隔离的虚拟机实例内执行。由于池中的虚拟机实例在收到请求时已经启动并加载了特定的操作系统和语言运行时,因此与找到可处理请求的计算容量(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)相关的延迟可显著减少。
如本文所使用,术语“虚拟机实例”意图是指模拟硬件来提供软件可在其上执行的环境或平台(“执行环境”)的软件或其他可执行代码的执行。虚拟机实例一般由硬件装置执行,所述硬件装置可能与虚拟机实例模拟的物理硬件不同。例如,虚拟机可模拟第一类型的处理器和存储器,同时在第二类型的处理器和存储器上执行。因此,可利用虚拟机在正执行第二执行环境(例如,第二操作系统)的物理装置上执行意图用于第一执行环境(例如,第一操作系统)的软件。在一些情况下,由虚拟机实例模拟的硬件可与基础装置的硬件相同或类似。例如,具有第一类型的处理器的装置可实现多个虚拟机实例,每个虚拟机实例模拟该第一类型的处理器的实例。因此,可使用虚拟机实例将装置分成许多逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例一般可提供远离基础物理装置的硬件的抽象水平,但此抽象并非所要求的。例如,假设装置实现多个虚拟机实例,每个虚拟机实例模拟与由装置提供的硬件相同的硬件。在这种情况下,每个虚拟机实例可允许软件应用在不转译的情况下在基础硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用程序之间的逻辑分隔。一般称为“本机执行”的此过程可用于增加虚拟机实例的速度或执行。还可使用允许直接利用基础硬件的其他技术,诸如硬件直通技术。
虽然执行操作系统的虚拟机在本文被描述为执行环境的一个示例,但其他执行环境也是可能的。例如,任务或其他进程可在软件“容器”内执行,该软件“容器”提供运行时环境,但本身不提供硬件的虚拟化。可在虚拟机内实现容器以提供额外的安全性,或者可在虚拟机实例的外部运行容器。
结合附图参考以下详细描述,本公开的前述方面和许多附带优点将变得更容易了解,因为这通过结合附图参考以下描述而变得更好理解。
图1是说明性操作环境100的框图,其中服务提供商系统110操作以使客户端装置102能够对存储在对象存储服务160内的对象执行I/O操作并且将路径修改应用于此类I/O操作,所述修改可包括在按需代码执行系统120上执行用户定义的代码。
以说明的方式,各种示例客户端装置102被示出为与服务提供商系统110通信,所述客户端装置包括台式计算机、膝上型计算机和移动电话。通常,客户端装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可穿戴计算机、服务器、个人数字助理(PDA)、混合PDA/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、相机、数字媒体播放器等。
一般而言,对象存储服务160可操作以使客户端能够读取、写入、修改和删除数据对象,每个数据对象表示与标识符(“对象标识符”或“资源标识符”)相关联的一组数据,该标识符可作为单独的资源进行交互。例如,对象可表示由客户端装置102提交的单个文件(但对象存储服务160可或可不将这样的对象作为单个文件进行存储)。这种对象级交互可与其他类型的存储服务进行对比,诸如在各个块的级别提供数据操纵的基于块的存储服务或在表(或其部分)的级别提供数据操纵的数据库存储服务等。
对象存储服务160说明性地包括一个或多个前端162,该一个或多个前端提供客户端装置102可通过其与服务160交互的接口(命令行接口(CLI)、应用程序编程接口(API)或其他编程接口)以代表它们配置服务160并在服务160上执行I/O操作。例如,客户端装置102可与前端162交互以在服务160上创建数据对象集合(例如,对象“桶”)并为该集合配置许可。此后,客户端装置102可基于前端162的接口在集合内创建、读取、更新或删除对象。在一个实施方案中,前端接口162提供支持多种请求方法的符合REST的HTTP,每种请求方法对应于对服务160上的请求I/O操作。以非限制性示例的方式,请求方法可包括:
·GET操作,该操作请求通过参考对象的标识符来检索存储在服务160上的对象;
·PUT操作,该操作请求将对象存储在服务160上,包括对象的标识符和要作为对象存储的输入数据;
·DELETE操作,该操作请求参考对象的标识符来删除存储在服务160上的对象;以及
·LIST操作,该操作请求通过参考集合的标识符来列出存储在服务160上的对象集合内的对象。
还可支持多种其他操作。例如,服务160可提供类似于PUT操作但与不同的上传机制(例如,基于浏览器的HTML上传)相关联的POST操作,或者能够检索对象的元数据而不检索对象本身的HEAD操作。在一些实施方案中,服务160可实现将上述操作中的一者或多者相结合或将操作与本机数据操纵相结合的操作。例如,服务160可提供能够将存储在服务160上的对象复制到另一个对象的COPY操作,该操作将GET操作与PUT操作相结合。作为另一个示例,服务160可提供使得在返回对象的内容之前能够指定要应用于该对象的SQL查询的SELECT操作,该操作将向数据对象应用SQL查询(本机数据操纵)与GET操作相结合。作为又一示例,服务160可提供“字节范围”GET,其使得能够仅对数据对象的一部分进行GET操作。在一些情况下,客户端装置102在服务160上请求的操作可经由HTTP请求传输到服务,该HTTP请求本身可包括HTTP方法。在一些情况下,诸如在GET操作的情况下,在请求中指定的HTTP方法可匹配在服务160处请求的操作。然而,在其他情况下,请求的HTTP方法可能与在服务160处请求的操作不匹配。例如,请求可利用HTTP POST方法来传输请求以在服务160处实现SELECT操作。
在一般操作期间,前端162可被配置为获得对请求方法的调用,并且将该请求方法应用于该方法的输入数据。例如,前端162可通过将输入数据作为对象存储在服务160上来对将输入数据作为对象放入服务160的请求作出响应。例如,对象可存储在对象数据存储168上,所述对象数据存储对应于任何持久性或基本持久性存储设备(包括硬盘驱动器(HDD)、固态驱动器(SSD)、网络可访问存储设备(NAS)、存储区域网络(SAN)、非易失性随机存取存储器(NVRAM)或本领域已知的多种存储装置中的任一种)。作为另一个示例,前端162可通过从存储168检索对象(表示对GET资源请求的输入数据的对象)并且将对象返回到请求客户端装置102来对从服务160GET对象的请求作出响应。
在一些情况下,对请求方法的调用可调用由服务160提供的一个或多个本机数据操纵。例如,SELECT操作可提供要应用于对象(也在请求中标识)的SQL格式化查询,或者GET操作可提供要返回的对象的特定字节范围。服务160说明性地包括被配置为执行本地数据操纵的对象操纵引擎170,该对象操纵引擎说明性地对应于被配置有软件的装置,该软件可执行以在服务160上实现本地数据操纵(例如,通过针对字节范围GET从对象中去掉未选择的字节,通过将SQL查询应用于对象并反馈查询的结果等)。
根据本公开的实施方案,服务160还可被配置为能够修改给定的对象或对象集合的I/O路径,使得将被调用请求方法应用于数据操纵功能的输出,而不是在调用中标识的资源。例如,服务160可使客户端装置102能够指定针对给定对象的GET操作应服从于在按需代码执行系统120上的用户定义的任务的执行,使得响应于操作返回的数据是任务执行的输出,而不是请求的对象。类似地,服务160可使客户端装置102能够指定存储给定对象的PUT操作应当服从于按需代码执行系统120上用户定义的任务的执行,使得响应于操作而存储的数据是任务执行的输出,而不是由客户端装置102提供用于存储的数据。如下文将更详细地讨论,路径修改可包括指定数据操纵的流水线,包括本地数据操作、基于任务的操纵或它们的组合。说明性地,客户端装置102可通过前端162来指定用于对象或对象集合的流水线或其他数据操纵,该前端可将流水线或操纵的记录存储在I/O路径修改数据存储164中,该存储164像对象数据存储168一样可表示任何持久性或基本持久性存储。虽然在图1中被输出为不同的,但在一些情况下,数据存储164和168可表示数据存储的单个集合。例如,对对象或集合的数据修改本身可作为对象存储在服务160上。
为了经由执行用户定义的代码来实现数据操纵,该系统还包括按需代码执行系统120。在一个实施方案中,系统120仅可由对象存储服务160结合I/O路径的数据操纵来使用。在另一个实施方案中,系统120另外可由客户端装置102访问以直接实现无服务器任务执行。例如,按需代码执行系统120可向服务160(和可能地客户端装置102)提供一个或多个用户接口、命令行接口(CLI)、应用程序编程接口(API),或者用于以下操作的其他编程接口:生成并上传用户可执行代码(例如,包括标识上传的代码的依赖性代码对象的元数据);调用用户提供的代码(例如,提交在按需代码执行系统120上执行用户代码的请求);调度基于事件的作业或定时的作业;跟踪用户提供的代码;或者查看与他们的请求或用户代码相关的其他日志记录或监视信息。虽然一个或多个实施方案在本文可被描述为使用用户接口,但应了解,此类实施方案可另外或替代地使用任何CLI、API或其他编程接口。
客户端装置102、对象存储服务160和按需代码执行系统120可经由网络104通信,该网络可包括任何有线网络、无线网络或它们的组合。例如,网络104可以是个人局域网、局域网、广域网、空中广播网络(例如,用于收音机或电视)、电缆网络、卫星网络、蜂窝电话网络或它们的组合。作为另一个示例,网络104可以是可能由各个不同方操作的链接网络的可公开访问网络,诸如互联网。在一些实施方案中,网络104可以是专用或半专用网络,诸如公司或大学内联网。网络104可包括一个或多个无线网络,诸如全球移动通信系统(GSM)网络、码分多址(CDMA)网络、长期演进(LTE)网络或任何其他类型的无线网络。网络104可使用用于经由互联网或其他前述类型的网络中的任一者进行通信的协议和部件。例如,由网络104使用的协议可包括超文本传输协议(HTTP)、HTTP安全(HTTPS)、消息队列遥测传输(MQTT)、受约束应用协议(CoAP)等。经由互联网或其他前述类型的通信网络中的任一种进行通信的协议和部件是本领域的技术人员所公知的,并且因此未在本文更详细地描述。
为了实现与按需代码执行系统120的交互,系统120包括实现与按需代码执行系统120的交互的一个或多个前端130。在说明性实施方案中,前端130用作由按需代码执行系统120提供的其他服务的“前门”,从而使用户能够(经由客户端装置102)或服务160提供计算机可执行代码、请求执行计算机可执行代码并且查看计算机可执行代码的结果。前端130包括用以实现在按需代码执行系统120与其他计算装置之间的交互的多种部件。例如,每个前端130可包括请求接口,该请求接口向客户端装置102和服务160提供以下能力:将用户指定的代码上传或以其他方式传送到按需代码执行系统120并且此后请求执行该代码。在一个实施方案中,请求接口经由图形用户接口(GUI)、CLI或API与外部计算装置(例如,客户端装置102、前端162等)通信。前端130处理请求并且确保请求被适当地授权。例如,前端130可确定与该请求相关联的用户是否被授权访问在该请求中指定的用户代码。
如本文所使用的对用户代码的引用可指代以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可互换使用。例如,可结合由用户开发的特定数据变换来执行此类用户代码以实现特定功能。如上文所述,用户代码的单独集合(例如,用以实现特定功能)在本文称为“任务”,而对该代码的特定执行(包括例如编译代码、解译代码或以其他方式使代码可执行)称为“任务执行”或简称为“执行”。以非限制性示例的方式,任务可用JavaScript(例如,node.js)、Java、Python和/或Ruby(或另一种编程语言)来编写。
为了管理对代码执行的请求,前端130可包括执行队列,该执行队列可维持所请求的任务执行的记录。说明性地,按需代码执行系统120同时进行的任务执行的数量是有限的,并且因此,可将在按需代码执行系统120处发起(例如,经由API调用、经由从被执行或正在执行的任务的调用等)的新任务执行置于执行队列上并且例如按先进先出的次序进行处理。在一些实施方案中,按需代码执行系统120可包括多个执行队列,诸如用于每个用户账户的单独执行队列。例如,服务提供商系统110的用户可能想要限制按需代码执行系统120上的任务执行的速率(例如,出于成本原因)。因此,按需代码执行系统120可利用账户特定的执行队列来节制由特定用户账户同时进行的任务执行的速率。在一些情况下,按需代码执行系统120可对任务执行进行优先级排序,使得特定账户或指定优先级的任务执行绕过执行队列或者在执行队列内优先处理。在其他情况下,按需代码执行系统120可在接收到对任务的调用之后立即或基本上立即执行该任务,并且因此,可省略执行队列。
前端130还可包括输出接口,该输出接口被配置为输出关于在按需代码执行系统120上的任务的执行的信息。说明性地,输出接口可将关于任务执行的数据(例如,任务的结果、与任务执行相关的错误或任务执行的细节,诸如完成执行所需的总时间、经由执行处理的总数据等)传输到用户计算装置102或对象存储服务160。
在一些实施方案中,按需代码执行系统120可包括多个前端130。在此类实施方案中,可提供负荷平衡器以例如按循环方式将传入的调用分发给多个前端130。在一些实施方案中,负荷平衡器将传入的调用分发给多个前端130的方式可基于按需代码执行系统120的其他部件的位置或状态。例如,负荷平衡器可将调用分发给地理上在附近的前端130或有能力服务于调用的前端。在每个前端130对应于按需代码执行系统120的另一个部件的单独实例(诸如在下文描述的活动池148)的情况下,负荷平衡器可根据那些其他部件上的能力或负荷来分发调用。在一些情况下,可在前端130之间确定性地分发调用,使得执行任务的给定调用将始终(或几乎始终)被路由到同一前端130。这可例如辅助维持对任务的准确的执行记录,以确保任务仅执行期望的次数。例如,可对调用进行分发以在前端130之间进行负荷平衡。本领域技术人员将明白其他分发技术,诸如任播路由。
按需代码执行系统120还包括一个或多个工作者管理器140,该一个或多个工作者管理器管理用于服务于传入的调用以执行任务的执行环境,诸如虚拟机实例150(被示出为VM实例150A和150B,通常称为“VM”)。尽管以下将参考虚拟机实例150作为这种环境的示例进行描述,但本公开的实施方案可利用其他环境,诸如软件容器。在图1所示的示例中,每个工作者管理器140管理活动池148,该活动池是在被初始化以执行给定任务(例如,通过将任务的代码和任何依赖性数据对象加载到实例中)的一个或多个物理主机计算装置上执行的虚拟机实例150的组(有时称为池)。
虽然虚拟机实例150在这里被描述为指派给特定任务,但在一些实施方案中,实例可被指派给一组任务,使得实例被绑到该组任务并且该组的任何任务可在该实例内执行。例如,同一组中的用户可属于同一安全组(例如,基于它们的安全凭证),使得已经在特定实例150上的容器中执行了一个任务之后在同一实例上的另一个容器中执行另一个任务不会造成安全风险。如下所讨论,任务可与包含控制任务可如何执行的各种方面的许可相关联。例如,任务的许可可定义哪些网络连接(如果有的话)可由任务的执行环境发起。作为另一个示例,任务的许可可定义将什么认证信息传递到任务,从而控制可访问哪些网络可访问资源来执行任务(例如,服务160上的对象)。在一个实施方案中,任务的安全组是基于一个或多个这样的许可。例如,可基于发起网络连接的权限和访问网络资源的许可的组合来定义安全组。作为另一个示例,组的任务可共享共同的依赖关系,使得可快速修改用于执行组的一个任务的环境以支持该组内的另一个任务的执行。
一旦前端130已经成功地处理了执行任务的触发事件,前端130便将请求传递到工作者管理器140以执行该任务。在一个实施方案中,每个前端130可与对应的工作者管理器140(例如,位于同一地点或地理上在前端130附近的工作者管理器140)相关联,并且因此,前端130可将大多数或所有请求传递到该工作者管理器140。在另一个实施方案中,前端130可包括位置选择器,该位置选择器被配置为确定将执行请求传递到的工作者管理器140。在一个实施方案中,位置选择器可基于对调用进行散列来确定接收该调用的工作者管理器140,并且将该调用分发给基于散列值(例如,经由散列环)选择的工作者管理器140。用于在工作管理器140之间分发调用的各种其他机制对于本领域技术人员将是显而易见的。
此后,工作者管理器140可修改虚拟机实例150(如果必要的话)并且在实例150内执行任务的代码。如图1所示,相应的实例150可具有操作系统(OS)152(被示出为OS 152A和152B)、语言运行时154(被示出为运行时154A和154B)以及用户代码156(被示出为用户代码156A和156B)。OS 152、运行时154和用户代码156可共同实现执行用户代码以实现任务。因此,经由按需代码执行系统120的操作,可在执行环境内快速地执行任务。
根据本公开的方面,每个VM 150另外包括可执行以促进在VM150上的输入数据的暂存并处理在VM 150上写入的输出数据的暂存代码157,以及可通过VM 150的本地文件系统访问的VM数据存储158。说明性地,暂存代码157表示在VM 150(或可能是VM 150的主机装置)上执行并且被配置为从对象存储服务160获得数据并将该数据放入VM数据存储158中的进程。暂存代码157还可被配置为获得写入VM数据存储158内的文件的数据,并且将该数据传输到对象存储服务160。因为这样的数据在VM数据存储158处可用,所以不要求用户代码156来通过网络获得数据,从而简化了用户代码156并且能够通过用户代码156进一步限制网络通信,因此增加了安全性。相反,如上所讨论,用户代码156可通过使用在执行期间传递到代码156的文件句柄来与作为VM数据存储158上的文件的输入数据和输出数据交互。在一些实施方案中,输入和输出数据可作为文件存储在数据存储158的内核空间文件系统内。在其他情况下,暂存代码157可提供虚拟文件系统,诸如用户空间文件系统(FUSE)接口,该虚拟文件系统提供用户代码156可访问的隔离文件系统,使得用户代码对VM数据存储158的访问受限制。
如本文所使用,术语“本地文件系统”通常指代在执行环境中维护的文件系统,使得在该环境内执行的软件可访问作为文件的数据,而不是经由网络连接。根据本公开的方面,可经由本地文件系统访问的数据存储设备本身可以是本地的(例如,本地物理存储设备),或者可以是远程的(例如,经由网络协议(如NFS)来访问,或者表示为由网络可访问服务提供的虚拟化块装置)。因此,术语“本地文件系统”意图描述软件访问数据的机制,而不是数据的物理位置。
VM数据存储158可包括任何持久性或非持久性数据存储装置。在一个实施方案中,VM数据存储158是主机装置的物理存储设备,或者是托管在主机装置的物理存储设备上的虚拟磁盘驱动器。在另一个实施方案中,VM数据存储158被表示为本地存储设备,但实际上是由网络可访问服务提供的虚拟化存储装置。例如,VM数据存储158可以是由网络可访问块存储服务提供的虚拟化磁盘驱动器。在一些实施方案中,对象存储服务160可被配置为提供对存储在数据存储168上的对象的文件级访问,从而使VM数据存储158能够基于暂存代码157与服务160之间的通信被虚拟化。例如,对象存储服务160可包括提供对在数据存储168内作为文件的对象的网络访问的文件级接口166。例如,文件级接口166可表示提供对作为文件的对象的访问的基于网络的文件系统服务器(例如,网络文件系统(NFS)),并且暂存代码157可实现该服务器的客户端,从而提供对服务160的对象的文件级访问。
在一些情况下,VM数据存储158可表示对在VM实例150的相同主机装置上执行的另一个数据存储的虚拟化访问。例如,活动池148可包括一个或多个数据暂存VM实例(图1中未示出),所述数据暂存VM实例可与VM实例150共同租用在相同的主机装置上。数据暂存VM实例可被配置为支持从服务160检索和存储数据(例如,数据对象或其部分、由客户端装置102传递的输入数据等),以及将该数据存储在数据暂存VM实例的数据存储上。例如,数据暂存VM实例可被指定为不可用于支持用户代码156的执行,并且因此与相对于支持用户代码的执行的实例150的提升许可相关联。数据暂存VM实例可使得该数据可由其主机装置内(或可能地,在附近的主机装置上)的其他VM实例150访问,诸如通过使用基于网络的文件协议(如NFS)来访问。其他VM实例150然后可充当数据暂存VM实例的客户端,从而能够创建从用户代码156A的角度来看表现为本地数据存储的虚拟化VM数据存储158。有利地,考虑到数据暂存VM和VM实例150共同定位在主机装置内或在附近的主机装置上,可预期对存储在数据暂存VM处的数据的基于网络的访问将非常迅速地发生。
尽管本文提供了关于使用IO流句柄来读取或写入VM数据存储158的一些示例,但IO流可另外用于读取或写入VM实例150的其他接口(同时仍消除需要用户代码156来执行流级操作以外的操作,诸如创建网络连接)。例如,暂存代码157可将输入数据作为输入流“管道传送”到用户代码156的执行,该执行的输出可作为输出流“管道传送”到暂存代码157。作为另一个示例,暂存VM实例或VM实例150的管理程序可将输入数据传递到VM实例150的网络端口,该输入数据可由暂存代码157读取并作为输入流传递到用户代码157。类似地,由任务代码156写入输出流的数据可被写入实例150A的第二网络端口,以供暂存VM实例或管理程序检索。在又一个示例中,实例150的管理程序可将输入数据作为写入虚拟化硬件输入装置(例如,键盘)的数据传递,并且暂存代码157可向用户代码156传递对应于该输入装置的IO流的句柄。管理程序可类似地向用户代码156传递对应于虚拟化硬件输出装置的IO流的句柄,并且读取写入该流的数据作为输出数据。因此,本文关于文件流提供的示例通常可修改为与任何IO流相关。
对象存储服务160和按需代码执行系统120在图1中被描绘为在分布式计算环境中操作,该分布式计算环境包括使用一个或多个计算机网络(在图1中未示出)互连的若干计算机系统。对象存储服务160和按需代码执行系统120还可在具有比图1所示的更少或更多数量的装置的计算环境内操作。因此,在图1中描绘对象存储服务160和按需代码执行系统120应视为说明性的而非限制本公开。例如,按需代码执行系统120或其各种构成可实现各种网络服务部件、托管或“云”计算环境或对等网络配置,以实现本文描述的过程的至少一部分。在一些情况下,对象存储服务160和按需代码执行系统120可组合到单个服务中。此外,对象存储服务160和按需代码执行系统120可直接在硬件或由硬件装置执行的软件中实现,并且可(例如)包括在被配置为执行计算机可执行指令以执行将在本文描述的各种特征的物理计算机硬件上实现的一个或多个物理或虚拟服务器。一个或多个服务器可在地理上分散或在地理上共同定位在例如一个或多个数据中心中。在一些情况下,一个或多个服务器可作为快速供应和释放的计算资源的系统(通常称为“云计算环境”)的一部分来操作。
在图1的示例中,对象存储服务160和按需代码执行系统120被示出为连接到网络104。在一些实施方案中,对象存储服务160和按需代码执行系统120内的部件中的任一者可经由网络104与按需代码执行系统120的其他部件通信。在其他实施方案中,并非对象存储服务160和按需代码执行系统120的所有部件都能够与虚拟环境100的其他部件通信。在一个示例中,仅前端130和162(在一些情况下,所述前端可表示多个前端)可连接到网络104,并且对象存储服务160和按需代码执行系统120的其他部件可经由相应的前端130和162与环境100的其他部件通信。
虽然在本文总体参考对象存储服务160和按需代码执行系统120的单独部件来描述一些功能性,但其他部件或部件的组合可另外或替代地实现此类功能性。例如,虽然对象存储服务160在图1中被描绘为包括对象操纵引擎170,但该引擎170的功能可另外或替代地被实现为按需代码执行系统120上的任务。此外,虽然按需代码执行系统120被描述为应用数据操纵任务的示例系统,但其他计算系统可用于执行用户定义的任务,所述计算系统可包括比所描绘的更多、更少或不同的部件来作为按需代码执行系统120的一部分。在简化的示例中,对象存储服务160可包括物理计算装置,该物理计算装置被配置为按需执行用户定义的任务,因此表示根据本公开的实施方案可用的计算系统。因此,图1中的元件的具体配置意图是说明性。
图2描绘了实现图1的前端162的前端服务器200计算装置的一般架构。图2所描绘的前端服务器200的一般架构包括可用来实现本公开的方面的计算机硬件和软件的布置。硬件可以在物理电子装置上实现,如下文将更详细地讨论。前端服务器200可包括比图2所示的元件更多(或更少)的元件。然而,不必示出所有这些通常常规的元件以提供可行的公开。另外地,图2所示的一般架构可用于实现图1所示的其他部件中的一者或多者。
如图所示,前端服务器200包括处理单元290、网络接口292、计算机可读介质驱动器294以及输入/输出装置接口296,所有这些可通过通信总线相互通信。网络接口292可提供对一个或多个网络或计算系统的连接性。因此,处理单元290可经由网络104接收来自其他计算系统或服务的信息和指令。处理单元290还可与主存储器280或辅助存储器298通信,并且进一步经由输入/输出装置接口296来提供用于任选的显示器(未示出)的输出信息。输入/输出装置接口296还可从任选的输入装置(未示出)接受输入。
主存储器280或辅助存储器298可包含计算机程序指令(在一些实施方案中分组为单元),处理单元290执行所述计算机程序指令以便实现本公开的一个或多个方面。这些程序指令在图2中被示出为包括在主存储器280内,但可另外或替代地存储在辅助存储器298内。主存储器280和辅助存储器298对应于一层或多层存储器装置,包括(但不限于)RAM、3DXPOINT存储器、闪存存储器、磁存储设备等。出于描述的目的,假定主存储器280代表工作者管理器140的主工作存储器,其具有比辅助存储器298更高的速度但更低的总容量。
主存储器280可存储操作系统284,该操作系统提供计算机程序指令以便由处理单元290用于前端服务器200的一般管理和操作。存储器280还可包括用于实现本公开的方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器280包括用户接口单元282,该用户接口单元例如经由安装在计算装置上的导航或浏览接口(诸如浏览器或应用程序)而生成用户接口(或其指令)以在计算装置上显示。
除了用户接口单元282之外或与用户接口单元组合,存储器280可包括控制平面单元286和数据平面单元288,每个单元都可执行以实现本公开的方面。说明性地,根据本公开的实施方案,控制平面单元286可包括可执行以使数据对象或对象集合的所有者能够将操纵、无服务器功能或数据处理流水线附加到I/O路径的代码。例如,控制平面单元286可使前端162能够实现图3的交互。数据平面单元288可说明性地包括能够处理对象存储服务160上的I/O操作的代码,包括实现附加到I/O路径的操纵、无服务器功能或数据处理流水线(例如,经由图5A至图6B的交互、图7至图8的例程的实现等)。
图2的前端服务器200是这种装置的一种说明性配置,其他配置是可能的。例如,虽然被示出为单个装置,但在一些实施方案中,前端服务器200可被实现为多个物理主机装置。说明性地,这种前端服务器200的第一装置可实现控制平面单元286,而第二装置可实现数据平面单元288。
虽然在图2中被描述为前端服务器200,但在一些实施方案中可利用类似的部件来实现图1的环境100中所示的其他装置。例如,类似的装置可实现工作者管理器140,如在2014年9月30日提交的名称“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATIONFOR REQUESTS TO EXECUTE PROGRAM CODE”的美国专利号9,323,556(“556专利”)中更详细地描述,该专利的全部内容在此以引用方式并入。
参考图3,描绘了用于使客户端装置102A能够通过将数据操纵插入I/O路径中来修改对象存储服务160上的一个或多个对象的I/O路径的说明性交互,该操纵在可在按需代码执行系统120上执行的任务中实现。
图3的交互从(1)开始,其中客户端装置102A创作流操纵代码。代码可说明性地用于访问在程序执行时提供的输入文件句柄(例如,该输入文件句柄可由程序的标准输入流表示,通常为“stdin”)、对从该文件句柄获得的数据执行操纵,并且将数据写入在程序执行时提供的输出文件句柄(例如,该输出文件句柄可由程序的标准输出流表示,通常为“stdout”)。
尽管本文关于“文件”句柄讨论示例,但本公开的实施方案可利用提供对任何操作系统级输入/输出(IO)流的访问的句柄,所述句柄的示例包括字节流、字符流、文件流等。如本文所使用,术语操作系统级输入/输出流(或简称为“IO流”)意图指代操作系统为其提供一组定义的功能的数据流,所述功能是诸如在流内寻找、读取流和写入流。可以各种方式创建流。例如,编程语言可通过使用函数库来生成流以在本地操作系统上打开文件,或者可通过使用“管道”运算符(例如,在操作系统外壳命令语言内)创建流。如本领域技术人员将理解,大多数通用编程语言包括与流交互的能力作为代码的基本功能性。
根据本公开的实施方案,可创作任务代码以接受输入句柄和输出句柄作为代码的参数,输入句柄和输出句柄两者都表示IO流(例如,分别是输入流和输出流)。代码然后可操纵输入流的数据,并且将输出写入输出流。在使用通用编程语言的情况下,可根据用户的需要实现多种功能中的任一种。例如,一种功能可从输入流中搜索并删除机密信息。虽然一些代码可只使用输入和输出句柄,但其他代码可实现附加的接口,诸如网络通信接口。然而,通过向代码提供对在代码之外创建的输入和输出流的访问(经由相应的句柄),就不需要代码来创建此类流。此外,因为可在代码之外并且可能在代码的执行环境之外创建流,所以流操作代码不一定需要被信任来执行创建流可能必要的某些操作。例如,流可表示通过网络连接传输的信息,而无需向代码提供对该网络连接的访问。因此,使用IO流将数据传入和传出代码执行可简化代码,同时增加安全性。
如上所述,可用多种编程语言来创作代码。用于此类语言的创作工具在本领域中是已知的,并且因此将不在本文中描述。虽然在图3中将创作描述为发生在客户端装置102A上,但在一些情况下,服务160可提供接口(例如,网络GUI),通过该接口来创作或选择代码。
在(2)处,客户端装置102A将流操纵代码提交给服务160的前端162,并且请求将代码的执行插入一个或多个对象的I/O路径中。说明性地,前端162可向装置102A提供能够提交代码(例如,作为压缩文件)的一个或多个接口。前端162还可提供能够指定应向其应用代码的执行的一个或多个I/O路径的接口。例如,每个I/O路径可对应于对象或对象集合(例如,对象的“桶”)。在一些情况下,I/O路径还可对应于访问此类对象或集合的给定方式(例如,通过其创建对象的URI)、对应于尝试访问对象或集合的一个或多个账户,或者对应于其他路径标准。然后在(3)处,将路径修改的指定存储在I/O路径修改数据存储164中。另外地,在(4)处,将流操纵代码存储在对象数据存储166内。
因此,当经由指定的I/O路径接收到I/O请求时,服务160被配置为针对该请求的输入数据(例如,由客户端装置102A提供的数据或服务160的对象,取决于I/O请求)执行流操纵代码,然后将该请求应用于代码执行的输出。以这种方式,客户端装置102A(该客户端装置在图3中说明性地表示对象或对象集合的所有者)可获得对存储在对象存储服务160上和从该对象存储服务检索的数据的更大控制。
图3的交互一般涉及将单个数据操纵插入服务160上的对象或集合的I/O路径中。然而,在本公开的一些实施方案中,对象或集合的所有者能够将多个数据操纵插入这样的I/O路径中。每个数据操纵可对应于例如基于无服务器代码的操纵或服务160的本机操作。例如,假设所有者已经将数据集作为对象提交给服务160,并且所有者希望向最终用户提供该数据集的一部分的经过滤视图。虽然所有者可将该部分的经过滤视图存储为单独的对象并向最终用户提供对该单独对象的访问,但这会导致服务160上的数据重复。如果所有者希望向多个最终用户提供数据集的不同部分,该多个部分可能具有定制的过滤器,则该数据重复增加,从而导致显著的效率低下。根据本公开,另一选项可以是所有者创作或获得定制代码以在对象的不同部分上实现不同的过滤器,并且将该代码插入对象的I/O路径中。然而,这种方法可能要求所有者复制服务160的一些本机功能性(例如,检索数据集的一部分的能力)。此外,这种方法会抑制代码的模块性和可重用性,因为需要单组代码来执行两个功能(例如,选择数据的一部分和对该部分进行过滤)。
为了解决这些缺点,本公开的实施方案使所有者能够创建要应用于I/O路径的数据操纵流水线,从而将多个数据操纵链接在一起,每个数据操纵也可插入其他I/O路径中。这种流水线的说明性可视化在图4中示出为流水线400。具体地,流水线400示出了所有者指定的一系列数据操纵在针对对象或对象集合调用请求方法时发生。如图4所示,流水线以输入数据开始,根据被调用请求方法在调用内指定该输入数据。例如,PUT调用通常可包括输入数据作为要存储的数据,而GET调用通常可通过引用存储的对象来包括输入数据。LIST调用可指定目录,该目录的清单是LIST请求方法的输入数据。
与请求方法的典型实现方式相反,在说明性流水线400中,被调用请求方法最初并未应用于输入数据。相反,输入数据最初“代码A”的执行被传递到404,其中代码A表示第一组用户创作的代码。该执行的输出然后被传递到“本机函数A”406,该本机函数说明性地表示服务160的本机函数,诸如由对象操纵引擎170实现的“SELECT”或字节范围函数。该本机函数406的输出然后被传递到“代码B”的执行408,该代码表示第二组用户创作的代码。此后,该执行408的输出被调用请求方法被传递到410(例如,GET、PUT、LIST等)。因此,不是像在常规技术中那样将请求方法应用于输入数据,在图4的图示中,请求方法应用于执行408的输出,该执行说明性地表示根据一个或多个所有者指定的操纵412的输入数据的变换。应注意,流水线400的实现可不要求任何动作或暗示就调用客户端装置102而言对流水线400的任何了解。因此,可预期流水线的实现不会影响与服务160交互的现有机制(除了根据流水线改变存储在服务160上或从该服务检索的数据)。例如,可预期流水线的实现不要求重新配置使用服务160的API的现有程序。
尽管图4是的流水线400是线性的,但在一些实施方案中,服务160可使所有者能够诸如通过在流水线内包括条件节点或分支节点来配置非线性流水线。说明性地,如下文更详细地描述,数据操纵(例如,基于无服务器的功能)可被配置为包括返回值,诸如成功执行、遇到错误等的指示。在一个示例中,数据操纵的返回值可用于选择分支流水线内的条件分支,使得第一返回值致使流水线在第一分支上继续,而第二返回值致使流水线在第二分支上继续。在一些情况下,流水线可包括并行分支,使得将数据复制或划分到多个数据操纵,该多个数据操纵的输出在执行被调用方法之前传递到单个数据操纵以进行合并。服务160可说明性地提供图形用户接口,所有者可通过该图形用户接口诸如通过在流水线内指定节点并经由逻辑连接将这些节点链接在一起来创建流水线。多种基于流的开发接口是已知的并且可结合本公开的方面来使用。
此外,在一些实施方案中,应用于特定I/O路径的流水线可在请求时基于根据不同标准应用于路径的数据操纵而即时生成。例如,数据集合的所有者可将第一数据操纵应用于与集合内的对象的所有交互,并且将第二数据操纵应用于经由给定的URI获得的所有交互。因此,当接收到经由给定的URI与集合内的对象交互的请求时,服务160可生成将第一数据操纵和第二数据操纵组合的流水线。服务160可说明性地实现标准的层级结构,使得应用于对象的操纵在应用于URI等的操纵之前放置在流水线内。
在一些实施方案中,客户端装置102可能够请求将数据操纵包括在流水线内。例如,在GET请求的参数内,客户端装置102可指定要包括在结合请求应用的流水线内的特定数据操纵。说明性地,集合所有者可指定允许用于集合的一个或多个数据操纵,并且进一步指定那些操纵的标识符(例如,函数名称)。因此,当请求与集合交互时,客户端装置102可指定标识符以致使操纵被包括在应用于I/O路径的流水线内。在一个实施方案中,客户端请求的操纵在所有者指定的数据操纵之后并且在实现所请求的请求方法之前附加到流水线的末尾。例如,在客户端装置102请求获得数据集并且请求在实施GET方法之前将搜索函数应用于数据集的情况下,搜索函数可接收针对数据集的所有者指定的数据操纵(例如,从数据集中去除机密信息的操纵)的输出作为输入数据。另外,在一些实施方案中,请求可指定要传递到一个或多个数据操纵的参数(无论是否在请求内指定)。因此,虽然本公开的实施方案可在就客户端装置102而言不知道数据操纵的情况下实现那些操纵,但其他实施方案可使客户端装置102能够在I/O请求内传递信息以用于实现数据操纵。
此外,虽然关于对被调用方法的输入数据的操纵讨论了本公开的示例实施方案,但本公开的实施方案还可用于修改请求的方面,包括被调用方法。例如,无服务器任务执行可被传递请求的内容(包括,例如,被调用方法和参数),并且被配置为修改和返回方法或参数的修改版本作为对前端162的返回值。说明性地,在客户端装置102被认证为仅能访问数据接合的一部分的用户的情况下,无服务器任务执行可被传递对“GET”该数据对象的调用,并且可变换GET请求的参数,使得它仅应用于与用户可访问的部分相对应的数据集合的特定字节范围。作为又一示例,任务可用于诸如通过限制用户可调用的方法、那些方法的参数等来实现对被调用方法的定制解析或限制。在一些情况下,将一个或多个函数应用于请求(例如,修改被调用的方法或方法参数)可被视为“数据处理前”流水线,并且因此可在获得流水线400内的输入数据之前实现(该输入数据可由于请求的变化而变化),或者可独立于数据操纵流水线400来实现。
类似地,虽然关于应用被调用方法以输出一个或多个数据操作的数据来讨论本公开的示例实施方案,但在一些实施方案中,操纵可另外地或替代地在应用被调用方法之后发生。例如,数据对象可能包含数据所有者希望在将数据提供给客户端之前去除的敏感数据。所有者还可使客户端能够指定对数据集的本机操作,诸如对数据集进行数据库查询(例如,经由SELECT资源方法)。虽然所有者可为数据集指定流水线以致使在应用SELECT方法之前执行敏感数据的过滤,但这样的操作顺序可能是不希望的,因为可相对于整个数据对象而不仅是由SELECT查询返回的部分来进行过滤。因此,除了指定在满足请求方法之前发生的操纵之外或替代地,本公开的实施方案可使所有者能够指定在应用被调用方法之后但在执行最终操作以满足请求之前发生的操纵。例如,在SELECT操作的情况下,服务160可首先针对指定的输入数据(例如,数据对象)执行SELECT操作,并且然后将该SELECT操作的输出传递到数据操纵,诸如无服务器任务执行。然后可将该执行的输出返回到客户端装置102以满足该请求。
虽然总体上参考由对象或集合的所有者创作的无服务器任务来描述图3和图4,但在一些情况下,服务160可使代码创作者能够与服务160的其他用户共享他们的任务,使得在第二用户拥有的对象的I/O路径中执行第一用户的代码。服务160还可提供任务库以供每个用户使用。在一些情况下,共享任务的代码可提供给其他用户。在其他情况下,共享任务的代码可对其他用户隐藏,使得其他用户可执行该任务但不能查看该任务的代码。在这些情况下,其他用户可说明性地能够修改代码执行的特定方面,诸如许可,代码将根据该许可执行。
参考图5A和图5B,将讨论用于向用于请求的I/O路径应用修改以将对象存储在服务160上的说明性交互,该请求结合这些图被称为“PUT”请求或“PUT对象调用”。虽然在两个图中示出,但在图5A和图5B中保持交互的编号。
交互开始于(1),其中客户端装置102A向存储服务160提交对应于将输入数据(例如,被包括或指定在调用中)存储在服务160上的请求的PUT对象调用。例如,输入数据可对应于存储在客户端装置102A上的文件。如图5A所示,该调用指向服务162的前端162,在(2)处,该前端从I/O路径修改数据存储164检索对用于该调用的I/O路径的修改的指示。该指示可反映例如要应用于在I/O路径上接收到的调用的流水线。用于调用的I/O路径通常可相对于包括在调用中的请求方法、在调用中指示的对象或对象集合、接近服务160的特定机制(例如,协议、使用的URI等)、客户端装置102A的身份或认证状态或它们的组合来指定。例如,在图5A中,所使用的I/O路径可对应于使用指向特定URI(例如,与前端162相关联)的PUT请求方法以将对象存储在服务160上的特定逻辑位置(例如,特定桶)。在图5A和图5B中,假设该逻辑位置的所有者先前已经指定了对I/O路径的修改,并且具体地,已经指定了应将无服务器功能应用于输入数据,然后将该功能的结果存储在服务160中。
因此,在(3)处,前端162检测在I/O路径的修改内对无服务器任务执行的包括。因此,在(4)处,前端162向按需代码执行系统120提交调用,以针对在调用中指定的输入数据来执行在修改中指定的任务。
在(5)处,按需代码执行系统120因此生成执行环境502,在该执行环境中执行对应于任务的代码。说明性地,该调用可指向系统的前端130,该前端可将指令分发给工作管理器140以选择或生成在其中执行任务的VM实例150,该VM实例150说明性地表示执行环境502。在执行环境502的生成期间,系统120还为环境提供在I/O路径修改中指示的任务的代码504(该代码可例如从对象数据存储166检索)。虽然图5A中未示出,但环境502还包括代码的其他依赖关系,诸如对操作系统的访问、执行代码所需的运行时等。
在一些实施方案中,执行环境502的生成可包括用限制对网络资源的访问的安全约束来配置环境502。说明性地,在任务意图在不参考网络资源的情况下进行数据操纵的情况下,环境502可被配置为不能经由网络发送或接收信息。在任务意图利用网络资源的情况下,可基于“白名单”来提供对此类资源的访问,使得仅针对指定的域、网络地址等允许来自环境502的网络通信。网络限制可例如通过托管环境502的主机装置(例如,通过管理程序或主机操作系统)来实现。在一些情况下,可利用网络访问要求来帮助在逻辑上或物理上放置环境502。例如,在任务不需要访问网络资源的情况下,该任务的环境502可放置在远离服务提供商系统110的其他网络可访问服务的主机装置上,诸如具有对那些服务的较低质量的通信信道的“边缘”装置。在任务需要访问原本专用的网络服务(诸如在虚拟私有云(例如,代表给定的用户在服务160上实现的类似局域网的环境)中实现的服务)的情况下,可创建环境502以逻辑上存在于该云内,使得任务执行502访问云内的资源。在一些情况下,任务可被配置为在提交I/O请求的客户端装置102的私有云内执行。在其他情况下,任务可被配置为在请求中引用的对象或集合的所有者的私有云内执行。
除了生成环境502之外,在(6)处,系统120为环境提供对输入文件句柄506和输出文件句柄508的流级访问,该输入文件句柄和该输出文件句柄可分别用于读取和写入任务执行的输入数据和输出数据。在一个实施方案中,文件句柄506和508可指向附接到环境502的(物理或虚拟)块存储装置(例如,磁盘驱动器),使得任务可与本地文件系统交互以读取输入数据并写入输出数据。例如,环境502可表示具有虚拟磁盘驱动器的虚拟机,并且系统120可从服务160获得输入数据并将输入数据存储在虚拟磁盘驱动器上。此后,在执行代码时,系统120可向代码传递如存储在虚拟磁盘驱动器上的输入数据的句柄以及向其写入输出数据的驱动器上的文件的句柄。在另一个实施方案中,文件句柄506和508可指向输入数据已经存储在其上的网络文件系统,诸如NFS兼容的文件系统。例如,在处理调用期间,前端162可将输入数据作为对象存储在对象数据存储166上,并且文件级接口166可提供对输入数据和表示输出数据的文件的文件级访问。在一些情况下,文件句柄506和508可指向虚拟文件系统(诸如用户空间文件系统)上的文件。通过提供句柄506和508,任务代码504能够使用流操纵来读取输入数据和写入输出数据,而不是要求实现网络传输。句柄506和508(或对应于句柄的流)的创建可说明性地通过执行在环境502内或与该环境相关联的暂存代码157来实现。
图5A的交互在图5B中继续,其中系统120执行任务代码504。由于任务代码504可以是用户创作的,因此可在代码504内实现任何数量的函数。然而,出于描述图5A和图5B的目的,假设代码504在执行时从输入文件句柄506(该输入文件句柄可作为诸如stdin的常用输入流传递)读取输入数据、操纵输入数据,并且将输出数据写入输出文件句柄508(该输出文件句柄可作为诸如stdout的常用输出流传递)。因此,在(8)处,系统120获得写入输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。出于描述图5A和图5B的目的,将假设返回值指示执行的成功。在(10)处,然后将输出数据和成功返回值传递到前端162。
虽然在图5B中被示出为单个交互,但在一些实施方案中,可分开返回任务执行的输出数据和该执行的返回值。例如,在执行期间,任务代码504可通过句柄508写入输出文件,并且该数据可周期性地或迭代地返回到服务160。说明性地,在输出文件存在于由暂存代码实现的用户空间中的文件系统上的情况下,暂存代码可检测对输出文件的每次写入并将其转发到前端162。在输出文件存在于网络文件系统上的情况下,对文件的写入可直接致使写入的数据被传输到接口166并因此传输到服务160。在一些情况下,迭代地传输写入的数据可减少环境502本地所需的存储量,因为根据一些实施方案,写入的数据可从环境502的本地存储设备删除。
另外,虽然在图5A和图5B中假设成功返回值,但其他类型的返回值是可能的并且设想其他类型的返回值。例如,错误返回值可用于向前端162指示在任务代码504的执行期间发生了错误。作为另一个示例,用户定义的返回值可用于控制流水线内的条件分支如何进行。在一些情况下,返回值可向前端162指示对进一步处理的请求。例如,任务执行可向前端162返回调用以执行另一个无服务器任务(可能未在当前I/O路径的路径修改中指定)。此外,返回值可向前端162指定要向客户端装置102A返回什么返回值。例如,在服务160处调用的典型PUT请求方法可预期返回HTTP 200代码(“OK”)。因此,来自任务代码的成功返回值可进一步指示前端162应该向客户端装置102A返回HTTP 200代码。例如,错误返回值可指示前端162应该向客户端装置102A返回3XX HTTP重定向或4XX HTTP错误代码。更进一步,在一些情况下,返回值可向前端162指定给客户端装置102A的返回消息的内容而不是返回值。例如,前端162可被配置为针对来自客户端装置102A的在前端162处被成功地检索到并调用数据处理流水线的任何请求返回给定的HTTP代码(例如,200)。任务执行然后可被配置为在其返回值内指定除了该HTTP代码之外要传递到客户端装置102A的数据。这样的数据可说明性地包括提供由任务执行生成的信息的结构化数据(例如,可扩展标记语言(XML)数据),诸如指示任务成功或失败的数据。这种方法可有益地使前端162能够快速地响应请求(例如,无需等待任务的执行),同时仍使任务执行能够将信息传递到客户端装置102。
出于本说明的目的,将假设任务的成功返回值指示应将HTTP2XX成功响应传递到装置102A。因此,在接收到输出数据时,前端162将输出数据作为对象存储在对象数据存储166内(11)。交互(11)说明性地对应于PUT请求方法的实现,该PUT请求方法最初由客户端装置102A调用,但存储任务执行的输出而不是提供的输入数据。在实现被调用的PUT请求方法之后,在(12)处,前端162向客户端装置102A返回由任务的成功返回值指示的成功指示符(例如,HTTP 200响应代码)。因此,从客户端装置102A的角度来看,对将对象PUT在存储服务160上的调用导致在服务160上创建该对象。然而,不是存储由装置102A提供的输入数据,而是存储在服务160上的对象对应于所有者指定任务的输出数据,从而使对象的所有者能够更好地控制该对象的内容。在一些使用情况下,服务160可另外地将输入数据作为对象进行存储(例如,其中所有者指定的任务对应于可执行来提供可与输入数据(诸如从输入数据生成的校验和)结合使用的输出数据的代码)。
参考图6A和图6B,将讨论用于向用于请求的I/O路径应用修改以检索服务160上的对象的说明性交互,该请求结合这些图被称为“GET”请求或“GET调用”。虽然在两个图中示出,但在图6A和图6B中保持交互的编号。
交互开始于(1),其中客户端装置102A向存储服务160提交对应于获得存储在服务160上的对象(在调用中标识)的数据的请求的GET调用。如图6A所示,该调用指向服务162的前端160,在(2)处,该前端从I/O路径修改数据存储164检索对用于该调用的I/O路径的修改的指示。例如,在图6A中,所使用的I/O路径可对应于使用指向特定URI(例如,与前端162相关联)的GET请求方法以检索在服务160上的特定逻辑位置(例如,特定桶)的对象。在图6A和图6B中,假设该逻辑位置的所有者先前已经指定了对I/O路径的修改,并且具体地,已经指定了应将无服务器功能应用于对象,然后将该功能的结果作为请求的对象返回给装置102A。
因此,在(3)处,前端162检测在I/O路径的修改内对无服务器任务执行的包括。因此,在(4)处,前端162向按需代码执行系统120提交调用,以针对在调用中指定的对象来执行在修改中指定的任务。在(5)处,按需代码执行系统120因此生成执行环境502,在该执行环境中执行对应于任务的代码。说明性地,该调用可指向系统的前端130,该前端可将指令分发给工作管理器140以选择或生成在其中执行任务的VM实例150,该VM实例150说明性地表示执行环境502。在执行环境502的生成期间,系统120还为环境提供在I/O路径修改中指示的任务的代码504(该代码可例如从对象数据存储166检索)。虽然图6A中未示出,但环境502还包括代码的其他依赖关系,诸如对操作系统的访问、执行代码所需的运行时等。
另外,在(6)处,系统120为环境提供对输入文件句柄506和输出文件句柄508的文件级访问,该输入文件句柄和该输出文件句柄可分别用于读取和写入任务执行的输入数据(对象)和输出数据。如上所讨论,文件句柄506和508可指向附接到环境502的(物理或虚拟)块存储装置(例如,磁盘驱动器),使得任务可与本地文件系统交互以读取输入数据并写入输出数据。例如,环境502可表示具有虚拟磁盘驱动器的虚拟机,并且在(6')处,系统120可从服务160获得在调用中引用的对象,并且将对象存储在虚拟磁盘驱动器上。此后,在执行代码时,系统120可向代码传递如存储在虚拟磁盘驱动器上的对象的句柄以及向其写入输出数据的驱动器上的文件的句柄。在另一个实施方案中,文件句柄506和508可指向对象已经存储在其上的网络文件系统,诸如NFS兼容的文件系统。例如,文件级接口166可提供对如存储在对象数据存储中的对象以及表示输出数据的文件的文件级访问。通过提供句柄506和508,任务代码504能够使用流操纵来读取输入数据和写入输出数据,而不是需要实现网络传输。句柄506和508的创建可说明性地通过执行在环境502内或与该环境相关联的暂存代码157来实现。
图6A的交互在图6B中继续,其中在(7)处,系统120执行任务代码504。由于任务代码504可以是用户创作的,因此可在代码504内实现任何数量的函数。然而,出于描述图6A和图6B的目的,假设代码504在执行时从输入文件句柄506(该输入文件句柄可作为诸如stdin的常用输入流传递)读取输入数据(对应于在调用内标识的对象)、操纵输入数据,并且将输出数据写入输出文件句柄508(该输出文件句柄可作为诸如stdout的常用输出流传递)。因此,在(8)处,系统120获得写入输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。然而,出于描述图6A和图6B的目的,将假设返回值指示执行的成功。在(10)处,然后将输出数据和成功返回值传递到前端162。
在接收到输出数据和返回值时,前端162将任务执行的输出数据作为请求的对象返回。因此,交互(11)说明性地对应于GET请求方法的实现,该GET请求方法最初由客户端装置102A调用,但返回任务执行的输出而不是在调用内指定的对象。从客户端装置102A的角度来看,因此,对从存储服务160GET对象的调用导致将数据作为对象返回到客户端装置102A。然而,不是返回如存储在服务160上的对象,而是提供到客户端装置102A的数据对应于所有者指定任务的输出数据,从而使对象的所有者能够更好地控制返回到客户端装置102A的数据。
类似于如上文关于图5A和图5B所讨论,虽然在图6B中被示出为单个交互,但在一些实施方案中,可分开返回任务执行的输出数据和该执行的返回值。另外,虽然在图6A和图6B中假设成功返回值,但其他类型的返回值是可能的并且设想其他类型的返回值,诸如错误值、流水线控制值或对执行其他数据操纵的调用。此外,返回值可指示将什么返回值返回给客户端装置102A(例如,作为HTTP状态代码)。在一些情况下,在从任务执行迭代地返回输出数据的情况下,输出数据也可由前端162迭代地提供给客户端装置102A。在输出数据很大的情况下(例如,大约数百兆字节、千兆字节等),将输出数据迭代地返回到客户端装置102A可使该数据能够作为流提供,从而相对于延迟数据的返回,加速将内容递送到客户端装置102A,直到完成任务的执行。
虽然上面参考图5A至图6B描述了说明性交互,但对这些交互的各种修改是可能的并且在本文中设想对这些交互的各种修改。例如,虽然上述交互涉及输入数据的操纵,但在一些实施方案中,可将无服务器任务插入服务160的I/O路径中以执行除数据操纵以外的功能。说明性地,可利用无服务器任务来执行关于被调用请求方法的验证或授权,以验证客户端装置102A被授权执行该方法。基于任务的验证或授权可支持不是由服务160本机提供的功能。例如,考虑希望将某些客户端装置102限制为仅访问在某个时间范围(例如,最后30天、除最后30天之外的任何时间等)期间创建的集合中的对象的集合所有者。虽然服务160可在每个对象或每个集合的基础上本机地提供授权,但在一些情况下,服务160可不在自创建起的持续时间的基础上本机地提供授权。因此,本公开的实施方案使所有者能够向集合的I/O路径(例如,使用集合的给定URI的GET路径)中插入无服务器任务,该无服务器任务基于对象的创建时间来确定客户端是否被授权检索请求的对象。说明性地,由任务的执行提供的返回值可对应于“授权”或“未授权”响应。在任务不执行数据操纵的情况下,可能没有必要为任务执行的环境提供输入流句柄和输出流句柄。因此,在这些情况下,服务160和系统120可被配置为放弃向环境提供此类句柄。例如,可在创建任务时指定任务是否实现数据操纵,并且将其作为任务的元数据进行存储(例如,存储在对象数据存储166内)。因此,服务160可根据该元数据确定是否应通过提供适当的流句柄来支持任务内的数据操纵。
虽然一些实施方案可利用返回值而不使用流句柄,但其他实施方案可反而利用流句柄而不使用返回值。例如,虽然上述交互涉及向存储服务160提供任务执行的返回值,但在一些情况下,系统120可被配置为基于与输出流句柄的交互来检测功能的完成。说明性地,在环境内的暂存代码(例如,提供用户空间文件系统或基于网络的文件系统)可检测到对解除分配流句柄的调用(例如,通过调用“file.close()”函数等)。暂存代码可将这样的调用解释为功能的成功完成,并且向服务160通知成功完成而不要求任务执行显式地提供返回值。
虽然上述交互通常涉及将输入数据传递到任务执行,但可将附加或替代信息传递到执行。通过非限制性示例的方式,这样的信息可包括来自客户端装置102的请求的内容(例如,传输的HTTP数据)、关于请求的元数据(例如,从其接收请求的网络地址或请求的时间)、关于客户端装置102的元数据(例如,装置的认证状态、账户时间或请求历史)或关于请求的对象或集合的元数据(例如,大小、存储位置、许可或者创建、修改或访问的时间)。此外,作为对输入数据的操纵的补充或替代方案,任务执行可被配置为修改关于输入数据的元数据,该元数据可以与输入数据一起存储(例如,存储在对象内)并且因此通过输出流句柄写入,或者可通过元数据流句柄、在返回值中包括元数据或对服务160的单独网络传输来单独存储并因此修改。
参考图7,将描述用于实现与通过I/O路径在图1的对象存储服务处获得的I/O请求相关的所有者定义的函数的说明性例程700。例程700可说明性地在I/O路径(例如,根据对象或集合、对对象或集合的访问机制(诸如URI)、传输IO请求的账户等定义)与数据操纵的流水线相关联之后实现。例如,可在上面讨论的图3的交互之前实现例程700。例程700示例性地由前端162实现。
例程700开始于框702,其中前端162获得将I/O方法应用于输入数据的请求。该请求说明性地对应于客户端装置(例如,最终用户装置)。I/O方法可对应于例如HTTP请求方法,诸如GET、PUT、LIST、DELETE等。输入数据可被包括在请求中(例如,在PUT请求中),或者在请求中被引用(例如,作为对象存储服务160上的现有对象。
在框704处,前端162确定用于请求的I/O路径中的一个或多个数据操纵。如上所述,I/O路径可基于各种标准(或其组合)来定义,诸如在请求中引用的对象或集合、通过其传输请求的URI、与请求相关联的账户等。用于每个定义的I/O路径的操纵可说明性地存储在对象存储服务160中。因此,在框704处,前端162可将用于请求的I/O路径的参数与对象存储服务160处的存储的数据操纵进行比较,以确定插入I/O路径中的数据操纵。在一个实施方案中,操纵形成先前在框704处可由前端162存储或构建(例如,通过组合应用于I/O路径的多个操纵)的流水线,诸如图4的流水线400。在一些情况下,可在请求内指定附加数据操纵,例如该数据操纵可在预先指定的数据操纵(例如,未在请求内指定)之前插入。在其他情况下,请求可排除对任何数据操纵的引用。
在框706处,前端162将I/O请求的输入数据传递到I/O路径的初始数据操纵。初始数据操纵可包括例如对象存储服务160的本机操作或由在调用中引用的对象或集合的所有者定义的无服务器任务。说明性地,在初始数据操纵是本机操纵的情况下,前端162可将输入传递到图1的对象操纵引擎170。在初始数据操作是无服务器任务的情况下,前端162可将输入传递到图1的按需代码执行系统120以经由任务的执行进行处理。下面参考图8描述用于实现无服务器任务的说明性例程。
虽然图7说明性地描述了数据操纵,但在一些情况下,所有者可将其他处理应用于I/O路径。例如,所有者可向用于对象或集合的I/O路径中插入无服务器任务,该无服务器任务独立于数据操纵来提供认证。因此,在一些实施方案中,可修改框706,使得将其他数据(诸如关于请求或在请求中指定的对象的元数据)传递到认证函数或其他路径操纵。
此后,例程700进行到框708,其中例程700的实现根据附加数据操纵是否与I/O路径相关联而变化。如果是的话,则例程700进行到框710,其中将先前操纵的输出传递到与I/O路径相关联的下一操纵(例如,流水线的后续阶段)。
在框710之后,例程700然后返回到框708,直到不存在要实现的附加操纵。例程700然后进行到框712,其中前端162将被调用的I/O方法(例如,GET、PUT、POST、LIST、DELETE等)应用于先前操纵的输出。例如,前端162可提供作为GET或LIST请求的结果的输出,或者可将作为PUT或POST请求的结果的输出存储为新对象。前端162还可向请求装置提供对请求的响应,诸如例程700的成功(或者在失败的情况下,例程的失败)的指示。在一个实施方案中,响应可由在框706或710处实现的数据操纵(例如,在错误或成功之前实现的最终操作)提供的返回值来确定。例如,指示错误(例如,缺乏授权)的操作可指定指示该错误的HTTP代码,而成功地进行的操纵可指示前端162返回指示成功的HTTP代码,或者可指示前端162返回原本与应用I/O方法相关联的代码(例如,在没有数据操纵的情况下)。此后,例程700在框714处结束。
应注意,与在初始请求中指定的输入相反,将被调用方法应用于该输出可改变存储在对象存储服务160中或从该对象存储服务检索的数据。例如,作为对象存储在服务160上的数据可能不同于在存储这种数据的请求中提交的数据。类似地,作为对象从系统检索的数据可能与存储在系统上的对象不匹配。因此,例程700的实现使数据对象的所有者能够代表所有者断言对存储在对象存储服务160上的对象或集合的I/O的更大控制。
在一些情况下,在例程700中可包括附加或替代的框,或者此类框的实现可包括附加或替代的操作。例如,如上所讨论,作为提供输出数据的补充或替代方案,无服务器任务执行可提供返回值。在一些情况下,该返回值可指示前端162在实现操纵时采取另外的动作。例如,错误返回值可指示前端162停止实现操纵,并且向请求装置提供指定的错误值(例如,HTTP错误代码)。另一个返回值可指示前端162实现附加的无服务器任务或操纵。因此,在一些情况下,例程700可被修改为包括例如在框706和710之后对先前操作的返回值进行处理(或者框708可被修改为包括对这样的值进行处理)。因此,例程700意图本质上是说明性的。
参考图8,将描述用于在图1的按需代码执行系统上执行任务以在实现所有者定义的函数期间实现数据操纵的说明性例程800。例程800说明性地由图1的按需代码执行系统120实现。
例程800开始于框802,其中系统120获得对实现流操纵任务(例如,操纵作为输入IO流句柄提供的数据的任务)的调用。例如,可结合图7的例程700的框706或710来获得调用。调用可包括任务的输入数据以及其他元数据,诸如在调用之前的请求的元数据、在调用内引用的对象的元数据等。
在框804处,系统120为任务生成执行环境。环境的生成可包括例如生成任务可在其中执行的容器或虚拟机实例,并且向该环境提供任务的代码以及代码的任何依赖关系(例如,运行时、库等)。在一个实施方案中,用与为任务指定的许可相对应的网络许可来生成环境。如上所讨论,例如根据白名单,可限制性地(而不是许可地)设置这样的许可。因此,如果I/O路径的所有者没有指定许可,则环境可能缺乏网络访问。因为任务操作来操纵流,而不是网络数据,所以这种限制性模型可提高安全性,而不会对功能性产生不利影响。在一些实施方案中,可在提供对原本受限的网络资源的访问的逻辑网络位置处生成环境。例如,可在与调用装置相关联的虚拟专用局域网(例如,虚拟私有云环境)内生成环境。
在框806处,系统120向环境暂存表示输入数据的IO流。说明性地,系统120可用包括输入数据的文件系统来配置环境,并且向任务代码传递允许访问输入数据的句柄作为文件流。例如,系统120可用网络文件系统来配置环境,从而提供对输入数据(例如,存储在对象存储系统上)的基于网络的访问。在另一个示例中,系统120可用“本地”文件系统配置环境(例如,从提供文件系统的操作系统的角度来看),并且将输入数据复制到本地文件系统。例如,本地文件系统可以是用户空间文件系统(FUSE)。在一些情况下,本地文件系统可在由环境的主机装置或由基于网络的装置(例如,作为网络可访问的块存储装置)提供的虚拟化磁盘驱动器上实现。在其他实施方案中,系统120可以通过将输入数据“管道传送”到执行环境、通过将输入数据写入环境的网络套接字(该网络套接字可能不提供对外部网络的访问)等来提供IO流。系统120还用对输出流的流级访问来配置环境,诸如通过在文件系统上为输出数据创建文件、使任务的执行能够创建这样的文件、将环境的句柄(例如,stdout)管道传送到与环境或环境的管理程序位于同一地点的另一个VM实例上的位置等。
在框808处,在环境中执行任务。任务的执行可包括执行任务的代码,以及将传递句柄或输入流和输出流的句柄传递到执行。例如,系统120可将存储在文件系统上的输入数据的句柄作为“stdin”变量传递到执行。系统还可将输出数据流的句柄传递到执行,例如,作为“stdout”变量。另外,系统120可将其他信息(诸如请求的元数据或在请求内指定的对象或集合)作为参数传递到执行。因此,任务的代码可执行以根据代码的函数对输入数据进行流操纵,并且使用OS级流操作将执行的输出写入输出流。
例程800然后进行到框810,其中系统120将写入输出流的数据作为任务的输出数据返回(例如,返回到对象存储系统的前端162)。在一个实施方案中,框810可在任务执行完成之后发生,并且因此,系统120可将写入的数据作为任务的完整输出数据返回。在其他情况下,框810可在任务执行期间发生。例如,系统120可检测写入输出流的新数据并立即返回该数据,而无需等待任务的执行。说明性地,在将输出流写入输出文件的情况下,系统120可在写入之后删除输出文件的数据,使得立即发送新数据消除了对文件系统保持足够的存储来存储任务执行的所有输出数据的需要。更进一步地,在一些实施方案中,框810可在检测到描述输出流的输出流句柄的结尾时发生。
另外,在框812处,在执行完成之后,系统120返回由执行提供的返回值(例如,返回到对象存储系统的前端162)。返回值可指定执行的结果,诸如成功或失败。在一些情况下,返回值可指定要采取的下一个动作,诸如实现附加的数据操纵。此外,返回值可指定要提供给请求对数据对象进行I/O操作的调用装置的数据,诸如要返回的HTTP代码。如上所讨论,前端162可获得这样的返回值并采取适当的动作,诸如向调用装置返回错误或HTTP代码、实现附加数据操纵、对输出数据执行I/O操作等。在一些情况下,可在任务的代码中显式地指定返回值。在其他情况下,诸如在代码中未指定返回值的情况下,可返回默认返回值(例如,指示成功的“1”)。然后,例程800在框814处结束。
图9是可由代码执行服务(诸如按需代码执行系统120)执行的说明性例程900的流程图。例程900可用于响应于对数据对象的请求而在运行时(“即时”)动态地连接或以其他方式组合多个数据对象或其部分。在一些实施方案中,例程900可用于生成包括多个数据对象、其部分或从其导出的数据的组合的响应,即使该请求未引用多个数据对象中的任何一个或所有数据对象。例程900的各方面将另外参考图10来描述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
例程900可响应于事件(诸如当图8中所示的例程到达框808时)而开始。例程900可响应于来自请求者的请求(例如,对存储在对象存储服务160中的数据的请求)而自动执行,而无需指定例程900将在生成对请求的响应之前或期间执行。例程900可以是由VM实例150或在图8所示的例程期间生成的其他执行环境502执行的任务代码504的形式的用户定义的任务、所有者定义的函数等(为了方便,在本文简称为“函数”)。在一些实施方案中,例程900或其部分可在多个处理器上串行地或并行地实现。尽管例程900的部分被描述为生成对数据对象的请求的响应,但在一些实施方案中,例程900的输出可不直接提供作为对请求的响应,而是可由下游过程用于准备对请求的响应。例如,例程900的输出(在本文也称为“函数输出”)可由流水线中的另一个例程进一步处理,或者在发送对请求的响应之前由对象存储服务160处理。因此,生成响应的描述可被解释为生成函数输出的描述,反之亦然。
在框902处,VM实例150或其他执行环境502的任务代码504或其他函数单元可接收与对数据对象的请求相关联的参数。图10在(1)处示出了执行环境502接收与请求相关联的参数。在一些实施方案中,参数可包括:包括对所请求的数据对象的引用的引用数据;包括对输出位置的引用的引用数据,函数的输出存储在该输出位置处以供对象存储服务160在响应请求时使用;有关请求的上下文数据;其他数据;或者它们的某种组合。例如,该请求可以是针对存储在对象存储服务160中的特定数据对象的资源请求,诸如GET请求。对所请求的数据对象的引用可以是执行环境502可用来访问所请求的数据对象的数据,诸如:文件描述符;文件句柄;指针;或者表示所请求的数据对象的地址或标识符的一些其他数据。对用于响应请求的输出位置的引用可以是可由执行环境502用来写入、存储或以其他方式提供函数输出数据的数据,诸如:文件描述符;文件句柄;指针;或者表示用于提供函数的输出的位置的地址或标识符的一些其他数据。上下文数据可包括有关请求的上下文的数据,诸如:请求的用户、账户或其他来源的标识符;发出请求的访问或安全配置文件的标识符;表示处理请求的访问或安全权限的数据;与请求相关联的位置的标识符;与请求相关联的语言的标识符;或者表示请求的来源的偏好或倾向的数据。
在框904处,VM实例150或其他执行环境502的任务代码504或其他函数单元可确定将使用存储在对象存储服务160中的一个或多个附加数据对象来生成响应(或函数输出,如果例程900的当前实例是流水线的一部分的话)。在一些实施方案中,该确定可基于上下文数据和/或所请求的数据对象。例如,在被请求时,特定集合中的数据对象可能需要与一个或多个附加数据对象连接或以其他方式组合。如果所请求的数据对象在特定集合中,那么一个或多个附加数据对象可与所请求的数据对象组合以产生函数输出。作为另一个示例,配置数据(诸如存储在对象存储服务160或一些其他数据存储中的记录)可标识要与所请求的数据对象组合的附加数据对象。执行环境502可在例程900期间访问记录以确定是否执行组合以及哪些附加数据对象要与所请求的数据对象组合。以此方式,附加数据对象的标识可容易地改变,而不需要对由执行环境502执行的任务代码504进行编程改变。作为另一个示例,执行环境502可对照一个或多个标准来测试一个或多个上下文数据项以确定是否执行组合以及哪些附加数据对象要与所请求的数据对象组合。如果上下文数据项满足一个或多个标准(例如,请求的源或语言具有特定标识,与请求相关联的位置在特定区域中等),那么执行环境502可确定所请求的数据对象将与一个或多个附加数据对象组合,并且还确定附加对象的标识。
在一个特定的非限制性实施方案中,所请求的数据对象可以是媒体文件,诸如视频文件、音频文件等。媒体文件可属于媒体文件集合,诸如由实体拥有或管理的桶。实体可指定附加媒体文件(诸如介绍、预览或广告)可能需要与集合中的每个媒体文件组合,或以其他方式与集合中的每个媒体文件一起被包括在响应中。执行环境502可确定所请求的数据对象是集合中的媒体文件,并且基于媒体文件的这个属性,执行环境502可确定附加媒体文件将被包括在响应中。附加媒体文件(或多个附加媒体文件)的标识可由用于执行确定的代码指定,或者可在运行时动态地确定(例如,通过访问数据存储中的配置数据)。
在另一个特定的非限制性实施方案中,所请求的数据对象可以是数据文件,诸如电子表格、定界文件或数据记录的其他集合。数据记录可形成要响应于对数据对象的请求而返回的数据记录的子集。执行环境502可确定将使用一个或多个附加数据对象(诸如包括数据记录的附加子集的附加数据文件)来生成对请求的响应。可基于与请求相关联的上下文、所请求的数据对象的属性(例如,存储所请求的数据对象的桶)等动态地确定特定的附加数据对象。例如,来自一个或多个附加数据对象的区域数据记录的子集可基于与请求相关联的位置来识别,并且可在响应于请求时与所请求的数据对象组合。
即使在对所请求的数据对象的请求(例如,GET资源请求)引用所请求的数据对象而不引用附加数据对象的情况下,也可执行本文讨论的示例组合。
在框906处,VM实例150或其他执行环境502的任务代码504或其他函数单元可获得对附加数据对象的引用。在一些实施方案中,执行环境502可请求、接收或以其他方式访问一种机制,通过该机制,执行环境502可与对象存储服务160通信以请求在例程900的执行期间动态地确定的数据(例如,在执行环境502已经暂存并且被提供对所请求的数据对象的访问之后)。例如,执行环境502可接收对执行环境502可用于发出对对象存储服务160的附加请求的网络套接字(例如,控制平面句柄)的引用。使用该机制,执行环境502可请求和接收对附加数据对象的引用(例如,文件句柄、指针等)。图10在(2)处示出了执行环境502获得对附加数据对象的引用。
在框908处,VM实例150或其他执行环境502的任务代码504或其他函数单元可获得用于响应请求的初始数据对象。初始数据对象从它是在一个或多个后续数据对象之前获得和/或使用的意义上是“初始的”。初始数据对象可以是所请求的数据对象或附加数据对象,这取决于如何构造响应。例如,如果要在所请求的数据对象之前提供诸如介绍或预览的附加数据对象,则执行环境502可使用对附加数据对象的引用来访问附加数据对象。作为另一个示例,如果要在所请求的数据对象之后插入或提供附加数据对象,则执行环境502可使用对所请求的数据对象的引用来访问所请求的数据对象。图10在(3)处示出了执行环境502获得初始数据对象。在一些实施方案中,初始数据对象可能不是在框908处从对象存储服务160获得的,而是可预先提供到执行环境502。例如,在执行环境的暂存期间,可获得初始数据对象(例如,所请求的数据对象)并将其存储在执行环境502的计算装置上。作为另一个示例,当获得附加数据对象的引用数据时,可在执行环境502的计算装置上在由引用数据指示的位置处获得和存储附加数据对象。
在框910处,VM实例150或其他执行环境502的任务代码504或其他函数单元可使用上面获得的初始数据对象来准备响应的初始部分。图10在(4)处示出了执行环境502准备响应的初始部分。准备响应的初始部分可涉及使用对用于响应请求的输出位置的引用来写入初始数据对象的至少一部分。例如,执行环境502可确定是否在响应中包括整个初始数据对象或其一部分。作为另一个示例,执行环境502可确定是否修改初始数据对象或其一部分,诸如通过去除数据、添加数据、更改数据、改变初始数据对象的格式、改变与数据对象相关联的元数据等来修改。说明性地,执行环境502可添加或修改初始数据对象的标头、调整初始数据对象的格式以与后续数据对象兼容等。这些确定可基于上面接收到的参数(例如,所请求的数据对象的属性、上下文数据等)。执行环境502然后可将确定的数据放置在输出位置。在一些实施方案中,执行环境502可首先将初始数据存储在临时内部存储位置,以便稍后放置在输出位置。
在判定框912处,VM实例150或其他执行环境502的任务代码504或其他函数单元可确定是否有附加数据要包括在响应中。如上所讨论,响应可基于所请求的数据对象和一个或多个附加数据对象。执行环境502可确定是否已经包括所有数据。如果不是的话,则例程900可进行到框914。否则,如果已经包括了要包括在响应中的所有数据,则例程900可进行到框918。图10示出了在(5)处执行环境502确定附加数据要被包括在响应中。
在框914处,VM实例150或其他执行环境502的任务代码504或其他函数单元可获得用于响应请求的后续数据对象。与上面讨论的初始数据对象一样,后续数据对象可以是所请求的数据对象或附加数据对象,这取决于如何构造响应。后续数据对象从它是在初始数据对象之后获得或使用的意义上是“后续的”。例如,如果在如上所讨论的响应的初始部分中访问并包括附加数据对象(诸如介绍或预览),则执行环境502可使用对所请求的数据对象的引用来访问所请求数据对象以包括在响应的后续部分中。图10在(6)处示出了执行环境502获得后续数据对象。在一些实施方案中,后续数据对象可能不是在框914处从对象存储服务160获得的,而是可预先提供到执行环境502。例如,在执行环境的暂存期间,可获得后续数据对象(例如,所请求的数据对象)并将其存储在执行环境502的计算装置上。作为另一个示例,当获得附加数据对象的引用数据时,可在执行环境502的计算装置上在由引用数据指示的位置处获得和存储附加数据对象。
在框916处,VM实例150或其他执行环境502的任务代码504或其他函数单元可使用上面获得的后续数据对象来准备响应的后续部分。图10在(7)处示出了执行环境502准备响应的后续部分。准备响应的后续部分可涉及使用对用于响应请求的输出位置的引用来写入后续数据对象的至少一部分。例如,执行环境502可确定是否在响应中包括整个后续数据对象或其一部分。作为另一个示例,执行环境502可确定是否修改后续数据对象或其一部分,诸如通过去除数据、添加数据、更改数据、改变后续数据对象的格式、改变与数据对象相关联的元数据等来修改。说明性地,执行环境502可从后续数据对象去除标头、调整后续数据对象的格式以与初始数据对象兼容等。这些确定可基于上面接收到的参数(例如,所请求的数据对象的属性、上下文数据等)。执行环境502然后可将确定的数据放置在输出位置。在一些实施方案中,执行环境502可首先将初始数据存储在临时内部存储位置,以便稍后放置在输出位置。例程900可返回到判定框912以确定附加数据是否将被包括在响应中。
在框918处,VM实例150或其他执行环境502的任务代码504或其他函数单元可最终确定函数的输出。最终确定函数的输出可包括将由对输出位置的引用标识的输出流或文件结尾和/或向对象存储服务160提供返回值(例如,指示成功、失败或函数执行的一些其他特性)。在一些实施方案中,可在将输出流结尾之前执行附加处理。例如,执行环境502可生成和写入描述输出的属性的元数据,诸如输出的大小或供消耗输出的装置使用的标头信息。该例程可在框920处终止。
在一些实施方案中,函数的输出可被缓存,使得函数不需要在每次要使用对象时检索并处理所请求的数据对象和/或附加数据对象。相反,函数可确定函数输出是否已被缓存,并且如果是的话,则确定缓存的输出是否已到期。如果缓存的输出没有到期,则函数可获得缓存的函数输出并将其作为函数的输出提供,或者从缓存的函数输出中导出当前的函数输出。函数输出可本地缓存在执行环境内(例如,在其上运行任务代码504或VM实例150的其他函数单元的服务器机器上),或者缓存在网络可访问数据存储(例如,高速专用高速缓存服务器、对象存储服务160的缓存部分等)中。在一些实施方案中,缓存的函数输出可被标记或以其他方式与用于确定组合哪些数据对象以产生输出的上下文数据相关联。以此方式,函数可分析相关联的上下文数据以确定哪个缓存的输出(如果有的话)适合用于基于与后续请求相关联的上下文数据来响应后续请求。在一些实施方案中,作为输入提供给函数或在执行期间由函数以其他方式访问的数据对象可被缓存,使得不需要在每次执行函数时从对象存储服务160获得数据对象。
在一些实施方案中,由例程900请求和提供的数据对象可能不是这样存储在对象存储服务160中的数据对象(或其部分)。相反,例程900可动态地生成引用一个或多个存储的数据对象或其部分或者包括从一个或多个存储的数据对象导出的数据的复合对象定义,诸如清单。例如,所请求的数据对象可以是与对象存储服务160中的数据对象相对应的媒体内容,并且可能需要在数据对象之前呈现附加数据对象(诸如介绍)。例程900可生成可由计算装置用于以在例程900的执行期间动态地确定的正确顺序提交对各个数据对象的后续请求的清单。在该示例中,初始数据对象是附加数据对象,并且响应的初始部分的准备包括在清单中引用附加数据对象。后续数据对象是所请求的媒体内容的数据对象,并且响应的后续部分的准备包括在清单中引用数据对象。所请求的数据对象和由函数产生的输出是使用关于存储在对象存储服务160中的数据对象的数据动态地生成的清单。因此,所请求的数据对象可能不是实际存储在对象存储服务160中的数据对象。
在一些实施方案中,请求可包括或引用存储在对象存储服务160中的数据对象(或其部分)的清单。代替获得所引用的数据对象或部分并以组合形式(在单个数据流中或作为多个数据流的组合)返回它们,例程900可确定向清单中列出的那些添加数据对象或其部分和/或从中去除数据对象或其部分。例如,例程900可使用上述任何方法来确定哪个或哪些未具体地请求的附加数据对象将被包括在对请求的响应中。例程900然后可在单个数据流中或作为多个数据流的组合提供输出,该输出是一组动态地确定的数据对象或部分的组合。
图11是可由代码执行服务(诸如按需代码执行系统120)执行以在运行时响应于对数据对象的请求而动态地掩蔽、加扰、模糊或以其他方式呈现所请求的数据对象的不可理解(为方便起见,在本文中统称为“模糊”)部分的说明性例程1100的流程图。尽管例程1100的部分被描述为生成对数据对象的请求的响应,但在一些实施方案中,例程1100的输出可不直接提供作为对请求的响应,而是可由下游过程用于准备对请求的响应。例如,函数输出可由流水线中的另一个例程进一步处理,或者在发送对请求的响应之前由对象存储服务160处理。因此,生成响应的描述可被解释为生成函数输出的描述,反之亦然。例程1100的各方面将参考图12来描述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
例程1100可响应于事件(诸如当图8中所示的例程到达框808时)而开始。例程1100可响应于来自请求者的请求(例如,对存储在对象存储服务160中的数据的请求)而自动执行,而无需指定例程1100将在生成对请求的响应之前或期间执行。例如,例程1100可以是由VM实例150或在图8所示的例程期间生成的其他执行环境502执行的所有者定义的函数等(也称为用户定义的任务)。在一些实施方案中,例程1100或其部分可在多个处理器上串行地或并行地实现。
在框1102处,VM实例150或其他执行环境502的任务代码504或其他函数单元可接收与对数据对象的请求相关联的参数。图12在(1)处示出了执行环境502接收与请求相关联的参数。在一些实施方案中,参数可包括:包括对所请求的数据对象的引用的引用数据;对输出位置的引用,函数的输出存储在该输出位置处以供对象存储服务160在响应请求时使用;有关请求的上下文数据;其他数据;或者它们的某种组合。例如,该请求可以是针对存储在对象存储服务160中的特定数据集或其他数据对象的资源请求,诸如GET或SELECT请求。对所请求的数据对象的引用可以是执行环境502可用来访问所请求的数据对象的数据,诸如:文件描述符;文件句柄;指针;或者表示所请求的数据对象的地址或标识符的一些其他数据。对用于响应请求的输出位置的引用可以是可由执行环境502用来写入、存储或以其他方式提供函数输出数据的数据,诸如:文件描述符;文件句柄;指针;或者表示用于提供函数的输出的位置的地址或标识符的一些其他数据。上下文数据可包括有关请求的上下文的数据,诸如:请求的用户、账户或其他来源的标识符;发出请求的访问或安全配置文件的标识符;表示处理请求的访问或安全权限的数据;与请求相关联的位置的标识符;与请求相关联的语言的标识符;或者表示请求的来源的偏好或倾向的数据。
在框1104处,VM实例150或其他执行环境502的任务代码504或其他函数单元可使用引用数据来获得所请求的数据对象。可以未模糊或基本未模糊的形式获得所请求的数据对象。图12在(2)处示出了执行环境502获得所请求的数据对象。在一些实施方案中,所请求的数据对象可能不是在框1104处从对象存储服务160获得的,而是可预先提供到执行环境502。例如,在执行环境的暂存期间,可在由引用数据指示的位置处获得所请求的数据对象并将其存储在执行环境502的计算装置上。
在框1106处,VM实例150或其他执行环境502的任务代码504或其他函数单元可确定所请求的数据对象的一个或多个部分将被模糊。在一些实施方案中,该确定可基于上下文数据和/或所请求的数据对象。执行环境502可对照一个或多个标准来测试一个或多个上下文数据项以确定是否执行模糊以及对所请求的数据对象的哪些部分进行模糊。如果上下文数据项满足一个或多个标准,那么执行环境502可确定所请求的数据对象的一个或多个部分将被模糊,使得对请求的响应的接收者不能理解被模糊的部分。在测试标准和确定是否模糊数据对象的部分时,对同一数据对象但与不同的上下文数据或其他属性相关联的不同请求可能会导致不同的结果。在一些实施方案中,所请求的数据对象的不同部分可与用于非模糊访问的不同标准相关联。在此类情况下,执行环境502可针对相关联部分中的每一者来测试标准。图12在(3)处示出了执行环境502确定将所请求的数据对象的部分模糊。
对照标准来测试上下文数据可包括:确定请求的来源被禁止访问未模糊形式的部分,确定与请求相关联的位置被禁止访问未模糊形式的部分,或者确定与请求相关联的访问权限或安全配置文件被禁止访问未模糊形式的部分。在一些实施方案中,可执行对照标准来测试上下文数据以确定所请求的数据对象的一部分被准许以非模糊形式访问,而不是确定该部分被禁止以非模糊形式访问。例如,对照标准来测试上下文数据可包括:确定请求的来源被准许访问未模糊形式的部分,确定与请求相关联的位置被准许访问未模糊形式的部分,或者确定与请求相关联的访问权限或安全配置文件被准许访问未模糊形式的部分。
在一个特定的非限制性实施方案中,所请求的数据对象可以是数据文件,诸如电子表格、定界文件或数据记录的其他集合。如果请求满足一个或多个标准,则数据文件的一些部分(诸如记录集合、列或数据字段的集合等)可仅被准许以未模糊的形式访问。执行环境502可确定由上下文数据指示的或以其他方式与请求相关联的请求的属性未能满足用于所请求的数据对象的特定记录、列和/或字段的标准。执行环境502可基于该未能满足标准来确定所请求的数据对象的特定记录、列和/或字段在被作为函数的输出提供之前将被模糊。
在框1108处,VM实例150或其他执行环境502的任务代码504或其他函数单元可选择性地将模糊应用于上面确定的所请求的数据对象的部分。图12在(4)处示出了执行环境502将所请求的数据对象的部分模糊。将所请求数据对象的一部分的内容模糊可涉及使用一种或多种模糊方法,诸如以伪随机方法对内容进行加扰、生成内容的散列、用令牌替换内容等。例如,当用令牌替换内容时,任务代码504可标识映射到数据存储(诸如关键值数据库、关系数据库、对象存储服务160或另一个网络可访问数据存储)中的内容的令牌。在一些实施方案中,不同的模糊方法可用于数据对象的不同部分、不同的数据对象、不同的上下文数据标准等。
在一些实施方案中,模糊方法可由拥有或负责数据对象的实体指定。例如,一个实体可指定将特定类型的模糊(例如,医学领域中的行业标准模糊方法)用于数据对象或数据对象桶,而另一个实体可指定将不同类型的模糊(例如,使用令牌到数据的映射的令牌化)用于不同的数据对象或数据对象桶。如果没有指定模糊方法,则执行环境502可应用默认模糊方法。
在框1110处,VM实例150或其他执行环境502的任务代码504或其他函数单元可提供选择性地模糊的所请求的数据对象作为函数的输出。例如,执行环境502可将选择性地模糊的所请求的数据对象放置在由引用数据指示的输出位置,并且最终确定输出。最终确定函数的输出可包括将由对输出位置的引用标识的输出流或文件结尾和/或向对象存储服务160提供返回值(例如,指示成功、失败或函数执行的一些其他特性)。图12在(5)处示出了执行环境502提供选择性地模糊的所请求的数据对象作为输出。例程1100可在框1112处终止。
在一些实施方案中,函数的输出可被缓存,使得函数不需要在每次要使用对象时检索并处理所请求的数据对象来生成选择性地模糊的数据对象。相反,函数可确定函数输出是否已被缓存,并且如果是的话,则确定缓存的输出是否已到期。如果缓存的输出没有到期,则函数可获得缓存的函数输出并将其作为函数的输出提供,或者从缓存的函数输出中导出当前的函数输出。函数输出可本地缓存在执行环境内(例如,在其上运行任务代码504或VM实例150的其他函数单元的服务器机器上),或者缓存在网络可访问数据存储(例如,高速专用高速缓存服务器、对象存储服务160的缓存部分等)中。在一些实施方案中,缓存的函数输出可被标记或以其他方式与用于确定所请求的数据对象的哪些部分要选择性地模糊的上下文数据相关联。以此方式,函数可分析相关联的上下文数据以确定哪个缓存的输出(如果有的话)适合用于基于与后续请求相关联的上下文数据来响应后续请求。在一些实施方案中,作为输入提供给函数或在执行期间由函数以其他方式访问的数据对象可被缓存,使得不需要在每次执行函数时从对象存储服务160获得数据对象。
图13是可由代码执行服务(诸如按需代码执行系统120)执行以在运行时响应于对数据对象的请求而动态地确定所请求的数据对象的经过滤子集来提供的说明性例程1300的流程图。尽管例程1300的部分被描述为生成对数据对象的请求的响应,但在一些实施方案中,例程1300的输出可不直接提供作为对请求的响应,而是可由下游过程用于准备对请求的响应。例如,函数输出可由流水线中的另一个例程进一步处理,或者在发送对请求的响应之前由对象存储服务160处理。因此,生成响应的描述可被解释为生成函数输出的描述,反之亦然。例程1300的各方面将参考图14来描述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
例程1300可响应于事件(诸如当图8中所示的例程到达框808时)而开始。例程1300可响应于来自请求者的请求(例如,对存储在对象存储服务160中的数据的请求)而自动执行,而无需指定例程1300将在生成对请求的响应之前或期间执行。例如,例程1300可以是由VM实例150或在图8所示的例程期间生成的其他执行环境502执行的所有者定义的函数等(也称为用户定义的任务)。在一些实施方案中,例程1300或其部分可在多个处理器上串行地或并行地实现。
在框1302处,VM实例150或其他执行环境502的任务代码504或其他函数单元可接收与对数据对象的请求相关联的参数。图14在(1)处示出了执行环境502接收与请求相关联的参数。在一些实施方案中,参数可包括:包括对所请求的数据对象的引用的引用数据;对输出位置的引用,函数的输出存储在该输出位置处以供对象存储服务160在响应请求时使用;有关请求的上下文数据;其他数据;或者它们的某种组合。例如,该请求可以是针对存储在对象存储服务160中的特定数据对象的资源请求,诸如GET请求。对所请求的数据对象的引用可以是执行环境502可用来访问所请求的数据对象的数据,诸如:文件描述符;文件句柄;指针;或者表示所请求的数据对象的地址或标识符的一些其他数据。对用于响应请求的输出位置的引用可以是可由执行环境502用来写入、存储或以其他方式提供函数输出数据的数据,诸如:文件描述符;文件句柄;指针;或者表示用于提供函数的输出的位置的地址或标识符的一些其他数据。上下文数据可包括有关请求的上下文的数据,诸如:请求的用户、账户或其他来源的标识符;发出请求的访问或安全配置文件的标识符;表示处理请求的访问或安全权限的数据;与请求相关联的位置的标识符;与请求相关联的语言的标识符;或者表示请求的来源的偏好或倾向的数据。
在框1304处,VM实例150或其他执行环境502的任务代码504或其他函数单元可使用引用数据来获得所请求的数据对象。图14在(2)处示出了执行环境502获得所请求的数据对象。在一些实施方案中,所请求的数据对象可能不是在框1104处从对象存储服务160获得的,而是可预先提供到执行环境502。例如,在执行环境的暂存期间,可在由引用数据指示的位置处获得所请求的数据对象并将其存储在执行环境502的计算装置上。
在框1306处,VM实例150或其他执行环境502的任务代码504或其他函数单元可确定所请求的数据对象的一个或多个部分将被从函数的输出排除并且因此不响应于请求而提供到请求装置。在一些实施方案中,该确定可基于上下文数据和/或所请求的数据对象。例如,执行环境502可对照一个或多个标准来测试一个或多个上下文数据项以确定是否排除所请求数据对象的一个或多个部分,并且确定要排除所请求的数据对象的哪个或哪些部分。如果上下文数据项满足一个或多个标准,那么执行环境502可确定将所请求的数据对象的一个或多个部分从函数的输出中排除。在测试标准和确定是否排除数据对象的部分时,对同一数据对象但与不同的上下文数据或其他属性相关联的不同请求可能会导致不同的结果。在一些实施方案中,所请求的数据对象的不同部分可与用于排除的不同标准相关联。在此类情况下,执行环境502可针对相关联部分中的每一者来测试标准。
对照标准来测试上下文数据可包括:确定请求的来源被禁止访问该部分,确定与请求相关联的位置被禁止访问该部分,或者确定与请求相关联的访问权限或安全配置文件被禁止访问该部分。在一些实施方案中,可执行对照标准来测试上下文数据以确定所请求的数据对象的一部分被准许访问,而不是确定该部分被禁止访问。例如,对照标准来测试上下文数据可包括:确定请求的来源被准许访问该部分,确定与请求相关联的位置被准许访问该部分,或者确定与请求相关联的访问权限或安全配置文件被准许访问该部分。
图14在(3)处示出了执行环境502确定将所请求的数据对象的部分排除。在一些实施方案中,如图所示,可存在多个请求来源1402和1404。来自这些请求来源1402和1404的请求可由执行环境502不同地处理,使得函数的输出以及最终返回到相应请求来源1402和1404的响应可能不同,即使两个请求来源1402和1404请求相同的数据对象也是如此。处理请求的方式的差异可基于使用不同请求来源1402和1404的不同用户、不同请求源1402和1404位于不同地理区域,或者指派给请求来源1402和1404本身的不同访问许可。例如,存储在对象存储服务160上的数据对象桶的所有者可配置多个不同的请求来源或“门户”(例如,向对象存储服务160提供接口的服务器)以访问桶中的数据对象。所有者然后可将不同的访问许可指派给不同的门户。此后,所有者可根据用户所需的访问许可来指导用户使用不同的门户。
在一个特定的非限制性实施方案中,所请求的数据对象可以是数据文件,诸如电子表格、定界文件、列表数据文件、结构化数据文件或数据记录的其他集合。只有在请求满足一个或多个标准的情况下,才可准许访问数据文件的一些部分,诸如记录的子集、列的子集、数据字段或类(例如,存储个人可识别信息或“PII”的那些)的子集等。例如,只有在请求与某些访问权限相关联的情况下才可访问部分。作为另一个示例,只有在请求的来源与特定位置或区域相关联的情况下才可访问部分。作为又一个示例,只有在从特定来源或来源的子集(例如,门户、端点等)接收到请求的情况下才可访问部分。执行环境502可确定由上下文数据指示或以其他方式与请求相关联的请求的属性满足将所请求的数据对象的特定部分从响应中排除的标准(或者替代地,不满足将所请求的数据对象的特定部分包括在响应中的标准)。执行环境502可基于关于一个或多个标准的该测试来确定将从函数的输出中排除所请求的数据对象的特定部分。在一些实施方案中,所请求的数据对象的不同部分可与不同的标准访问相关联。在此类情况下,执行环境502可针对相关联部分中的每一者来测试标准。
在另一个特定的非限制性实施方案中,所请求的数据对象可以具有元数据,诸如表示作者、编辑者、创建日期、修改日期、大小、格式、位置、版本、图像捕获或编码属性、音频捕获或编码的数据属性、视频捕获或编码属性、相机属性、硬件能力、软件能力等的数据。元数据可嵌入在数据对象内(例如,在数据对象的标头或保留部分中),或者在外部与数据对象相关联(例如,在目录中)。只有在请求满足一个或多个标准的情况下,才可准许访问元数据的一些部分,诸如元数据的各个项、预定义的元数据、元数据分组或动态确定的元数据分组(或者替代地,如果请求满足一个或多个标准,则可禁止访问)。例如,只有在请求与某些访问权限相关联的情况下才可访问部分。作为另一个示例,只有在请求的来源与特定位置或区域相关联的情况下才可访问部分。作为又一个示例,只有在从特定来源或来源的子集(例如,门户、端点等)接收到请求的情况下才可访问部分。执行环境502可确定由上下文数据指示的或以其他方式与请求相关联的请求的属性未能满足用于所请求的数据对象的特定部分的标准。执行环境502可基于该未能满足标准来确定将从函数的输出中排除所请求的数据对象的元数据的特定部分,使得不能响应于请求或由流水线中的其他下游函数来访问它们。在一些实施方案中,所请求的数据对象的不同元数据部分可与不同的标准访问相关联。在此类情况下,执行环境502可针对相关联部分中的每一者来测试标准。
在又一个特定的非限制性实施方案中,可以、使用该函数处理的所请求数据对象不限于这样存储在对象存储服务160上的数据对象。替代地或附加地,所请求的数据对象可以是动态生成的数据对象,诸如包括关于存储在对象存储服务160上的其他数据对象的数据的数据对象。例如,资源请求(诸如LIST请求)不是对存储在对象存储服务160上的预先存在的数据对象的请求,而是对关于存储在对象存储服务器160上的数据对象的信息的请求,诸如对象存储服务160的特定数据对象组(例如,桶或目录)中的数据对象列表、关于对象存储服务160的数据对象组的信息、关于用于表示对象存储服务160的用户或用户组的数据对象的信息等。所请求的信息可以是标识符、总结、目录信息、元数据等。可能希望限制响应于LIST函数识别的数据对象,诸如通过将LIST仅限于满足一个或多个标准的那些数据对象(或者替代地,通过从LIST列表中排除关于满足一个或多个标准的那些对象的数据)。例如,只有在请求与某些访问权限相关联的情况下才可识别一些数据对象。作为另一个示例,只有在请求的来源与特定位置或区域相关联的情况下才可识别一些数据对象。作为又一个示例,只有在从特定来源或来源的子集(例如,门户、端点等)接收到请求的情况下才可识别一些数据对象。执行环境502可确定由上下文数据指示的或以其他方式与请求相关联的请求的属性未能满足用于原本将被识别的特定数据对象的标准。执行环境502可基于该未能满足标准来确定在函数的输出中未识别出特定数据对象,使得不能响应于请求或由流水线中的其他下游函数来识别它们。在一些实施方案中,不同的数据对象可与不同的标准访问相关联。在此类情况下,执行环境502可针对相关联数据对象中的每一者来测试标准。
在另一个特定的非限制性实施方案中,代替或补充将数据对象的部分从函数的输出中排除,可对可使用该函数处理的所请求的数据对象进行变换。变换可包括对数据的修改、对格式的修改、加密的应用等。例如,执行环境502可针对资源请求(诸如对媒体文件的GET请求)来确定通过施加水印、改变分辨率或比特率、合并版权声明等修改媒体文件。作为另一个示例,执行环境502可对数据对象应用加密。可基于与上下文数据相关联的标准、与所请求的数据对象本身相关联的标准等动态地确定这些变换的应用。执行环境502可确定由上下文数据指示的或以其他方式与请求相关联的请求的属性满足或未能满足特定标准。例如,对请求的来源的不同访问权限级别可能致使执行环境502施加水印、缩小分辨率或比特率、提供具有水印或不同分辨率或比特率的替代数据对象等。作为另一个示例,可用于由请求的来源解密的不同加密级别(如上下文数据所指示)可致使执行环境502基于来源被配置为解密的加密来动态地选择加密方法。
在框1308处,VM实例150或其他执行环境502的任务代码504或其他函数单元可选择性地排除所请求的数据对象的部分和/或以其他方式将变换应用于如上面确定的所请求的数据对象。图14在(4)处示出了执行环境502选择性地排除所请求的数据对象的部分。选择性地排除所请求的数据对象的一部分的内容可涉及生成数据对象的不包括被确定为排除的部分的输出版本。例如,执行环境502可从输入文件或流中读取数据对象的内容(例如,使用引用数据,诸如所请求的数据对象的文件描述符),并且将非排除部分写入输出文件或流(例如,使用引用数据,诸如函数输出的文件描述符),而不写入要从函数输出中排除的部分。因此,对于已经选择性地排除了部分的数据对象的接收者来说,数据对象可能看起来从未包括那些部分。执行环境502还可应用一个或多个变换以确保数据对象保留有效格式或配置。例如,从LIST函数的输出中排除某些数据(其中排除的数据标识特定数据对象)可能不仅涉及排除识别数据,而且涉及排除或修改原本将在函数输出中显示为空对象或空值的结构或格式化数据(例如,标记标签、字段定义等)。
在框1310处,VM实例150或其他执行环境502的任务代码504或其他函数单元可提供选择性地过滤的所请求的数据对象(已从中排除某些部分)作为函数的输出。例如,执行环境502可将所请求的数据对象放置在由引用数据指示的输出位置,并且最终确定输出。最终确定函数的输出可包括将由对输出位置的引用标识的输出流或文件结尾和/或向对象存储服务160提供返回值(例如,指示成功、失败或函数执行的一些其他特性)。图14在(5)处示出了执行环境502提供选择性地过滤的所请求的数据对象作为输出。该例程可在框1312处终止。
在一些实施方案中,函数的输出可被缓存,使得函数不需要在每次要使用对象时检索并处理所请求的数据对象来生成选择性地过滤的所请求的数据对象。相反,函数可确定函数输出是否已被缓存,并且如果是的话,则确定缓存的输出是否已到期。如果缓存的输出没有到期,则函数可获得缓存的函数输出并将其作为函数的输出提供,或者从缓存的函数输出中导出当前的函数输出。函数输出可本地缓存在执行环境内(例如,在其上运行任务代码504或VM实例150的其他函数单元的服务器机器上),或者缓存在网络可访问数据存储(例如,高速专用高速缓存服务器、对象存储服务160的缓存部分等)中。在一些实施方案中,缓存的函数输出可被标记或以其他方式与用于确定所请求的数据对象的哪些部分要选择性地排除的上下文数据相关联。以此方式,函数可分析相关联的上下文数据以确定哪个缓存的输出(如果有的话)适合用于基于与后续请求相关联的上下文数据来响应后续请求。在一些实施方案中,作为输入提供给函数或在执行期间由函数以其他方式访问的数据对象可被缓存,使得不需要在每次执行函数时从对象存储服务160获得数据对象。
在一些实施方案中,执行环境502可响应于对数据对象的请求而对存储在对象存储服务160中的数据执行变换。例如,对数据对象的内容、格式和/或保留的要求可能会随着时间而改变,或者可能会达到此类改变的到期日期。代替在要求改变或达到到期日期时主动执行对数据对象的变换以反映对数据对象的当前内容、格式和/或保留要求,数据对象可在对象存储服务160中保持不变或基本上不变,直到下次访问它们。当接收到对数据对象的后续请求时,对象存储服务160和/或执行环境502可确定要应用变换,并且可在响应对数据对象的请求之前应用变换。即使请求是仅接收数据对象的请求而不是修改或删除数据对象的请求,也可应用变换。在某些情况下,这种“适时”变换可能是期望的,以减少在要求改变时立即将变换应用于所有数据对象的计算费用。例如,如果需要变换大量数据,或者当预期对受影响数据对象的后续请求很少时,桶所有者或其他实体可能更愿意推迟应用变换,直到访问受影响的数据对象。
图14示出了执行环境502响应于接收到对接收数据对象的请求而在(2A)处将适时变换应用于存储在对象存储服务160中的数据对象。尽管适时变换被示出为结合用于选择性排除数据对象部分的例程1300的操作发生,但可结合本文所述的任何其他例程、结合任何其他所有者定义的函数或所有者定义的任务、在具有多个函数的流水线中等执行适时变换。
本公开的实施方案可由以下非限制性条款定义:
条款1.一种系统,所述系统包括:
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务存储多个数据对象;以及
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(I/O)路径中按需执行函数的一个或多个计算装置;
其中所述对象存储服务被配置为至少:
接收对所述多个数据对象中的请求的数据对象的请求,其中所述多个数据对象包括要与所述请求的数据对象组合的附加数据对象,并且其中所述请求不引用所述附加数据对象;
确定将在对所述请求作出响应之前执行与所述请求的数据对象相关联的函数;
生成请求的文件句柄,其中可使用所述请求的文件句柄从所述对象存储服务读取所述请求的数据对象;以及
将所述请求和所述请求的文件句柄发送到所述代码执行服务;并且
其中所述代码执行服务被配置为至少:
从所述对象存储服务接收对所述请求的数据对象和所述请求的文件句柄的请求;
确定所述响应将包括所述请求的数据对象和所述附加数据对象;
获得附加文件句柄,其中可使用所述附加文件句柄从所述对象存储服务读取所述附加数据对象;
使用所述附加文件句柄来获得所述附加数据对象;
使用所述请求的文件句柄来获得所述请求的数据对象;以及
生成包括所述请求的数据对象和所述附加数据对象的组合的响应。
条款2.如条款1的系统,其中所述请求的数据对象包括第一媒体文件,其中所述附加数据对象包括第二媒体文件,并且其中将在呈现所述第一媒体文件的内容的至少一部分之前呈现所述第二媒体文件的内容。
条款3.如条款1的系统,其中所述请求的数据对象包括表示第一记录集合的第一数据文件,其中所述附加数据对象包括表示第二记录集合的第二数据文件,并且其中在所述响应中,所述第二记录集合的至少一部分在所述第一记录集合的至少一部分之前。
条款4.如条款1的系统,其中所述代码执行服务还被配置为确定要对所述请求的数据对象或所述附加数据对象中的至少一者进行的修改,以在所述响应中将所述请求的数据对象和所述附加数据对象组合,其中所述确定的修改包括以下至少一项:去除标头、替换元数据值或排除数据对象部分。
条款5.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收对存储在数据存储中的第一数据对象的请求,其中所述请求不引用第二数据对象;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述第一数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)路径中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
确定将使用所述第一数据对象和所述第二数据对象来生成所述响应;
获得所述第一数据对象和所述第二数据对象;以及
生成包括所述第一数据对象的至少一部分和所述第二数据对象的至少一部分的函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
条款6.如条款5的计算机实现的方法,所述计算机实现的方法还包括获得与所述请求相关联的上下文数据,其中确定将使用所述第一数据对象和所述第二数据对象来生成所述响应是至少部分地基于所述上下文数据。
条款7.如条款5的计算机实现的方法,所述计算机实现的方法还包括获得将所述第一数据对象与所述第二数据对象相关联的数据记录,其中确定将使用所述第一数据对象和所述第二数据对象来生成所述响应是至少部分地基于所述数据记录。
条款8.如条款5的计算机实现的方法,所述计算机实现的方法还包括:
将所述函数输出存储在高速缓存中;
接收对所述第一数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
条款9.如条款5的计算机实现的方法,其中生成所述函数输出包括将所述第二数据对象的至少一部分存储在所述函数输出内的在所述第一数据对象的至少一部分的位置之前的位置。
条款10.如条款5的计算机实现的方法,所述计算机实现的方法还包括接收与所述第一数据对象相关联的第一引用数据和与所述第二数据对象相关联的第二引用数据,其中从所述数据存储获得所述第一数据对象和所述第二数据对象包括使用所述第一引用数据和所述第二引用数据。
条款11.如条款5的计算机实现的方法,所述计算机实现的方法还包括接收与所述函数输出相关联的引用数据,其中生成所述函数输出包括将所述函数输出写入由与所述函数输出相关联的所述引用数据标识的位置。
条款12.如条款5的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述第一数据对象的第二请求,其中所述请求与第一上下文数据相关联,并且其中所述第二请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
条款13.如条款5的计算机实现的方法,其中执行所述函数还包括在生成所述函数输出之前修改所述第一数据对象或所述第二数据对象中的至少一者。
条款14.如条款5的计算机实现的方法,其中接收所述请求包括接收引用所述第一数据对象的清单,其中所述清单不引用所述第二数据对象。
条款15.如条款5的计算机实现的方法,所述计算机实现的方法还包括:
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述函数输出来执行第二函数;
将所述代码执行系统配置为执行所述第二函数;以及
在提供所述响应之前使用所述代码执行系统来执行所述第二函数,其中所述响应是至少部分地基于通过执行所述第二函数生成的第二函数输出。
条款16.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收对请求的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述多个数据对象中的一个或多个数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统由此被配置为:
确定将使用所述多个数据对象中的第一数据对象和所述多个数据对象中的第二数据对象来生成所述响应;
确定包括以下至少一项的第一输出部分:所述第一数据对象或表示所述第一数据对象的数据的第一部分;
确定包括以下至少一项的第二输出部分:所述第二数据对象或表示所述第二数据对象的数据的第二部分;以及
使用所述第一输出部分和所述第二输出部分来生成函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置,其中所述响应包括所述请求的数据对象。
条款17.如条款16的系统,其中所述函数输出包括引用序列的清单,在所述序列中,将对所述第一数据对象和所述第二数据对象进行后续请求。
条款18.如条款16的系统,其中所述函数输出包括与所述第二数据对象的所述第二部分连结的所述第一数据对象的所述第一部分的复合内容。
条款19.如条款16的系统,其中所述代码执行系统还被配置为使用包括以下至少一项的引用数据来获得所述第一数据对象:文件句柄、指针或标识符。
条款20.如条款16的系统,其中所述代码执行系统还被配置为修改所述第一部分或所述第二部分中的至少一者。
条款21.一种系统,所述系统包括:
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务存储多个数据对象;以及
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(I/O)路径中按需执行函数的一个或多个计算装置;
其中所述对象存储服务被配置为至少:
接收对所述多个数据对象中的请求的数据对象的请求,其中所述请求与表示所述请求的上下文的上下文数据相关联;
确定将在对所述请求作出响应之前执行与所述请求的数据对象相关联的函数;
生成请求的文件句柄,其中可使用所述请求的文件句柄从所述对象存储服务读取所述请求的数据对象;以及
将所述请求、所述上下文数据和所述请求的文件句柄发送到所述代码执行服务;并且
其中所述代码执行服务被配置为至少:
从所述对象存储服务接收对所述请求的数据对象、所述上下文数据和所述请求的文件句柄的请求;
使用所述请求的文件句柄来获得所述请求的数据对象;
至少部分地基于所述上下文数据满足一个或多个标准来确定所述响应将包括所述请求的数据对象的呈模糊形式的第一部分;
确定要应用于所述第一部分的模糊以生成第一模糊部分;以及
生成包括所述请求的数据对象的所述响应,其中所述第一部分被所述第一模糊部分替换,其中所述响应不包括呈未模糊形式的所述第一部分。
条款22.如条款21的系统,其中所述请求的数据对象包括记录集合,其中所述第一部分包括所述记录集合中的记录的至少一部分,并且其中所述第一模糊部分包括所述记录的所述部分的掩蔽版本。
条款23.如条款21的系统,其中所述代码执行服务还被配置为确定多个模糊类型中的要应用于所述第一部分的模糊类型。
条款24.如条款21的系统,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准包括以下至少一项:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
条款25.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收对存储在数据存储中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)路径中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
获得所述数据对象;
确定模糊所述数据对象的第一部分;
生成第一模糊部分,所述第一模糊部分包括呈模糊形式的所述第一部分;以及
生成包括所述第一模糊部分的函数输出,其中所述函数输出不包括呈未模糊形式的所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
条款26.如条款25的计算机实现的方法,其中执行所述函数还包括获得与所述请求相关联的上下文数据,其中确定模糊所述第一部分是至少部分地基于所述上下文数据。
条款27.如条款26的计算机实现的方法,其中执行所述函数还包括确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
条款28.如条款25的计算机实现的方法,其中执行所述函数还包括:
获得与所述请求相关联的上下文数据;以及
至少部分地基于所述上下文数据来确定多个模糊类型中的要应用于所述第一部分的模糊类型。
条款29.如条款28的计算机实现的方法,其中确定所述模糊类型包括确定以下一项:与所述数据对象相关联的自定义模糊,或默认模糊。
条款30.如条款25的计算机实现的方法,其中获得所述数据对象包括获得记录集合,其中所述第一部分包括所述记录集合中的记录的至少一部分,并且其中所述第一模糊部分是所述记录的所述部分的掩蔽版本。
条款31.如条款25的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述数据对象的第二请求,其中所述请求与第一上下文数据相关联,并且其中所述第二请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
条款32.如条款25的计算机实现的方法,所述计算机实现的方法还包括:
将所述函数输出存储在高速缓存中;
接收对所述数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
条款33.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收对所述多个数据对象中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统由此被配置为:
获得所述数据对象;
确定变换所述数据对象的至少第一部分,其中所述响应不包括处于未变换状态的所述第一部分;
变换所述数据对象的所述第一部分以创建变换的第一部分;以及
生成包含所述变换的第一部分的函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
条款34.如条款33的系统,其中所述代码执行系统还被配置为将包括所述变换的第一部分的所述数据对象存储在所述数据存储中。
条款35.如条款33的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为模糊所述第一部分。
条款36.如条款33的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为应用变换,所述变换包括以下至少一项:添加水印、改变分辨率、改变比特率或应用加密。
条款37.如条款33的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为去除所述第一部分的至少一部分。
条款38.如条款33的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为修改所述第一部分的格式。
条款39.如条款33的系统,其中所述代码执行系统还被配置为获得与所述请求相关联的上下文数据,其中确定变换所述第一部分是至少部分地基于所述上下文数据满足一个或多个标准。
条款40.如条款39的系统,其中所述代码执行系统还被配置为确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
条款41.一种系统,所述系统包括:
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务存储多个数据对象;以及
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(I/O)路径中按需执行函数的一个或多个计算装置;
其中所述对象存储服务被配置为至少:
接收对所述多个数据对象中的请求的数据对象的请求,其中所述请求与表示所述请求的上下文的上下文数据相关联;
确定将在对所述请求作出响应之前执行与所述请求的数据对象相关联的函数;
生成请求的文件句柄,其中可使用所述请求的文件句柄从所述对象存储服务读取所述请求的数据对象;以及
将所述请求、所述上下文数据和所述请求的文件句柄发送到所述代码执行服务;并且
其中所述代码执行服务被配置为至少:
从所述对象存储服务接收对所述请求的数据对象、所述上下文数据和所述请求的文件句柄的请求;
使用所述请求的文件句柄来获得所述请求的数据对象;
至少部分地基于所述上下文数据满足一个或多个标准来确定所述请求的数据对象的第一部分将从所述响应中排除,其中所述请求的对象的第二部分将被包括在所述响应中;以及
生成包括所述第二部分的所述响应,其中所述响应不包括所述第一部分。
条款42.如条款41的系统,其中所述请求的数据对象包括数据记录集合,其中每个数据记录包括一个或多个数据字段,并且其中将从所述响应中排除的所述第一部分包括以下至少一项:所述数据记录的子集或所述数据字段的子集。
条款43.如条款41的系统,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准包括以下至少一项:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
条款44.如条款41的系统,其中所述代码执行系统还被配置为将变换应用于所述请求的数据对象的第三部分,其中所述变换包括以下至少一项:添加水印、改变分辨率、改变比特率或应用加密。
条款45.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收对存储在数据存储中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)路径中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
获得所述数据对象;
确定将所述数据对象的第一部分从函数输出中排除;以及
生成包括所述数据对象的第二部分的所述函数输出,其中所述函数输出不包括所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
条款46.如条款45的计算机实现的方法,所述计算机实现的方法还包括获得与所述请求相关联的上下文数据,其中确定排除所述第一部分是至少部分地基于所述上下文数据满足一个或多个标准。
条款47.如条款46的计算机实现的方法,其中执行所述函数还包括确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
条款48.如条款45的计算机实现的方法,其中获得所述数据对象包括获得数据记录集合,其中每个数据记录包括一个或多个数据字段,并且其中所述第一部分包括以下至少一项:所述数据记录的子集或所述数据字段的子集。
条款49.如条款45的计算机实现的方法,其中执行所述函数还包括将变换应用于所述数据对象的所述第二部分,其中所述变换包括以下至少一项:添加水印、改变分辨率、改变比特率或应用加密。
条款50.如条款45所述的计算机实现的方法,所述计算机实现的方法还包括将第二数据对象从所述函数输出中排除,其中所述请求包括对所述第一数据对象和所述第二数据对象两者的请求。
条款51.如条款45的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述数据对象的第二请求,其中所述请求与第一上下文数据相关联,并且其中所述第二请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
条款52.如条款45的计算机实现的方法,所述计算机实现的方法还包括:
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述函数输出来执行第二函数;
将所述代码执行系统配置为执行所述第二函数;以及
在提供所述响应之前使用所述代码执行系统来执行所述第二函数,其中所述响应是至少部分地基于通过执行所述第二函数生成的第二函数输出。
条款53.如条款45的计算机实现的方法,所述计算机实现的方法还包括:
将所述函数输出存储在高速缓存中;
接收对所述数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
条款54.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收对关于所述多个数据对象的子集的信息的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行服务配置为执行所述函数,其中所述代码执行服务由此被配置为:
获得关于所述多个数据对象的所述子集的所述信息;
确定将关于所述多个数据对象的所述子集的所述信息的至少第一部分从函数输出中排除;
生成包括关于所述多个数据对象的所述子集的所述信息的第二部分的所述函数输出,其中所述函数输出不包括所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
条款55.如条款54的系统,其中对关于数据对象的所述子集的信息的所述请求包括对关于特定数据对象组中的数据对象的信息的请求,其中所述数据存储存储被分组成多个不同的数据对象组的所述多个数据对象。
条款56.如条款55的系统,其中所述数据对象组包括一组关于用户的数据对象。
条款57.如条款54所述的系统,其中所述数据存储存储被分组成多个不同的数据对象组的所述多个数据对象,并且其中对关于数据对象的所述子集的信息的所述请求包括对关于数据对象组的子集的信息的请求。
条款58.如条款54的系统,其中所述请求包括对应于LIST请求的超文本传输协议请求。
条款59.如条款54的系统,其中所述代码执行系统还被配置为获得与所述请求相关联的上下文数据,其中确定将所述第一部分从所述响应中排除是至少部分地基于所述上下文数据满足一个或多个标准。
条款60.如条款59的系统,其中所述代码执行系统还被配置为确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下一项:所述请求的来源、与所述请求相关联的位置或与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限或与所述请求相关联的禁止访问权限。
上述所有方法和过程可体现在由一个或多个计算机或处理器执行的软件代码模块中并且经由所述软件代码模块来完全自动化。代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。所述方法中的一些或所有可替代地体现在专用计算机硬件中。
除非另外具体说明,否则诸如“能够”、“可以”、“可能”或“可”等条件语言在上下文中应被理解为通常用于表示:某些实施方案包括而其他实施方案不包括某些特征、元件或步骤。因此,这种条件语言通常不意图暗示特征、元件或步骤无论如何都是一个或多个实施方案必需的,或者一个或多个实施方案必然包括用于在有或没有用户输入或提示的情况下,判定这些特征、元件或步骤是否包括在或将要在任何特定实施方案中执行的逻辑。
除非另有特别说明,否则诸如短语“X、Y或Z中的至少一个”的反意连接语言在上下文中应被理解为通常用于表示项目、项等可以是X、Y或Z或其任何组合(例如,X、Y或Z)。因此,这种反意连接语言一般不意图且不应暗示某些实施方案要求分别存在X中的至少一个、Y中的至少一个或Z中的至少一个。
除非另外明确说明,否则诸如“一个”或“一种”等冠词一般应被解释为包括一个或多个所描述的项。因此,诸如“被配置为……的装置”等短语意图包括一个或多个所陈述的装置。此类一个或多个所述装置还可共同地被配置为执行所陈述的叙述。例如,“被配置为执行叙述A、B和C的处理器”可包括与被配置为执行叙述B和C的第二处理器联合工作的被配置为执行叙述A的第一处理器。
术语“或”通常应被理解为是包容性的,而不是排他性的。因此,包含“a、b或c”的集合应被解释为包含包括a、b和c的组合的集合。
在本文中描述和/或在附图中描绘的流程图中的任何例程描述、元件或框应被理解为潜在地表示代码的模块、段或部分,所述代码包括用于实现例程中的特定逻辑功能或元件的一个或多个可执行指令。替代实现方式包括在本文中所描述的实施方案的范围内,其中如本领域中的技术人员所理解的那样,根据所涉及的功能性,元素或功能可删除、或不按照所示出或讨论的顺序执行,包括基本上同步执行或逆序执行。
应当强调的是,可对上述实施方案做出许多变化和修改,这些变化和修改的元件应当被理解为是在其他可接受的示例之中。在本文中,所有这样的修改和变化在本文中意图被包括在本公开的范围内并且受所附权利要求保护。

Claims (54)

1.一种系统,所述系统包括:
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务存储多个数据对象;以及
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(I/O)路径中按需执行函数的一个或多个计算装置;
其中所述对象存储服务被配置为至少:
接收对所述多个数据对象中的请求的数据对象的请求,其中所述请求与表示所述请求的上下文的上下文数据相关联;
确定将在对所述请求作出响应之前执行与所述请求的数据对象相关联的函数;
生成请求的文件句柄,其中使用所述请求的文件句柄从所述对象存储服务能读取所述请求的数据对象;以及
将所述请求、所述上下文数据和所述请求的文件句柄发送到所述代码执行服务;并且
其中所述代码执行服务被配置为至少:
从所述对象存储服务接收对所述请求的数据对象、所述上下文数据和所述请求的文件句柄的请求;
使用所述请求的文件句柄来获得所述请求的数据对象,其中所述请求的数据对象包括数据记录集合,并且其中每个数据记录包括一个或多个数据字段;
至少部分地基于所述上下文数据满足一个或多个标准来确定所述请求的数据对象的第一部分将从对所述请求的响应中排除,其中所述请求的对象的第二部分将被包括在所述响应中,并且其中所述第一部分包括以下至少一项:所述数据记录的子集和所述数据字段的子集;以及
生成包括所述第二部分的所述响应,其中所述响应不包括所述第一部分。
2.如权利要求1所述的系统,其中所述上下文数据表示以下各项之一:所述请求的来源、与所述请求相关联的位置以及与所述请求相关联的访问权限,并且其中所述一个或多个标准包括以下各项中的至少一项:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限以及与所述请求相关联的禁止访问权限。
3.如权利要求1所述的系统,其中所述代码执行服务还被配置为将变换应用于所述请求的数据对象的第三部分,其中所述变换包括以下各项中的至少一项:添加水印、改变分辨率、改变比特率和应用加密。
4.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收对存储在数据存储中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)路径中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
获得所述数据对象;
确定将所述数据对象的第一部分从函数输出中排除;以及
生成包括所述数据对象的第二部分的所述函数输出,其中所述函数输出不包括所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置;
将所述函数输出存储在高速缓存中;
接收对所述数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
5.如权利要求4所述的计算机实现的方法,所述计算机实现的方法还包括获得与所述请求相关联的上下文数据,其中确定排除所述第一部分是至少部分地基于所述上下文数据满足一个或多个标准。
6.如权利要求5所述的计算机实现的方法,其中执行所述函数还包括确定所述上下文数据满足所述一个或多个标准,其中所述上下文数据表示以下各项之一:所述请求的来源、与所述请求相关联的位置以及与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下各项中的至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限以及与所述请求相关联的禁止访问权限。
7.如权利要求4所述的计算机实现的方法,其中获得所述数据对象包括获得数据记录集合,其中每个数据记录包括一个或多个数据字段,并且其中所述第一部分包括以下各项中的至少一项:所述数据记录的子集和所述数据字段的子集。
8.如权利要求4所述的计算机实现的方法,其中执行所述函数还包括将变换应用于所述数据对象的所述第二部分,其中所述变换包括以下各项中的至少一项:添加水印、改变分辨率、改变比特率和应用加密。
9.如权利要求4所述的计算机实现的方法,所述计算机实现的方法还包括将第二数据对象从所述函数输出中排除,其中所述请求包括对所述数据对象和所述第二数据对象两者的请求。
10.如权利要求4所述的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述数据对象的第三请求,其中所述请求与第一上下文数据相关联,并且其中所述第三请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
11.如权利要求4所述的计算机实现的方法,所述计算机实现的方法还包括:
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述函数输出来执行第二函数;
将所述代码执行系统配置为执行所述第二函数;以及
在提供所述响应之前使用所述代码执行系统来执行所述第二函数,其中所述响应是至少部分地基于通过执行所述第二函数生成的第二函数输出。
12.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收对关于所述多个数据对象的子集的信息的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述多个数据对象的所述子集来执行函数;
将代码执行服务配置为执行所述函数,其中所述代码执行服务由此被配置为:
获得关于所述多个数据对象的所述子集的所述信息;
获得与所述请求相关联的上下文数据;
至少部分地基于所述上下文数据满足一个或多个标准来确定将关于所述多个数据对象的所述子集的所述信息的至少第一部分从函数输出中排除;
生成包括关于所述多个数据对象的所述子集的所述信息的第二部分的所述函数输出,其中所述函数输出不包括所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
13.如权利要求12所述的系统,其中对关于所述多个数据对象的所述子集的信息的所述请求包括对关于特定数据对象组中的数据对象的信息的请求,其中所述数据存储存储被分组成多个不同的数据对象组的所述多个数据对象。
14.如权利要求13所述的系统,其中所述数据对象组包括一组关于用户的数据对象。
15.如权利要求12所述的系统,其中所述数据存储存储被分组成多个不同的数据对象组的所述多个数据对象,并且其中对关于所述多个数据对象的所述子集的信息的所述请求包括对关于数据对象组的子集的信息的请求。
16.如权利要求12所述的系统,其中所述请求包括对应于LIST请求的超文本传输协议请求。
17.如权利要求12所述的系统,其中所述代码执行服务还被配置为确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下各项之一:所述请求的来源、与所述请求相关联的位置以及与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下各项中的至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限以及与所述请求相关联的禁止访问权限。
18.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收获取存储在数据存储中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)流水线中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
获得所述数据对象,其中获得所述数据对象包括获得记录集合,其中所述数据对象的第一部分包括所述记录集合中的记录的至少一部分;
确定在对所述请求的所述响应中模糊所述第一部分;
生成第一模糊部分,所述第一模糊部分包括呈模糊形式的所述第一部分,其中所述第一模糊部分包括所述记录的所述部分的掩蔽版本;以及
生成包括所述第一模糊部分的函数输出,其中所述函数输出不包括呈未模糊形式的所述第一部分;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
19.如权利要求18所述的计算机实现的方法,其中执行所述函数还包括获得与所述请求相关联的上下文数据,其中确定模糊所述第一部分是至少部分地基于所述上下文数据。
20.如权利要求19所述的计算机实现的方法,其中执行所述函数还包括确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下各项之一:所述请求的来源、与所述请求相关联的位置以及与所述请求相关联的访问权限,并且其中所述一个或多个标准与以下各项中的至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限以及与所述请求相关联的禁止访问权限。
21.如权利要求18所述的计算机实现的方法,其中执行所述函数还包括:
获得与所述请求相关联的上下文数据;以及
至少部分地基于所述上下文数据来确定多个模糊类型中的要应用于所述第一部分的模糊类型。
22.如权利要求21所述的计算机实现的方法,其中确定所述模糊类型包括确定以下各项之一:与所述数据对象相关联的自定义模糊,以及默认模糊。
23.如权利要求18所述的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述数据对象的第二请求,其中所述请求与第一上下文数据相关联,并且其中所述第二请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
24.如权利要求18所述的计算机实现的方法,所述计算机实现的方法还包括:
将所述函数输出存储在高速缓存中;
接收对所述数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
25.如权利要求18所述的计算机实现的方法,其中在提供所述响应之前使用所述代码执行系统来执行所述函数包括:在无服务器代码执行系统上执行无服务器函数。
26.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收获取所述多个数据对象中的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)流水线中按需执行无服务器函数,其中所述代码执行系统由此被配置为:
获得所述数据对象,其中获得所述数据对象包括获得记录集合,其中所述数据对象的第一部分包括所述记录集合中的记录的至少一部分;
确定变换至少所述第一部分,其中所述响应不包括处于未变换状态的所述第一部分;
变换所述数据对象的所述第一部分以创建变换后的第一部分;
将包括所述变换后的第一部分的所述数据对象存储在所述数据存储中;以及
生成包含所述变换后的第一部分的函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
27.如权利要求26所述的系统,其中所述代码执行系统被配置为变换所述第一部分包括:所述代码执行系统被配置为模糊所述第一部分。
28.如权利要求26所述的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为应用变换,所述变换包括以下至少一项:添加水印、改变分辨率、改变比特率或应用加密。
29.如权利要求26所述的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为去除所述第一部分的至少一部分。
30.如权利要求26所述的系统,其中所述代码执行系统被配置为变换所述第一部分包括所述代码执行系统被配置为修改所述第一部分的格式。
31.如权利要求26所述的系统,其中所述代码执行系统还被配置为获得与所述请求相关联的上下文数据,其中确定变换所述第一部分是至少部分地基于所述上下文数据满足一个或多个标准。
32.如权利要求31所述的系统,其中所述代码执行系统还被配置为确定所述上下文数据满足一个或多个标准,其中所述上下文数据表示以下各项之一:所述请求的来源、与所述请求相关联的位置或以及所述请求相关联的访问权限,并且其中所述一个或多个标准与以下各项中的至少一项相关:所述请求的准许来源、所述请求的禁止来源、所述请求的准许位置、所述请求的禁止位置、与所述请求相关联的准许访问权限以及与所述请求相关联的禁止访问权限。
33.如权利要求26所述的系统,其中所述多个数据对象的至少一个子集由所有者拥有,并且其中所述代码执行系统在提供对针对所述多个数据对象的所述子集执行输入/输出(I/O)操作的请求的响应之前,启动所有者定义的代码的执行。
34.如权利要求26所述的系统,其中所述请求是超文本传输协议(HTTP)GET请求。
35.如权利要求26所述的系统,其中所述一个或多个计算装置还被配置为至少:
生成请求的文件句柄,其中使用所述请求的文件句柄从所述数据存储能读取所述数据对象;以及
将所述请求和所述请求的文件句柄发送到所述代码执行系统,其中所述代码执行系统使用所述请求的文件句柄来获取所述数据对象。
36.一种系统,所述系统包括:
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务存储多个数据对象;以及
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(I/O)路径中按需执行函数的一个或多个计算装置;
其中所述对象存储服务被配置为至少:
接收对所述多个数据对象中的请求的数据对象的请求,其中所述多个数据对象包括要与所述请求的数据对象组合的附加数据对象,并且其中所述请求不引用所述附加数据对象;
确定将在对所述请求作出响应之前执行与所述请求的数据对象相关联的函数;
生成请求的文件句柄,其中使用所述请求的文件句柄从所述对象存储服务能读取所述请求的数据对象;以及
将所述请求和所述请求的文件句柄发送到所述代码执行服务;并且
其中所述代码执行服务被配置为至少:
从所述对象存储服务接收对所述请求的数据对象和所述请求的文件句柄的请求;
确定响应将包括所述请求的数据对象和所述附加数据对象;
获得附加文件句柄,其中使用所述附加文件句柄从所述对象存储服务能读取所述附加数据对象;
使用所述附加文件句柄来获得所述附加数据对象;
使用所述请求的文件句柄来获得所述请求的数据对象;以及
生成包括所述请求的数据对象和所述附加数据对象的组合的响应。
37.如权利要求36所述的系统,其中所述请求的数据对象包括第一媒体文件,其中所述附加数据对象包括第二媒体文件,并且其中将在呈现所述第一媒体文件的内容的至少一部分之前呈现所述第二媒体文件的内容。
38.如权利要求36所述的系统,其中所述请求的数据对象包括表示第一记录集合的第一数据文件,其中所述附加数据对象包括表示第二记录集合的第二数据文件,并且其中在所述响应中,所述第二记录集合的至少一部分将在所述第一记录集合的至少一部分之前。
39.如权利要求36所述的系统,其中所述代码执行服务还被配置为确定要对所述请求的数据对象和所述附加数据对象中的至少一者进行的修改,以在所述响应中将所述请求的数据对象和所述附加数据对象组合,其中所述修改包括以下各项中的至少一项:去除标头、替换元数据值和排除数据对象部分。
40.一种计算机实现的方法,所述计算机实现的方法包括:
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
接收对存储在数据存储中的第一数据对象的请求,其中所述请求不引用第二数据对象;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述第一数据对象来执行函数;
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(I/O)路径中按需执行函数;
在提供所述响应之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
确定将使用所述第一数据对象和所述第二数据对象来生成所述响应;
获得所述第一数据对象和所述第二数据对象;以及
生成包括所述第一数据对象的至少一部分和所述第二数据对象的至少一部分的函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置。
41.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括获得与所述请求相关联的上下文数据,其中确定将使用所述第一数据对象和所述第二数据对象来生成所述响应是至少部分地基于所述上下文数据。
42.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括获得将所述第一数据对象与所述第二数据对象相关联的数据记录,其中确定将使用所述第一数据对象和所述第二数据对象来生成所述响应是至少部分地基于所述数据记录。
43.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括:
将所述函数输出存储在高速缓存中;
接收对所述第一数据对象的第二请求;以及
至少部分地基于存储在所述高速缓存中的所述函数输出来提供对所述第二请求的第二响应。
44.如权利要求40所述的计算机实现的方法,其中生成所述函数输出包括:将所述第二数据对象的至少一部分存储在所述函数输出内的在所述第一数据对象的至少一部分的位置之前的位置。
45.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括:接收与所述第一数据对象相关联的第一引用数据和与所述第二数据对象相关联的第二引用数据,其中从所述数据存储获得所述第一数据对象和所述第二数据对象包括:使用所述第一引用数据和所述第二引用数据。
46.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括:接收与所述函数输出相关联的引用数据,其中生成所述函数输出包括:将所述函数输出写入由与所述函数输出相关联的所述引用数据标识的位置。
47.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括:
接收对所述第一数据对象的第二请求,其中所述请求与第一上下文数据相关联,并且其中所述第二请求与第二上下文数据相关联,所述第二上下文数据与所述第一上下文数据不同;以及
使用所述代码执行系统来执行所述函数以至少部分地基于所述第二上下文数据来生成第二函数输出,其中所述第二函数输出与所述函数输出不同。
48.如权利要求40所述的计算机实现的方法,其中执行所述函数还包括:在生成所述函数输出之前修改所述第一数据对象和所述第二数据对象中的至少一者。
49.如权利要求40所述的计算机实现的方法,其中接收所述请求包括接收引用所述第一数据对象的清单,其中所述清单不引用所述第二数据对象。
50.如权利要求40所述的计算机实现的方法,所述计算机实现的方法还包括:
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述函数输出来执行第二函数;
将所述代码执行系统配置为执行所述第二函数;以及
在提供所述响应之前使用所述代码执行系统来执行所述第二函数,其中所述响应是至少部分地基于通过执行所述第二函数生成的第二函数输出。
51.一种系统,所述系统包括:
数据存储,所述数据存储存储多个数据对象;以及
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
接收对请求的数据对象的请求;
至少部分地基于所述请求来确定在提供对所述请求的响应之前使用所述多个数据对象中的一个或多个数据对象来执行函数;
将按需代码执行系统配置为执行所述函数,其中所述按需代码执行系统由此被配置为:
确定将使用所述多个数据对象中的第一数据对象和所述多个数据对象中的第二数据对象来生成所述响应;
使用包括文件句柄、指针和标识符中的至少一项的引用数据来获得所述第一数据对象;
确定包括以下各项中的至少一项的第一输出部分:所述第一数据对象的第一部分以及表示所述第一数据对象的数据;
确定包括以下各项中的至少一项的第二输出部分:所述第二数据对象的第二部分以及表示所述第二数据对象的数据;以及
使用所述第一输出部分和所述第二输出部分来生成函数输出;以及
至少部分地基于所述函数输出来将所述响应提供到计算装置,其中所述响应包括所述请求的数据对象。
52.如权利要求51所述的系统,其中所述函数输出包括引用序列的清单,在所述序列中,将对所述第一数据对象和所述第二数据对象进行后续请求。
53.如权利要求51所述的系统,其中所述函数输出包括与所述第二数据对象的所述第二部分连结的所述第一数据对象的所述第一部分的复合内容。
54.如权利要求51所述的系统,其中所述按需代码执行系统还被配置为修改所述第一部分和所述第二部分中的至少一者。
CN202080073280.2A 2019-09-27 2020-09-22 对象存储服务的输出路径中对象过滤代码的按需执行 Active CN114586010B (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US16/586,539 2019-09-27
US16/586,580 2019-09-27
US16/586,539 US10908927B1 (en) 2019-09-27 2019-09-27 On-demand execution of object filter code in output path of object storage service
US16/586,562 US11263220B2 (en) 2019-09-27 2019-09-27 On-demand execution of object transformation code in output path of object storage service
US16/586,562 2019-09-27
US16/586,580 US11250007B1 (en) 2019-09-27 2019-09-27 On-demand execution of object combination code in output path of object storage service
PCT/US2020/051928 WO2021061605A1 (en) 2019-09-27 2020-09-22 On-demand execution of object filter code in output path of object storage service

Publications (2)

Publication Number Publication Date
CN114586010A CN114586010A (zh) 2022-06-03
CN114586010B true CN114586010B (zh) 2023-05-09

Family

ID=72717925

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080073280.2A Active CN114586010B (zh) 2019-09-27 2020-09-22 对象存储服务的输出路径中对象过滤代码的按需执行

Country Status (3)

Country Link
EP (1) EP4035002A1 (zh)
CN (1) CN114586010B (zh)
WO (1) WO2021061605A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11763503B2 (en) * 2019-02-25 2023-09-19 Life Impact Solutions Media alteration based on variable geolocation metadata
US11550944B2 (en) 2019-09-27 2023-01-10 Amazon Technologies, Inc. Code execution environment customization system for 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
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
US11394761B1 (en) 2019-09-27 2022-07-19 Amazon Technologies, Inc. Execution of user-submitted code on a stream of data
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
US11656892B1 (en) 2019-09-27 2023-05-23 Amazon Technologies, Inc. Sequential execution of user-submitted code and native functions
CN115658278B (zh) * 2022-12-07 2023-05-05 中国电子科技集团公司第三十研究所 一种支持高并发协议交互的微任务调度机

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201212975D0 (en) * 2011-07-22 2012-09-05 Vodafone Ip Licensing Ltd Anonymisation and filtering data
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments
CN107209666A (zh) * 2014-12-12 2017-09-26 微软技术许可有限责任公司 计算机系统
CN108885568A (zh) * 2016-03-30 2018-11-23 亚马逊技术有限公司 在按需代码执行环境处处理先已存在的数据集

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9323556B2 (en) 2014-09-30 2016-04-26 Amazon Technologies, Inc. Programmatic event detection and message generation for requests to execute program code
US10540364B2 (en) * 2017-05-02 2020-01-21 Home Box Office, Inc. Data delivery architecture for transforming client response data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201212975D0 (en) * 2011-07-22 2012-09-05 Vodafone Ip Licensing Ltd Anonymisation and filtering data
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments
CN107209666A (zh) * 2014-12-12 2017-09-26 微软技术许可有限责任公司 计算机系统
CN108885568A (zh) * 2016-03-30 2018-11-23 亚马逊技术有限公司 在按需代码执行环境处处理先已存在的数据集

Also Published As

Publication number Publication date
WO2021061605A1 (en) 2021-04-01
EP4035002A1 (en) 2022-08-03
CN114586010A (zh) 2022-06-03

Similar Documents

Publication Publication Date Title
CN114586010B (zh) 对象存储服务的输出路径中对象过滤代码的按需执行
EP4034998B1 (en) User-specific data manipulation system for object storage service based on user-submitted code
US11386230B2 (en) On-demand code obfuscation of data in input path of object storage service
US10908927B1 (en) On-demand execution of object filter code in output path of object storage service
US11263220B2 (en) On-demand execution of object transformation code in output path of object storage service
CN114586011B (zh) 将所有者指定的数据处理流水线插入到对象存储服务的输入/输出路径
US11023416B2 (en) Data access control system for object storage service based on owner-defined code
US11106477B2 (en) Execution of owner-specified code during input/output path to object storage service
US11550944B2 (en) Code execution environment customization system for object storage service
US10996961B2 (en) On-demand indexing of data in input path of object storage service
CN114586020A (zh) 在对象存储服务的输入路径中的数据的按需代码模糊
US11055112B2 (en) Inserting executions of owner-specified code into input/output path of object storage service
US11250007B1 (en) On-demand execution of object combination code in output path of object storage service
US11023311B2 (en) On-demand code execution in input path of data uploaded to storage service in multiple data portions
US11416628B2 (en) User-specific data manipulation system for object storage service based on user-submitted code
US11360948B2 (en) Inserting owner-specified data processing pipelines into input/output path of object storage service
US20160344771A1 (en) Managed applications
US10223526B2 (en) Generating packages for managed applications
CN107636667B (zh) 在设备中创建多个工作空间的系统及方法
US11394761B1 (en) Execution of user-submitted code on a stream of data
US11656892B1 (en) Sequential execution of user-submitted code and native functions
GB2561862A (en) Computer device and method for handling files

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