一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在对象存储服务的输入路径中的数据的按需代码模糊的制作方法

2022-06-06 02:19:06 来源:中国专利 TAG:

在对象存储服务的输入路径中的数据的按需代码模糊


背景技术:

1.计算装置可利用通信网络来交换数据。公司和组织操作将许多计算装置互连的计算机网络以支持操作或向第三方提供服务。计算系统可位于单个地理位置或位于多个不同的地理位置(例如,经由专用通信网络或公共通信网络进行互连)。具体地,数据中心或数据处理中心(本文通常称为“数据中心”)可包括许多互连的计算系统以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的专用数据中心或者代表公众或为公众利益运营的公共数据中心。
2.为了便于提高对数据中心资源的利用,虚拟化技术允许单个物理计算装置为数据中心的用户托管作为独立的计算装置来呈现和操作的虚拟机的一个或多个实例。通过虚拟化,单个物理计算装置可以以动态方式创建、维护、删除或以其他方式管理虚拟机。进而,用户可从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并且被提供不同数量的虚拟机资源。
3.除了计算资源之外,数据中心还为客户端装置提供许多其他有益的服务。例如,数据中心可提供数据存储服务,该数据存储服务被配置为存储由客户端装置提交的数据,并且允许通过网络检索该数据。可提供多种类型的数据存储服务,通常根据其输入/输出(i/o)机制而变。例如,数据库服务可允许基于诸如结构化查询语言(sql)的数据库查询语言的i/o。块存储服务可以类似于操作系统如何与本地存储交互的方式允许基于对一个或多个定义长度块的修改的i/o,并且因此可促进可用于例如存储虚拟机的操作系统的虚拟化磁盘驱动器。对象存储服务可允许在内容和长度可有所不同的各个对象或资源(诸如各个文件)的级别上的i/o。例如,对象存储服务可诸如通过允许基于指定输入数据的调用和要应用于该数据的超文本传输协议请求方法(例如,get、put、post、delete等)的i/o来提供符合表述性状态转移(rest)架构风格的接口。通过传输指定输入数据的调用和请求方法,客户端因此可从对象存储服务检索数据、将数据作为新对象写入对象存储服务、修改现有对象等。
附图说明
4.图1是描绘对象存储服务可结合按需代码执行系统操作以实现与对对象存储服务的输入/输出(i/o)请求相关的功能的说明性环境的框图;
5.图2描绘了提供图1的对象存储服务的前端的计算装置的一般架构;
6.图3是描绘用于使客户端装置能够通过插入经由在按需代码执行系统上执行任务而实现的函数来修改对象存储服务的i/o路径的说明性交互的流程图;
7.图4是要应用于图1的对象存储服务的i/o路径的函数的流水线的说明性可视化;
8.图5a至图5b示出了描绘用于处理将输入数据作为对象存储在图1的对象存储服务上的请求的说明性交互的流程图,包括对输入数据执行所有者指定的任务并将任务的输出作为对象进行存储;
9.图6a至图6b示出了描绘用于处理在图1的对象存储服务上检索对象的数据的请求
的说明性交互的流程图,包括对对象执行所有者指定的任务并将任务的输出作为对象传输到请求装置;
10.图7是描绘用于实现与通过i/o路径在图1的对象存储服务处获得的i/o请求相关的所有者定义的函数的说明性例程的流程;并且
11.图8是描绘用于在图1的按需代码执行系统上执行任务以在实现所有者定义的函数期间实现数据操纵的说明性例程的流程图。
12.图9是描绘用于在图1的按需代码执行系统上执行任务以响应于存储以多个部分提供的数据对象来执行第一函数和第二函数的说明性例程的流程图。
13.图10是与图9所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
14.图11是描绘用于在图1的按需代码执行系统上执行任务以响应于存储输入数据来动态地模糊输入数据的部分的说明性例程的流程图。
15.图12是与图11所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
16.图13是描绘用于在图1的按需代码执行系统上执行任务以响应于对存储输入数据的请求来动态地确定和存储输入数据的内容的索引的说明性例程的流程图。
17.图14是与图13所示的例程相关的服务提供商系统的各种部件之间的说明性数据流和交互的系统图。
具体实施方式
18.一般而言,本公开的方面涉及处理在对象存储系统上的读取数据对象或写入数据对象的请求。更具体地,本公开的方面涉及对象存储服务的输入/输出(i/o)路径的修改,使得可将一个或多个数据操纵插入i/o路径中以修改要应用被调用请求方法的数据,而不要求调用客户端装置指定此类数据操纵。在一个实施方案中,通过执行用户提交的代码来进行数据操纵,该用户提交的代码可例如由对象存储系统上的数据对象集合的所有者提供,以便控制与该数据对象的交互。例如,如果对象集合的所有者希望确保最终用户不向集合提交对象,包括任何个人识别信息(以确保最终用户的隐私),则所有者可提交可执行来从数据输入中去掉这种信息的代码。所有者可进一步指定在每次将数据对象写入集合期间应执行这样的代码。因此,当最终用户尝试将输入数据作为数据对象写入集合(例如,经由http put方法)时,可首先针对输入数据执行代码,并且可将得到的输出数据作为数据对象写入集合。应注意,这可能导致最终用户请求的操作(诸如写入操作)未应用于最终用户的输入数据,而是应用于由数据操纵(例如,所有者提交的)代码输出的数据。以此方式,数据集合的所有者控制对这些集合的i/o,而不依赖于最终用户遵守所有者的要求。实际上,最终用户(或任何其他客户端装置)可能不知道正在发生对i/o的修改。因此,本公开的实施方案能够在不修改对服务的接口的情况下修改对对象存储服务的i/o,从而确保与利用该服务的其他预先存在的软件的互兼容性。
19.在本公开的一些实施方案中,数据操纵可发生在按需代码执行系统(有时称为无服务器执行系统)上。一般而言,按需代码执行系统能够执行任意用户指定的代码,而不要求用户创建、维护或配置执行代码的执行环境(例如,物理机或虚拟机)。例如,尽管常规计
算服务通常要求用户提供特定装置(虚拟或物理)、在装置上安装操作系统、配置应用程序、定义网络接口等,但按需代码执行系统可使用户能够提交代码,并且可向用户提供应用程序编程接口(api),该api在被使用时使用户能够请求执行代码。在通过api接收到调用时,按需代码执行系统可为代码生成执行环境、向环境提供代码、执行代码,并且提供结果。因此,按需代码执行系统可消除用户处理用于代码执行的环境的配置和管理的需要。例如,在2014年9月30日提交的名称为“programmatic event detection and message generation for requests to execute program code”的美国专利号9,323,556(“556专利”)中公开了用于实现按需代码执行系统的示例技术,该专利的全部内容在此以引用方式并入。
20.由于按需代码执行系统执行任意代码的灵活性,这样的系统可用于创建多种网络服务。例如,这样的系统可用于创建“微服务”,即,实现少量功能(或仅一种功能)并且与其他服务交互以提供应用程序的网络服务。在按需代码执行系统的上下文中,被执行来创建这种服务的代码通常称为“函数”或“任务”,它们可被执行以实现服务。因此,用于在对象存储服务的i/o路径内执行数据操纵的一种技术可以是在按需代码执行系统上创建任务,该任务在被执行时执行所要求的数据操纵。说明性地,任务可提供与对象存储服务的接口相似或相同的接口,并且可操作以响应于请求方法调用(例如,http put或get调用)而获得输入数据、针对输入数据执行任务的代码并且执行对对象存储服务的调用,以对得到的输出数据实现请求方法。这种技术的缺点是复杂性。例如,在这种情况下,最终用户可能需要向按需代码执行系统而不是对象存储服务提交i/o请求,以确保任务的执行。如果最终用户直接向对象存储服务提交调用,则可能不会发生任务执行,并且因此所有者将无法对对象集合实施所期望的数据操纵。此外,该技术可能要求创作任务的代码以向最终用户提供允许处理调用以对输入数据实现请求方法的接口以及能够执行从任务执行到对象存储服务的调用的接口。这些网络接口的实现可能会显著增加所要求的代码的复杂性,从而抑制数据集合的所有者使用该技术。此外,在用户提交的代码直接实现网络通信的情况下,可能需要根据所处理的请求方法来改变该代码。例如,可能需要第一组代码来支持get操作,可能需要第二组代码来支持put操作等。因为本公开的实施方案减轻了用户提交的代码在处理网络通信方面的要求,所以在一些情况下,一组代码可能够多个请求方法。
21.为了解决上述问题,本公开的实施方案可实现无服务器任务执行与对象存储服务的接口的强集成,使得服务本身被配置为在接收到对数据集合的i/o请求时调用任务执行。此外,可通过配置对象存储服务以促进来自任务执行的数据输入和输出来简化生成代码以执行数据操纵,而不要求任务执行本身实现用于i/o操作的网络通信。具体地,在一个实施方案中,对象存储服务和按需代码执行系统可被配置为以操作系统级输入/输出流的句柄(例如,符合posix的描述符)的形式将输入数据“演示”到任务执行,使得任务的代码可经由定义的流操作来操纵输入数据(例如,就好像数据存在于本地文件系统中一样)。对输入数据的这种流级访问可例如与对输入数据的网络级访问进行对比,该网络级访问通常要求代码实现网络通信以检索输入数据。类似地,对象存储服务和按需代码执行系统可被配置为提供输出流句柄,该输出流句柄表示任务执行可向其写入输出的输出流。在检测到对输出流的写入时,对象存储服务和按需代码执行系统可将这样的写入处理为任务执行的输出数据,并且将被调用请求方法应用于输出数据。通过使任务能够根据传递到任务的输入和输出流来操纵数据,而不是要求代码通过网络来处理数据通信,可大大简化任务的代码。
22.使任务能够基于输入和输出句柄来操纵数据的另一个益处是增加了安全性。通用的按需代码执行系统可相对于来自任务执行的网络通信许可地操作,从而允许来自执行的任何网络通信,除非这种通信被明确拒绝。这种许可模型反映了将任务执行用作微服务,微服务通常要求与各种其他网络服务进行交互。然而,这种许可模型也降低了功能的安全性,因为潜在的恶意网络通信也可能到达执行。与许可模型相反,用于在对象存储系统的i/o路径上执行数据操纵的任务执行可利用限制模型,由此从执行任务的环境中只能发生明确允许的网络通信。说明性地,因为数据操纵可经由输入和输出句柄发生,所以可设想的是,在本公开的实施方案中用于执行数据操纵的许多或大多数任务根本不要求发生网络通信,从而大大增加了这种执行的安全性。在任务执行确实需要一些网络通信(诸如联系外部服务以协助数据操纵)的情况下,可明确地允许此类通信或将其“列入白名单”,从而仅以严格受限的方式暴露该执行。
23.在一些实施方案中,数据集合所有者可能只要求关于对集合的i/o进行单个数据操纵。因此,对象存储服务可检测到对集合的i/o、实现数据操纵(例如,通过在配备有输入和输出句柄的环境中执行无服务器任务),并且将被调用请求方法应用于得到的输出数据。在其他实施方案中,所有者可请求关于i/o路径进行多个数据操纵。例如,为了增加可移植性和可重用性,所有者可创作多个无服务器任务,该多个无服务器任务可在不同的i/o路径上以不同的方式组合。因此,对于每个路径,所有者可对路径定义要在i/o上执行的一系列无服务器任务。此外,在一些配置中,对象存储系统可本机提供一个或多个数据操纵。例如,对象存储系统可本机接受仅对对象的部分(例如,定义的字节范围)的请求,或者可本机实现对对象的数据的查询(例如,sql查询)的执行。在一些实施方案中,可为给定的i/o路径指定各种本机操纵和基于无服务器任务的操纵的任何组合。例如,对于读取对象的特定请求,所有者可指定要对对象执行给定的sql查询,该查询的输出经由第一任务执行来处理,该查询的输出经由第二任务执行来处理等。应用于i/o路径的数据操纵(例如,本地操纵、基于无服务器任务的操纵或它们的组合)的集合在本文中通常称为应用于i/o路径的数据处理“流水线”。
24.根据本公开的方面,应用于i/o路径的特定路径修改(例如,添加流水线)可根据路径的属性而变化,所述属性是诸如从其发出i/o请求的客户端装置或者请求中的对象或对象集合。例如,流水线可应用于各个对象,使得流水线应用于对象的所有i/o请求,或者只有在某些客户端装置访问对象时才选择性地应用流水线。在一些情况下,对象存储服务可为对象或集合提供多个i/o路径。例如,相同的对象或集合可与对象存储服务上的多个资源标识符相关联,使得可通过说明性地对应于不同的网络可访问端点的多个标识符(例如,统一资源标识符或uri)来访问对象或集合。在一个实施方案中,可将不同的流水线应用于给定对象的每个i/o路径。例如,第一i/o路径可与对数据集的非特权访问相关联,并且因此会受到在检索期间之前从数据集移除机密信息的数据操纵影响。第二i/o路径可与特权访问相关联,并且因此不受这些数据操纵影响。在一些情况下,可基于其他标准来选择性地应用流水线。例如,是否应用流水线可基于一天中的时间、对对象或集合的访问次数或速率等。
25.如本领域技术人员鉴于本公开将了解,本文公开的实施方案提高了计算系统(诸如对象存储系统)对数据对象提供并实施数据操纵功能的能力。尽管现有技术通常依赖于数据操纵功能的外部实施(例如,请求用户在上传之前去掉个人信息),但本公开的实施方
案能够将数据操纵直接插入到对象存储系统的i/o路径中。此外,本公开的实施方案通过在隔离的执行环境内提供操纵功能的无服务器执行来提供用于实现数据操纵的安全机制。本公开的实施方案通过使无服务器功能能够基于本地流(例如,“文件”)句柄进行操作而不是要求所述功能充当网络可访问服务来进一步改进此类功能的操作。因此,当前公开的实施方案解决了计算系统内固有的技术问题,诸如在存储系统处实施数据操纵的困难以及创建外部服务来实施此类数据操纵的复杂性。这些技术问题通过本文描述的各种技术解决方案来解决,包括在可能不知道请求用户的情况下将数据处理流水线插入对象或对象集合的i/o路径中,使用无服务器功能来执行此类流水线的方面,以及使用本地流句柄来实现简化无服务器功能的创建。因此,本公开总体上代表对现有数据处理系统和计算系统的改进。
26.现在将讨论在按需代码执行系统上的任务的一般执行。如本文详细地描述,按需代码执行系统可提供网络可访问服务,从而使用户能够提交或指定要由按需代码执行系统上的虚拟机实例执行的计算机可执行源代码。按需代码执行系统上的每一组代码可定义“任务”,并且当在按需代码执行系统的虚拟机实例上执行时实现与该任务相对应的特定功能性。在按需代码执行系统上单独地实现任务可称为任务的“执行”(或“任务执行”)。在一些情况下,按需代码执行系统可使用户能够基于多种潜在事件而直接触发任务的执行,所述潜在事件是诸如向按需代码执行系统传输应用程序编程接口(“api”)调用或向按需代码执行系统传输特殊格式的超文本传输协议(“http”)包。根据本公开的实施方案,按需代码执行系统可进一步与对象存储系统交互,以便在将数据操纵流水线应用于i/o路径期间执行任务。因此,按需代码执行系统可“按需”执行任何指定的可执行代码,而不要求配置或维护在其上执行代码的基础硬件或基础设施。此外,按需代码执行系统可被配置为以快速的方式(例如,在100毫秒[ms]以下)执行任务,从而实现“实时”(例如,在终端用户几乎不可感知的延迟的情况下)执行任务。为了实现这种快速执行,按需代码执行系统可包括一个或多个虚拟机实例,该一个或多个虚拟机实例被“预热”或预先初始化(例如,被引导到操作系统中并执行完整或基本上完整的运行时环境)并且被配置为能够执行用户定义的代码,使得可响应于执行代码的请求而快速地执行代码,而不会因初始化虚拟机实例而导致延迟。因此,当任务的执行被触发时,对应于该任务的代码可在很短的时间内在预先初始化的虚拟机中执行。
[0027]
具体地,为了执行任务,本文描述的按需代码执行系统可维护执行虚拟机实例的池,所述虚拟机实例在一接收到执行任务的请求时就可使用。由于这些虚拟机的预先初始化特性,与执行任务代码(例如,实例和语言运行时启动时间)相关联的延迟(有时称为时延)可显著减少,通常减少至低于100毫秒级。说明性地,按需代码执行系统可在一个或多个物理计算装置上维护虚拟机实例池,其中每个虚拟机实例上加载有一个或多个软件部件(例如,操作系统、语言运行时、库等)。当按需代码执行系统接收到执行程序代码的请求(“任务”)时,按需代码执行系统可基于与任务相关的一个或多个计算约束(例如,所要求的操作系统或运行时)来选择用于执行用户的程序代码放入虚拟机实例,并且致使在该选定的虚拟机实例上执行任务。任务可在虚拟机实例上创建的隔离容器中执行,或者可在与充当其他任务的环境的其他虚拟机实例隔离的虚拟机实例内执行。由于池中的虚拟机实例在收到请求时已经启动并加载了特定的操作系统和语言运行时,因此与找到可处理请求的计算容量(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)相关的延迟可
显著减少。
[0028]
如本文所使用,术语“虚拟机实例”意图是指模拟硬件来提供软件可在其上执行的环境或平台(“执行环境”)的软件或其他可执行代码的执行。虚拟机实例一般由硬件装置执行,所述硬件装置可能与虚拟机实例模拟的物理硬件不同。例如,虚拟机可模拟第一类型的处理器和存储器,同时在第二类型的处理器和存储器上执行。因此,可利用虚拟机在正执行第二执行环境(例如,第二操作系统)的物理装置上执行意图用于第一执行环境(例如,第一操作系统)的软件。在一些情况下,由虚拟机实例模拟的硬件可与基础装置的硬件相同或类似。例如,具有第一类型的处理器的装置可实现多个虚拟机实例,每个虚拟机实例模拟该第一类型的处理器的实例。因此,可使用虚拟机实例将装置分成许多逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例一般可提供远离基础物理装置的硬件的抽象水平,但此抽象并非所要求的。例如,假设装置实现多个虚拟机实例,每个虚拟机实例模拟与由装置提供的硬件相同的硬件。在这种情况下,每个虚拟机实例可允许软件应用在不转译的情况下在基础硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用程序之间的逻辑分隔。一般称为“本机执行”的此过程可用于增加虚拟机实例的速度或执行。还可使用允许直接利用基础硬件的其他技术,诸如硬件直通技术。
[0029]
虽然执行操作系统的虚拟机在本文被描述为执行环境的一个示例,但其他执行环境也是可能的。例如,任务或其他进程可在软件“容器”内执行,该软件“容器”提供运行时环境,但本身不提供硬件的虚拟化。可在虚拟机内实现容器以提供额外的安全性,或者可在虚拟机实例的外部运行容器。
[0030]
结合附图参考以下详细描述,本公开的前述方面和许多附带优点将变得更容易了解,因为这通过结合附图参考以下描述而变得更好理解。
[0031]
图1是说明性操作环境100的框图,其中服务提供商系统110操作以使客户端装置102能够对存储在对象存储服务160内的对象执行i/o操作并且将路径修改应用于此类i/o操作,所述修改可包括在按需代码执行系统120上执行用户定义的代码。
[0032]
以说明的方式,各种示例客户端装置102被示出为与服务提供商系统110通信,所述客户端装置包括台式计算机、膝上型计算机和移动电话。通常,客户端装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可穿戴计算机、服务器、个人数字助理(pda)、混合pda/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、相机、数字媒体播放器等。
[0033]
一般而言,对象存储服务160可操作以使客户端能够读取、写入、修改和删除数据对象,每个数据对象表示与标识符(“对象标识符”或“资源标识符”)相关联的一组数据,该标识符可作为单独的资源进行交互。例如,对象可表示由客户端装置102提交的单个文件(但对象存储服务160可或可不将这样的对象作为单个文件进行存储)。这种对象级交互可与其他类型的存储服务进行对比,诸如在各个块的级别提供数据操纵的基于块的存储服务或在表(或其部分)的级别提供数据操纵的数据库存储服务等。
[0034]
对象存储服务160说明性地包括一个或多个前端162,该一个或多个前端提供客户端装置102可通过其与服务160交互的接口(命令行接口(cli)、应用程序编程接口(api)或其他编程接口)以代表它们配置服务160并在服务160上执行i/o操作。例如,客户端装置102可与前端162交互以在服务160上创建数据对象集合(例如,对象“桶”)并为该集合配置许
可。此后,客户端装置102可基于前端162的接口在集合内创建、读取、更新或删除对象。在一个实施方案中,前端接口162提供支持多种请求方法的符合rest的http,每种请求方法对应于对服务160上的请求i/o操作。以非限制性示例的方式,请求方法可包括:
[0035]
·
get操作,该操作请求通过参考对象的标识符来检索存储在服务160上的对象;
[0036]
·
put操作,该操作请求将对象存储在服务160上,包括对象的标识符和要作为对象存储的输入数据;
[0037]
·
delete操作,该操作请求参考对象的标识符来删除存储在服务160上的对象;以及
[0038]
·
list操作,该操作请求通过参考集合的标识符来列出存储在服务160上的对象集合内的对象。
[0039]
还可支持多种其他操作。例如,服务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操作。
[0040]
在一般操作期间,前端162可被配置为获得对请求方法的调用,并且将该请求方法应用于该方法的输入数据。例如,前端162可通过将输入数据作为对象存储在服务160上来对将输入数据作为对象放入服务160的请求作出响应。例如,对象可存储在对象数据存储168上,所述对象数据存储对应于任何持久性或基本持久性存储设备(包括硬盘驱动器(hdd)、固态驱动器(ssd)、网络可访问存储设备(nas)、存储区域网络(san)、非易失性随机存取存储器(nvram)或本领域已知的多种存储装置中的任一种)。作为另一个示例,前端162可通过从存储168检索对象(表示对get资源请求的输入数据的对象)并且将对象返回到请求客户端装置102来对从服务160get对象的请求作出响应。
[0041]
在一些情况下,对请求方法的调用可调用由服务160提供的一个或多个本机数据操纵。例如,select操作可提供要应用于对象(也在请求中标识)的sql格式化查询,或者get操作可提供要返回的对象的特定字节范围。服务160说明性地包括被配置为执行本地数据操纵的对象操纵引擎170,该对象操纵引擎说明性地对应于被配置有软件的装置,该软件可执行以在服务160上实现本地数据操纵(例如,通过针对字节范围get从对象中去掉未选择的字节,通过将sql查询应用于对象并反馈查询的结果等)。
[0042]
根据本公开的实施方案,服务160还可被配置为能够修改给定的对象或对象集合的i/o路径,使得将被调用请求方法应用于数据操纵功能的输出,而不是在调用中标识的资
源。例如,服务160可使客户端装置102能够指定针对给定对象的get操作应服从于在按需代码执行系统120上的用户定义的任务的执行,使得响应于操作返回的数据是任务执行的输出,而不是请求的对象。类似地,服务160可使客户端装置102能够指定存储给定对象的put操作应当服从于按需代码执行系统120上用户定义的任务的执行,使得响应于操作而存储的数据是任务执行的输出,而不是由客户端装置102提供用于存储的数据。如下文将更详细地讨论,路径修改可包括指定数据操纵的流水线,包括本地数据操作、基于任务的操纵或它们的组合。说明性地,客户端装置102可通过前端162来指定用于对象或对象集合的流水线或其他数据操纵,该前端可将流水线或操纵的记录存储在i/o路径修改数据存储164中,该存储164像对象数据存储168一样可表示任何持久性或基本持久性存储。虽然在图1中被输出为不同的,但在一些情况下,数据存储164和168可表示数据存储的单个集合。例如,对对象或集合的数据修改本身可作为对象存储在服务160上。
[0043]
为了经由执行用户定义的代码来实现数据操纵,该系统还包括按需代码执行系统120。在一个实施方案中,系统120仅可由对象存储服务160结合i/o路径的数据操纵来使用。在另一个实施方案中,系统120另外可由客户端装置102访问以直接实现无服务器任务执行。例如,按需代码执行系统120可向服务160(和可能地客户端装置102)提供一个或多个用户接口、命令行接口(cli)、应用程序编程接口(api),或用于以下操作的其他编程接口:生成并上传用户可执行代码(例如,包括标识上传的代码的依赖性代码对象的元数据);调用用户提供的代码(例如,提交在按需代码执行系统120上执行用户代码的请求);调度基于事件的作业或定时的作业;跟踪用户提供的代码;或查看与他们的请求或用户代码相关的其他日志记录或监视信息。虽然一个或多个实施方案在本文可被描述为使用用户接口,但应了解,此类实施方案可另外或替代地使用任何cli、api或其他编程接口。
[0044]
客户端装置102、对象存储服务160和按需代码执行系统120可经由网络104通信,该网络可包括任何有线网络、无线网络或它们的组合。例如,网络104可以是个人局域网、局域网、广域网、空中广播网络(例如,用于收音机或电视)、电缆网络、卫星网络、蜂窝电话网络或它们的组合。作为另一个示例,网络104可以是可能由各个不同方操作的链接网络的可公开访问网络,诸如互联网。在一些实施方案中,网络104可以是专用或半专用网络,诸如公司或大学内联网。网络104可包括一个或多个无线网络,诸如全球移动通信系统(gsm)网络、码分多址(cdma)网络、长期演进(lte)网络或任何其他类型的无线网络。网络104可使用用于经由互联网或其他前述类型的网络中的任一者进行通信的协议和部件。例如,由网络104使用的协议可包括超文本传输协议(http)、http安全(https)、消息队列遥测传输(mqtt)、受约束应用协议(coap)等。经由互联网或其他前述类型的通信网络中的任一种进行通信的协议和部件是本领域的技术人员所公知的,并且因此未在本文更详细地描述。
[0045]
为了实现与按需代码执行系统120的交互,系统120包括实现与按需代码执行系统120的交互的一个或多个前端130。在说明性实施方案中,前端130用作由按需代码执行系统120提供的其他服务的“前门”,从而使用户能够(经由客户端装置102)或服务160提供计算机可执行代码、请求执行计算机可执行代码并且查看计算机可执行代码的结果。前端130包括用以实现在按需代码执行系统120与其他计算装置之间的交互的多种部件。例如,每个前端130可包括请求接口,该请求接口向客户端装置102和服务160提供以下能力:将用户指定的代码上传或以其他方式传送到按需代码执行系统120并且此后请求执行该代码。在一个
实施方案中,请求接口经由图形用户接口(gui)、cli或api与外部计算装置(例如,客户端装置102、前端162等)通信。前端130处理请求并且确保请求被适当地授权。例如,前端130可确定与该请求相关联的用户是否被授权访问在该请求中指定的用户代码。
[0046]
如本文所使用的对用户代码的引用可指代以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可互换使用。例如,可结合由用户开发的特定数据变换来执行此类用户代码以实现特定功能。如上文所述,用户代码的单独集合(例如,用以实现特定功能)在本文称为“任务”,而对该代码的特定执行(包括例如编译代码、解译代码或以其他方式使代码可执行)称为“任务执行”或简称为“执行”。以非限制性示例的方式,任务可用javascript(例如,node.js)、java、python和/或ruby(或另一种编程语言)来编写。
[0047]
为了管理对代码执行的请求,前端130可包括执行队列,该执行队列可维持所请求的任务执行的记录。说明性地,按需代码执行系统120同时进行的任务执行的数量是有限的,并且因此,可将在按需代码执行系统120处发起(例如,经由api调用、经由从被执行或正在执行的任务的调用等)的新任务执行置于执行队列上并且例如按先进先出的次序进行处理。在一些实施方案中,按需代码执行系统120可包括多个执行队列,诸如用于每个用户账户的单独执行队列。例如,服务提供商系统110的用户可能想要限制按需代码执行系统120上的任务执行的速率(例如,出于成本原因)。因此,按需代码执行系统120可利用账户特定的执行队列来节制由特定用户账户同时进行的任务执行的速率。在一些情况下,按需代码执行系统120可对任务执行进行优先级排序,使得特定账户或指定优先级的任务执行绕过执行队列或者在执行队列内优先处理。在其他情况下,按需代码执行系统120可在接收到对任务的调用之后立即或基本上立即执行该任务,并且因此,可省略执行队列。
[0048]
前端130还可包括输出接口,该输出接口被配置为输出关于在按需代码执行系统120上的任务的执行的信息。说明性地,输出接口可将关于任务执行的数据(例如,任务的结果、与任务执行相关的错误或任务执行的细节,诸如完成执行所需的总时间、经由执行处理的总数据等)传输到用户计算装置102或对象存储服务160。
[0049]
在一些实施方案中,按需代码执行系统120可包括多个前端130。在此类实施方案中,可提供负荷平衡器以例如按循环方式将传入的调用分发给多个前端130。在一些实施方案中,负荷平衡器将传入的调用分发给多个前端130的方式可基于按需代码执行系统120的其他部件的位置或状态。例如,负荷平衡器可将调用分发给地理上在附近的前端130或有能力服务于调用的前端。在每个前端130对应于按需代码执行系统120的另一个部件的单独实例(诸如在下文描述的活动池148)的情况下,负荷平衡器可根据那些其他部件上的能力或负荷来分发调用。在一些情况下,可在前端130之间确定性地分发调用,使得执行任务的给定调用将始终(或几乎始终)被路由到同一前端130。这可例如辅助维持对任务的准确的执行记录,以确保任务仅执行期望的次数。例如,可对调用进行分发以在前端130之间进行负荷平衡。本领域技术人员将明白其他分发技术,诸如任播路由。
[0050]
按需代码执行系统120还包括一个或多个工作者管理器140,该一个或多个工作者管理器管理用于服务于传入的调用以执行任务的执行环境,诸如虚拟机实例150(被示出为vm实例150a和150b,通常称为“vm”)。尽管以下将参考虚拟机实例150作为这种环境的示例进行描述,但本公开的实施方案可利用其他环境,诸如软件容器。在图1所示的示例中,每个
工作者管理器140管理活动池148,该活动池是在被初始化以执行给定任务(例如,通过将任务的代码和任何依赖性数据对象加载到实例中)的一个或多个物理主机计算装置上执行的虚拟机实例150的组(有时称为池)。
[0051]
虽然虚拟机实例150在这里被描述为指派给特定任务,但在一些实施方案中,实例可被指派给一组任务,使得实例被绑到该组任务并且该组的任何任务可在该实例内执行。例如,同一组中的用户可属于同一安全组(例如,基于它们的安全凭证),使得已经在特定实例150上的容器中执行了一个任务之后在同一实例上的另一个容器中执行另一个任务不会造成安全风险。如下所讨论,任务可与包含控制任务可如何执行的各种方面的许可相关联。例如,任务的许可可定义哪些网络连接(如果有的话)可由任务的执行环境发起。作为另一个示例,任务的许可可定义将什么认证信息传递到任务,从而控制可访问哪些网络可访问资源来执行任务(例如,服务160上的对象)。在一个实施方案中,任务的安全组是基于一个或多个这样的许可。例如,可基于发起网络连接的权限和访问网络资源的许可的组合来定义安全组。作为另一个示例,组的任务可共享共同的依赖关系,使得可快速修改用于执行组的一个任务的环境以支持该组内的另一个任务的执行。
[0052]
一旦前端130已经成功地处理了执行任务的触发事件,前端130便将请求传递到工作者管理器140以执行该任务。在一个实施方案中,每个前端130可与对应的工作者管理器140(例如,位于同一地点或地理上在前端130附近的工作者管理器140)相关联,并且因此,前端130可将大多数或所有请求传递到该工作者管理器140。在另一个实施方案中,前端130可包括位置选择器,该位置选择器被配置为确定将执行请求传递到的工作者管理器140。在一个实施方案中,位置选择器可基于对调用进行散列来确定接收该调用的工作者管理器140,并且将该调用分发给基于散列值(例如,经由散列环)选择的工作者管理器140。用于在工作管理器140之间分发调用的各种其他机制对于本领域技术人员将是显而易见的。
[0053]
此后,工作者管理器140可修改虚拟机实例150(如果必要的话)并且在实例150内执行任务的代码。如图1所示,相应的实例150可具有操作系统(os)152(被示出为os 152a和152b)、语言运行时154(被示出为运行时154a和154b)以及用户代码156(被示出为用户代码156a和156b)。os 152、运行时154和用户代码156可共同实现执行用户代码以实现任务。因此,经由按需代码执行系统120的操作,可在执行环境内快速地执行任务。
[0054]
根据本公开的方面,每个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的访
问受限制。
[0055]
如本文所使用,术语“本地文件系统”通常指代在执行环境中维护的文件系统,使得在该环境内执行的软件可访问作为文件的数据,而不是经由网络连接。根据本公开的方面,可经由本地文件系统访问的数据存储设备本身可以是本地的(例如,本地物理存储设备),或者可以是远程的(例如,经由网络协议(如nfs)来访问,或者表示为由网络可访问服务提供的虚拟化块装置)。因此,术语“本地文件系统”意图描述软件访问数据的机制,而不是数据的物理位置。
[0056]
vm数据存储158可包括任何持久性或非持久性数据存储装置。在一个实施方案中,vm数据存储158是主机装置的物理存储设备,或者是托管在主机装置的物理存储设备上的虚拟磁盘驱动器。在另一个实施方案中,vm数据存储158被表示为本地存储设备,但实际上是由网络可访问服务提供的虚拟化存储装置。例如,vm数据存储158可以是由网络可访问块存储服务提供的虚拟化磁盘驱动器。在一些实施方案中,对象存储服务160可被配置为提供对存储在数据存储168上的对象的文件级访问,从而使vm数据存储158能够基于暂存代码157与服务160之间的通信被虚拟化。例如,对象存储服务160可包括提供对在数据存储168内作为文件的对象的网络访问的文件级接口166。例如,文件级接口166可表示提供对作为文件的对象的访问的基于网络的文件系统服务器(例如,网络文件系统(nfs)),并且暂存代码157可实现该服务器的客户端,从而提供对服务160的对象的文件级访问。
[0057]
在一些情况下,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处的数据的基于网络的访问将非常迅速地发生。
[0058]
尽管本文提供了关于使用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流相关。
[0059]
对象存储服务160和按需代码执行系统120在图1中被描绘为在分布式计算环境中操作,该分布式计算环境包括使用一个或多个计算机网络(在图1中未示出)互连的若干计算机系统。对象存储服务160和按需代码执行系统120还可在具有比图1所示的更少或更多数量的装置的计算环境内操作。因此,在图1中描绘对象存储服务160和按需代码执行系统120应视为说明性的而非限制本公开。例如,按需代码执行系统120或其各种构成可实现各种网络服务部件、托管或“云”计算环境或对等网络配置,以实现本文描述的过程的至少一部分。在一些情况下,对象存储服务160和按需代码执行系统120可组合到单个服务中。此外,对象存储服务160和按需代码执行系统120可直接在硬件或由硬件装置执行的软件中实现,并且可(例如)包括在被配置为执行计算机可执行指令以执行将在本文描述的各种特征的物理计算机硬件上实现的一个或多个物理或虚拟服务器。一个或多个服务器可在地理上分散或在地理上共同定位在例如一个或多个数据中心中。在一些情况下,一个或多个服务器可作为快速供应和释放的计算资源的系统(通常称为“云计算环境”)的一部分来操作。
[0060]
在图1的示例中,对象存储服务160和按需代码执行系统120被示出为连接到网络104。在一些实施方案中,对象存储服务160和按需代码执行系统120内的部件中的任一者可经由网络104与按需代码执行系统120的其他部件通信。在其他实施方案中,并非对象存储服务160和按需代码执行系统120的所有部件都能够与虚拟环境100的其他部件通信。在一个示例中,仅前端130和162(在一些情况下,所述前端可表示多个前端)可连接到网络104,并且对象存储服务160和按需代码执行系统120的其他部件可经由相应的前端130和162与环境100的其他部件通信。
[0061]
虽然在本文总体参考对象存储服务160和按需代码执行系统120的单独部件来描述一些功能性,但其他部件或部件的组合可另外或替代地实现此类功能性。例如,虽然对象存储服务160在图1中被描绘为包括对象操纵引擎170,但该引擎170的功能可另外或替代地被实现为按需代码执行系统120上的任务。此外,虽然按需代码执行系统120被描述为应用数据操纵任务的示例系统,但其他计算系统可用于执行用户定义的任务,所述计算系统可包括比所描绘的更多、更少或不同的部件来作为按需代码执行系统120的一部分。在简化的示例中,对象存储服务160可包括物理计算装置,该物理计算装置被配置为按需执行用户定义的任务,因此表示根据本公开的实施方案可用的计算系统。因此,图1中的元件的具体配置意图是说明性。
[0062]
图2描绘了实现图1的前端162的前端服务器200计算装置的一般架构。图2所描绘的前端服务器200的一般架构包括可用来实现本公开的方面的计算机硬件和软件的布置。硬件可以在物理电子装置上实现,如下文将更详细地讨论。前端服务器200可包括比图2所示的元件更多(或更少)的元件。然而,不必示出所有这些通常常规的元件以提供可行的公开。另外地,图2所示的一般架构可用于实现图1所示的其他部件中的一者或多者。
[0063]
如图所示,前端服务器200包括处理单元290、网络接口292、计算机可读介质驱动器294以及输入/输出装置接口296,所有这些可通过通信总线相互通信。网络接口292可提供对一个或多个网络或计算系统的连接性。因此,处理单元290可经由网络104接收来自其他计算系统或服务的信息和指令。处理单元290还可与主存储器280或辅助存储器298通信,
并且进一步经由输入/输出装置接口296来提供用于任选的显示器(未示出)的输出信息。输入/输出装置接口296还可从任选的输入装置(未示出)接受输入。
[0064]
主存储器280或辅助存储器298可包含计算机程序指令(在一些实施方案中分组为单元),处理单元290执行所述计算机程序指令以便实现本公开的一个或多个方面。这些程序指令在图2中被示出为包括在主存储器280内,但可另外或替代地存储在辅助存储器298内。主存储器280和辅助存储器298对应于一层或多层存储器装置,包括(但不限于)ram、3d xpoint存储器、闪存存储器、磁存储设备等。出于描述的目的,假定主存储器280代表工作者管理器140的主工作存储器,其具有比辅助存储器298更高的速度但更低的总容量。
[0065]
主存储器280可存储操作系统284,该操作系统提供计算机程序指令以便由处理单元290用于前端服务器200的一般管理和操作。存储器280还可包括用于实现本公开的方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器280包括用户接口单元282,该用户接口单元例如经由安装在计算装置上的导航或浏览接口(诸如浏览器或应用程序)而生成用户接口(或其指令)以在计算装置上显示。
[0066]
除了用户接口单元282之外或与用户接口单元组合,存储器280可包括控制平面单元286和数据平面单元288,每个单元都可执行以实现本公开的方面。说明性地,根据本公开的实施方案,控制平面单元286可包括可执行以使数据对象或对象集合的所有者能够将操纵、无服务器功能或数据处理流水线附加到i/o路径的代码。例如,控制平面单元286可使前端162能够实现图3的交互。数据平面单元288可说明性地包括能够处理对象存储服务160上的i/o操作的代码,包括实现附加到i/o路径的操纵、无服务器功能或数据处理流水线(例如,经由图5a至图6b的交互、图7至图8的例程的实现等)。
[0067]
图2的前端服务器200是这种装置的一种说明性配置,其他配置是可能的。例如,虽然被示出为单个装置,但在一些实施方案中,前端服务器200可被实现为多个物理主机装置。说明性地,这种前端服务器200的第一装置可实现控制平面单元286,而第二装置可实现数据平面单元288。
[0068]
虽然在图2中被描述为前端服务器200,但在一些实施方案中可利用类似的部件来实现图1的环境100中所示的其他装置。例如,类似的装置可实现工作者管理器140,如在2014年9月30日提交的名称“programmatic event detection and message generation for requests to execute program code”的美国专利号9,323,556(“556专利”)中更详细地描述,该专利的全部内容在此以引用方式并入。
[0069]
参考图3,描绘了用于使客户端装置102a能够通过将数据操纵插入i/o路径中来修改对象存储服务160上的一个或多个对象的i/o路径的说明性交互,该操纵在可在按需代码执行系统120上执行的任务中实现。
[0070]
图3的交互从(1)开始,其中客户端装置102a创作流操纵代码。代码可说明性地用于访问在程序执行时提供的输入文件句柄(例如,该输入文件句柄可由程序的标准输入流表示,通常为“stdin”)、对从该文件句柄获得的数据执行操纵,并且将数据写入在程序执行时提供的输出文件句柄(例如,该输出文件句柄可由程序的标准输出流表示,通常为“stdout”)。
[0071]
尽管本文关于“文件”句柄讨论示例,但本公开的实施方案可利用提供对任何操作系统级输入/输出(io)流的访问的句柄,所述句柄的示例包括字节流、字符流、文件流等。如
本文所使用,术语操作系统级输入/输出流(或简称为“io流”)意图指代操作系统为其提供一组定义的功能的数据流,所述功能是诸如在流内寻找、读取流和写入流。可以各种方式创建流。例如,编程语言可通过使用函数库来生成流以在本地操作系统上打开文件,或者可通过使用“管道”运算符(例如,在操作系统外壳命令语言内)创建流。如本领域技术人员将理解,大多数通用编程语言包括与流交互的能力作为代码的基本功能性。
[0072]
根据本公开的实施方案,可创作任务代码以接受输入句柄和输出句柄作为代码的参数,输入句柄和输出句柄两者都表示io流(例如,分别是输入流和输出流)。代码然后可操纵输入流的数据,并且将输出写入输出流。在使用通用编程语言的情况下,可根据用户的需要实现多种功能中的任一种。例如,一种功能可从输入流中搜索并删除机密信息。虽然一些代码可只使用输入和输出句柄,但其他代码可实现附加的接口,诸如网络通信接口。然而,通过向代码提供对在代码之外创建的输入和输出流的访问(经由相应的句柄),就不需要代码来创建此类流。此外,因为可在代码之外并且可能在代码的执行环境之外创建流,所以流操作代码不一定需要被信任来执行创建流可能必要的某些操作。例如,流可表示通过网络连接传输的信息,而无需向代码提供对该网络连接的访问。因此,使用io流将数据传入和传出代码执行可简化代码,同时增加安全性。
[0073]
如上所述,可用多种编程语言来创作代码。用于此类语言的创作工具在本领域中是已知的,并且因此将不在本文中描述。虽然在图3中将创作描述为发生在客户端装置102a上,但在一些情况下,服务160可提供接口(例如,网络gui),通过该接口来创作或选择代码。
[0074]
在(2)处,客户端装置102a将流操纵代码提交给服务160的前端162,并且请求将代码的执行插入一个或多个对象的i/o路径中。说明性地,前端162可向装置102a提供能够提交代码(例如,作为压缩文件)的一个或多个接口。前端162还可提供能够指定应向其应用代码的执行的一个或多个i/o路径的接口。例如,每个i/o路径可对应于对象或对象集合(例如,对象的“桶”)。在一些情况下,i/o路径还可对应于访问此类对象或集合的给定方式(例如,通过其创建对象的uri)、对应于尝试访问对象或集合的一个或多个账户,或者对应于其他路径标准。然后在(3)处,将路径修改的指定存储在i/o路径修改数据存储164中。另外地,在(4)处,将流操纵代码存储在对象数据存储166内。
[0075]
因此,当经由指定的i/o路径接收到i/o请求时,服务160被配置为针对该请求的输入数据(例如,由客户端装置102a提供的数据或服务160的对象,取决于i/o请求)执行流操纵代码,然后将该请求应用于代码执行的输出。以这种方式,客户端装置102a(该客户端装置在图3中说明性地表示对象或对象集合的所有者)可获得对存储在对象存储服务160上和从该对象存储服务检索的数据的更大控制。
[0076]
图3的交互一般涉及将单个数据操纵插入服务160上的对象或集合的i/o路径中。然而,在本公开的一些实施方案中,对象或集合的所有者能够将多个数据操纵插入这样的i/o路径中。每个数据操纵可对应于例如基于无服务器代码的操纵或服务160的本机操作。例如,假设所有者已经将数据集作为对象提交给服务160,并且所有者希望向最终用户提供该数据集的一部分的经过滤视图。虽然所有者可将该部分的经过滤视图存储为单独的对象并向最终用户提供对该单独对象的访问,但这会导致服务160上的数据重复。如果所有者希望向多个最终用户提供数据集的不同部分,该多个部分可能具有定制的过滤器,则该数据重复增加,从而导致显著的效率低下。根据本公开,另一选项可以是所有者创作或获得定制
代码以在对象的不同部分上实现不同的过滤器,并且将该代码插入对象的i/o路径中。然而,这种方法可能要求所有者复制服务160的一些本机功能性(例如,检索数据集的一部分的能力)。此外,这种方法会抑制代码的模块性和可重用性,因为需要单组代码来执行两个功能(例如,选择数据的一部分和对该部分进行过滤)。
[0077]
为了解决这些缺点,本公开的实施方案使所有者能够创建要应用于i/o路径的数据操纵流水线,从而将多个数据操纵链接在一起,每个数据操纵也可插入其他i/o路径中。这种流水线的说明性可视化在图4中示出为流水线400。具体地,流水线400示出了所有者指定的一系列数据操纵在针对对象或对象集合调用请求方法时发生。如图4所示,流水线以输入数据开始,根据被调用请求方法在调用内指定该输入数据。例如,put调用通常可包括输入数据作为要存储的数据,而get调用通常可通过引用存储的对象来包括输入数据。list调用可指定目录,该目录的清单是list请求方法的输入数据。
[0078]
与请求方法的典型实现方式相反,在说明性流水线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的现有程序。
[0079]
尽管图4是的流水线400是线性的,但在一些实施方案中,服务160可使所有者能够诸如通过在流水线内包括条件节点或分支节点来配置非线性流水线。说明性地,如下文更详细地描述,数据操纵(例如,基于无服务器的功能)可被配置为包括返回值,诸如成功执行、遇到错误等的指示。在一个示例中,数据操纵的返回值可用于选择分支流水线内的条件分支,使得第一返回值致使流水线在第一分支上继续,而第二返回值致使流水线在第二分支上继续.在一些情况下,流水线可包括并行分支,使得将数据复制或划分到多个数据操纵,该多个数据操纵的输出在执行被调用方法之前传递到单个数据操纵以进行合并。服务160可说明性地提供图形用户接口,所有者可通过该图形用户接口诸如通过在流水线内指定节点并经由逻辑连接将这些节点链接在一起来创建流水线。多种基于流的开发接口是已知的并且可结合本公开的方面来使用。
[0080]
此外,在一些实施方案中,应用于特定i/o路径的流水线可在请求时基于根据不同标准应用于路径的数据操纵而即时生成。例如,数据集合的所有者可将第一数据操纵应用于与集合内的对象的所有交互,并且将第二数据操纵应用于经由给定的uri获得的所有交互。因此,当接收到经由给定的uri与集合内的对象交互的请求时,服务160可生成将第一数据操纵和第二数据操纵组合的流水线。服务160可说明性地实现标准的层级结构,使得应用于对象的操纵在应用于uri等的操纵之前放置在流水线内。
[0081]
在一些实施方案中,客户端装置102可能够请求将数据操纵包括在流水线内。例如,在get请求的参数内,客户端装置102可指定要包括在结合请求应用的流水线内的特定数据操纵。说明性地,集合所有者可指定允许用于集合的一个或多个数据操纵,并且进一步指定那些操纵的标识符(例如,函数名称)。因此,当请求与集合交互时,客户端装置102可指定标识符以致使操纵被包括在应用于i/o路径的流水线内。在一个实施方案中,客户端请求的操纵在所有者指定的数据操纵之后并且在实现所请求的请求方法之前附加到流水线的末尾。例如,在客户端装置102请求获得数据集并且请求在实施get方法之前将搜索函数应用于数据集的情况下,搜索函数可接收针对数据集的所有者指定的数据操纵(例如,从数据集中去除机密信息的操纵)的输出作为输入数据。另外,在一些实施方案中,请求可指定要传递到一个或多个数据操纵的参数(无论是否在请求内指定)。因此,虽然本公开的实施方案可在就客户端装置102而言不知道数据操纵的情况下实现那些操纵,但其他实施方案可使客户端装置102能够在i/o请求内传递信息以用于实现数据操纵。
[0082]
此外,虽然关于对被调用方法的输入数据的操纵讨论了本公开的示例实施方案,但本公开的实施方案还可用于修改请求的方面,包括被调用方法。例如,无服务器任务执行可被传递请求的内容(包括,例如,被调用方法和参数),并且被配置为修改和返回方法或参数的修改版本作为对前端162的返回值。说明性地,在客户端装置102被认证为仅能访问数据接合的一部分的用户的情况下,无服务器任务执行可被传递对“get”该数据对象的调用,并且可变换get请求的参数,使得它仅应用于与用户可访问的部分相对应的数据集合的特定字节范围。作为又一示例,任务可用于诸如通过限制用户可调用的方法、那些方法的参数等来实现对被调用方法的定制解析或限制。在一些情况下,将一个或多个函数应用于请求(例如,修改被调用的方法或方法参数)可被视为“数据处理前”流水线,并且因此可在获得流水线400内的输入数据之前实现(该输入数据可由于请求的变化而变化),或者可独立于数据操纵流水线400来实现。
[0083]
类似地,虽然关于应用被调用方法以输出一个或多个数据操作的数据来讨论本公开的示例实施方案,但在一些实施方案中,操纵可另外地或替代地在应用被调用方法之后发生。例如,数据对象可能包含数据所有者希望在将数据提供给客户端之前去除的敏感数据。所有者还可使客户端能够指定对数据集的本机操作,诸如对数据集进行数据库查询(例如,经由select资源方法)。虽然所有者可为数据集指定流水线以致使在应用select方法之前执行敏感数据的过滤,但这样的操作顺序可能是不希望的,因为可相对于整个数据对象而不仅是由select查询返回的部分来进行过滤。因此,除了指定在满足请求方法之前发生的操纵之外或替代地,本公开的实施方案可使所有者能够指定在应用被调用方法之后但在执行最终操作以满足请求之前发生的操纵。例如,在select操作的情况下,服务160可首先针对指定的输入数据(例如,数据对象)执行select操作,并且然后将该select操作的输出传递到数据操纵,诸如无服务器任务执行。然后可将该执行的输出返回到客户端装置102以满足该请求。
[0084]
虽然总体上参考由对象或集合的所有者创作的无服务器任务来描述图3和图4,但在一些情况下,服务160可使代码创作者能够与服务160的其他用户共享他们的任务,使得在第二用户拥有的对象的i/o路径中执行第一用户的代码。服务160还可提供任务库以供每个用户使用。在一些情况下,共享任务的代码可提供给其他用户。在其他情况下,共享任务
的代码可对其他用户隐藏,使得其他用户可执行该任务但不能查看该任务的代码。在这些情况下,其他用户可说明性地能够修改代码执行的特定方面,诸如许可,代码将根据该许可执行。
[0085]
参考图5a和图5b,将讨论用于向用于请求的i/o路径应用修改以将对象存储在服务160上的说明性交互,该请求结合这些图被称为“put”请求或“put对象调用”。虽然在两个图中示出,但在图5a和图5b中保持交互的编号。
[0086]
交互开始于(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中。
[0087]
因此,在(3)处,前端162检测在i/o路径的修改内对无服务器任务执行的包括。因此,在(4)处,前端162向按需代码执行系统120提交调用,以针对在调用中指定的输入数据来执行在修改中指定的任务。
[0088]
在(5)处,按需代码执行系统120因此生成执行环境502,在该执行环境中执行对应于任务的代码。说明性地,该调用可指向系统的前端130,该前端可将指令分发给工作管理器140以选择或生成在其中执行任务的vm实例150,该vm实例150说明性地表示执行环境502。在执行环境502的生成期间,系统120还为环境提供在i/o路径修改中指示的任务的代码504(该代码可例如从对象数据存储166检索)。虽然图5a中未示出,但环境502还包括代码的其他依赖关系,诸如对操作系统的访问、执行代码所需的运行时等。
[0089]
在一些实施方案中,执行环境502的生成可包括用限制对网络资源的访问的安全约束来配置环境502。说明性地,在任务意图在不参考网络资源的情况下进行数据操纵的情况下,环境502可被配置为不能经由网络发送或接收信息。在任务意图利用网络资源的情况下,可基于“白名单”来提供对此类资源的访问,使得仅针对指定的域、网络地址等允许来自环境502的网络通信。网络限制可例如通过托管环境502的主机装置(例如,通过管理程序或主机操作系统)来实现。在一些情况下,可利用网络访问要求来帮助在逻辑上或物理上放置环境502。例如,在任务不需要访问网络资源的情况下,该任务的环境502可放置在远离服务提供商系统110的其他网络可访问服务的主机装置上,诸如具有对那些服务的较低质量的通信信道的“边缘”装置。在任务需要访问原本专用的网络服务(诸如在虚拟私有云(例如,代表给定的用户在服务160上实现的类似局域网的环境)中实现的服务)的情况下,可创建环境502以逻辑上存在于该云内,使得任务执行502访问云内的资源。在一些情况下,任务可被配置为在提交i/o请求的客户端装置102的私有云内执行。在其他情况下,任务可被配置为在请求中引用的对象或集合的所有者的私有云内执行。
[0090]
除了生成环境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来实现。
[0091]
图5a的交互在图5b中继续,其中系统120执行任务代码504。由于任务代码504可以是用户创作的,因此可在代码504内实现任何数量的函数。然而,出于描述图5a和图5b的目的,假设代码504在执行时从输入文件句柄506(该输入文件句柄可作为诸如stdin的常用输入流传递)读取输入数据、操纵输入数据,并且将输出数据写入输出文件句柄508(该输出文件句柄可作为诸如stdout的常用输出流传递)。因此,在(8)处,系统120获得写入输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。出于描述图5a和图5b的目的,将假设返回值指示执行的成功。在(10)处,然后将输出数据和成功返回值传递到前端162。
[0092]
虽然在图5b中被示出为单个交互,但在一些实施方案中,可分开返回任务执行的输出数据和该执行的返回值。例如,在执行期间,任务代码504可通过句柄508写入输出文件,并且该数据可周期性地或迭代地返回到服务160。说明性地,在输出文件存在于由暂存代码实现的用户空间中的文件系统上的情况下,暂存代码可检测对输出文件的每次写入并将其转发到前端162。在输出文件存在于网络文件系统上的情况下,对文件的写入可直接致使写入的数据被传输到接口166并因此传输到服务160。在一些情况下,迭代地传输写入的数据可减少环境502本地所需的存储量,因为根据一些实施方案,写入的数据可从环境502的本地存储设备删除。
[0093]
另外,虽然在图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。
[0094]
出于本说明的目的,将假设任务的成功返回值指示应将http2xx成功响应传递到装置102a。因此,在接收到输出数据时,前端162将输出数据作为对象存储在对象数据存储166内(11)。交互(11)说明性地对应于put请求方法的实现,该put请求方法最初由客户端装置102a调用,但存储任务执行的输出而不是提供的输入数据。在实现被调用的put请求方法之后,在(12)处,前端162向客户端装置102a返回由任务的成功返回值指示的成功指示符(例如,http 200响应代码)。因此,从客户端装置102a的角度来看,对将对象put在存储服务160上的调用导致在服务160上创建该对象。然而,不是存储由装置102a提供的输入数据,而是存储在服务160上的对象对应于所有者指定任务的输出数据,从而使对象的所有者能够更好地控制该对象的内容。在一些使用情况下,服务160可另外地将输入数据作为对象进行存储(例如,其中所有者指定的任务对应于可执行来提供可与输入数据(诸如从输入数据生成的校验和)结合使用的输出数据的代码)。
[0095]
参考图6a和图6b,将讨论用于向用于请求的i/o路径应用修改以检索服务160上的对象的说明性交互,该请求结合这些图被称为“get”请求或“get调用”。虽然在两个图中示出,但在图6a和图6b中保持交互的编号。
[0096]
交互开始于(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。
[0097]
因此,在(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还包括代码的其他依赖关系,诸如对操作系统的访问、执行代码所需的运行时等。
[0098]
另外,在(6)处,系统120为环境提供对输入文件句柄506和输出文件句柄508的文件级访问,该输入文件句柄和该输出文件句柄可分别用于读取和写入任务执行的输入数据(对象)和输出数据。如上所讨论,文件句柄506和508可指向附接到环境502的(物理或虚拟)块存储装置(例如,磁盘驱动器),使得任务可与本地文件系统交互以读取输入数据并写入输出数据。例如,环境502可表示具有虚拟磁盘驱动器的虚拟机,并且在(6')处,系统120可从服务160获得在调用中引用的对象,并且将对象存储在虚拟磁盘驱动器上。此后,在执行代码时,系统120可向代码传递如存储在虚拟磁盘驱动器上的对象的句柄以及向其写入输出数据的驱动器上的文件的句柄。在另一个实施方案中,文件句柄506和508可指向对象已经存储在其上的网络文件系统,诸如nfs兼容的文件系统。例如,文件级接口166可提供对如存储在对象数据存储中的对象以及表示输出数据的文件的文件级访问。通过提供句柄506和508,任务代码504能够使用流操纵来读取输入数据和写入输出数据,而不是要求实现网络传输。句柄506和508的创建可说明性地通过执行在环境502内或与该环境相关联的暂存代码157来实现。
[0099]
图6a的交互在图6b中继续,其中在(7)处,系统120执行任务代码504。由于任务代码504可以是用户创作的,因此可在代码504内实现任何数量的函数。然而,出于描述图6a和图6b的目的,假设代码504在执行时从输入文件句柄506(该输入文件句柄可作为诸如stdin的常用输入流传递)读取输入数据(对应于在调用内标识的对象)、操纵输入数据,并且将输出数据写入输出文件句柄508(该输出文件句柄可作为诸如stdout的常用输出流传递)。因此,在(8)处,系统120获得写入输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。然而,出于描述图6a和图6b的目的,将假设返回值指示执行的成功。在(10)处,然后将输出数据和成功返回值传递到前端162。
[0100]
在接收到输出数据和返回值时,前端162将任务执行的输出数据作为请求的对象返回。因此,交互(11)说明性地对应于get请求方法的实现,该get请求方法最初由客户端装置102a调用,但返回任务执行的输出而不是在调用内指定的对象。从客户端装置102a的角度来看,因此,对从存储服务160get对象的调用导致将数据作为对象返回到客户端装置102a。然而,不是返回如存储在服务160上的对象,而是提供到客户端装置102a的数据对应于所有者指定任务的输出数据,从而使对象的所有者能够更好地控制返回到客户端装置102a的数据。
[0101]
类似于如上文关于图5a和图5b所讨论,虽然在图6b中被示出为单个交互,但在一些实施方案中,可分开返回任务执行的输出数据和该执行的返回值。另外,虽然在图6a和图6b中假设成功返回值,但其他类型的返回值是可能的并且设想其他类型的返回值,诸如错误值、流水线控制值或对执行其他数据操纵的调用。此外,返回值可指示将什么返回值返回给客户端装置102a(例如,作为http状态代码)。在一些情况下,在从任务执行迭代地返回输出数据的情况下,输出数据也可由前端162迭代地提供给客户端装置102a。在输出数据很大的情况下(例如,大约数百兆字节、千兆字节等),将输出数据迭代地返回到客户端装置102a可使该数据能够作为流提供,从而相对于延迟数据的返回,加速将内容递送到客户端装置102a,直到完成任务的执行。
[0102]
虽然上面参考图5a至图6b描述了说明性交互,但对这些交互的各种修改是可能的
并且在本文中设想对这些交互的各种修改。例如,虽然上述交互涉及输入数据的操纵,但在一些实施方案中,可将无服务器任务插入服务160的i/o路径中以执行除数据操纵以外的功能。说明性地,可利用无服务器任务来执行关于被调用请求方法的验证或授权,以验证客户端装置102a被授权执行该方法。基于任务的验证或授权可支持不是由服务160本机提供的功能。例如,考虑希望将某些客户端装置102限制为仅访问在某个时间范围(例如,最后30天、除最后30天之外的任何时间等)期间创建的集合中的对象的集合所有者。虽然服务160可在每个对象或每个集合的基础上本机地提供授权,但在一些情况下,服务160可不在自创建起的持续时间的基础上本机地提供授权。因此,本公开的实施方案使所有者能够向集合的i/o路径(例如,使用集合的给定uri的get路径)中插入无服务器任务,该无服务器任务基于对象的创建时间来确定客户端是否被授权检索请求的对象。说明性地,由任务的执行提供的返回值可对应于“授权”或“未授权”响应。在任务不执行数据操纵的情况下,可能没有必要为任务执行的环境提供输入流句柄和输出流句柄。因此,在这些情况下,服务160和系统120可被配置为放弃向环境提供此类句柄。例如,可在创建任务时指定任务是否实现数据操纵,并且将其作为任务的元数据进行存储(例如,存储在对象数据存储166内)。因此,服务160可根据该元数据确定是否应通过提供适当的流句柄来支持任务内的数据操纵。
[0103]
虽然一些实施方案可利用返回值而不使用流句柄,但其他实施方案可反而利用流句柄而不使用返回值。例如,虽然上述交互涉及向存储服务160提供任务执行的返回值,但在一些情况下,系统120可被配置为基于与输出流句柄的交互来检测功能的完成。说明性地,在环境内的暂存代码(例如,提供用户空间文件系统或基于网络的文件系统)可检测到对解除分配流句柄的调用(例如,通过调用“file.close()”函数等)。暂存代码可将这样的调用解释为功能的成功完成,并且向服务160通知成功完成而不要求任务执行显式地提供返回值。
[0104]
虽然上述交互通常涉及将输入数据传递到任务执行,但可将附加或替代信息传递到执行。通过非限制性示例的方式,这样的信息可包括来自客户端装置102的请求的内容(例如,传输的http数据)、关于请求的元数据(例如,从其接收请求的网络地址或请求的时间)、关于客户端装置102的元数据(例如,装置的认证状态、账户时间或请求历史)或关于请求的对象或集合的元数据(例如,大小、存储位置、许可或者创建、修改或访问的时间)。此外,作为对输入数据的操纵的补充或替代方案,任务执行可被配置为修改关于输入数据的元数据,该元数据可以与输入数据一起存储(例如,存储在对象内)并且因此通过输出流句柄写入,或者可通过元数据流句柄、在返回值中包括元数据或对服务160的单独网络传输来单独存储并因此修改。
[0105]
参考图7,将描述用于实现与通过i/o路径在图1的对象存储服务处获得的i/o请求相关的所有者定义的函数的说明性例程700。例程700可说明性地在i/o路径(例如,根据对象或集合、对对象或集合的访问机制(诸如uri)、传输io请求的账户等定义)与数据操纵的流水线相关联之后实现。例如,可在上面讨论的图3的交互之前实现例程700。例程700示例性地由前端162实现。
[0106]
例程700开始于框702,其中前端162获得将i/o方法应用于输入数据的请求。该请求说明性地对应于客户端装置(例如,最终用户装置)。i/o方法可对应于例如http请求方法,诸如get、put、list、delete等。输入数据可被包括在请求中(例如,在put请求中),或者
在请求中被引用(例如,作为对象存储服务160上的现有对象。
[0107]
在框704处,前端162确定用于请求的i/o路径中的一个或多个数据操纵。如上所述,i/o路径可基于各种标准(或其组合)来定义,诸如在请求中引用的对象或集合、通过其传输请求的uri、与请求相关联的账户等。用于每个定义的i/o路径的操纵可说明性地存储在对象存储服务160中。因此,在框704处,前端162可将用于请求的i/o路径的参数与对象存储服务160处的存储的数据操纵进行比较,以确定插入i/o路径中的数据操纵。在一个实施方案中,操纵形成先前在框704处可由前端162存储或构建(例如,通过组合应用于i/o路径的多个操纵)的流水线,诸如图4的流水线400。在一些情况下,可在请求内指定附加数据操纵,例如该数据操纵可在预先指定的数据操纵(例如,未在请求内指定)之前插入。在其他情况下,请求可排除对任何数据操纵的引用。
[0108]
在框706处,前端162将i/o请求的输入数据传递到i/o路径的初始数据操纵。初始数据操纵可包括例如对象存储服务160的本机操作或由在调用中引用的对象或集合的所有者定义的无服务器任务。说明性地,在初始数据操纵是本机操纵的情况下,前端162可将输入传递到图1的对象操纵引擎170。在初始数据操作是无服务器任务的情况下,前端162可将输入传递到图1的按需代码执行系统120以经由任务的执行进行处理。下面参考图8描述用于实现无服务器任务的说明性例程。
[0109]
虽然图7说明性地描述了数据操纵,但在一些情况下,所有者可将其他处理应用于i/o路径。例如,所有者可向用于对象或集合的i/o路径中插入无服务器任务,该无服务器任务独立于数据操纵来提供认证。因此,在一些实施方案中,可修改框706,使得将其他数据(诸如关于请求或在请求中指定的对象的元数据)传递到认证函数或其他路径操纵。
[0110]
此后,例程700进行到框708,其中例程700的实现根据附加数据操纵是否与i/o路径相关联而变化。如果是的话,则例程700进行到框710,其中将先前操纵的输出传递到与i/o路径相关联的下一操纵(例如,流水线的后续阶段)。
[0111]
在框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处结束。
[0112]
应注意,与在初始请求中指定的输入相反,将被调用方法应用于该输出可改变存储在对象存储服务160中或从该对象存储服务检索的数据。例如,作为对象存储在服务160上的数据可能不同于在存储这种数据的请求中提交的数据。类似地,作为对象从系统检索的数据可能与存储在系统上的对象不匹配。因此,例程700的实现使数据对象的所有者能够代表所有者断言对存储在对象存储服务160上的对象或集合的i/o的更大控制。
[0113]
在一些情况下,在例程700中可包括附加或替代的框,或者此类框的实现可包括附
加或替代的操作。例如,如上所讨论,作为提供输出数据的补充或替代方案,无服务器任务执行可提供返回值。在一些情况下,该返回值可指示前端162在实现操纵时采取另外的动作。例如,错误返回值可指示前端162停止实现操纵,并且向请求装置提供指定的错误值(例如,http错误代码)。另一个返回值可指示前端162实现附加的无服务器任务或操纵。因此,在一些情况下,例程700可被修改为包括例如在框706和710之后对先前操作的返回值进行处理(或者框708可被修改为包括对这样的值进行处理)。因此,例程700意图本质上是说明性的。
[0114]
参考图8,将描述用于在图1的按需代码执行系统上执行任务以在实现所有者定义的函数期间实现数据操纵的说明性例程800。例程800说明性地由图1的按需代码执行系统120实现。
[0115]
例程800开始于框802,其中系统120获得对实现流操纵任务(例如,操纵作为输入io流句柄提供的数据的任务)的调用。例如,可结合图7的例程700的框706或710来获得调用。调用可包括任务的输入数据以及其他元数据,诸如在调用之前的请求的元数据、在调用内引用的对象的元数据等。
[0116]
在框804处,系统120为任务生成执行环境。环境的生成可包括例如生成任务可在其中执行的容器或虚拟机实例,并且向该环境提供任务的代码以及代码的任何依赖关系(例如,运行时、库等)。在一个实施方案中,用与为任务指定的许可相对应的网络许可来生成环境。如上所讨论,例如根据白名单,可限制性地(而不是许可地)设置这样的许可。因此,如果i/o路径的所有者没有指定许可,则环境可能缺乏网络访问。因为任务操作来操纵流,而不是网络数据,所以这种限制性模型可提高安全性,而不会对功能性产生不利影响。在一些实施方案中,可在提供对原本受限的网络资源的访问的逻辑网络位置处生成环境。例如,可在与调用装置相关联的虚拟专用局域网(例如,虚拟私有云环境)内生成环境。
[0117]
在框806处,系统120向环境暂存表示输入数据的io流。说明性地,系统120可用包括输入数据的文件系统来配置环境,并且向任务代码传递允许访问输入数据的句柄作为文件流。例如,系统120可用网络文件系统来配置环境,从而提供对输入数据(例如,存储在对象存储系统上)的基于网络的访问。在另一个示例中,系统120可用“本地”文件系统配置环境(例如,从提供文件系统的操作系统的角度来看),并且将输入数据复制到本地文件系统。例如,本地文件系统可以是用户空间文件系统(fuse)。在一些情况下,本地文件系统可在由环境的主机装置或由基于网络的装置(例如,作为网络可访问的块存储装置)提供的虚拟化磁盘驱动器上实现。在其他实施方案中,系统120可以通过将输入数据“管道传送”到执行环境、通过将输入数据写入环境的网络套接字(该网络套接字可能不提供对外部网络的访问)等来提供io流。系统120还用对输出流的流级访问来配置环境,诸如通过在文件系统上为输出数据创建文件、使任务的执行能够创建这样的文件、将环境的句柄(例如,stdout)管道传送到与环境或环境的管理程序位于同一地点的另一个vm实例上的位置等。
[0118]
在框808处,在环境中执行任务。任务的执行可包括执行任务的代码,以及将传递句柄或输入流和输出流的句柄传递到执行。例如,系统120可将存储在文件系统上的输入数据的句柄作为“stdin”变量传递到执行。系统还可将输出数据流的句柄传递到执行,例如,作为“stdout”变量。另外,系统120可将其他信息(诸如请求的元数据或在请求内指定的对象或集合)作为参数传递到执行。因此,任务的代码可执行以根据代码的函数对输入数据进
行流操纵,并且使用os级流操作将执行的输出写入输出流。
[0119]
例程800然后进行到框810,其中系统120将写入输出流的数据作为任务的输出数据返回(例如,返回到对象存储系统的前端162)。在一个实施方案中,框810可在任务执行完成之后发生,并且因此,系统120可将写入的数据作为任务的完整输出数据返回。在其他情况下,框810可在任务执行期间发生。例如,系统120可检测写入输出流的新数据并立即返回该数据,而无需等待任务的执行。说明性地,在将输出流写入输出文件的情况下,系统120可在写入之后删除输出文件的数据,使得立即发送新数据消除了对文件系统保持足够的存储来存储任务执行的所有输出数据的需要。更进一步地,在一些实施方案中,框810可在检测到描述输出流的输出流句柄的结尾时发生。
[0120]
另外,在框812处,在执行完成之后,系统120返回由执行提供的返回值(例如,返回到对象存储系统的前端162)。返回值可指定执行的结果,诸如成功或失败。在一些情况下,返回值可指定要采取的下一个动作,诸如实现附加的数据操纵。此外,返回值可指定要提供给请求对数据对象进行i/o操作的调用装置的数据,诸如要返回的http代码。如上所讨论,前端162可获得这样的返回值并采取适当的动作,诸如向调用装置返回错误或http代码、实现附加数据操纵、对输出数据执行i/o操作等。在一些情况下,可在任务的代码中显式地指定返回值。在其他情况下,诸如在代码中未指定返回值的情况下,可返回默认返回值(例如,指示成功的“1”)。然后,例程800在框814处结束。
[0121]
客户典型地期望一旦过程数据已经被上传到对象存储服务就确定该过程数据(诸如确定文件的校验和值,或者执行一些其他函数)以便确认上传的数据的完整性的能力。然而,当前技术通常要求等待,直到上传完整文件,即使在文件被拆分成单独的部分并且各个部分被并行地上传(例如,使用多部分上传程序,该多部分上传程序是用于指代单独地上传多个部分或子对象并且稍后将它们组合成完整的、重新汇编的或有时称为统一的文件或对象的任何程序的术语)时也是如此,之后可确定处理重新汇编的(或有时称为统一的)完整文件。在支持多部分上传的情况下,实施方案使得能够将处理函数插入每个部分的输入/输出路径中,使得可在每个部分上执行单独的中间或初始(或第一)函数。另外,实施方案还使得能够插入处理函数,该处理函数组合单独的中间或初始函数输出(例如,输入文件的每个部分的校验和值等)以确定与重新汇编的输入文件相关联的最终(或第二)函数输出(例如,诸如确定重新汇编的文件的校验和值,或者基于重新汇编的文件来确定某些其他函数输出)。在多部分上传实现并行上传的情况下,也可并行地计算中间函数输出。与仅在完成输入文件的上传和重新汇编之后才计算完整的、重新汇编的文件的函数输出相比,在上传部分期间并行地或迭代地预先计算中间函数输出(诸如校验和)使得能够在上传完成之后快得多地计算完整文件的函数输出(例如,校验和)。术语“重新汇编”也可称为“统一”。例如,重新汇编的文件、对象或数据也可称为统一的文件、对象或数据。
[0122]
多部分上传使客户端能够将文件拆分成单独的部分,并且并行地上传该单独的部分。一旦所有部分都已经被成功地上传,客户端就可提交调用以合并或重新汇编单独的部分来形成原始文件。客户端还可提交带有指示将合并哪些部分和合并这些部分的次序的调用的清单。
[0123]
这种处理的一个特别有用的应用是基于文件部分的各个校验和值来确定大文件的校验和,每个文件部分可被并行地上传。校验和值是从一组数据确定的错误检测代码并
用于检测该组数据的变化。一个这种校验和值使用循环冗余校验(例如,crc-32,它是32位循环冗余校验)来确定。校验和算法使得能够计算对象的值或校验和,其中该值小于该对象,但是如果对象发生微小变化,该值也将发生显著变化。因此,校验和可用于检测与对象从一个位置到另一个位置的传输相关联的错误。图9中所示的例程可用于根据从输入文件的单独部分确定的单独校验和(或其他值)来计算输入文件的校验和(或其他值)。
[0124]
图9是可由对象存储服务(诸如对象存储服务160)、代码执行服务(或在代码执行服务内运行的函数)(诸如按需代码执行系统120)或这两者执行的说明性例程900的流程图。例程900可用于在运行时(“即时”)动态地处理输入数据的输入数据部分(有时称为组块、小部分或数据子对象)。这种处理可在输入数据部分被上传到对象存储服务(诸如,例如对象存储服务160)并作为数据对象部分存储在该对象存储服务中时并且响应于对将数据对象部分合并到存储在对象存储服务上的数据对象中的请求而发生。尽管关于基于某些独立地上传的输入文件部分的单独校验和值来计算输入文件的校验和值描述了例程900,但是该例程可用于基于任何初始或中间函数输出来确定函数输出。
[0125]
在一些实施方案中,例程900可用于在每个单独的输入数据部分被上传时且在将单独的数据对象部分重新汇编成表示完整输入数据的数据对象之前自动地确定每个单独的输入数据部分的校验和值(或对其执行第一函数)。在每个单独的输入数据部分被上传时且在重新汇编输入数据之前确定每个单独的输入数据部分的校验和值可有利地减少在存储的输入数据准备好进行进一步处理或检索之前的时间量。例如,如果在输入数据部分上传期间发生错误,则一完成输入数据部分上传就可检测到错误,而不是在重新汇编完整输入数据之后才检测到错误。这种错误检测可能造成仅重新上传具有这种错误的输入数据部分。替代地,在每个输入数据部分被上传时从每个输入数据部分确定的第一值可用于检测第一条件,而不是在重新汇编完整输入数据之后确定第一条件。也可基于每个输入数据部分的对应的第一值来对每个输入数部分执行附加处理。另外,完整输入数据的校验和值可从单独输入数据部分中的每一者的校验和值确定,而不是从重新汇编的输入数据(例如,在将这些部分重新汇编成数据对象之后)确定。类似地,可通过将第二函数应用于第一值来从单独数据部分的第一值而不是从重新汇编的输入数据确定与完整输入数据相关联的第二或最终值。从输入数据部分的校验和(或第一值)确定输入数据的校验和(或第二值)有利地减少时延和计算资源要求。例程900的各方面将另外参考图10来描述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
[0126]
例程900可响应于事件(诸如从客户端装置102提交对将输入数据上传到对象存储服务160的请求)而开始。说明性地,将输入数据作为新数据对象添加到的数据对象集合的所有者可能先前已经指定:在使用多部分上传将对象上传到集合时,应当执行第一任务以处理上传的数据对象的每个部分,并且应当根据请求执行第二任务以将这些部分重新汇编到数据对象中。在一些实施方案中,例程900或其部分可在多个处理器上串行地或并行地实现。
[0127]
在框902处,对象存储服务160可接收对存储经由多部分上传提交的输入数据的请求。图10在(1)处示出了对象存储服务160接收请求。该请求说明性地包括参数,诸如将作为数据对象由对象存储服务160存储的输入数据的标识符、存储数据对象的位置;关于请求的上下文数据;其他数据;或者它们的某种组合。例如,该请求可以是针对将存储在对象存储
服务160的对象数据存储166中的特定输入数据的资源请求(诸如put请求),该输入数据将经由多部分上传来提供。
[0128]
在框902处,对象存储服务160还可确定将使用要存储在对象存储服务160中的输入数据的部分来生成函数输出。在一些实施方案中,该确定可以是基于上下文数据和/或输入数据本身。例如,对象存储服务160可接收客户端将使用多部分文件传输协议来将输入数据传输到存储服务160的指示,或者可要求使用多部分文件传输协议来将输入数据上传到对象存储服务160。在这种情况下,对象存储服务160将确定将传输的多部分输入数据的对象标识符(例如,对象id)。对象存储服务160将对象id提供到客户端。在一些实施方案中,不使用多部分文件传输协议来传输输入数据。相反,输入数据是按部分(例如,对象、子对象、文件、描绘的元素等)传输的,但是不一定根据多部分文件传输协议来传输。可提供清单或列表来标识随后将联合在一起的部分以及它们将被联合在一起的次序,以从输入数据的部分来重新汇编完整的输入数据。
[0129]
在框904处,对象存储服务160可从客户端接收输入数据的一部分。在一个特定的非限制性实施方案中,输入数据可以是文件、复合文件(例如,压缩文件,诸如根据.zip、.tar或其他压缩文件格式压缩的文件)、可复合对象或由单独的对象或子对象组成的超级可复合对象。每个输入数据部分与相关联元数据一起被接收,该相关联元数据可包括对象id和将对输入数据部分、完整输入数据或这两者执行的一个或多个函数的指示。例如,元数据可包括与数据对象部分相关联的校验和值(“接收到的cv”)。接收到的输入数据部分、对象id和元数据(例如,接收到的cv)可由对象存储服务160存储在一个或多个暂存区中。暂存区是数据存储位置,并且包括可经由块存储服务访问的数据存储设备、本地磁盘、对象存储服务160的对象数据存储166或其他数据存储位置。可将接收到的输入数据部分、对象id和元数据存储在相同或不同的暂存区中。另外,在至少部分地重叠的时间段期间,可由对象存储系统160并行地接收多个输入数据部分。此外,可按与将输入数据部分汇编成完整数据对象的次序不同的次序接收输入数据部分。因此,元数据可包括可用于指定将使用的输入数据部分的输入数据部分标识符(输入数据部分id)和要排列输入数据部分的次序,以汇编完整的输入数据。此外,输入数据部分可以是相同的大小或具有彼此不同的大小。
[0130]
将对输入数据部分、完整输入数据或这两者执行的一个或多个函数的指示可包括在将输入数据存储在对象存储服务160的对象数据存储166内之前操纵和/或验证输入数据部分、输入数据或这两者的指示。例如,该指示可指示将先对输入数据部分、完整输入数据或这两者进行压缩、解压缩、加密、解密或它们的组合,然后再存储在对象存储服务160的对象数据存储166内。另外,该指示可指示将先对输入数据部分、完整输入数据或这两者进行错误检查,然后进行后续操纵。例如,可对输入数据部分单独地进行错误检查,或者在重新汇编成完整输入数据之前进行校验和检查。另外地,可在被存储在对象数据存储存储设备166中之前对重新汇编的输入数据进行校验和检查。在一些实施方案中,对象存储服务160可自动地对每个输入数据部分和/或完整输入数据进行错误检查,而未接收到指示对象存储服务160这样做的指示。一完全地接收到每个输入数据部分,对象存储服务160就可发起对每个输入数据部分的错误检测,而无需等待重新汇编完整输入数据。图10在(2)处示出了对象存储服务160接收和存储输入数据的部分。
[0131]
在框906处,对象存储服务160可进行对执行环境502的调用以执行函数(例如,第
一函数)来确定输入数据部分的校验和值(或使用输入数据部分执行不同的计算或确定)。图10在(3)处示出了对象存储服务160进行对执行环境502的调用并且执行环境502(或在执行环境502内运行的函数)返回结果。响应于该调用,vm实例150或其他执行环境502可通过使用输入数据部分来执行该函数。例如,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可确定与输入数据部分相关联的校验和值(“确定的cv”)。执行环境502(或在执行环境502内运行的函数)可对输入数据部分执行多种错误检测操作中的任一种,包括循环冗余校验(例如,crc-32)或任何其他可并行错误检测操作。可并行错误检测操作是可对输入数据的部分执行的错误检测操作,并且错误检测操作的单独输出可被组合或以其他方式用于确定与完整输入数据相关联的校验和或其他数据完整性指示。每个确定的cv可以多种方式中的任一种进行存储,包括将其作为元数据与输入数据部分一起存储、用关系或非关系数据库服务进行存储、使用关系或非关系数据库管理系统进行存储或用对象存储服务将其存储。
[0132]
在框908处,对象存储服务160可处理从执行环境502接收的函数(或在执行环境502内运行的函数)的输出。例如,对象存储服务可使用从执行环境502(或在执行环境502内运行的函数)接收的输出数据(诸如确定的cv)来对输入数据部分执行错误检测(或使用该输入数据部分执行一些其他计算或确定)。错误检测可包括将确定的cv与存储的接收到的cv进行比较。如果这两个值不同,则对象存储服务160可确定在输入数据部分的上传期间发生了错误,并且可请求客户端重新发送相关联输入数据部分。图10在(4)处示出了对象存储服务160处理函数的输出。
[0133]
在一些实施方案中,对象存储服务160可将与输入数据部分相关联的确定的cv(或第一值)提供到客户端。客户端可接收确定的cv并且将其与输入数据部分的客户端确定的校验和值进行比较(或以其他方式处理第一值)。如果这两个值不同,则客户端可确定需要将相关联输入数据部分重新发送到对象存储服务160。在这种情况下,客户端将向对象存储服务160指示正在重新上传输入数据部分。
[0134]
在一些实施方案中,代替对由对象存储服务160接收到的每个输入数据部分执行校验和确定函数,执行环境502(或在执行环境502内运行的函数)被配置为对输入数据(或输入数据部分)的固定大小部分执行该函数。固定大小部分的大小可由客户端配置。例如,可使用结合输入数据多部分上传过程的发起发送到对象存储服务160的参数来指定大小。在一些实施方案中,大小由对象存储服务160或执行环境502(或在执行环境502内运行的函数)预先确定。
[0135]
例如,客户端可能希望使用多部分上传过程来将10gb文件作为输入数据上传。客户端可以多个部分上传输入数据,每个部分具有相同或不同的大小。例如,客户端可以十个1gb数据对象部分上传输入数据。执行环境502可在接收到每个部分时处理每个部分(如上所讨论),或者替代地,该执行环境可处理每个部分的固定大小部分。例如,执行环境502可在接收到每个1gb数据对象时处理其每个100mb(或其他预先确定的固定大小)。
[0136]
这种固定大小部分处理可有利地使执行环境502能够对已知的固定大小输入进行操作。这种配置将大大地简化用于处理输入数据部分的每个固定大小部分的暂存区存储设备的提供并提高提供效率。在一些实施方案中,如果完整输入数据大小超过阈值,或者如果输入数据部分大小超过阈值,则自动地使用固定大小部分处理。
[0137]
框904至908定义可并行框909,该可并行框可并行地或顺序地迭代多次,或者两者兼有。例如,可针对从客户端接收到的每个输入数据部分且并行地(例如,在至少部分地重叠的时间段期间)执行框909的框。
[0138]
在框910处,对象存储服务160(或vm实例150、其他执行环境502或在执行环境502内运行的函数)可接收对基于第一输出的至少一部分来执行第二函数的请求。例如,对象存储服务160可接收对确定经由多部分上传提交的来自存储的输入数据部分的重新汇编的输入数据的校验和的请求,或者对从存储的输入数据部分重新汇编输入数据的请求。图10在(5)处示出了对象存储服务160接收请求。该请求说明性地包括参数,诸如将作为数据对象由对象存储服务160重新汇编和存储的输入数据部分的标识符、存储数据对象的位置;关于请求的上下文数据;其他数据;或者它们的某种组合。例如,该请求可以是资源请求,诸如put请求。
[0139]
在框910处,对象存储服务160还可确定将使用存储在对象存储服务160中的输入数据的部分来生成函数输出。在一些实施方案中,该确定可以是基于上下文数据和/或输入数据本身。例如,对象存储服务160可接收将先前接收到的输入数据部分组合在一起的指示。可提供清单或列表来标识将联合在一起的部分以及它们将被联合在一起的次序,以从先前上传的部分来重新汇编完整的输入数据。
[0140]
在框912处,对象存储服务160可执行对执行环境502(或在执行环境502内运行的函数)的调用,以通过使用输入数据部分校验和中的每一者的单独校验和(或第一值)来确定重新汇编的输入数据的校验和(或使用输入数据部分校验和中的每一者的单独校验和来执行第二函数)。图10在(6)处示出了对象存储服务160执行对执行环境502(或在执行环境502内运行的函数)的调用以确定重新汇编的输入数据的校验和。在一个实施方案中,对象存储服务160从客户端接收清单,该清单标识将重新汇编成完整输入数据的输入数据部分。另外,清单还标识将输入数据部分重新汇编成完整输入数据的次序。例如,可能未按次序接收到单独的输入数据部分,并且清单可用于确定完整输入数据内的输入数据部分的正确排序。在清单中标识的输入数据部分中的每一者的校验和值用调用提供到执行环境502以确定重新汇编的输入数据的校验和。执行环境502可通过组合单独的校验和或通过确定单独的校验和值的校验和来执行函数以确定重新汇编的输入数据的校验和。执行环境502(或在执行环境502内运行的函数)可将重新汇编的输入数据的校验和返回到对象存储服务,如图10在(6)处所示。
[0141]
在判定框914处,对象存储服务160处理函数的输出。例如,对象存储服务160可使用重新汇编的输入数据的校验和来执行错误检测,或者它可将输出提供到客户端以使客户端能够执行错误检测。在一些实施方案中,对象存储服务160可通过将输出作为对象存储在对象数据存储166内来处理函数的输出。如果检测到错误,则客户端可重新上传输入数据的一个或多个部分。如果未检测到错误,则对象存储服务160基于清单的内容来从存储的输入数据部分重新汇编完整输入数据。图10在(7)处示出了对象存储服务处理函数的输出并从存储的输入数据部分重新汇编完整输入数据。
[0142]
在框916处,对象存储服务160可将重新汇编的输入数据作为数据对象存储在对象数据存储166中。图10在(8)处示出了对象存储服务将重新汇编的输入数据作为数据对象进行存储。
[0143]
框912至916被示出为按顺序发生。然而,这些框发生的次序可不同。在一些实施方案中,排序可不同,或者两个或更多个框可同时执行,或在至少部分地重叠的时间段期间执行。例如,在一些实施方案中,框912可与框914和/或框916同时地(或部分地同时地)执行。在一些实施方案中,框914和916也可在框912之前发生。
[0144]
该例程可在框918处终止。
[0145]
在一些实施方案中,客户端向对象存储服务(诸如对象存储服务160)发送请求以将输入数据或文件作为数据对象写入存储位置,诸如对象数据存储(包括对象数据存储166)。例如,客户端可能希望存储包括个人客户信息(例如,客户的政府颁发的身份识别号、社会保险号等)的客户记录的集合。客户端可能希望在存储之前模糊客户记录,使得用户只能检索客户记录的其中个人客户信息已经被模糊的版本。客户端可能希望只允许具有高级安全凭证的少数用户访问未模糊的个人客户信息。在另一个示例中,输入数据可包括医学图像(例如,照片、x光照片、波图像、超声图像等),其中图像的一部分包括个人可识别信息,诸如患者的姓名。客户端可能希望从医学图像模糊个人可识别信息。客户端请求可包括输入数据,或可由对象存储服务160用于获得输入数据的信息。响应于该请求,对象存储服务160可将输入数据暂存在暂存区(诸如以上讨论的暂存区中的任一者)中。一旦输入数据已经被暂存,就可发起模糊输入数据的例程,诸如图11的例程1100。
[0146]
图11是可由代码执行服务(或在执行环境502内运行的函数)(诸如按需代码执行系统120)执行以在运行时响应于对存储或写入输入数据的请求而动态地令牌化、掩蔽、加扰、模糊、加密或以其他方式呈现输入数据的不可理解(为方便起见,在本文中统称为“模糊”)部分的说明性例程1100的流程图。模糊还包括用不同的唯一数据(诸如令牌)替换(例如,选择性地替换)输入数据的一个或多个部分。被替换的数据的每个实例(例如,私人信息的每个实例)的令牌不同于每一其他令牌。换句话说,可提供令牌到私人信息的每个实例的一对一映射。该例程可被实现为按需代码执行系统120的函数,并且用户可将该函数附加到给定的对象集合的输入-输出路径或将该函数插入该输入-输出路径内。对写入输入数据的请求包括对将输入数据作为数据对象写入或存储在存储位置(诸如对象数据存储,包括对象数据存储166)中的请求。客户端可能希望存储包括私人信息和非私人信息的数据集。然而,客户端可能希望以将私人信息与非私人信息分开的方式和将私人信息以及令牌与私人信息之间的映射存储在安全位置仅供有限数量的经授权个体或资源访问的方式存储数据集。客户端可能还希望提供更大的个体或资源组对非私人信息的访问,或者将非私人信息存储在不太安全的位置。例程1100的各方面将参考图12来描述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
[0147]
例程1100可响应于事件(诸如当图8中所示的例程到达框808时)而开始。例如,例程1100可以是由vm实例150或在图8所示的例程期间生成的其他执行环境502执行的所有者定义的函数等(也称为用户定义的任务)。在一些实施方案中,例程1100或其部分可在多个处理器上串行地或并行地实现。
[0148]
在框1102处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可接收与对写入输入数据的请求相关联的参数。图12在(1)处示出了执行环境502(或在执行环境502内运行的函数)接收与请求相关联的参数。在一些实施方案中,参数可包括:引用数据,该引用数据包括对要作为数据对象进行存储的输入数据的引用;对数据对象的输出位
置的引用;关于请求的上下文数据;其他数据或元数据;或者它们的某种组合。例如,该请求可以是对将输入数据作为特定数据对象存储在对象存储服务160中的资源请求,诸如put请求。对输入数据的引用可以是执行环境502(或在执行环境502内运行的函数)可用来访问输入数据的数据,诸如:文件描述符;文件句柄;指针;或者表示输入数据的地址或标识符的一些其他数据。对输出位置的引用可以是执行环境502(或在执行环境502内运行的函数)可用来写入、存储或以其他方式持久化输出数据的数据,诸如:文件描述符;文件句柄;指针;或者表示用于提供函数的输出的位置的地址或标识符的一些其他数据。上下文数据或元数据可包括关于请求的上下文的数据或元数据,诸如:请求的用户、账户或其他来源的标识符;发出请求的访问或安全配置文件的标识符;表示将处理请求的访问或安全权限的数据;与请求相关联的位置的标识符;与请求相关联的语言的标识符;或者表示请求的来源的偏好或倾向的数据。虽然图12描绘了对象存储服务提供参数,诸如对所请求的数据对象的引用或对执行环境502(或在执行环境502内运行的函数)的输出位置的引用,但是在其他情况下,这些引用可由执行系统120的元素(诸如暂存代码157)提供。
[0149]
在框1104处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可使用引用数据来获得将作为数据对象进行存储的输入数据。可以未模糊或实质上未模糊形式获得输入数据。图12在(2)处示出了执行环境502(或在执行环境502内运行的函数)获得输入数据。在一些实施方案中,在框1104处,输入数据可能不是从对象存储服务160获得的,而是可预先提供到执行环境502(或在执行环境502内运行的函数)。例如,在执行环境的暂存期间,可在执行环境502的计算装置上在由引用数据指示的位置处获得和存储输入数据。
[0150]
在框1106处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可确定输入数据的一个或多个部分将被模糊。在一些实施方案中,该确定可以是基于上下文数据和/或输入数据。例如,如果输入数据的一部分看起来像或被确定为是或可能是私人或个人可识别信息的形式,则执行环境502(或在执行环境502内运行的函数)可确定这种部分将被模糊。执行环境502(或在执行环境502内运行的函数)可对照一个或多个标准来测试一个或多个上下文数据项以确定是否执行模糊以及对输入数据的哪些部分进行模糊。如果上下文数据项满足一个或多个标准,则执行环境502(或在执行环境502内运行的函数)可确定输入数据的一个或多个部分将被模糊,使得模糊部分使数据的部分呈现为将无法被接收方理解。图12在(3)处示出了执行环境502(或在执行环境502内运行的函数)确定模糊输入数据的部分。
[0151]
对照标准测试上下文数据可包括:确定输入数据包括私人或个人可识别信息(包括但不限于:个体的姓名、地址、年龄、政府颁发的身份识别号、社会保险号、出生日期、出生地点、母亲的婚前姓、生物特征信息、健康信息、车辆识别号(vin)等);或者确定输入数据包括已经被指定为机密的信息。
[0152]
在一个特定的非限制性实施方案中,输入数据可以是数据文件,诸如电子表格、定界文件或数据记录的其他集合。如果请求满足一个或多个标准,则数据文件的一些部分(诸如记录的集合、列或数据字段的集合等)将以模糊的形式存储。执行环境502(或在执行环境502内运行的函数)可确定由上下文数据指示的或以其他方式与请求相关联的请求的属性满足用于所请求的数据对象的特定记录、列和/或字段的标准。执行环境502(或在执行环境502内运行的函数)可基于该标准来确定所请求的输入数据的特定记录、列和/或字段在由
函数输出之前(例如,以作为数据对象进行存储)被模糊。
[0153]
在框1108处,vm实例150或其他执行环境502可选择性地对以上确定的输入数据的部分应用模糊。图12在(4)处示出了执行环境502(或在执行环境502内运行的函数)模糊输入数据的部分。模糊输入数据的一部分的内容可涉及使用一种或多种模糊方法,诸如以伪随机方法对内容进行加扰,生成内容的散列、用映射到数据存储(诸如对象存储服务160)中的内容的令牌替换内容、对该部分进行加密等。在一些实施方案中,在数据对象所有者的控制下使用密钥来执行加密并且使用密钥管理服务来管理加密。在一些实施方案中,不同的模糊方法可用于数据对象的不同部分、不同的数据对象、不同的上下文数据标准等。
[0154]
例如,在一个实施方案中,模糊方法可包括用映射到被保护在安全位置(诸如外部数据库)中的密钥-值对的令牌替换输入数据的一部分。例如,社会保险号“909-09-0909”可用全局唯一标识符(诸如“001”)替换,并且不同的数据库可存储将密钥“001”映射到“909-09-0909”的密钥-值对。
[0155]
在一些实施方案中,模糊方法可由拥有或负责被请求存储(例如,作为对将输入数据作为数据对象进行存储的请求的一部分)的数据对象的实体指定。例如,一个实体可指定将特定类型的模糊(例如,医学领域中的行业标准模糊方法)用于数据对象或数据对象桶,而另一个实体可指定将不同类型的模糊(例如,使用令牌到数据的映射的令牌化)用于不同的数据对象或数据对象桶。如果未指定模糊方法,则执行环境502(或在执行环境502内运行的函数)可应用默认模糊方法。
[0156]
在框1110处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可提供选择性地模糊的输入数据作为函数的输出。例如,执行环境502(或在执行环境502内运行的函数)可将选择性地模糊的输入数据放置在由引用数据指示的输出位置处,并最终确定输出。最终确定函数的输出可包括将由对输出位置的引用标识的输出流或文件结尾和/或向对象存储服务160提供返回值(例如,指示成功、失败或函数执行的一些其他特性)。另外,在框1110处,vm实例150或其他执行环境502或在执行环境502内运行的函数也可提供索引作为第二输出数据。该索引可包括在令牌与模糊的私人信息之间的映射。随后可使用对象存储服务、不同的对象存储服务或不同的存储服务(诸如数据库存储服务或任何其他存储服务)来存储索引。图12在(5)处示出了执行环境502(或在执行环境502内运行的函数)提供选择性地模糊的输入数据作为输出。例程1100可在框1112处终止。
[0157]
在写入时对数据对象部分的模糊提供了某些数据管理优点。例如,如果输入数据包括客户记录,诸如购买历史、个人可识别信息以及其他私人信息和非私人信息,则在特定客户删除她的账户的情况下,可更容易更新包括该信息的模糊版本的数据对象。例如,不必扫描整个数据对象来定位和去除所有被删除的客户的私人信息,而是系统可替代地从令牌映射表删除与被删除的客户相关联的令牌的映射(或令牌到密钥-值对的映射,如上所讨论)或从存储这种私人信息的位置删除客户的私人信息。
[0158]
图13是可由代码执行服务(诸如按需代码执行系统120)执行以在运行时响应于对将输入数据作为数据对象进行存储的请求而动态地确定和存储输入数据的内容的索引的说明性例程1300的流程图。客户端可能希望仅检索作为数据对象存储在对象存储服务中的复合文件的一部分。通过提供标识复合文件内的不同文件或数据集或项及其位置的索引,对象存储服务能够检索并仅向客户端提供期望的部分。例程1300的各方面将参考图14来描
述,该图是服务提供商系统110的各种部件之间的说明性数据流和交互的系统图。
[0159]
在一些实施方案中,客户端向对象存储服务(诸如对象存储服务160)发送请求以将输入数据作为数据对象写入存储位置,诸如对象数据存储(包括对象数据存储166)。例如,客户端可能希望存储包括复合文件(诸如压缩文件,有时称为.zip存档、.tar存档,或压缩文件,或由单独的数据元素的集合组成的其他文件)的输入数据。复合文件可包括一个或多个单独的文件,每个单独的文件都被压缩。复合文件还可包括复合文件的内容的索引。索引可包括复合文件内的单独的文件中的每一者的名称,以及关于复合文件的内容的其他元数据。索引还可提供在复合文件的内容与内容中的每一者的字节范围位置之间的映射。因此,该索引使用户能够使用“字节范围get”来仅请求某个期望文件的字节或复合文件的其他内容。在其他示例中,复合文件不包括复合文件的内容的索引。在又一个示例中,输入数据不是复合文件,但是对象存储服务160被配置为生成对应于输入数据的压缩版本的可存储数据对象,并且将压缩版本存储在对象存储服务内。客户端请求可包括输入数据,或可由对象存储服务160用于获得输入数据的信息。响应于该请求,对象存储服务160可将输入数据暂存在暂存区(诸如以上讨论的暂存区中的任一者)中。一旦对象已经被暂存,就可发起为输入数据编索引的例程,诸如图13的例程1100。
[0160]
例程1300可响应于事件(诸如当图8中所示的例程到达框808时)而开始。例如,例程1300可以是由vm实例150或在图8所示的例程期间生成的其他执行环境502执行的所有者定义的函数等(也称为用户定义的任务)。在一些实施方案中,例程1300或其部分可在多个处理器上串行地或并行地实现。
[0161]
在框1302处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可接收与对将输入数据作为数据对象存储的请求相关联的参数。图14在(1)处示出了执行环境502(或在执行环境502内运行的函数)接收与请求相关联的参数。在一些实施方案中,参数可包括:引用数据,该引用数据包括要作为数据对象进行存储的引用输入数据;对数据对象的输出位置的引用;关于请求的上下文数据;其他数据或元数据;或者它们的某种组合。例如,该请求可以是对将输入数据作为特定数据对象存储在对象存储服务160中的资源请求,诸如put请求。对输入数据的引用可以是执行环境502(或在执行环境502内运行的函数)可用来访问输入数据的数据,诸如:文件描述符;文件句柄;指针;或者表示输入数据的地址或标识符的一些其他数据。对输出位置的引用可以是执行环境502(或在执行环境502内运行的函数)可用来写入、存储或以其他方式持久化输出数据的数据,诸如:文件描述符;文件句柄;指针;或者表示用于提供函数的输出的位置的地址或标识符的一些其他数据。上下文数据或元数据可包括关于请求的上下文的数据或元数据,诸如:请求的用户、账户或其他来源的标识符;发出请求的访问或安全配置文件的标识符;表示将处理请求的访问或安全权限的数据;与请求相关联的位置的标识符;与请求相关联的语言的标识符;或者表示请求的来源的偏好或倾向的数据。虽然图14描绘了对象存储服务提供参数,诸如对所请求的数据对象的引用或对执行环境502(或在执行环境502内运行的函数)的输出位置的引用,但是在其他情况下,这些引用可由执行系统120的元素(诸如暂存代码157)提供。
[0162]
在框1304处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可使用引用数据来获得输入数据。图14在(2)处示出了执行环境502获得输入数据。在一些实施方案中,在框1104处,输入数据可能不是从对象存储服务160获得的,而是可预先提供到
执行环境502(或在执行环境502内运行的函数)。例如,在执行环境的暂存期间,可在执行环境502的计算装置上在由引用数据指示的位置处获得和存储输入数据。
[0163]
在框1306处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)生成输入数据的内容的索引。在一些实施方案中,通过获得存储在输入数据内的单独的文件的名称来生成索引。例如,输入数据可包括数据对象的内容的索引。如果未包括,则执行环境502(或在执行环境502内运行的函数)可读取并存储输入数据内的每个文件的名称。在一些实施方案中,提取输入数据内的文件或将其解压缩,因此可确定文件名称和/或文件内容。在一些实施方案中,执行环境502(或在执行环境502内运行的函数)使用存储在输入数据内的元数据或标头来生成输入数据的内容的索引。在一些实施方案中,vm实例150或其他执行环境502(或在执行环境502内运行的函数)被配置为将输入数据解包或递归地解包以确定该输入数据的内容(例如,输入数据内的描绘的元素的标识符,以及输入数据内的描绘的元素的字节范围位置,描绘的元素是文件或本文描述的任何其他描绘的元素)。递归解包可包括分析位于第一文件内的第二复合文件。vm实例150或其他执行环境502(或在执行环境502内运行的函数)可将第一文件解包以识别第二文件(或多个第二文件),并且然后将第二文件解包以确定第二文件内的描绘的元素的标识符和字节范围(或其他)位置。在一些实施方案中,执行环境502(或在执行环境502内运行的函数)通过分析输入数据内的文本来生成输入数据的内容的索引。该索引包括内容标识符(例如,文件名称、文本字段、标头信息、元数据等)以及与每个标识符相关联的位置信息。例如,索引可包括输入数据内的所有文件的列表,以及输入数据内的每个文件的位置(例如,字节范围等)。在另一个示例中,索引可包括输入数据内的数据集的所有标头的列表(例如,各种地理区域的销售数据),以及输入数据内的每个数据集的位置(例如,字节范围等)。另外,当输入文件包括复合文件时,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可确定用于形成复合文件的文件聚合技术。例如,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可通过分析文件内的字节来确定复合文件是.zip、.tar还是其他格式。例如,一些聚合技术生成具有已知标头格式的文件。因此,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可基于字节(有时称为文件聚合技术信息)来动态地评估输入数据,并且使用该信息来确定如何进一步读取和解释输入数据的其余部分。例如,文件聚合技术信息可用于确定是否执行文件的递归解包,诸如以上所讨论的。图14在(3)处示出了执行环境502(或在执行环境502内运行的函数)确定输入数据内容的索引。
[0164]
在框1308处,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可提供索引作为函数的输出。例如,执行环境502(或在执行环境502内运行的函数)可将索引返回到对象存储服务160。在一些实施方案中,代替索引、除了索引之外(作为第二输出数据)或与索引相结合,vm实例150或其他执行环境502(或在执行环境502内运行的函数)可返回输入数据。图14在(4)处示出了执行环境502(或在执行环境502内运行的函数)提供索引作为输出。
[0165]
在框1310处,对象存储服务160可处理函数输出。例如,对象存储服务160(或不同的服务)可存储索引。图14在(5)处示出了对象存储服务160存储索引。可将索引存储在多种位置中的任一者处。例如,对象存储服务160可将索引存储在对象数据存储(诸如对象存储服务160的对象数据存储166)中。在另一个示例中,对象存储服务160可使用关系或非关系
数据存储服务或数据库管理系统将索引作为表进行存储。在又一个示例中,索引可附加到输入数据或以其他方式添加到输入数据,并且更新的输入数据(带有索引)可由对象存储服务160存储。
[0166]
在一些实施方案中,在框1310处,对象存储服务160可创建对应于输入数据的数据对象,并且将元数据添加到包括对索引的引用的数据对象。该引用可包括存在与数据对象相关联的索引的指示。在另一个实施方案中,对应于输入数据的数据对象以及索引可经由命名约定彼此相关联。例如,数据对象和索引可具有类似的标识符或名称部分,诸如前缀、后缀或其他标识符。该引用可由数据对象的后续用户用来获得数据对象的期望部分。例如,用户可检索索引并选择数据对象的期望部分。对象存储服务160和执行环境502(或在执行环境502内运行的函数)可使用由用户指示的期望部分以及索引来识别数据对象的期望部分在数据对象内的位置(例如,字节范围)。对象存储服务160和执行环境502(或在执行环境502内运行的函数)可使用该位置来检索(例如,提取或解压缩)数据对象的期望部分(例如,经由对存储的数据对象执行字节范围查询或get等)并将其提供给用户。
[0167]
该例程可在框1312处终止。
[0168]
图14示出了执行环境502(或在执行环境502内运行的函数)响应于接收到对存储数据对象的请求而为数据对象编索引来存储在对象存储服务160中。尽管适时变换被示出为结合用于为数据对象编索引的例程1300的操作发生,但可结合本文所述的任何其他例程、结合任何其他所有者定义的函数或所有者定义的任务、在具有多个函数的流水线中等执行适时变换。
[0169]
示例实施方案
[0170]
本公开的实施方案的示例可根据以下条款来进行描述:
[0171]
条款1.一种系统,所述系统包括:
[0172]
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务被配置为将多个数据对象存储在对象数据存储内;以及
[0173]
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(i/o)路径中按需执行函数的一个或多个计算装置;
[0174]
其中所述对象存储服务被配置为至少:
[0175]
接收输入数据和对将所述输入数据作为数据对象存储在所述对象数据存储内的请求;
[0176]
确定在将所述输入数据作为所述数据对象进行存储之前将执行用于模糊所述输入数据的与对存储所述输入数据的所述请求相关联的部分的函数;以及
[0177]
将调用传输到所述代码执行服务以针对所述输入数据执行所述函数;并且
[0178]
其中所述代码执行服务被配置为至少:
[0179]
从所述对象存储服务接收所述调用以执行所述函数,所述调用包括所述输入数据;以及
[0180]
执行所述函数,其中执行所述函数致使所述服务:
[0181]
在所述输入数据内识别在将所述输入数据作为所述数据对象存储在所述对象数据存储内之前将被模糊的私人信息的一个或多个实例;
[0182]
生成输出数据,所述输出数据包括所述输入数据的呈模糊形式的所述私人信息的
所述一个或多个实例和所述输入数据的呈未模糊形式的剩余部分;以及
[0183]
将所述输出数据返回到所述对象存储服务;
[0184]
其中所述对象存储服务还被配置为将所述输出数据作为所述数据对象存储在所述对象数据存储中。
[0185]
条款2.如条款1的系统,其中在所述对象存储服务存储所述输出数据之后,所述输入数据不保持以未模糊形式存储在所述对象存储服务中。
[0186]
条款3.如条款1的系统,其中所述代码执行服务被配置为通过以下操作来生成所述输出数据:
[0187]
为所述私人信息的每个实例确定唯一令牌,其中每个唯一令牌不同于每个其他唯一令牌;
[0188]
存储所述私人信息的所述实例和所述唯一令牌到所述私人信息的所述实例的映射;以及
[0189]
用对应的唯一令牌替换所述私人信息的每个实例。
[0190]
条款4.如条款1的系统,其中所述代码执行服务被配置为通过对所述私人信息进行加密来生成所述私人信息的所述模糊形式。
[0191]
条款5.一种计算机实现的方法,所述计算机实现的方法包括:
[0192]
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
[0193]
接收对将输入数据作为数据对象存储在数据存储内的请求;
[0194]
至少部分地基于所述请求来确定在将所述输入数据作为所述数据对象进行存储之前执行函数以模糊所述输入数据的一部分;
[0195]
将代码执行系统配置为执行所述函数,其中所述代码执行系统被配置为提供在所述数据存储的输入/输出(i/o)路径中按需执行函数;
[0196]
在将所述输入数据作为所述数据对象进行存储之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
[0197]
获得所述输入数据;
[0198]
确定模糊所述输入数据的第一部分;
[0199]
生成第一模糊部分,所述第一模糊部分包括呈模糊形式的所述第一部分;以及
[0200]
生成包括所述第一模糊部分的输出数据,其中所述输出数据不包括呈未模糊形式的所述第一部分;以及
[0201]
将所述输出数据作为所述数据对象存储在所述数据存储中。
[0202]
条款6.如条款5的计算机实现的方法,其中确定模糊所述输入数据的第一部分包括确定所述第一部分包括私人信息。
[0203]
条款7.如条款6的计算机实现的方法,其中所述私人信息表示以下一项或多项:个人可识别信息、姓名、地址、年龄、政府颁发的身份识别号、出生日期、出生地点、母亲的婚前姓、账户号或生物特征记录。
[0204]
条款8.如条款5的计算机实现的方法,其中生成所述第一模糊部分包括:
[0205]
确定对应于所述第一部分的唯一令牌;
[0206]
存储所述令牌到所述第一部分的映射;以及
[0207]
用所述唯一令牌替换所述第一部分。
[0208]
条款9.如条款8的计算机实现的方法,其中存储所述令牌到所述第一部分的所述映射包括将所述令牌到所述第一部分的所述映射存储在具有与所述数据存储中的存储所述数据对象的位置不同的访问许可的存储位置。
[0209]
条款10.如条款5的计算机实现的方法,其中生成所述第一模糊部分包括使用加密密钥对所述输入数据的所述第一部分进行加密。
[0210]
条款11.如条款10的计算机实现的方法,所述计算机实现的方法还包括存储所述加密密钥和所述加密密钥到所述第一模糊部分的映射。
[0211]
条款12.如条款5的计算机实现的方法,其中确定模糊所述输入数据的所述第一部分是至少部分地基于所述输入数据的一部分。
[0212]
条款13.一种系统,所述系统包括:
[0213]
数据存储,所述数据存储存储多个数据对象;以及
[0214]
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
[0215]
接收对将输入数据作为数据对象存储在数据存储内的请求;
[0216]
至少部分地基于所述请求来确定在将所述输入数据作为所述数据对象进行存储之前执行函数以模糊所述输入数据的一部分;
[0217]
将代码执行系统配置为执行所述函数,其中所述代码执行系统被配置为提供在所述数据存储的输入/输出(i/o)路径中按需执行函数;
[0218]
在将所述输入数据作为所述数据对象进行存储之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
[0219]
获得所述输入数据;
[0220]
确定模糊所述输入数据的第一部分;
[0221]
生成第一模糊部分,所述第一模糊部分包括呈模糊形式的所述第一部分;以及
[0222]
生成包括所述第一模糊部分的输出数据,其中所述输出数据不包括呈未模糊形式的所述第一部分;以及
[0223]
将所述输出数据作为所述数据对象存储在所述数据存储中。
[0224]
条款14.如条款13的系统,其中所述一个或多个计算装置还被配置为通过确定所述第一部分包括私人信息来确定模糊所述输入数据的所述第一部分。
[0225]
条款15.如条款14的系统,其中所述私人信息表示以下一项或多项:个人可识别信息、姓名、地址、年龄、政府颁发的身份识别号、出生日期、出生地点、母亲的婚前姓、账户号或生物特征记录。
[0226]
条款16.如条款13的系统,其中所述一个或多个计算装置还被配置为通过以下操作来生成所述第一模糊部分:
[0227]
确定对应于所述第一部分的唯一令牌;
[0228]
存储所述令牌到所述第一部分的映射;以及
[0229]
用所述唯一令牌替换所述第一部分。
[0230]
条款17.如条款16的系统,其中所述一个或多个计算装置还被配置为通过将所述令牌到所述第一部分的所述映射存储在具有与所述数据存储中的存储所述数据对象的位置不同的访问许可的存储位置来生成所述第一模糊部分。
[0231]
条款18.如条款13的系统,其中所述一个或多个计算装置还被配置为通过使用加密密钥对所述输入数据的所述第一部分进行加密来生成所述第一模糊部分。
[0232]
条款19.如条款18的系统,其中所述一个或多个计算装置还被配置为存储所述加密密钥和所述加密密钥到所述第一模糊部分的映射。
[0233]
条款20.如条款13所述的系统,其中所述一个或多个计算装置还被配置为至少部分地基于所述输入数据的一部分来确定模糊所述输入数据的所述第一部分。
[0234]
本公开的实施方案的另外的示例可根据以下条款来进行描述:
[0235]
条款1.一种系统,所述系统包括:
[0236]
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务被配置为将多个数据对象存储在对象数据存储内;以及
[0237]
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(i/o)路径中按需执行函数的一个或多个计算装置;
[0238]
其中所述对象存储服务被配置为至少:
[0239]
从客户端接收:(1)作为多个输入数据部分的输入数据,以及(2)对将所述输入数据部分作为数据对象部分存储在所述对象数据存储内的请求;
[0240]
确定将针对每个输入数据部分执行与对存储所述输入数据部分的所述请求相关联的用于为输入数据部分生成校验和值的第一函数;以及
[0241]
将第一调用传输到所述代码执行服务以针对所述输入数据部分中的每一者的所述输入数据部分执行所述第一函数;以及
[0242]
其中所述代码执行服务被配置为至少:
[0243]
从所述对象存储服务接收所述第一调用以对所述输入数据部分执行所述第一函数;以及
[0244]
执行所述第一函数,其中执行所述第一函数致使所述代码执行服务:
[0245]
为所述输入数据部分生成单独的校验和值;以及
[0246]
将所述单独的校验和值作为第一输出数据返回;并且
[0247]
其中所述对象存储服务还被配置为:
[0248]
将所述输入数据部分中的每一者的所述第一输出数据作为单独的校验和数据对象进行存储;
[0249]
使用所述输入数据部分中的至少一些来重新汇编所述输入数据;
[0250]
确定将执行用于为所述重新汇编的输入数据生成校验和值的第二函数;以及
[0251]
将第二调用传输到所述代码执行服务以针对所述单独的校验和数据对象执行所述第二函数;并且
[0252]
其中所述代码执行服务被配置为至少:
[0253]
从所述对象存储服务接收所述第二调用以执行所述第二函数;以及
[0254]
执行所述第二函数,其中执行所述第二函数致使所述代码执行服务:
[0255]
基于所述单独的校验和数据对象来为所述重新汇编的输入数据生成校验和值;以及
[0256]
将所述重新汇编的输入数据的所述校验和值作为第二输出数据返回;并且
[0257]
其中所述对象存储服务还被配置为:
[0258]
将所述第二输出数据作为输入数据校验和数据对象进行存储;
[0259]
使用所述第二输出数据来执行错误检测以确定是否已经在无错误的情况下接收到所述输入数据;
[0260]
使用所述输入数据部分来重新汇编所述输入数据;以及
[0261]
将所述重新汇编的输入数据作为数据对象存储在所述对象数据存储内。
[0262]
条款2.如条款1的系统,其中执行所述第一函数致使所述代码执行服务通过使用所述输入数据部分执行循环冗余校验来为所述输入数据部分生成所述单独的校验和值,并且其中执行所述第二函数致使所述代码执行服务通过使用所述单独的校验和数据对象执行循环冗余校验来为所述重新汇编的输入数据生成所述校验和值。
[0263]
条款3.如条款1的系统,其中所述对象存储服务还被配置为将所述第二输出数据作为元数据存储到所述数据对象。
[0264]
条款4.如条款1的系统,其中所述对象存储服务还被配置为基于所述单独的校验和数据对象来确定已经在有错误的情况下接收到一个或多个输入数据部分,并且向所述客户端提供关于是否已经在有错误的情况下接收到一个或多个输入数据部分的信息。
[0265]
条款5.一种计算机实现的方法,所述计算机实现的方法包括:
[0266]
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
[0267]
经由单独的上传过程从客户端接收作为多个输入数据部分的输入数据,并且从所述客户端接收对将所述输入数据部分作为数据对象部分存储在数据存储内的请求;
[0268]
至少部分地基于所述请求来确定在确认将所述输入数据部分作为所述数据对象部分进行存储之前对每个输入数据部分执行第一函数;
[0269]
使用代码执行系统对所述输入数据部分中的每一者执行所述第一函数,其中所述代码执行系统提供所述数据存储的输入/输出(i/o)路径中指定的函数的按需执行,其中执行所述第一函数包括:
[0270]
获得所述输入数据部分;
[0271]
执行所述第一函数以为所述输入数据部分生成第一函数值;以及
[0272]
返回所述第一函数值;
[0273]
存储所述第一函数值;
[0274]
接收对将所述输入数据部分中的至少一些汇编成重新汇编的输入数据的请求;
[0275]
至少部分地基于所述请求来确定对所述重新汇编的输入数据执行第二函数;
[0276]
使用所述代码执行系统来执行所述第二函数,其中执行所述第二函数包括:
[0277]
获得所述输入数据部分中的至少一些的单独的第一函数值;
[0278]
使用所述单独的第一函数值来执行所述第二函数以为所述重新汇编的输入数据生成第二函数值;以及
[0279]
将所述重新汇编的输入数据的所述第二函数值作为第二输出数据返回;以及
[0280]
存储所述第二输出数据。
[0281]
条款6.如条款5的计算机实现的方法,所述计算机实现的方法还包括通过使用所述第一函数值来确定在有错误的情况下接收到特定输入数据部分,并且向所述客户端提供关于是否已经在有错误的情况下接收到一个或多个输入数据部分的信息。
[0282]
条款7.如条款5的计算机实现的方法,所述计算机实现的方法还包括将所述第一
函数值提供到所述客户端以使所述客户端能够对所述输入数据部分执行错误检测。
[0283]
条款8.如条款5的计算机实现的方法,其中执行所述第一函数包括通过使用所述输入数据部分执行循环冗余校验来生成单独的校验和值,并且其中执行所述第二函数包括通过使用所述单独的校验和值中的至少一些执行循环冗余校验来为所述重新汇编的输入数据生成校验和值。
[0284]
条款9.如条款5的计算机实现的方法,所述计算机实现的方法还包括使用所述输入数据部分来重新汇编所述输入数据并且将所述重新汇编的输入数据作为数据对象存储在所述数据存储中。
[0285]
条款10.如条款9的计算机实现的方法,其中存储所述第二输出数据包括将所述第二输出数据作为元数据存储到所述数据对象。
[0286]
条款11.如条款9的计算机实现的方法,其中至少部分地基于所述请求来确定为所述重新汇编的输入数据部分执行所述第二函数包括至少部分地基于所述请求来确定在重新汇编所述数据输入之前对所述重新汇编的输入数据部分执行所述第二函数。
[0287]
条款12.如条款5的计算机实现的方法,其中每个输入数据部分包括多个输入数据小部分,每个输入数据小部分具有固定大小,并且其中对所述输入数据部分中的每一者执行所述第一函数包括对每个输入数据部分的每个输入数据小部分执行所述第一函数。
[0288]
条款13.一种系统,所述系统包括:
[0289]
数据存储,所述数据存储被配置为存储多个数据对象;以及
[0290]
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
[0291]
经由单独的上传过程从客户端接收作为多个输入数据部分的输入数据,并且从所述客户端接收对将所述输入数据部分作为数据对象部分存储在数据存储内的请求;
[0292]
至少部分地基于所述请求来确定在将所述输入数据部分作为所述数据对象部分进行存储之前对每个输入数据部分执行第一函数;
[0293]
使用代码执行系统对所述输入数据部分中的每一者执行所述第一函数,其中所述代码执行系统提供所述数据存储的输入/输出(i/o)路径中指定的函数的按需执行,其中执行所述第一函数包括:
[0294]
获得所述输入数据部分;
[0295]
执行所述第一函数以为所述输入数据部分生成第一函数值;以及
[0296]
返回所述第一函数值;
[0297]
存储所述第一函数值;
[0298]
接收对将所述输入数据部分中的至少一些汇编成重新汇编的输入数据的请求;
[0299]
至少部分地基于所述请求来确定为所述重新汇编的输入数据执行第二函数;
[0300]
使用所述代码执行系统来执行所述第二函数,其中执行所述第二函数包括:
[0301]
获得所述输入数据部分中的至少一些的单独的第一函数值;
[0302]
使用所述单独的第一函数值来执行所述第二函数以为所述重新汇编的输入数据生成第二函数值;以及
[0303]
将所述重新汇编的输入数据的所述第二函数值作为第二输出数据返回;以及
[0304]
存储所述第二输出数据。
[0305]
条款14.如条款13的系统,其中所述代码执行系统还被配置为通过使用所述第一函数值来确定在有错误的情况下接收到特定输入数据部分,并且向所述客户端提供关于是否已经在有错误的情况下接收到一个或多个输入数据部分的信息。
[0306]
条款15.如条款13的系统,其中所述代码执行系统被配置为将所述第一函数值提供到所述客户端以使所述客户端能够对所述输入数据部分执行错误检测。
[0307]
条款16.如条款13的系统,其中所述代码执行系统还被配置为执行所述第一函数以通过使用所述输入数据部分执行循环冗余校验来生成单独的校验和值,并且执行所述第二函数以通过使用所述单独的校验和值中的至少一些执行循环冗余校验来为所述重新汇编的输入数据生成校验和值。
[0308]
条款17.如条款13的系统,其中所述一个或多个计算装置还被配置为使用所述输入数据部分来重新汇编所述输入数据,并且将所述重新汇编的输入数据作为数据对象存储在所述数据存储中。
[0309]
条款18.如条款17的系统,其中所述一个或多个计算装置还被配置为将所述第二输出数据作为元数据存储到所述数据对象。
[0310]
条款19.如条款17的系统,其中所述代码执行系统还被配置为通过至少部分地基于所述请求确定在重新汇编所述数据输入之前对所述重新汇编的输入数据部分执行所述第二函数来至少部分地基于所述请求确定对所述重新汇编的输入数据部分执行所述第二函数。
[0311]
条款20.如条款13的系统,其中每个输入数据部分包括多个输入数据小部分,每个输入数据小部分具有固定大小,并且其中所述代码执行服务被配置为通过对每个输入数据部分的每个输入数据小部分执行所述第一函数来对所述输入数据部分中的每一者执行所述第一函数。
[0312]
本公开的实施方案的另外的示例可根据以下条款来进行描述:
[0313]
条款1.一种系统,所述系统包括:
[0314]
对象存储服务,所述对象存储服务包括一个或多个计算装置,其中所述对象存储服务被配置为存储多个数据对象;以及
[0315]
代码执行服务,所述代码执行服务包括用于在所述对象存储服务的输入/输出(i/o)路径中按需执行函数的一个或多个计算装置;
[0316]
其中所述对象存储服务被配置为至少:
[0317]
接收输入数据和对将所述输入数据作为数据对象存储在所述对象数据存储内的请求,所述输入数据包括复合文件,其中所述复合文件包括多个单独的文件以及所述单独的文件中的每一者的文件标识符和标识所述复合文件内的所述单独的文件的字节范围位置的字节范围位置信息;
[0318]
确定在将所述输入数据作为所述数据对象进行存储之前将执行与对存储所述输入数据的所述请求相关联的用于通过从所述输入数据提取所述文件标识符和所述字节范围位置信息来创建索引的函数;以及
[0319]
将调用传输到所述代码执行服务以针对所述输入数据执行所述函数;并且
[0320]
其中所述代码执行服务被配置为至少:
[0321]
从所述对象存储服务接收所述调用以执行所述函数,所述调用包括所述输入数
据;以及
[0322]
执行所述函数,其中执行所述函数致使所述代码执行服务:
[0323]
通过从所述输入数据提取所述文件标识符和所述字节范围位置信息来创建索引,所述索引将所述文件标识符映射到对应的字节范围位置信息;以及
[0324]
将所述索引作为输出数据返回;并且
[0325]
其中所述对象存储服务还被配置为将所述输入数据作为第一数据对象存储在所述对象数据存储中,并且其中所述输出数据可存储在与所述第一数据对象相关联的索引数据存储中。
[0326]
条款2.如条款1的系统,其中所述代码执行服务还被配置为确定与所述复合文件相关联的文件聚合技术信息,并且使用所述文件聚合技术信息从所述输入数据提取所述文件标识符和所述字节范围位置信息。
[0327]
条款3.如条款1的系统,其中所述第一数据对象经由命名约定或通过将元数据与引用所述第二数据对象的所述第一数据对象包括在一起来与所述输出数据相关联。
[0328]
条款4.如条款1的系统,其中所述索引使所述客户端能够从所述数据存储检索所述复合文件的期望部分,而不必从所述对象数据存储检索整个数据对象。
[0329]
条款5.一种计算机实现的方法,所述计算机实现的方法包括:
[0330]
在包括被配置为执行特定指令的一个或多个计算机处理器的计算系统的控制下,
[0331]
接收对将输入数据作为数据对象存储在数据存储中的请求,所述输入数据包括描绘的元素的集合;
[0332]
至少部分地基于所述请求来确定在将所述输入数据作为所述数据对象进行存储之前执行函数以生成映射每个描绘的元素的元素标识符和元素位置的索引;
[0333]
将代码执行系统配置为执行所述函数,其中所述代码执行系统提供在所述数据存储的输入/输出(i/o)路径中按需执行函数;
[0334]
在将所述输入数据作为所述数据对象进行存储之前使用所述代码执行系统来执行所述函数,其中执行所述函数包括:
[0335]
获得所述输入数据;
[0336]
生成映射所述输入数据内的所述元素标识符和所述元素位置的索引;以及
[0337]
将所述索引作为输出数据返回;以及
[0338]
将所述输出数据与所述数据对象分开地并相关联地存储。
[0339]
条款6.如条款5的计算机实现的方法,所述计算机实现的方法还包括在生成所述索引之前将所述输入数据解压缩。
[0340]
条款7.如条款5的计算机实现的方法,其中生成所述索引包括从所述输入数据提取所述元素标识符和所述元素位置。
[0341]
条款8.如条款5的计算机实现的方法,所述计算机实现的方法还包括使用所述描绘的元素来生成所述元素标识符、所述元素位置或这两者。
[0342]
条款9.如条款5的计算机实现的方法,其中将所述输出数据与所述数据对象分开地存储包括将所述输出数据作为可从所述数据存储内独立地访问的第二数据对象进行存储。
[0343]
条款10.如条款5的计算机实现的方法,其中存储所述输出数据包括使用数据存储
服务来将所述输出数据存储在数据库内。
[0344]
条款11.如条款5的计算机实现的方法,其中所述描绘的元素包括数据的排、行、文件、逗号分隔值或列中的一者或多者。
[0345]
条款12.如条款5的计算机实现的方法,所述计算机实现的方法还包括压缩所述输入数据,并且将所述压缩的输入数据作为所述数据对象进行存储。
[0346]
条款13.一种系统,所述系统包括:
[0347]
数据存储,所述数据存储被配置为存储多个数据对象;以及
[0348]
一个或多个计算装置,所述一个或多个计算装置与所述数据存储通信并且被配置为至少:
[0349]
接收对将输入数据作为数据对象存储在所述数据存储中的请求,所述输入数据包括描绘的元素的集合;
[0350]
至少部分地基于所述请求来确定在将所述输入数据作为所述数据对象进行存储之前执行函数以生成映射每个描绘的元素的元素标识符和元素位置的索引;
[0351]
将代码执行服务配置为执行所述函数,其中所述代码执行服务由此被配置为:
[0352]
获得所述输入数据;
[0353]
生成映射所述输入数据内的所述元素标识符和所述元素位置的索引;以及
[0354]
将所述索引作为输出数据返回;并且
[0355]
将所述输出数据与所述数据对象分开地并相关联地存储。
[0356]
条款14.如条款13的系统,其中所述代码执行系统还被配置为在生成所述索引之前将所述输入数据解压缩。
[0357]
条款15.如条款13的系统,其中所述代码执行服务被配置为通过从所述输入数据提取所述元素标识符和所述元素位置来生成所述索引。
[0358]
条款16.如条款13的系统,其中所述代码执行服务还被配置为使用所述描绘的元素来生成所述元素标识符、所述元素位置或这两者。
[0359]
条款17.如条款13的系统,其中所述一个或多个计算装置还被配置为通过将所述输出数据作为可从所述数据存储内独立地访问的第二数据对象存储来将所述输出数据与所述数据对象分开地存储。
[0360]
条款18.如条款13的系统,其中所述一个或多个计算装置还被配置为通过使用数据存储服务将所述输出数据存储在数据库内来存储所述输出数据。
[0361]
条款19.如条款13的系统,其中所述描绘的元素包括数据的排、行、文件、逗号分隔值或列中的一者或多者。
[0362]
条款20.如条款13的系统,其中所述一个或多个计算装置还被配置为压缩所述输入数据,并且将所述压缩的输入数据作为所述数据对象进行存储。
[0363]
上述所有方法和过程可体现在由一个或多个计算机或处理器执行的软件代码模块中并且经由所述软件代码模块来完全自动化。代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。所述方法中的一些或所有可替代地体现在专用计算机硬件中。
[0364]
除非另外具体说明,否则诸如“能够”、“可以”、“可能”或“可”等条件语言在上下文中应被理解为通常用于表示:某些实施方案包括而其他实施方案不包括某些特征、元件或
步骤。因此,这种条件语言通常不意图暗示特征、元件或步骤无论如何都是一个或多个实施方案必需的,或者一个或多个实施方案必然包括用于在有或没有用户输入或提示的情况下,判定这些特征、元件或步骤是否包括在或将要在任何特定实施方案中执行的逻辑。
[0365]
除非另有特别说明,否则诸如短语“x、y或z中的至少一个”的反意连接语言在上下文中应被理解为通常用于表示项目、项等可以是x、y或z或其任何组合(例如,x、y或z)。因此,这种反意连接语言一般不意图且不应暗示某些实施方案要求分别存在x中的至少一个、y中的至少一个或z中的至少一个。
[0366]
除非另外明确说明,否则诸如“一个”或“一种”等冠词一般应被解释为包括一个或多个所描述的项。因此,诸如“被配置为
……
的装置”等短语意图包括一个或多个所陈述的装置。此类一个或多个所述装置还可共同地被配置为执行所陈述的叙述。例如,“被配置为执行叙述a、b和c的处理器”可包括与被配置为执行叙述b和c的第二处理器联合工作的被配置为执行叙述a的第一处理器。
[0367]
术语“或”通常应被理解为是包容性的,而不是排他性的。因此,包含“a、b或c”的集合应被解释为包含包括a、b和c的组合的集合。
[0368]
在本文中描述和/或在附图中描绘的流程图中的任何例程描述、元件或框应被理解为潜在地表示代码的模块、段或部分,所述代码包括用于实现例程中的特定逻辑功能或元件的一个或多个可执行指令。替代实现方式包括在本文中所描述的实施方案的范围内,其中如本领域中的技术人员所理解的那样,根据所涉及的功能性,元素或功能可删除、或不按照所示出或讨论的顺序执行,包括基本上同步执行或逆序执行。
[0369]
应当强调的是,可对上述实施方案做出许多变化和修改,这些变化和修改的元件应当被理解为是在其他可接受的示例之中。在本文中,所有这样的修改和变化在本文中意图被包括在本公开的范围内并且受所附权利要求保护。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献