基于用户提交代码的用于对象存储服务的用户特定数据操纵系统的制作方法

文档序号:30713346发布日期:2022-07-11 13:08阅读:162来源:国知局
基于用户提交代码的用于对象存储服务的用户特定数据操纵系统的制作方法
基于用户提交代码的用于对象存储服务的用户特定数据操纵系统


背景技术:

1.计算装置可以利用通信网络来交换数据。公司和组织操作将许多计算装置互连的计算机网络以支持操作或向第三方提供服务。计算系统可位于单个地理位置中或位于(例如,通过私有或公共通信网络互连的)多个不同的地理位置中。具体地说,数据中心或数据处理中心(本文通常称为“数据中心”)可以包括许多互连的计算系统以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的私有数据中心,或可以是代表公众或为公众利益运营的公共数据中心。
2.为了便于提高对数据中心资源的利用,虚拟化技术允许单个物理计算装置托管对于数据中心的用户呈现和操作作为独立的计算装置的虚拟机的一个或多个实例。通过虚拟化,单个物理计算装置可以以动态方式创建、维护、删除或以其他方式管理虚拟机。进而,用户可以从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并为用户提供不同数量的虚拟机资源。
3.除了计算资源,数据中心还向客户端装置提供许多其他有益的服务。例如,数据中心可以提供数据存储服务,该数据存储服务被配置为存储由客户端装置提交的数据,并且该数据能够通过网络进行检索。可以提供各种类型的数据存储服务,其通常根据它们的输入/输出(i/o)机制而变化。例如,数据库服务可以允许基于数据库查询语言如结构化查询语言(sql)的i/o。块存储服务可以以类似于操作系统与本地存储交互的方式,允许基于对一个或多个限定长度块的修改的i/o,且因此可有利于可用于例如存储虚拟机的操作系统的虚拟化磁盘驱动器。对象存储服务可以允许各个对象或资源级别的i/o,诸如各个文件,其内容和长度可能不同。例如,对象存储服务可以提供符合表述性状态传输(rest)架构风格的接口,诸如通过允许基于指定输入数据和要应用于该数据的超文本传输协议请求方法(例如get、put、post、delete等)的调用的i/o。通过传输指定输入数据和请求方法的调用,客户端可以因此从对象存储服务中检索数据、将数据作为新对象写入对象存储服务、修改现有对象等。
附图说明
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的对象存储服务的i/o路径以包括执行用户提交的数据访问控制代码的说明性交互的流程图;
13.图10a-图10b示出了描绘用于处理检索图1的对象存储服务上的对象的数据的请求的说明性交互的流程图,包括执行所有者指定的数据访问控制代码以提供客户端特定的数据访问;
14.图11是描绘用于使用由客户端提供的数据访问控制代码来处理对检索图1的对象存储服务上的对象的数据的请求的说明性例程的流程图;
15.图12是描绘用于结合在图1的对象存储服务处获得的i/o请求实现基于访问级别的数据操纵的说明性例程的流程图;
16.图13示出描绘用于允许用户指定代码执行环境规则并根据代码执行环境规则执行所有者提交的代码的说明性交互的流程图;以及
17.图14是描绘用于结合在图1的对象存储服务处获得的i/o请求实现用户代码执行定制的说明性例程的流程图。
具体实施方式
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路径内执行数据操纵的技术可以用于在按需代码执行系统上创建任务,并且当任务被执行时,执行所需的数据操纵。说明性地,该任务可以提供与对象存储服务的接口相似或相同的接口,并且具有可操作性,以响应于请求方法调用(例如,httpput或get调用)来获得输入数据,针对输入数据执行任务的代码,并且执行对对象存储服务的调用,从而在所得的输出数据上实现请求方法。该技术的缺点是复杂。例如,在这种情况下,最终用户可能需要向按需代码执行系统而不是对象存储服务提交i/o请求,以确保任务的执行。如果最终用户直接向对象存储服务提交调用,则任务执行可能不会发生,并且因此所有者可能无法对对象集合实施所需的数据操纵。此外,该技术可能要求创作的任务的代码既向最终用户提供允许处理对输入数据实现请求方法的调用的接口,又提供允许执行从任务执行到对象存储服务的调用的接口。这些网络接口的实现可显著增加所需代码的复杂性,从而阻碍数据集合的所有者使用该技术。此外,在用户提交的代码直接实现网络通信的情况下,该代码可能需要根据所处理的请求方法而变化。例如,可能需要第一组代码来支持get操作,可能需要第二组代码来支持put操作,等等。因为本公开的实施方案减轻了用户提交的代码对处理网络通信的要求,所以在一些情况下可以使一组代码能够处理多个请求方法。
21.为了解决上述问题,本公开的实施方案可以实现无服务器任务执行与对象存储服务的接口的强集成,使得服务本身被配置成在接收到对数据集合的i/o请求时调用任务执行。此外,通过配置对象存储服务可简化用于执行数据操纵的代码的生成,以便于对任务执行进行数据输入和输出,而不需要任务执行本身实现用于i/o操作的网络通信。具体地,在一个实施方案中,对象存储服务和按需代码执行系统可被配置成将输入数据以对操作系统级输入/输出流的句柄(例如,posix兼容描述符)的形式“集结(stage)”到任务执行,使得任务的代码可经由定义流操作来操纵输入数据(例如,如同数据存在于本地文件系统内一样)。这种对输入数据的流级访问可以与例如输入数据的网络级访问形成对比,后者通常需要该代码来实现网络通信,从而检索输入数据。类似地,对象存储服务和按需代码执行系统可以被配置为提供表示输出流的输出流句柄,任务执行可将输出写入该输出流。在检测到
对输出流的写入时,对象存储服务和按需代码执行系统可以将该写入作为任务执行的输出数据来处理,并将调用的请求方法应用于输出数据。与要求代码通过网络来处理数据通信相反,通过使任务能够基于传递给任务的输入和输出流来操纵数据,可以极大简化任务的代码。
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.现有对象存储服务的另一限制是不能动态控制对对象存储服务提供的数据的访问。虽然此类对象存储服务可以为数据所有者/提供者提供一种方式来配置用户特定的许可和凭证(例如,在对象存储服务内或利用促进数据访问控制的外部令牌代理程序),使得不同的用户能够访问数据的不同部分(例如,控制器、子目录、路径、桶、卷、容器等),此类配置通常是手动完成的,并且对于数据的所有者/提供者来说,每次需要修改用户访问权限都必须改变配置是非常繁琐的。此外,由于静态许可和凭证通常仅依赖于访问数据的用户的身份,所以实现确定访问的其他方法诸如基于时间窗口、先前访问、关键字等提供访问或许是不可能或不可行的。
26.根据本公开的各方面,数据访问控制代码可由数据所有者/提供者写入并置于i/o路径中,因此当接收到访问数据的请求时(例如,通过get调用),数据访问控制代码可以被执行并提供对数据的更稳健的用户特定访问。例如,数据访问控制代码可以基于时间窗口提供访问(例如,对于已经注册对由对象存储服务维护的数据进行7天访问的用户来说,7天之后访问可被拒绝),基于同一用户的先前访问提供访问(例如,对于访问被设置为在访问数据5次之后过期的用户来说,在用户访问数据5次之后,访问可被拒绝),基于关键词提供访问(例如,对于被允许访问与“汽车”相关的数据的部分的用户来说,未指定关键词“汽车”的访问请求可被拒绝),等等。因此,本公开的技术允许数据所有者/提供者能够提供对由对象存储服务维护的数据的动态受控访问。
27.类似地,现有对象存储服务可能不为数据所有者/提供者提供指定针对不同的访问请求待执行的不同类型的数据操纵的能力。例如,现有对象存储服务可以允许数据所有者/提供者指定允许用户a访问数据桶x和y,并且允许用户b访问数据桶x但不能访问数据桶y。然而,此类二进制许可设置(例如,用户能够访问数据对象或者不能够访问数据对象)可能不允许数据所有者/提供者指定更复杂的许可信息,诸如用户a(i)被给予对数据桶x整体的完全访问而无修改,以及(ii)被给予对数据桶y的预览访问,使得用户a只能访问数据桶y中每份文档的第一页,并且用户b(i)不被允许访问数据桶x中的任何数据,以及(ii)被给予对数据桶y归档访问,使得用户b只能访问桶y中超过1年的数据。
28.根据本公开的各方面,数据访问控制代码可以与一个或多个数据操纵代码组合(例如,串行执行或组合到同一代码中),使得数据所有者/提供者能够执行用户访问级别特定的数据操纵(例如,数据移除、修改、编辑、处理等)。例如,当接收到i/o请求时(例如,通过get调用或put调用),i/o路径中的数据访问控制代码可以执行,并且提供对所请求的数据的完全访问,从而执行另外的用户代码(例如,数据操纵代码),或者基于用户的访问级别拒绝请求。有利的是,本公开的技术不仅允许数据所有者/提供者指定用户特定的许可,还允许数据所有者/提供者在将所请求的数据返回至请求用户之前进行用户特定的修改、过滤或处理。因此,这些技术允许数据所有者/提供者能够指定由对象存储服务维护的数据的用户特定和访问级别特定的操纵。
29.另外,由于缺乏与如上所述的外部无服务器代码执行系统的集成,现有的对象存储服务可能不能为数据所有者/提供者提供控制结合提供由对象存储服务提供的服务而执行的各种代码(例如,所有者提交的)执行的执行环境的机制。无法为这些代码执行定制执
行环境,可限制此类现有的对象存储服务的执行环境对所有用户和所有用户代码都是一样的。
30.根据本公开的各方面,对象存储服务可以允许数据所有者/提供者通过指定代码执行环境规则来定制代码执行环境。此类代码执行环境规则可以指示已经置于i/o请求路径中的一个或多个所有者提交的代码的身份,以及给予(或限制)执行一个或多个所有者提交代码的对应特权。例如,代码执行环境规则可以指定数据访问控制代码应该访问包含敏感用户授权信息的外部数据库,而被配置为在数据访问控制代码授权访问之后执行的数据操纵代码不应该访问包含敏感用户授权信息的该外部数据库。类似地,此类代码执行环境规则可以指示一个或多个数据所有者/提供者(例如,已经在服务160上存储了某个数据对象并使得该数据对象可被其他用户访问的用户)或请求用户(例如,请求读取或写入由服务160存储的数据对象的用户)的身份,以及给予(或限制)执行与数据所有者/提供者或请求用户相关联的一个或多个代码的对应特权。例如,对于用户a和b,代码执行环境规则可以指定代表用户a执行的代码执行应该访问用户a的私有资源(例如,数据库服务、记录日志服务、存储服务或可以使用用户a的凭证访问的其他网络可访问的服务),而代表用户b执行的代码执行不应该访问外部资源或与外部服务建立网络连接(例如,不允许访问用户b的私有资源或其他外部资源)。在一些情况下,在本示例中,用户a和b为数据所有者/提供者。在其他情况下,用户a和b为想要在服务160上读取数据所有者的数据或向数据所有者存储写入的请求用户。
31.根据本公开,本领域的技术人员应该理解,本文中公开的实施方案提高诸如对象存储系统的计算系统对数据对象提供和执行数据操纵函数的能力。鉴于现有技术通常依赖于数据操纵函数的外部实施(例如,要求用户在上传个人信息之前剥除个人信息),本公开的实施方案使得能够将数据操纵直接插入到对象存储系统的i/o路径中。此外,本公开的实施方案通过在隔离执行环境中提供操纵函数的无服务器执行提供了用于实现数据操纵的安全机制。本公开的实施方案通过使此类函数能够基于本地流(例如,“文件”)句柄进行操作而不是要求将此类函数用作网络可访问的服务来进一步改进无服务器函数的操作。因此,当前公开的实施方案解决了计算系统固有的技术问题,诸如难以在存储系统中实施数据操纵以及创建外部服务以实施此类数据操纵的复杂性。本文描述的各种技术方案解决这些技术问题,包括将数据处理流水线插入到对象或对象集合的i/o路径中,可能在不清楚请求用户的情况下,使用无服务器函数来执行此类流水线的各方面,以及使用本地流句柄来实现无服务器函数的简化创建。因此,本公开总体上代表对现有数据处理系统和计算系统的改进。
32.现在对按需代码执行系统上任务的常规执行进行讨论。如本文所详述,按需代码执行系统可提供网络可访问服务,该网络可访问服务使用户能够提交或指定待由虚拟机实例在按需代码执行系统上执行的计算机可执行源代码。按需代码执行系统上的每一组代码可限定“任务”并且当那个任务在按需代码执行系统的虚拟机实例上被执行时实施与那个任务相对应的特定功能性。在按需代码执行系统上单独地实施任务可称为“执行”任务(或“任务执行”)。在一些情况下,按需代码执行系统可以使用户能够基于各种潜在事件直接触发任务执行,诸如向按需代码执行系统传输应用编程接口(“api”)调用,或者向按需代码执行系统传输特殊格式化的超文本传输协议(“http”)分组。根据本公开的实施方案,按需代
码执行系统还可以与对象存储系统交互,以便在将数据操纵流水线应用于i/o路径的过程中执行任务。因此,按需代码执行系统可以“按需”执行任何指定的可执行代码,而不需要配置或维护在其上执行代码的底层硬件或基础设施。此外,按需代码执行系统可被配置为通过快速的方式(例如,在100毫秒[ms]以下)执行任务,从而实现“实时”(例如,在最终用户几乎不可感知的延迟的情况下)执行任务。为了实现该快速执行,按需代码执行系统可以包括一个或多个虚拟机实例,这些虚拟机实例被“预热”或预初始化(例如,被引导到操作系统中并执行完整或基本完整的运行时环境)并被配置为能够执行用户定义的代码,使得代码可以响应于执行代码的请求而被快速执行,而不产生初始化虚拟机实例而引起的延迟。因此,当任务执行被触发时,在预初始化的虚拟机中,可以以非常短的时间量执行对应于该任务的代码。
[0033]
具体地,为了执行任务,本文描述的按需代码执行系统可以维护执行虚拟机实例池,一旦接收到执行任务的请求,虚拟机实例就可以投入使用。由于这些虚拟机的预初始化性质,可以显著减少与执行任务代码(例如,实例和语言运行时启动时间)相关联的延迟(有时称为等待时间),通常减少到100毫秒以下水平。说明性地,按需代码执行系统可以在一个或多个物理计算装置上维护虚拟机实例池,其中每个虚拟机实例在其上加载有一个或多个软件部件(例如,操作系统、语言运行时、库等)。当按需代码执行系统接收到执行程序代码(“任务”)的请求时,按需代码执行系统可以基于与任务相关的一个或多个计算约束(例如,所需的操作系统或运行时)来选择用于执行用户的程序代码的虚拟机实例,并使得任务在所选择的虚拟机实例上执行。任务可以在虚拟机实例上创建的隔离容器中执行,或者可以在与作为其他任务的环境的其他虚拟机实例隔离的虚拟机实例中执行。因为在接收到请求时,池中的虚拟机实例已经被引导并加载了特定的操作系统和语言运行时,所以可以显著减少与查找可以处理请求的计算能力(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)相关联的延迟。
[0034]
如本文所用,术语“虚拟机实例”既定指的是仿真硬件以提供可在其上执行软件的环境或平台(示例“执行环境”)的软件或其他可执行代码的执行。虚拟机实例通常由硬件装置执行,这些硬件装置可能不同于虚拟机实例仿真的物理硬件。例如,虚拟机可仿真第一类型的处理器和存储器,同时在第二类型的处理器和存储器上执行。因此,可利用虚拟机在正在执行第二执行环境(例如,第二操作系统)的物理装置上执行既定针对第一执行环境(例如,第一操作系统)的软件。在一些情况下,由虚拟机实例仿真的硬件可与基础装置的硬件相同或类似。例如,具有第一类型的处理器的装置可实施多个虚拟机实例,每个虚拟机实例仿真那个第一类型的处理器的实例。因此,可使用虚拟机实例将装置分割为一定数目的逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例一般可提供远离基础物理装置的硬件的抽象水平,但此抽象并非所需的。例如,假设装置实施多个虚拟机实例,每个虚拟机实例仿真与由装置提供的硬件相同的硬件。在此类情景下,每个虚拟机实例可允许软件应用在不转译的情况下在基础硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用之间的逻辑分隔。一般称为“固有执行”的此过程可用于增加虚拟机实例的速度或性能。还可使用允许直接利用基础硬件的其他技术,诸如硬件直通技术。
[0035]
虽然执行操作系统的虚拟机在本文被描述为执行环境的一个示例,但其他执行环境也是可能的。例如,任务或其他过程可以在软件“容器”中执行,该软件“容器”提供运行时
环境,而其本身不会提供硬件的虚拟化。可在虚拟机内实施容器以提供额外的安全性,或者可在虚拟机实例的外部运行所述容器。
[0036]
参考结合附图进行时的以下描述,本公开的前述方面和许多附带优点将变得更容易领会并且变得更好理解。
[0037]
图1为说明性操作环境100的框图,其中服务提供者系统110操作以使客户端装置102能够对存储在对象存储服务160内的对象执行i/o操作,并将路径修改应用于此类i/o操作,所述修改可以包括在按需代码执行系统120上执行用户定义的代码。
[0038]
作为说明,各种示例客户端装置102被示为与服务提供者系统110通信,包括台式计算机、膝上型计算机和移动电话。通常,客户端装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可穿戴计算机、服务器、掌上数字助理(pda)、混合pda/移动电话、移动电话、电子书阅读器、机顶盒、语音命令装置、相机、数字媒体播放器等。
[0039]
一般而言,对象存储服务160可以操作以使客户端能够读取、写入、修改和删除数据对象,每个数据对象表示与标识符(“对象标识符”或“资源标识符”)相关联的一组数据,其可以作为单独的资源进行交互。例如,对象可以表示由客户端装置102提交的单个文件(尽管对象存储服务160可以将或可以不将该对象存储为单个文件)。该对象级别交互可以与其他类型的存储服务形成对比,诸如在单个块级别提供数据操纵的基于块的存储服务,或者在表格(或其部分)级别提供数据操纵的数据库存储服务,等等。
[0040]
对象存储服务160说明性地包括一个或多个前端162,其提供接口(命令行接口(cli)、应用编程接口(api)或其他编程接口),通过该接口,客户端装置102可以与服务160对接,以代表它们来配置服务160并在服务160上执行i/o操作。例如,客户端装置102可以与前端162交互,以在服务160上创建数据对象的集合(例如,对象“桶”),并为该集合配置许可。随后,客户端装置102可以基于前端162的接口创建、读取、更新或删除集合内的对象。在一个实施方案中,前端162提供支持各种请求方法的rest兼容的http接口,每个请求方法对应于服务160上的所请求的i/o操作。通过非限制性示例,请求方法可以包括:
[0041]
·
get操作,通过引用对象的标识符来请求检索存储在服务160上的对象;
[0042]
·
put操作,请求将待存储的对象存储在服务160上,包括对象的标识符和待存储为对象的输入数据;
[0043]
·
delete操作,通过引用对象的标识符来请求删除存储在服务160上的对象;以及
[0044]
·
list操作,通过引用集合的标识符来请求存储在服务160上的对象集合内对象的列出。
[0045]
也可以支持各种其他操作。例如,服务160可以提供类似于put操作但是与不同的上传机制(例如,基于浏览器的html上传)相关联的post操作,或者检索对象的元数据而不检索对象本身的head操作。在一些实施方案中,服务160可以实现将以上操作中的一个或多个进行组合的操作,或者将操作与固有数据操纵组合的操作。例如,服务160可以提供copy操作,将存储在服务160上的对象复制到另一个对象,该操作将get操作与put操作相组合。作为另一个示例,服务160可以提供select操作,实现在返回对象的内容之前,将sql查询的规范应用于该对象,从而将对数据对象应用sql查询(固有数据操纵)与get操作相组合。作为又一示例,服务160可以提供“字节范围”get,这仅对数据对象的一部分进行get操作。在
一些情况下,客户端装置102所请求的服务160上的操作可以经由http请求被传输至服务,其中http请求本身可以包括http方法。在一些情况中,诸如在get操作情况下,请求中指定的http方法可以与服务160上所请求的操作相匹配。然而,在其他情况下,请求的http方法可能与服务160上所请求的操作不匹配。例如,请求可以利用http post方法来传输在服务160上实现select操作的请求。
[0046]
在一般操作过程中,前端162可被配置为获得对请求方法的调用,并将该请求方法应用于该方法的输入数据。例如,前端162可以通过将输入数据作为对象存储在服务160上来响应将输入数据作为对象put至服务160的请求。对象可以存储在例如对象数据存储区168上,其对应于任何永久或基本永久的存储装置(包括硬盘驱动器(hdd)、固态驱动器(ssd)、网络可访问存储装置(nas)、存储区域网络(san)、非易失性随机存取存储器(nvram)、或本领域已知的各种存储设备中的任何一种)。在另一个示例中,前端162可以通过从存储区168检索对象(表示get资源请求的输入数据的对象)并且将该对象返回至请求客户端装置102来响应从服务160get对象的请求。
[0047]
在一些情况下,对请求方法的调用可以调用由服务160提供的一个或多个固有数据操纵。例如,select操作可以提供待应用于对象(也在请求中标识)的sql格式的查询,或者get操作可以提供待返回的对象的特定字节范围。服务160说明性地包括被配置为执行固有数据操纵的对象操纵引擎170,其说明性地对应于配置有可执行软件以在服务160上实现固有数据操纵的装置(例如,通过针对字节范围get从对象中剥去未选择的字节,通过将sql查询应用于对象并返回查询结果,等等)。
[0048]
根据本公开的实施方案,服务160还可以被配置为允许修改给定对象或对象集合的i/o路径,使得所调用的请求方法被应用于数据操纵函数的输出,而不是在调用中标识的资源。例如,服务160可以使客户端装置102能够指定针对给定对象的get操作应该服从按需代码执行系统120上的用户定义任务的执行,使得响应于该操作而返回的数据是任务执行的输出,而不是所请求的对象。类似地,服务160可以使客户端装置102能够指定存储给定对象的put操作应该服从于按需代码执行系统120上的用户定义任务的执行,使得响应于该操作而存储的数据是任务执行的输出,而不是由客户端装置102提供用于存储的数据。如下文更详细地讨论,路径修改可以包括数据操纵流水线的规范,包括固有数据操纵、基于任务的操纵或其组合。说明性地,客户端装置102可以通过前端162为对象或对象集合指定流水线或其他数据操纵,前端可以在i/o路径修改数据存储区164中存储流水线或操纵的记录,与对象数据存储区168一样,存储区164可以表示任何永久或基本永久的存储装置。虽然在图1中示出为不同的,但是在一些情况下,数据存储区164和168可以表示数据存储区的单个集合。例如,对对象或集合的数据修改本身可以作为对象存储在服务160上。
[0049]
为了通过执行用户定义的代码来实现数据操纵,该系统还包括按需代码执行系统120。在一个实施方案中,系统120可仅由对象存储服务160结合i/o路径的数据操纵使用。在另一实施方案中,系统120另外能够由客户端装置102访问,以直接实现无服务器任务执行。例如,按需代码执行系统120可向服务160(且可能也向客户端装置102)提供一个或多个用户接口、命令行接口(cli)、应用编程接口(api)或其他编程接口,以生成并上传用户可执行代码(例如,包括识别所上传代码的相依性代码对象的元数据),调用用户提供的代码(例如,提交在按需代码执行系统120上执行用户代码的请求),调度基于事件的作业或定时的
作业,跟踪用户提供的代码,或查看与他们的请求或用户代码相关的其他日志记录或监视信息。虽然一个或多个实施方案可能在本文被描述为使用用户接口,但应了解,这些实施方案可另外或可替代地使用任何cli、api或其他编程接口。
[0050]
此外,如图1所示,服务160可以包括被配置为执行固有数据访问控制(例如,使用默认数据访问控制代码)的数据访问控制引擎172,其说明性地对应于配置有可执行软件以在服务160上实现数据访问控制(例如,通过为各个用户设置许可并指定各个用户可访问的数据部分)的装置。另外,数据访问控制引擎172可以促进基于执行一个或多个另外的数据访问控制代码(例如,由数据所有者/提供者提交的)而执行的数据访问控制。尽管被示为单独的部件,但是在一些情况下,数据访问控制引擎172可以被集成在前端162或服务160的另一部件中。
[0051]
服务160还可包括被配置为执行代码执行控制的代码执行控制引擎174,代码执行控制引擎说明性地对应于配置有可执行软件以便于在服务160内部或在按需代码执行系统120外部执行固有或用户提交的代码(例如,由服务160存储的数据对象的所有者提交的程序代码)(例如,通过指定可用于向正被执行的代码提供某些特权或对其进行限制的代码执行环境规则)的装置。尽管被示为单独的部件,但是在一些情况下,代码执行控制引擎174可以被集成在前端162或服务160的另一部件中。
[0052]
客户端装置102、对象存储服务160和按需代码执行系统120可以经由网络104通信,网络可以包括任何有线网络、无线网络或其组合。例如,网络104可以是个人局域网、局域网、广域网、空中广播网络(例如,用于收音机或电视)、电缆网络、卫星网络、蜂窝电话网络或其组合。作为另一示例,网络104可以是可能由各个不同方操作的链接网络的可公开访问网络,诸如互联网。在一些实施方案中,网络104可以是专用或半专用网络,诸如公司或大学内联网。网络104可以包括一个或多个无线网络,诸如全球移动通信系统(gsm)网络、码分多址(cdma)网络、长期演进(lte)网络或任何其他类型的无线网络。网络104可使用用于经由互联网或其他前述类型的网络中的任一者进行通信的协议和部件。例如,由网络104使用的协议可包括超文本传输协议(http)、http安全(https)、消息队列遥测传输(mqtt)、受约束应用协议(coap)等。经由互联网或其他前述类型的通信网络中的任一种进行通信的协议和部件是本领域的技术人员所公知的,并且因此未在本文进行更详细的描述。
[0053]
为了实现与按需代码执行系统120的交互,系统120包括实现与按需代码执行系统120的交互的一个或多个前端130。在说明性实施方案中,前端130用作由按需代码执行系统120提供的其他服务的“前门”,从而使用户(经由客户端装置102)或服务160能够提供计算机可执行代码、请求执行计算机可执行代码并且查看计算机可执行代码的结果。前端130包括用以实现在按需代码执行系统120与其他计算装置之间的交互的多种部件。例如,每个前端130可包括请求接口,从而为客户端装置102和服务160提供将用户指定的代码上传或以其他方式传送到按需代码执行系统120并且随后请求执行该代码的能力。在一个实施方案中,请求接口与外部计算装置(例如,客户端装置102、前端162等)通过图形用户接口(gui)、cli或api通信。前端130处理所述请求并且确保所述请求被恰当地授权。例如,前端130可确定与所述请求相关联的用户是否被授权访问在所述请求中指定的用户代码。
[0054]
本文所使用的对用户代码的引用可以指代以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可
以互换使用。此类用户代码可被执行以实现特定函数,例如,与用户开发的特定数据变换相关。如上文所述,用户代码的单独集合(例如,用以实现特定函数)在本文称为“任务”,而对该代码的特定执行(包括例如编译代码、解译代码或以其他方式使代码能够执行)称为“任务执行”或简称为“执行”。作为非限制性示例,可通过javascript(例如,node.js)、java、python或ruby(或另一编程语言)来编写任务。
[0055]
为了管理对代码执行的请求,前端130可以包括执行队列,其可以维护所请求的任务执行的记录。说明性地,按需代码执行系统120同时执行的任务的数目是有限的,并且因此,可将在按需代码执行系统120处发起(例如,经由api调用、经由从被执行或正在执行的任务的调用等)的新的任务执行置于执行队列上并且例如按照先进先出的次序进行处理。在一些实施方案中,按需代码执行系统120可包括多个执行队列,诸如用于每个用户账户的单独的执行队列。例如,服务提供者系统110的用户(例如,出于成本原因)可能想要限制在按需代码执行系统120上的任务执行的速率。因此,按需代码执行系统120可利用账户特定的执行队列来限制特定用户账户同时执行任务的速率。在一些情况下,按需代码执行系统120可区分任务执行的优先级,使得特定账户或指定优先级的任务执行绕过或者在执行队列内优先化。在其他情况下,按需代码执行系统120可在接收到对该任务的调用之后立即或基本上立即执行该任务,因此,可省略执行队列。
[0056]
前端130还可以包括输出接口,其被配置为输出关于按需代码执行系统120上任务执行的信息。说明性地,输出接口可以传输关于任务执行的数据(例如,任务的结果、与任务执行相关的错误、或任务执行的细节,诸如完成执行所需的总时间、通过执行所处理的总数据等)至客户端装置102或对象存储服务160。
[0057]
在一些实施方案中,按需代码执行系统120可包括多个前端130。在这些实施方案中,可以提供负荷平衡器,例如以循环的方式将传入的调用分发给多个前端130。在一些实施方案中,负荷平衡器将传入的调用分发给多个前端130的方式可基于按需代码执行系统120的其他部件的位置或状态。例如,负荷平衡器可将调用分发给地理上在附近的前端130或具有服务于所述调用的能力的前端。在其中每个前端130对应于按需代码执行系统120的另一部件的单独的实例(诸如在下文描述的活动池148)的情况下,负荷平衡器可根据那些其他部件上的能力或负荷来分发调用。在一些情况下,调用可以确定地在前端130之间分发,使得执行任务的给定调用将总是(或几乎总是)被路由到相同的前端130。这可(例如)辅助维持对任务的准确的执行记录,从而确保所述任务仅执行期望的次数。例如,调用可以被分发到前端130之间的负荷平衡器。诸如任播路由的其他分发技术对于本领域的技术人员来说是显而易见的。
[0058]
按需代码执行系统120还包括管理执行环境的一个或多个工作者管理器140,执行环境诸如虚拟机实例150(被示为vm实例150a和150b,通常被称为“vm”),用于服务传入的调用以执行任务。虽然以下将参考虚拟机实例150作为此类环境的示例进行描述,但是本公开的实施方案可以利用其他环境,诸如软件容器。在图1所示的示例中,每个工作者管理器140管理活动池148,活动池是在一个或多个物理主机计算装置上执行的一组(有时称为池)虚拟机实例150,其被初始化以执行给定任务(例如,通过将任务的代码和任何依赖性数据对象加载到实例中)。
[0059]
尽管在本文中将虚拟机实例150描述为被分配给特定的任务,但是在一些实施方
案中,这些实例可以被分配给一组任务,使得实例被绑定到该组任务,并且该组的任何任务可以在该实例内执行。例如,同一组中的用户可属于同一安全组(例如,基于他们的安全凭证),使得已经在特定实例150上的容器中执行了一个任务之后在同一实例上的另一容器中执行另一任务不会造成安全风险。如下所述,任务可以与包含控制任务可如何执行的各种方面的许可相关联。例如,任务的许可可以定义任务的执行环境可以发起的网络连接(如果有的话)。作为另一个示例,任务的许可可以定义传递给任务的认证信息,从而控制执行任务(例如,服务160上的对象)可访问的网络可访问资源。在一个实施方案中,任务的安全组基于一个或多个此类许可。例如,可以基于发起网络连接的许可和访问网络资源的许可的组合来定义安全组。作为另一个示例,该组的任务可以共享共同的依赖性,使得用于执行该组的一个任务的环境可以被快速修改,以支持该组内另一个任务的执行。
[0060]
一旦前端130已经成功地处理了执行任务的触发事件,前端130便将请求传递到工作者管理器140以执行所述任务。在一个实施方案中,每个前端130可与对应的工作者管理器140相关联(例如,位于同一地点或地理上在前端130附近的工作者管理器140),因此,前端130可将大多数或所有请求传递到该工作者管理器140。在另一实施方案中,前端130可包括位置选择器,其被配置为确定将执行请求传递到的工作者管理器140。在一个实施方案中,位置选择器可基于将调用散列并且将该调用分发到基于散列值(例如,经由散列环)而选择的工作者管理器140来确定接收调用的工作者管理器140。用于在工作者管理器140之间分发调用的各种其它机制对于本领域的技术人员来说是显而易见的。
[0061]
随后,工作者管理器140可以修改虚拟机实例150(如果必要的话),并在实例150内执行任务的代码。如图1所示,相应实例150可以具有操作系统(os)152(显示为os 152a和152b)、语言运行时154(显示为运行时154a和154b)和用户代码156(显示为用户代码156a和156b)。os 152、运行时154和用户代码156可以共同实现用户代码的执行,以实现任务。因此,通过按需代码执行系统120的操作,可以在执行环境中快速执行任务。
[0062]
根据本公开的各方面,每个vm 150另外包括可执行的集结代码(staging code)157,其有利于在vm 150上的输入数据的集结和写在vm 150上的输出数据的处理,以及可通过vm 150的本地文件系统访问的vm数据存储区158。说明性地,集结代码157表示在vm150(或者可能是vm 150的主机装置)上执行的并且被配置为从对象存储服务160获得数据并将该数据放入vm数据存储区158中的过程。集结代码157还可被配置为获得写入vm数据存储区158内的文件的数据,并将该数据传输到对象存储服务160。由于此类数据可在vm数据存储区158处获得,用户代码156不需要通过网络来获得数据,从而简化了用户代码156,并且能够进一步限制通过用户代码156的网络通信,因此增加了安全性。相反,如上所述,通过在执行过程中使用传递给代码156的文件句柄,用户代码156可以与作为vm数据存储区158上的文件的输入数据和输出数据进行交互。在一些实施方案中,输入和输出数据可以作为文件存储在数据存储区158的内核空间文件系统中。在其他情况下,集结代码157可以提供虚拟文件系统,诸如用户空间文件系统(fuse)接口,其提供用户代码156可访问的隔离文件系统,从而限制用户代码对vm数据存储区158的访问。
[0063]
如本文所用,术语“本地文件系统”通常指在执行环境中维护的文件系统,使得在该环境中执行的软件可以将数据作为文件来访问,而不必通过网络连接。根据本公开的各方面,经由本地文件系统可访问的数据存储装置本身可以是本地的(例如,本地物理存储装
置),或可以是远程的(例如,经由诸如nfs的网络协议访问,或者表示为由网络可访问服务提供的虚拟化块装置)。因此,术语“本地文件系统”旨在描述软件访问数据的机制,而不是数据的物理位置。
[0064]
vm数据存储区158可以包括任何永久或非永久的数据存储装置。在一个实施方案中,vm数据存储区158是主机装置的物理存储装置,或者是主机装置的物理存储装置上托管的虚拟磁盘驱动器。在另一实施方案中,vm数据存储区158被表示为本地存储装置,但实际上是由网络可访问服务提供的虚拟化存储装置。例如,vm数据存储区158可以是由网络可访问的块存储服务提供的虚拟化磁盘驱动器。在一些实施方案中,对象存储服务160可被配置为提供对存储在数据存储区168上的对象的文件级访问,从而基于集结代码157和服务160之间的通信,将vm数据存储区158虚拟化。例如,对象存储服务160可以包括文件级别接口166,其提供对数据存储区168内作为文件的对象的网络访问。文件级别接口166可以例如表示基于网络的文件系统服务器(例如,网络文件系统(nfs)),其提供对作为文件的对象的访问,且集结代码157可以实现该服务器的客户端,从而提供对服务160的对象的文件级别访问。
[0065]
在一些情况下,vm数据存储区158可以表示对在vm实例150的同一主机装置上执行的另一数据存储区的虚拟化访问。例如,活动池148可以包括一个或多个数据集结vm实例(图1中未示出),其可以与vm实例150共租于同一主机装置上。数据集结vm实例可被配置为支持从服务160检索数据和存储来自服务160的数据(例如,数据对象或其部分、客户端装置102传递的输入数据等),并支持将该数据存储在数据集结vm实例的数据存储区上。数据集结vm实例可例如被指定为不可用于支持用户代码156的执行,并因此与相对于支持用户代码执行的实例150的升级后的许可相关联。数据集结vm实例可使该数据可被其主机装置内(或可能在附近的主机装置上)的其他vm实例150访问,例如通过使用基于网络的文件协议,如nfs。其他vm实例150可以随后充当数据集结vm实例的客户端,从而创建虚拟化vm数据存储区158,从用户代码156a的视角来看,虚拟化vm数据存储区表现为本地数据存储区。有益之处在于,假定数据集结vm和vm实例150在主机装置内或附近的主机装置内的位置相同,对存储在数据集结vm处的数据的基于网络的访问预期会非常快。
[0066]
虽然本文提供了关于使用io流句柄从vm数据存储区158读取或向其写入的一些示例,但是io流可以另外用于从vm实例150的其他接口读取或向其写入(同时仍不需要用户代码156进行除流级操作之外的操作,诸如创建网络连接)。例如,集结代码157可将输入数据作为输入流通过“管道”传输到用户代码156进行执行,其输出可作为输出流通过“管道”传输到集结代码157。作为另一个示例,集结vm实例或vm实例150的管理程序可以将输入数据传递到vm实例150的网络端口,该输入数据可以由集结代码157从其读取并且作为输入流传递到用户代码157。类似地,由任务代码156写入输出流的数据可被写入实例150a的第二网络端口,以供集结vm实例或管理程序检索。在又一示例中,实例150的管理程序可以将输入数据作为写入虚拟化硬件输入装置(例如,键盘)的数据进行传递,并且集结代码157可以将对应于该输入装置的io流的句柄传递给用户代码156。类似地,管理程序可以将对应于虚拟化硬件输出装置的io流的句柄传递给用户代码156,并且读取写入该流的数据作为输出数据。因此,通常可以修改本文提供的关于文件流的示例,涉及任何io流。
[0067]
对象存储服务160和按需代码执行系统120在图1中被描绘为在包括使用一个或多
个计算机网络(图1中未示出)互连的若干计算机系统的分布式计算环境中操作。对象存储服务160和按需代码执行系统120也可以在具有比图1所示更少或更多数量装置的计算环境中操作。因此,图1中的对象存储服务160和按需代码执行系统120的描绘应该被视为说明性的,而不是对本公开的限制。例如,按需代码执行系统120或其各种构成可实现各种web服务部件、托管或“云”计算环境或对等式网络配置以实现本文描述的过程的至少一部分。在一些情况下,对象存储服务160和按需代码执行系统120可以组合成单个服务。此外,对象存储服务160和按需代码执行系统120可直接在硬件或由硬件装置执行的软件中实施,并且可(例如)包括在被配置为执行计算机可执行指令用于执行将在本文描述的各种特征的物理计算机硬件上实施的一个或多个物理或虚拟服务器。一个或多个服务器可以是地理上分散或地理上共同位于例如一个或多个数据中心中。在一些情况下,一个或多个服务器可以作为快速供应和释放的计算资源的系统(通常称为“云计算环境”)的一部分来操作。
[0068]
在图1的示例中,对象存储服务160和按需代码执行系统120被示为连接到网络104。在一些实施方案中,对象存储服务160和按需代码执行系统120内的任何部件可以经由网络104与按需代码执行系统120的其他部件通信。在其他实施方案中,对象存储服务160和按需代码执行系统120的并非所有部件均能够与虚拟环境100的其他部件通信。在一个示例中,只有前端130和162(在一些情况下可以表示多个前端)可以连接到网络104,并且对象存储服务160和按需代码执行系统120的其他部件可以经由相应的前端130和162与环境100的其他部件通信。
[0069]
虽然本文一般参考对象存储服务160和按需代码执行系统120的单个部件来描述一些功能,但是其他部件或部件的组合可以另外或替代地来实现此类功能。例如,虽然对象存储服务160在图1中被描绘为包括对象操纵引擎170,但是该引擎170的函数可以另外或替代地被实现为按需代码执行系统120上的任务。此外,尽管按需代码执行系统120被描述为应用数据操纵任务的示例系统,但其他计算系统也可用于执行用户定义的任务,而且这些计算系统可包括比描绘为按需代码执行系统120一部分的部件更多、更少或与之不同的部件。在简化的示例中,对象存储服务160可以包括被配置为按需执行用户定义任务的物理计算装置,因此表示根据本公开的实施方案可用的计算系统。因此,图1中元件的具体配置既定是说明性的。
[0070]
图2描绘了实现图1的前端162的前端服务器200计算装置的总体架构。图2中描绘的前端服务器200的总体架构包括可用于实现本公开的各方面的计算机硬件和软件的布置。如下面更详细的描述,硬件可以在物理电子装置上实现。前端服务器200可以包括比图2所示的更多(或更少)的元件。然而,不必示出所有这些总体上常规的元件以提供可行的公开。此外,图2所示的总体架构可用于实现图1所示的其他部件中的一个或多个。
[0071]
如图所示,前端服务器200包括处理单元290、网络接口292、计算机可读介质驱动器294和输入/输出装置接口296,所有这些可以经由通信总线彼此通信。网络接口292可提供对一个或多个网络或计算系统的连接性。处理单元290因此可以经由网络104接收来自其他计算系统或服务的信息和指令。处理单元290还可以与主存储器280或辅助存储器298进行通信,并进一步通过输入/输出装置接口296为任选的显示器(未示出)提供输出信息。输入/输出装置接口296还可从任选的输入装置(未示出)接受输入。
[0072]
主存储器280或辅助存储器298可以包含处理单元290执行以便实现本公开的一个
或多个方面的计算机程序指令(在一些实施方案中被分组为单元)。这些程序指令在图2中被示为包括在主存储器280中,但是可以另外或替代地存储在辅助存储器298中。主存储器280和辅助存储器298对应于一层或多层存储器装置,包括(但不限于)ram、3d xpoint存储器、闪存、磁存储装置等。出于描述的目的,假设主存储器280表示工作者管理器140的主工作存储器,其具有比辅助存储器298更高的速度但更低的总容量。
[0073]
主存储器280可以存储操作系统284,其提供由处理单元290在前端服务器200的一般管理和操作中使用的计算机程序指令。存储器280还可以包括用于实现本公开的各方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器280包括用户接口单元282,其例如经由安装在计算装置上的诸如浏览器或应用的导航或浏览接口,生成用于在计算装置上显示的用户接口(或用于用户接口的指令)。
[0074]
除了用户接口单元282之外或者与其相组合,存储器280可以包括各自可执行的控制平面单元286和数据平面单元288,以实现本公开的各方面。说明性地,根据本公开的实施方案,控制平面单元286可以包括可执行代码,以使数据对象或对象集合的所有者能够将操纵、无服务器函数或数据处理流水线附接到i/o路径。例如,控制平面单元286可以使前端162能够实现图3的交互。数据平面单元288可以说明性地包括能够处理对象存储服务160上i/o操作的代码,包括附接到i/o路径的操纵、无服务器函数或数据处理流水线的实现(例如,经由图5a-图6b的交互、图7-图8的例程的实现等)。
[0075]
图2的前端服务器200是此类装置的一个说明性配置,其他配置也是可能的。例如,虽然被示为单个装置,但是在一些实施方案中,前端服务器200可以实现为多个物理主机装置。说明性地,此类前端服务器200的第一装置可以实现控制平面单元286,而第二装置可以实现数据平面单元288。
[0076]
虽然在图2中被描述为前端服务器200,但是在一些实施方案中,类似的部件可用以实现图1的环境100中所示的其他装置。例如,类似的装置可以实现工作者管理器140,如在2014年9月30日提交的且发明名称为“programmatic event detection and message generation for requests to execute program code”的美国专利第9,323,556号(
“‘
556号专利”)中所更详细描述的,该专利的全部内容通过引用并入于此。
[0077]
参考图3,描绘了用于通过将数据操纵插入到i/o路径中来使客户端装置102a能够修改对象存储服务160上的一个或多个对象的i/o路径的说明性交互,该操纵在按需代码执行系统120上可执行的任务内实现。
[0078]
图3的交互开始于(1),其中客户端装置102a创作流操纵代码。该代码可以说明性地用于访问在程序执行时所提供的输入文件句柄(可以例如由程序的标准输入流表示,通常为“stdin”),对从该文件句柄获得的数据执行操纵,并将数据写入在程序执行时所提供的输出文件句柄(可以例如由程序的标准输出流表示,通常为“stdout”)。
[0079]
虽然本文关于“文件”句柄讨论了示例,但是本公开的实施方案可以利用提供对任何操作系统级别输入/输出(io)流的访问的句柄,所述流的示例包括字节流、字符流、文件流等。如本文所用,术语操作系统级别输入/输出流(或简称为“io流”)是指操作系统为其提供一组定义的函数的数据流,诸如在流内查找、从流中读取和向流中写入。可以用各种方式来创建流。例如,编程语言可以通过使用函数库打开本地操作系统上的文件来生成流,或者可以通过使用“管道”操作符(例如,在操作系统外壳命令语言内)来创建流。正如本领域的
技术人员将理解的,作为代码的基本功能,大多数通用编程语言包括与流交互的能力。
[0080]
根据本公开的实施方案,可以创作任务代码来接受作为代码参数的输入句柄和输出句柄,输入句柄和输出句柄均表示io流(例如,分别表示输入流和输出流)。代码然后可以操纵输入流的数据,并将输出写入输出流。给定使用通用编程语言,可以根据用户的期望实现多种函数中的任何一种。例如,函数可以从输入流中搜索和移除机密信息。虽然一些代码可以仅利用输入和输出句柄,但其他代码可以实现另外的接口,如网络通信接口。然而,通过为代码提供对在代码之外创建的输入和输出流的访问(通过各自的句柄),代码不需要创建此类流。此外,因为流可以在代码之外创建,并且可能在代码的执行环境之外创建,所以不必信任流操纵代码来执行创建流可能必需的某些操作。例如,流可以表示通过网络连接传输的信息,而不需要向代码提供对该网络连接的访问。因此,使用io流将数据传入和传出代码执行可以简化代码,同时提高安全性。
[0081]
如上所述,代码可以用各种编程语言来创作。用于此类语言的创作工具在本领域中是已知的,因此本文不再描述。虽然在图3中创作被描述为发生在客户端装置102a上,但是在一些情况下,服务160可以提供接口(例如,web gui),通过该接口来创作或选择代码。
[0082]
在(2)中,客户端装置102a向服务160的前端162提交流操纵代码,并请求将代码的执行插入到一个或多个对象的i/o路径中。说明性地,前端162可以向装置102a提供一个或多个接口,从而实现提交代码(例如,作为压缩文件)。前端162还可以提供接口,从而实现指定代码执行应该应用到的一个或多个i/o路径。例如,每个i/o路径可以对应于对象或对象集合(例如,对象“桶”)。在一些情况下,i/o路径可以进一步对应于访问此类对象或集合的给定方式(例如,通过其创建对象的uri),对应于试图访问该对象或集合的一个或多个账户,或者对应于其他路径标准。在(3)中,路径修改的指定然后被存储在i/o路径修改数据存储区164中。另外,在(4)中,流操纵代码被存储在对象数据存储区166中。
[0083]
这样,当经由指定的i/o路径接收到i/o请求时,服务160被配置为在将请求应用于代码执行的输出之前,针对请求的输入数据(例如,由客户端装置102a提供的数据或服务160的对象,取决于i/o请求)执行流操纵代码。以此方式,客户端装置102a(在图3中说明性地表示对象或对象集合的所有者)对存储在对象存储服务160上并从其检索的数据可具有更大的控制权。
[0084]
图3的交互一般涉及将单个数据操纵插入到服务160上的对象或集合的i/o路径中。然而,在本公开的一些实施方案中,对象或集合的所有者能够将多个数据操纵插入到此类i/o路径中。每个数据操纵可以对应于例如基于无服务器代码的操纵或服务160的固有操纵。例如,假设所有者已经将数据集作为对象提交给服务160,并且所有者希望向最终用户提供该数据集的一部分的过滤视图。虽然所有者可以将该部分的该过滤视图存储为单独的对象,并向最终用户提供对该单独对象的访问,但这导致了服务160上的数据复制。在所有者希望向多个最终用户提供数据集的不同部分的情况下,可能利用定制的过滤器,该数据复制增长,从而导致明显降低效率。根据本公开,另一选项可以让所有者创作或获得定制代码以在对象的不同部分上实现不同的过滤器,并将该代码插入到对象的i/o路径中。然而,该方法可能需要所有者复制服务160的一些固有功能(例如,检索数据集一部分的能力)。此外,由于需要单组代码来执行两个函数(例如,选择数据的一部分并过滤该部分),该方法会阻碍代码的模块化和可重用性。
[0085]
为了克服这些缺点,本公开的实施方案使所有者能够产生要应用于i/o路径的数据操纵的流水线,将多个数据操纵链接在一起,每个数据操纵也可以被插入到其他i/o路径中。此类流水线的说明性可视化在图4中被示为流水线400。具体而言,流水线400示出了所有者指定的一系列数据操纵,这些操纵将在针对对象或对象集合来调用请求方法时发生。如图4所示,流水线开始于根据所调用的请求方法在调用中指定的输入数据。例如,put调用通常可以包括作为待存储的数据的输入数据,而get调用通常可以通过引用存储的对象来包括输入数据。list调用可以指定目录,其清单是list请求方法的输入数据。
[0086]
与请求方法的典型实现方式相反,在说明性流水线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来重新配置现有程序。
[0087]
虽然图4的流水线400是线性的,但是在一些实施方案中,服务160可以使所有者能够配置非线性流水线,诸如通过在流水线内包括条件或分支节点。说明性地,如下面更详细的描述,数据操纵(例如,基于无服务器的函数)可被配置为包括返回值,诸如成功执行、遇到错误等的指示。在一个示例中,数据操纵的返回值可用于选择分支流水线内的条件分支,使得第一返回值使流水线在第一分支上得以继续,而第二返回值使流水线在第二分支上得以继续。在一些情况下,流水线可以包括并行分支,使得数据被复制或划分到多个数据操纵,其输出被传递到单个数据操纵,用于在执行所调用的方法之前进行合并。服务160可以说明性地提供图形用户接口,通过该接口所有者可以创建流水线,诸如通过指定流水线内的节点并将这些节点经由逻辑连接链接在一起。各种基于流的开发接口是已知的,并且可以结合本公开的各方面来使用。
[0088]
此外,在一些实施方案中,应用于特定i/o路径的流水线可以动态、在请求时、基于根据不同标准应用于该路径的数据操纵来生成。例如,数据集合的所有者可以将第一数据操纵应用于与集合内的对象的所有交互,并将第二数据操纵应用于经由给定uri获得的所有交互。因此,当接收到与集合内的对象且经由给定uri交互的请求时,服务160可以生成组合第一数据操纵和第二数据操纵的流水线。服务160可以说明性地实现标准的层次结构,使得应用于对象的操纵在应用于uri的操纵之前被放置在流水线内等等。
[0089]
在一些实施方案中,客户端装置102可能够请求在流水线内包含数据操纵。例如,在get请求的参数内,客户端装置102可以指定要包括在结合该请求应用的流水线内的特定数据操纵。说明性地,集合所有者可以指定针对集合允许的一个或多个数据操纵,并进一步指定那些操纵的标识符(例如,函数名)。因此,当请求与该集合交互时,客户端装置102可以
指定标识符以使得该操纵被包括在应用于i/o路径的流水线内。在一个实施方案中,在所有者指定的数据操纵之后并且在实现所请求的请求方法之前,客户端请求的操纵被附加到流水线的末端。例如,在客户端装置102请求get数据集,并且请求在实现get方法之前将搜索函数应用于数据集的情况下,搜索函数可以接收作为输入数据的针对数据集的所有者指定数据操纵(例如,从数据集移除机密信息的操纵)的输出。此外,在一些实施方案中,请求可以指定待传递给一个或多个数据操纵(无论是否在请求中指定)的参数。因此,虽然本公开的实施方案可以在客户端装置102不知晓那些操纵的情况下实现数据操纵,但是其他实施方案可以使客户端装置102能够在i/o请求内传递信息以用于实现数据操纵。
[0090]
此外,虽然本公开的示例实施方案是关于对所调用方法的输入数据的操纵来进行描述的,但是本公开的实施方案还可以用于修改请求的各方面,包括所调用方法。例如,可将请求的内容(包括例如所调用的方法和参数)传递给无服务器任务执行,并且该执行可被配置为修改和返回方法或参数的修改版本作为返回值到前端162。说明性地,在客户端装置102被认证为用户访问数据对象的仅一部分的情况下,可将“get”该数据对象的调用传递给无服务器任务执行,并且该执行可以变换get请求的参数,使其仅应用于与用户能够访问的部分相对应的数据对象的特定字节范围。作为另外示例,任务可被用来实现对所调用方法的定制解析或限制,诸如通过限制用户可以调用的方法、那些方法的参数等。在一些情况下,对请求应用一个或多个函数(例如,修改所调用的方法或方法参数)可以被视为“预数据处理”流水线,并且因此可以在获得流水线400内的输入数据之前实现(该输入数据可以由于请求内的改变而改变),或者可以独立于数据操纵流水线400而实现。
[0091]
类似地,虽然本公开的示例实施方案是关于应用所调用的方法至一个或多个数据操纵的输出数据来进行描述的,但是在一些实施方案中,操纵可以另外或替代地在应用所调用的方法之后发生。例如,数据对象可以包含数据所有者希望在将数据提供给客户端之前移除的敏感数据。所有者还可以使客户端能够指定对数据集的固有操纵,诸如对数据集进行数据库查询(例如,通过select资源方法)。虽然所有者可以为数据集指定流水线,使得在应用select方法之前对敏感数据进行过滤,但是此类操作顺序可能并不合适,因为可能对整个数据对象而不是仅对由select查询返回的部分进行过滤。因此,除了指定在满足请求方法之前的操纵或作为其替代,本公开的实施方案可以使所有者能够指定在应用所调用的方法之后但在进行最终操作以满足请求之前的操纵。例如,在select操作的情况下,服务160可以首先针对指定的输入数据(例如,数据对象)进行select操作,然后将该select操作的输出传递给数据操纵,诸如无服务器任务执行。该执行的输出然后可被返回至客户端装置102以满足请求。
[0092]
总体而言,虽然图3和图4是参考由对象或集合的所有者创作的无服务器任务来进行描述的,但是在一些情况下,服务160可以使代码作者能够与服务160的其他用户共享他们的任务,使得第一用户的代码在第二用户所拥有的对象的i/o路径中执行。服务160还可以提供任务库供各用户使用。在一些情况下,共享任务的代码可以提供给其他用户。在其他情况下,共享任务的代码可以对其他用户隐藏,使得其他用户可以执行该任务,但是不能查看该任务的代码。在这些情况下,说明性地,其他用户可以被允许修改代码执行的特定方面,诸如代码将在其下执行的许可。
[0093]
参考图5a和图5b,将讨论用于将修改应用到用以在服务160上存储对象的请求的
i/o路径的说明性交互,结合这些图,该请求被称为“put”请求或“put对象调用”。虽然在两个图中示出,但是在图5a和图5b中保持了交互的编号。
[0094]
交互开始于(1),其中客户端装置102a向存储服务160提交put对象调用,对应于在服务160上存储输入数据(例如,包括在调用中或在调用中指定)的请求。输入数据可以对应于例如存储在客户端装置102a上的文件。如图5a所示,该调用被定向到服务162的前端162,在(2)中,前端从i/o路径修改数据存储区164中检索对该调用的i/o路径进行修改的指示。该指示可以反映例如待应用于在i/o路径上接收的调用的流水线。调用的i/o路径通常可以相对于调用中包括的请求方法、调用中指示的对象或对象集合、到达服务160的特定机制(例如,协议、使用的uri等)、客户端装置102a的身份或认证状态、或其组合来指定。例如,在图5a中,所使用的i/o路径可以对应于针对(例如与前端162相关联)的特定uri以将对象存储在服务160上的特定逻辑位置(例如,特定桶)的put请求方法的使用。在图5a和图5b中,假设该逻辑位置的所有者先前已经指定了对i/o路径的修改,并且具体地,已经指定了在无服务器函数的结果被存储在服务160中之前该函数应该被应用于输入数据。
[0095]
因此,在(3)中,前端162在i/o路径的修改中检测无服务器任务执行的包含。因此,在(4)中,前端162向按需代码执行系统120提交调用,以针对调用内指定的输入数据执行修改内指定的任务。
[0096]
因此,在(5)中,按需代码执行系统120生成执行环境502,在执行环境中执行对应于任务的代码。说明性地,该调用可以被定向到系统的前端130,其可以向工作者管理器140分发指令以选择或生成在其中执行任务的vm实例150,该vm实例150说明性地表示执行环境502。在生成执行环境502的过程中,系统120还向环境提供在i/o路径修改内指示的任务的代码504(可以例如从对象数据存储区166中检索)。虽然在图5a中未示出,但是环境502还包括代码的其他依赖性,诸如对操作系统的访问、执行代码所需的运行时等。
[0097]
在一些实施方案中,执行环境502的生成可以包括用限制对网络资源访问的安全约束来配置环境502。说明性地,当任务旨在不参考网络资源的情况下进行数据操纵时,环境502可以被配置为无法经由网络发送或接收信息。在任务旨在利用网络资源的情况下,可以在“白名单”的基础上提供对此类资源的访问,使得来自环境502的网络通信仅被允许用于指定的域、网络地址等。网络限制可以例如由托管环境502的主机装置(例如,由管理程序或主机操作系统)来实现。在一些情况下,网络访问要求可以被用来在逻辑上或物理上辅助环境502的放置。例如,在任务不需要访问网络资源的情况下,该任务的环境502可以被放置在远离服务提供者系统110的其他网络可访问服务的主机装置上,诸如具有到那些服务的较低质量通信信道的“边缘”装置。在任务需要访问其他专用网络服务的情况下,诸如在虚拟专用云(例如,代表给定用户在服务160上实现的类似局域网的环境)内实现的服务,环境502可以被创建为逻辑上存在于该云中,使得任务执行502访问云中的资源。在一些情况下,任务可以被配置为在提交i/o请求的客户端装置102的专用云中执行。在其他情况下,任务可以被配置为在请求中引用的对象或集合的所有者的专用云中执行。
[0098]
除了生成环境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的执行来实现。
[0099]
图5a的交互在图5b中得以继续,其中系统120执行任务代码504。因为任务代码504可以是用户创作的,所以可以在代码504内实现任意数量的功能。然而,为了描述图5a和图5b,将假设代码504在被执行时从输入文件句柄506(可作为常用输入流来传递,诸如stdin)读取输入数据,操纵输入数据,并将输出数据写入输出文件句柄508(可作为常用输出流来传递,诸如stdout)。因此,在(8)中,系统120获得写入输出文件(例如,输出文件句柄中引用的文件)的数据作为执行的输出数据。此外,在(9)中,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。为了描述图5a和图5b,将假设返回值指示执行成功。在(10)中,输出数据和成功返回值然后被传递到前端162。
[0100]
虽然在图5b中被示为单个交互,但是在一些实施方案中,可以分别返回任务执行的输出数据和该执行的返回值。例如,在执行过程中,任务代码504可以通过句柄508对输出文件写入,并且该数据可以周期性地或迭代地返回至服务160。说明性地,在输出文件存在于由集结代码实现的用户空间内文件系统上的情况下,集结代码可以检测对输出文件的每个写入,并将其转发给前端162。在输出文件存在于网络文件系统上的情况下,对文件的写入可以直接导致写入的数据被传输到接口166,从而传输到服务160。在一些情况下,迭代地传输写入的数据可以减少环境502本地所需的存储量,因为根据一些实施方案,写入的数据可以从环境502的本地存储装置中删除。
[0101]
此外,虽然在图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的任何请求返回给定http代码(例如,200),该代码在前端162处被成功检索并调用数据处理流水线。任务执行可以然后
被配置为在其返回值内指定除了该http代码之外的待传递给客户端装置102a的数据。此类数据可以说明性地包括提供了由任务执行生成的信息的结构化数据(例如可扩展标记语言(xml)数据),诸如指示任务成功或失败的数据。该方法可以有利地使前端162能够快速响应请求(例如,无需等待任务的执行),同时仍然使任务执行能够将信息传递给客户端装置102。
[0102]
为了本说明,将假设任务的成功返回值指示http 2xx成功响应应该被传递到装置102a。因此,在接收到输出数据时,前端162将输出数据作为对象存储在对象数据存储区166中(11)。交互(11)说明性地对应于客户端装置102a最初调用的put请求方法的实现,尽管是通过存储任务执行的输出而不是所提供的输入数据。在实现所调用的put请求方法之后,在(12),前端162向客户端装置102a返回由任务的成功返回值指示的成功指示符(例如,http 200响应代码)。因此,从客户端装置102a的角度来看,将对象put在存储服务160上的调用导致在服务160上创建该对象。然而,存储在服务160上的对象对应于所有者指定任务的输出数据,而不是存储由装置102a提供的输入数据,从而使得对象的所有者能够享有对该对象的内容更大的控制权。在一些使用情况下,服务160可以另外将输入数据作为对象存储(例如,在所有者指定的任务对应于可执行的代码以提供可结合输入数据使用的输出数据,诸如从输入数据生成的校验和)。
[0103]
参考图6a和图6b,讨论用于将修改应用于检索服务160上的对象的请求的i/o路径的说明性交互,结合这些图,该请求被称为“get”请求或“get调用”。虽然在两个图中示出,但是在图6a和图6b中保持了交互的编号。
[0104]
交互开始于(1),其中客户端装置102a向存储服务160提交get调用,对应于获取存储在服务160上的对象(在调用中标识)的数据的请求。如图6a所示,该调用被定向到服务160的前端162,在(2)中,该服务从i/o路径修改数据存储区164中检索对该调用的i/o路径进行修改的指示。例如,在图6a中,所使用的i/o路径可以对应于针对(例如与前端162相关联)的特定uri以检索服务160上的特定逻辑位置(例如,特定桶)中的对象的get请求方法的使用。在图6a和图6b中,假设该逻辑位置的所有者先前已经指定了对i/o路径的修改,并且具体地,已经指定了在无服务器函数的结果作为所请求的对象被返回至装置102a之前,该函数应该被应用于该对象。
[0105]
因此,在(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还包括代码的其他依赖性,诸如对操作系统的访问、执行代码所需的运行时等。
[0106]
此外,在(6),系统120向环境提供对分别可用于读取和写入任务执行的输入数据(对象)和输出数据的输入文件句柄506和输出文件句柄508的文件级别访问。如上所述,文件句柄506和508可以指向附接到环境502的(物理的或虚拟的)块存储装置(例如,磁盘驱动器),使得任务可以与本地文件系统交互,以读取输入数据和写入输出数据。例如,环境502
可以表示具有虚拟磁盘驱动器的虚拟机,并且系统120可以在(6’)从服务160获得调用中引用的对象,并将该对象存储在虚拟磁盘驱动器上。随后,在执行代码时,系统120可以向代码传递存储在虚拟磁盘驱动器上对象的句柄,以及向其写入输出数据的驱动器上文件的句柄。在另一实施方案中,文件句柄506和508可以指向存储了对象的网络文件系统,诸如nfs兼容的文件系统。例如,文件级别接口166可以提供对存储在对象数据存储区中的对象以及表示输出数据的文件的文件级别访问。通过提供句柄506和508,任务代码504能够使用流操纵来读取输入数据和写入输出数据,这与实现网络传输所需的相反。句柄506和508的创建可以说明性地通过在环境502内或与其相关联的集结代码157的执行来实现。
[0107]
图6a的交互在图6b中得以继续,其中在(7),系统120执行任务代码504。因为任务代码504可以是用户创作的,所以可以在代码504内实现任意数量的功能。然而,为了描述图6a和图6b,将假设代码504在被执行时从输入文件句柄506(可作为常用的输入流传递,诸如stdin)读取输入数据(对应于调用中标识的对象),操纵输入数据,并将输出数据写入输出文件句柄508(可作为常用的输出流传递,诸如stdout)。因此,在(8)中,系统120获得写入输出文件(例如,输出文件句柄中引用的文件)的数据作为执行的输出数据。此外,在(9)中,系统120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。为了描述图6a和图6b,将假设返回值指示执行成功。在(10)中,输出数据和成功返回值然后被传递到前端162。
[0108]
在接收到输出数据和返回值时,前端162返回任务执行的输出数据作为所请求的对象。因此,交互(11)说明性地对应于客户端装置102a最初调用的get请求方法的实现,尽管是通过返回任务执行的输出而不是调用中指定的对象。从客户端装置102a的角度来看,从存储服务160get对象的调用因此导致数据作为对象返回至客户端装置102a。然而,提供给客户端装置102a的数据对应于所有者指定任务的输出数据,而不是返回存储在服务160上的对象,从而使对象的所有者能够享有对返回至客户端装置102a的数据更大的控制权。
[0109]
类似于以上关于图5a和图5b的描述,虽然在图6b中被示为单个交互,但是在一些实施方案中,可以分别返回任务执行的输出数据和该执行的返回值。此外,尽管在图6a和图6b中假设了成功返回值,但是其他类型的返回值也是可能和被考虑的,诸如错误值、流水线控制值或执行其他数据操纵的调用。此外,返回值可以指示将什么返回值返回至客户端装置102a(例如,作为http状态代码)。在一些情况中,在输出数据从任务执行迭代返回的情况下,输出数据也可以由前端162迭代地提供给客户端装置102a。在输出数据巨大(例如,大约数百兆字节、数千兆字节等)的情况下,迭代地向客户端装置102a返回输出数据可以以流的形式来提供该数据,从而相对于延迟数据的返回来说,加速了向装置102a的内容递送,直到任务执行完成。
[0110]
虽然以上参考图5a-图6b对说明性交互进行了说明,但是对这些交互的各种修改在本文中是可能和被考虑的。例如,虽然上述交互涉及输入数据的操纵,但是在一些实施方案中,无服务器任务可以被插入到服务160的i/o路径中,以执行除数据操纵之外的函数。说明性地,无服务器任务可用于执行关于所调用的请求方法的证实或授权,以验证客户端装置102a被授权执行该方法。基于任务的证实或授权可以实现服务160未固有地提供的函数。例如,考虑到希望将某些客户端装置102限制为仅访问在某个时间范围(例如,最近30天、除最近30天之外的任何时间等)内创建的集合中的对象的集合所有者。虽然服务160可以在每个对象或每个集合的基础上固有地提供授权,但是在一些情况下,服务160可以不在自创建
以来的持续时间的基础上固有地提供授权。因此,本公开的实施方案使得所有者能够将无服务器任务插入到集合的i/o路径(例如,使用集合的给定uri的get路径)中,该无服务器任务基于所请求对象的创建时间来确定客户端是否被授权检索该对象。说明性地,由任务执行提供的返回值可以对应于“授权”或“未授权”响应。在任务不执行数据操纵的情况下,可能没有必要向任务执行环境提供输入和输出流句柄。因此,在这些情况下,服务160和系统120可以被配置为放弃向环境提供此类句柄。任务是否实现数据操纵可以例如在任务创建时被指定,并作为任务的元数据存储(例如在对象数据存储166区内)。因此,服务160可以从该元数据确定是否应该通过提供适当的流句柄来支持任务内的数据操纵。
[0111]
虽然一些实施方案可以利用返回值而不使用流句柄,但是其他实施方案反而可以利用流句柄而不使用返回值。例如,虽然上述交互涉及向存储服务160提供任务执行的返回值,但是在一些情况下,系统120可以被配置为基于与输出流句柄的交互来检测函数的完成。说明性地,环境(例如,在用户空间或基于网络的文件系统中提供文件系统)内的集结代码可以检测解除分配流句柄的调用(例如,通过调用“file.close()”函数等)。集结代码可以将此类调用解译为函数的成功完成,并且通知服务160成功完成,而不需要任务执行明确提供返回值。
[0112]
虽然上述交互一般涉及将输入数据传递给任务执行,但是另外或替代信息也可以传递给执行。作为非限制性示例,此类信息可以包括来自客户端装置102的请求的内容(例如,传输的http数据)、关于请求的元数据(例如,从其接收请求的网络地址或请求的时间)、关于客户端装置102的元数据(例如,装置的认证状态、账户时间或请求历史)、或关于所请求的对象或集合的元数据(例如,大小、存储位置、许可或创建、修改或访问的时间)。此外,除了操纵输入数据或作为其替代,任务执行可被配置为修改关于输入数据的元数据,该元数据可与输入数据一起存储(例如在对象内),并因此通过输出流句柄写入,或者可单独存储并因此通过元数据流句柄、将元数据包含在返回值中或通过单独网络传输到服务160来进行修改。
[0113]
参考图7,描述用于在i/o路径上结合在图1的对象存储服务处获得的i/o请求实现所有者定义函数的说明性例程700。例程700可说明性地在i/o路径(例如,根据对象或集合、访问对象或集合的机制如uri、发送io请求的帐户等来定义)与数据操纵的流水线关联之后实现。例如,例程700可以在上述图3的交互之前实现。例程700说明性地由前端162实现。
[0114]
例程700开始于框702,其中前端162获得将i/o方法应用于输入数据的请求。该请求说明性地对应于客户端装置(例如,最终用户装置)。i/o方法可以对应于例如http请求方法,诸如get、put、list、delete等。输入数据可以被包括在请求中(例如,put请求中),或者在请求中被引用(例如,作为对象存储服务160上的现有对象。
[0115]
在框704,前端162确定用于请求的i/o路径中的一个或多个数据操纵。如上所述,可以基于各种标准(或其组合)来定义i/o路径,诸如请求中引用的对象或集合、用来发送请求的uri、与请求相关联的账户等。每个定义的i/o路径的操纵可以说明性地存储在对象存储服务160中。因此,在框704,前端162可以将用于请求的i/o路径的参数与存储在对象存储服务160上的数据操纵进行比较,以确定插入到i/o路径中的数据操纵。在一个实施方案中,操纵形成流水线,诸如图4的流水线400,其可以由前端162在框704预先存储或构建(例如,通过组合应用于i/o路径的多个操纵)。在一些情况下,可以在请求中指定另外的数据操纵,
所述数据操纵可以例如在预先指定的数据操纵(例如,未在请求中指定)之前插入。在其他情况下,请求可以排除对任何数据操纵的引用。
[0116]
在框706,前端162将i/o请求的输入数据传递给i/o路径的初始数据操纵。初始数据操纵可以包括例如对象存储服务160的固有操纵或由调用中引用的对象或集合的所有者定义的无服务器任务。说明性地,在初始数据操纵是固有操纵的情况下,前端162可以将输入传递给图1的对象操纵引擎170。在初始数据操纵是无服务器任务的情况下,前端162可以将输入传递给图1的按需代码执行系统120,以通过任务的执行进行处理。下面参考图8对用于实现无服务器任务的说明性例程进行描述。
[0117]
虽然图7说明性地描述了数据操纵,但是在一些情况下,所有者可以对i/o路径应用其他处理。例如,所有者可以在对象或集合的i/o路径中插入无服务器任务,其提供独立于数据操纵的认证。因此,在一些实施方案中,可以修改框706,使得其他数据诸如关于请求或请求中指定的对象的元数据被传递给认证函数或其他路径操纵。
[0118]
随后,例程700前进到框708,其中例程700的实现根据另外数据操纵是否已经与i/o路径相关联而变化。若是,例程700前进到框710,其中先前操纵的输出被传递到与i/o路径相关联的下一个操纵(例如,流水线的下一阶段)。
[0119]
在框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。
[0120]
值得注意的是,与初始请求中指定的输入相反,将所调用的方法应用于该输出可以改变存储在对象存储服务160中或从其中检索的数据。例如,作为对象存储在服务160上的数据可能不同于存储此类数据的请求中提交的数据。类似地,作为对象从系统中检索的数据可能与存储在系统上的对象不匹配。因此,例程700的实现使得数据对象的所有者能够通过i/o享有对代表所有者存储在对象存储服务160上的对象或集合的更大的控制权。
[0121]
在一些情况下,例程700中可以包括另外或替换的框,或者此类框的实现可以包括另外或替换的操作。例如,如上所述,除了提供输出数据或作为其替代,无服务器任务执行可以提供返回值。在一些情况下,该返回值可以指令前端162在实现操纵时采取进一步的动作。例如,错误返回值可以指令前端162停止操纵实现,并向请求装置提供指定的错误值(例如,http错误代码)。另一个返回值可以指令前端162实现另外的无服务器任务或操纵。因此,在一些情况下,例程700可以被修改成包括,例如,在框706和710之后,处理先前操纵的返回值(或者框708可以被修改成包括处理此类值)。因此,例程700本质上既定为说明性的。
[0122]
参考图8,描述了用于在图1的按需代码执行系统上执行任务以在所有者定义的函数的实现期间实现数据操纵的说明性例程800。例程800说明性地由图1的按需代码执行系统120实现。
[0123]
例程800开始于框802,其中系统120获得实现流操纵任务(例如,操纵作为输入io流句柄而提供的数据的任务)的调用。该调用可以例如结合图7的例程700的框706或710来获得。该调用可以包括任务的输入数据,以及其他元数据,诸如先于该调用的请求的元数据、在该调用中引用的对象的元数据等。
[0124]
在框804,系统120为任务生成执行环境。环境的生成可以包括例如生成可以在其中执行任务的容器或虚拟机实例并且向环境提供任务的代码以及代码的任何依赖性(例如,运行时、库等)。在一个实施方案中,生成环境具有对应于为任务指定的许可的网络许可。如上所述,例如根据白名单可以限制性地(与许可性地相反)设置此类许可。因此,缺少i/o路径所有者的许可规范,环境可能缺少网络访问。因为任务操作以操纵流,而不是网络数据,所以该限制性模型可以在不损害功能效果的情况下提高安全性。在一些实施方案中,可以在提供对其他受限网络资源的访问的逻辑网络位置处生成环境。例如,该环境可以在与调用装置相关联的虚拟专用局域网(例如,虚拟专用云环境)内生成。
[0125]
在框806,系统120将表示输入数据的io流集结于环境。说明性地,系统120可以用包括输入数据的文件系统来配置环境,并且向任务代码传递允许访问作为文件流的输入数据的句柄。例如,系统120可以用网络文件系统来配置环境,从而提供对输入数据(例如存储在对象存储系统上)的基于网络的访问。在另一个示例中,系统120可以用“本地”文件系统(例如,从提供文件系统的操作系统的视角来看)来配置环境,并将输入数据复制到本地文件系统。本地文件系统可以是例如用户空间文件系统(fuse)。在一些情况下,本地文件系统可以在由环境的主机装置或基于网络的装置(例如,作为网络可访问的块存储装置)提供的虚拟化磁盘驱动器上实现。在其他实施方案中,系统120可以通过将输入数据经由“管道”传递到执行环境、通过将输入数据写入环境的网络套接字(可能不提供对外部网络的访问)等来提供io流。系统120还用对输出流的流级访问来配置环境,诸如通过在文件系统上为输出数据创建文件、允许执行任务来创建此类文件、将环境的句柄(例如,stdout)经由管道传递到与环境或环境的管理程序共处的另一个vm实例上的位置等等。
[0126]
在框808,在环境中执行任务。任务的执行可以包括执行任务的代码,并将句柄或输入流和输出流的句柄传递给执行。例如,系统120可以将存储在文件系统上的输入数据的句柄作为“stdin”变量传递给执行。系统还可以将输出数据流的句柄例如作为“stdout”变量传递给执行。此外,系统120可以将其他信息诸如请求或请求中指定的对象或集合的元数据作为参数传递给执行。任务的代码可以因此根据代码的函数对输入数据进行流操纵,并且使用os级别流操作将执行的输出写入输出流。
[0127]
例程800然后前进至框810,其中系统120将写入输出流的数据作为任务的输出数据返回(至例如对象存储系统的前端162)。在一个实施方案中,框810可以发生在任务执行完成之后,如此,系统120可以将作为任务的完整输出数据写入的数据返回。在其他情况下,框810可以发生在任务执行过程中。例如,系统120可以检测写入输出流的新数据,并立即返回该数据,而无需等待任务的执行。说明性地,在输出流被写入输出文件的情况下,系统120可以在写入后删除输出文件的数据,使得新数据一发送,文件系统就不再需要保留足够的存储来存储任务执行的所有输出数据。更进一步地,在一些实施方案中,框810可以在检测到描述输出流的输出流句柄关闭时发生。
[0128]
另外,在框812,在执行完成之后,系统120将执行提供的返回值返回(至例如对象
存储系统的前端162)。返回值可以指定执行的结果,诸如成功或失败。在一些情况下,返回值可以指定待采取的下一个动作,诸如实现另外的数据操纵。此外,返回值可以指定待提供给请求对数据对象进行i/o操作的调用装置的数据,诸如待返回的http代码。如上所述,前端162可以获得此类返回值并采取适当的动作,诸如将错误或http代码返回至调用装置、实现另外的数据操纵、对输出数据执行i/o操作等。在一些情况下,可以在任务代码中明确指定返回值。在其他情况下,诸如在代码中没有指定返回值的情况下,可以返回默认返回值(例如,指示成功的
‘1’
)。例程800然后结束于框814。
[0129]
参考图9,描绘了用于通过将数据访问控制代码(或函数)插入到i/o路径中,从而使客户端装置102a能够修改对象存储服务160上的一个或多个对象的i/o路径的说明性交互,其中数据访问控制代码可在按需代码执行系统120上执行。
[0130]
图9的交互开始于(1),其中客户端装置102a创作数据访问控制代码(或函数)。如本文所述,数据访问控制代码可以是由所请求的数据对象的所有者编写或提供的一组计算机可执行指令,以提供对数据对象的定制访问。数据访问控制代码可以类似于本公开中描述的其他用户代码(例如,参考图1)。数据访问控制代码可以处理访问存储在服务160上的数据对象的传入请求(即“数据请求”),确定与该数据请求相关联的元数据(即“请求元数据”),识别与所请求的数据对象相关联的元数据(即“数据元数据”),和确定提交该数据请求的用户(即“请求用户”)是否应当被准许访问所请求的数据对象,以及若是,请求用户应当被准许访问数据对象的哪些部分。
[0131]
例如,数据访问控制代码可以基于请求用户的身份(例如,由传入数据请求所指示),确定请求用户不能访问所请求的数据对象,并拒绝该数据请求。可代替地,数据访问控制代码可以基于请求用户的身份确定请求用户确实能够访问所请求的数据对象,并将所请求的数据对象返回至请求用户。在一些情况下,数据访问控制代码包含决定准许或拒绝访问所需的信息。在其他情况下,数据访问控制代码在外部数据库中检索此类信息(例如,有或没有数据所有者/提供者的凭证),并基于检索的信息做出决定。例如,数据访问控制代码能够访问用户访问表,其为对象存储服务的多个用户中的每个相应用户(或者与数据对象的所有者相关联或由其标识的用户)指示相应用户可访问的数据对象的一个或多个部分。如上所述,数据访问控制代码可以用各种编程语言来创作。用于此类语言的创作工具在本领域中是已知的,因此本文不再描述。虽然数据访问控制代码的创作在图9中被描述为发生在客户端装置102a上,但是在一些情况下,服务160可以提供接口(例如,web gui),通过该接口来创作或选择数据访问控制代码。
[0132]
在(2)处,客户端装置102a向服务160的前端162提交数据访问控制代码,并且在(3)处,请求将数据访问控制代码的执行插入到由服务160存储的一个或多个数据对象的i/o路径中。说明性地,前端162可以向客户端装置102a提供一个或多个接口,从而实现提交数据访问控制代码(例如,作为压缩文件)。前端162还可以提供接口,从而实现指定数据访问控制代码执行应该应用到的一个或多个i/o路径。例如,每个i/o路径可以对应于对象或对象集合(例如,对象“桶”)。在一些情况下,i/o路径还可以对应于访问此类对象或集合的给定方式(例如,通过其访问对象的uri),对应于试图访问对象或集合的一个或多个账户(例如,已经提交了访问对象或集合的请求的请求用户的用户账户),或者对应于其他路径标准。例如,在一些情况下,数据访问控制代码可以仅被插入到部分i/o路径中。在其他情况
下,数据访问控制代码被插入到所有i/o路径中。例如,不同于由数据访问控制代码执行的授权检查可以在i/o路径之外执行(例如,对于与i/o路径不相关的请求),并且数据访问控制代码可以响应于接收到对i/o路径之一的请求(例如,除了授权检查或作为授权检查替代)而执行。作为另一个示例,执行由服务160存储的数据访问控制代码的指示可以指示数据访问控制代码将作为授权路径的一部分被执行,并且可以不包含对任何特定i/o路径的引用。在其他情况下,不同的数据访问控制代码被插入到不同的i/o路径中(例如,默认数据访问控制代码被插入到部分i/o路径中,而更严格的数据访问控制代码被插入到其他i/o路径中)。在(4)处,i/o路径修改的指定(例如,从不包括执行任何所有者提交的代码的默认i/o路径到包括执行数据访问控制代码的修改后的i/o路径)然后被存储在i/o路径修改数据存储区164中。另外,在(5)处,数据访问控制代码被存储在对象数据存储区166中。尽管图9的示例示出了响应于将数据访问控制代码插入到i/o路径中的请求,数据访问控制代码被存储在对象数据存储区166中,但是在其他实施方案中,数据访问控制代码可能已经先前存储在对象数据存储区166或者与对象存储服务160或按需代码执行系统120通信的另一存储装置中,并且可以通过在(2)/(3)处发送到对象存储服务160的请求中的数据访问控制代码标识符来对其进行标识。
[0133]
如此,当经由在(4)处修改的指定i/o路径接收到数据请求时,服务160针对数据请求和该数据请求的输入数据(例如,由客户端装置102a提供的数据或服务160的对象,取决于i/o请求的性质)执行数据访问控制代码。然后,数据访问控制代码基于该数据请求(或其元数据)和输入数据确定数据请求应该被原样准许、带修改准许或者被拒绝。例如,基于确定数据请求应该被原样准许,数据访问控制代码可以将所请求的数据对象返回至请求用户。作为另一个示例,基于确定数据请求应该被带修改准许,数据访问控制代码可以将所请求的数据对象的修改版本返回至请求用户(例如,通过首先对数据对象执行数据移除、数据编辑或数据聚合,并且将数据移除、数据编辑或数据聚合的结果返回至请求用户)。作为又一示例,基于确定数据请求应该被拒绝,数据访问控制代码可以将错误消息返回至请求用户(例如,指示请求用户没有访问所请求的数据对象的许可)。这样的话,客户端装置102a(在图9中说明性地表示所请求的数据对象或对象集合的所有者或提供者的计算装置)可以获得对存储在对象存储服务160上并从其检索的数据更大的控制权。
[0134]
参考图10a和图10b,对用于处理由服务160经由i/o路径接收的数据请求的说明性交互进行描述,该i/o路径已经被修改为包括数据访问控制代码的执行,使用“get”调用作为示例。虽然在两个图中示出,但是在图10a和图10b中保持了交互的编号。
[0135]
交互开始于(1),其中客户端装置102b(例如,不同于数据所有者/提供者使用的图9的客户端装置102a的请求用户的客户端装置)向对象存储服务160提交get调用,对应于获取存储在服务160上的对象(在调用中标识)的数据的请求。如图10a所示,该调用被定向到服务160的前端162,在(2)处,该服务从i/o路径修改数据存储区164中检索对该调用的i/o路径进行修改的指示。例如,在图10a中,所使用的i/o路径可以对应于针对(例如与前端162相关联)的特定uri以检索服务160上的特定逻辑位置(例如,特定数据桶)中的对象的get请求方法的使用。在图10a和图10b中,假设该逻辑位置的所有者先前已经指定了对i/o路径的修改(例如,如图9所示),并且具体地,已经指定了由所有者提交或选择的数据访问控制代码应当(例如在服务160或按需代码执行系统120上)执行,以确定与请求用户相关联的访问
级别,并且根据所确定的访问级别来处理数据请求。在一些实施方案中,get调用指定在输出数据被返回至客户端装置102b之前需要对输出数据执行的一个或多个另外的数据操纵代码。在检测到此类另外的数据操纵代码时,前端162使得另外的数据操纵代码在按需代码执行系统120上、在已经配置为(例如,在从客户端装置102b接收到get调用之前)结合所请求的i/o路径执行的用户代码之上执行。一个或多个另外的数据操纵代码可以属于所请求的数据对象的所有者或提供者、提交get调用的用户、除了数据所有者/提供者或用户之外的第三方、或其任何组合。
[0136]
因此,在(3)处,前端162确定从i/o路径修改数据存储区164检索的修改数据包括数据访问控制代码的执行。如本文所述,数据访问控制代码可以是由所请求的数据对象的所有者编写或提供的一组计算机可执行指令,以提供对数据对象的定制访问。数据访问控制代码可以类似于本公开中描述的其他用户代码(例如,参考图1)。在一些情况下,数据访问控制代码是i/o路径中唯一由所有者提交的代码,并且数据访问控制代码返回指示请求用户是否被允许访问所请求的数据对象的值(或者在超过两个访问级别存在的情况下,关于所请求的数据对象,与请求用户相关联的特定访问级别),而不对所请求的数据对象执行另外的任务,诸如以某种方式操纵所请求的数据对象(例如,过滤、编辑、处理、聚合、加密、汇总或混淆所请求的数据对象)。在其他情况下,此类数据访问控制代码与一个或多个所有者提交的其他代码一起存在于i/o路径中,每个所有者提交的其他代码被配置为完成不同的任务(例如,除数据访问控制之外的任务,诸如数据修改、分析数据生成、数据访问日志生成等)。通过使数据访问控制代码只关注数据访问决定而不是其他数据操纵任务,数据访问控制代码可以以轻量得多的方式执行,这可以加速数据访问决定的处理,并且可以允许更有效地重新使用数据访问决定的结果(例如,通过高速缓存数据访问决定或将数据访问决定并行发送给多个数据操纵任务)。在其他情况下,i/o路径中存在的数据访问控制代码确定是否允许请求用户访问所请求的数据对象(或者在超过两个访问级别存在的情况下,关于所请求的数据对象,与请求用户相关联的特定访问级别),并且基于该确定,执行对应于所确定的访问级别的一个或多个另外的数据操纵任务(例如,如图6a和图6b所示)。因此,在(4)处,前端162向按需代码执行系统120提交调用,以执行在修改数据内指定的数据访问控制代码。例如,代码执行请求可以被生成并传输到按需代码执行系统120,其中代码执行请求包括(或标识)数据访问控制代码以及数据访问控制代码用来确定请求用户是否以及如何应被准许访问所请求的数据对象的任何信息。此类信息可以包括请求用户的身份、所请求的数据对象的身份、所请求的数据对象的内容、与数据请求相关联的时间戳、所请求的数据对象的所有者的身份、或者与数据请求或所请求的数据对象相关联的任何其他数据或元数据。因此,在(5)处,按需代码执行系统120生成执行环境502,在其中执行数据访问控制代码(例如,由按需代码执行系统120接收的代码执行请求指示。例如,代码执行请求可以被发送到系统120的前端130,其可以将指令分发给系统120的工作者管理器140,以选择或生成在其中执行数据访问控制代码的vm实例150,在这种情况下,vm实例150将表示图10a所示的执行环境502。在生成执行环境502的过程中,系统120还向执行环境502提供由i/o路径修改数据指示的数据访问控制代码504。例如,可以从对象数据存储区166中检索数据访问控制代码504。虽然在图10a中未示出,但是执行环境502还包括数据访问控制代码504的其他依赖性,诸如对操作系统的访问、执行数据访问控制代码504所需的运行时等。
[0137]
图10a的交互在图10b中得以继续,其中在(6),按需代码执行系统120执行数据访问控制代码504。因为数据访问控制代码504可以是用户创作(例如,由所请求的数据对象的所有者创作),所以可以在数据访问控制代码504内实现任何数量的功能。然而,为了描述图10a和图10b,将假设数据访问控制代码504在被执行时,确定与数据请求相关联的数据或元数据,确定与所请求的数据对象相关联的数据或元数据,并确定提交数据请求的用户(即,“请求用户”)是否应该被准许访问所请求的数据对象。另外,数据访问控制代码504在被执行时可以确定所请求的数据对象的哪些部分应该被返回至请求用户。尽管在图10a和图10b中未示出,但是在一些实施方案中,执行环境502包括以上参考图6a和图6b描述的文件描述符506和508,并且数据访问控制代码504在被执行时使用输入数据(例如,由输入文件描述符506指示)将输出数据写入输出文件(例如,由输出文件描述符508指示),使得输出数据对应于请求用户的访问级别。例如,基于请求用户对所请求的数据对象具有完全访问权,整个数据对象可以被写入输出文件。作为另一个示例,基于请求用户只能访问所请求的数据对象的子集,所请求的数据对象的子集可以被写入输出文件。作为又一示例,基于请求用户只能访问所请求的数据对象的修改版本(例如,不包括未加密形式的底层数据对象的加密版本,不包括原始形式的底层数据对象的聚合版本等),所请求的数据对象的修改版本可以被写入输出文件。可替代地,在一些实施方案中,数据访问控制代码504的执行返回请求用户访问级别的指示,并且服务160(或另一代码执行)处理从此类文件描述符的读取或向其写入,以将所请求的数据对象(或其修改版本)返回至请求用户。
[0138]
因此,在(7),系统120获得数据访问控制代码504执行的返回值(例如,在数据访问控制代码504内函数的最终调用中传递的值)。为了描述图10a和图10b,将假设返回值指示数据访问控制代码504被成功执行。在(8),成功返回值然后被传递到前端162。成功返回值可以指示请求用户是否被允许访问所请求的数据对象(或者在超过两个访问级别存在的情况下,关于所请求的数据对象,与请求用户相关联的特定访问级别)。该值可以被高速缓存或提供给其他过程或任务以供重新使用。例如,如果该值指示允许用户a访问数据对象x,则可以高速缓存该值,并且当服务160从用户a(或其访问级别被配置为与用户a的访问级别相同或比用户a的访问级别更包含的另一用户)接收到访问数据对象x的另一请求(或与数据对象x相同的访问级别相关联的另一数据对象)时,服务160可以基于高速缓存的值返回所请求的数据对象,而无需执行数据访问控制代码。此外,此类重新使用数据访问决定还可以防御试图用大量数据请求使服务160或按需代码执行系统120过载的恶意请求者。高速缓存的值可以是特定于请求用户(例如,来自用户a和b的数据请求可以看到和重新使用高速缓存的值,但是来自用户c的数据请求则不可以)、请求的数据对象(例如,针对数据对象x和y的数据请求可以看到和重新使用高速缓存的值,但是针对数据对象z的数据请求则不可以)、访问级别(例如,具有安全级别s1的针对数据对象的数据请求可以看到和重新使用高速缓存的值,但是具有安全级别s2的针对数据对象的数据请求则不可以)、地理区域(例如,与数据中心a相关联的数据请求可以看到和重新使用高速缓存的值,但是与数据中心b相关联的数据请求则不可以)及其任何组合。
[0139]
在(9),在接收到返回值时,前端162基于该返回值生成客户端特定的输出数据,并返回该客户端特定的输出数据作为所请求的数据对象。例如,基于返回值指示请求用户对所请求的数据对象具有完全访问权,整个数据对象可以被包括在客户端特定的输出数据
中。作为另一个示例,基于返回值指示请求用户只能访问所请求的数据对象的子集,所请求的数据对象的子集可以被包括在客户端特定的输出数据中。作为又一示例,基于返回值指示请求用户仅能访问所请求的数据对象的修改版本(例如,不包括未加密形式的底层数据对象的加密版本、不包括原始形式的底层数据对象的聚合版本等),所请求的数据对象的修改版本可以被包括在客户端特定的输出数据中。因此,交互(9)说明性地对应于客户端装置102b最初调用的get请求方法的实现,尽管返回的输出数据可能不同于调用中指定的实际数据对象。从客户端装置102b的视角来看,从对象存储服务160get数据对象的调用因此导致数据作为对象返回至客户端装置102b。然而,不是返回存储在服务160上的数据对象,而是提供给客户端装置102b的数据对应于至少部分地基于数据访问控制代码504的执行而生成的客户端特定的输出数据,从而使得数据对象的所有者能够对返回客户端装置102b的数据有更大控制权。图10a-图10b的其他细节可以与以上参照图6a-图6b描述的细节相同或相似。
[0140]
参考图11,将描述说明性例程1100,用于响应于对对象存储服务160的i/o请求而在图1的按需代码执行系统120上执行所有者提交的(或所有者指定的)数据访问控制代码以便实现用户特定的(例如,特定于请求用户)、访问级别特定的(例如,特定于与请求用户相关联的访问级别)数据供应。例程1100由图1的对象存储服务160说明性地实现。尽管本公开的一些实施方案是参考所有者提交的代码来描述的,但是此类实施方案也可以被扩展以包括所有者指定的代码(例如,由服务160或服务160的另一用户提供的一个或多个代码的指定)。
[0141]
例程1100开始于框1102,其中服务160例如从图9所示的客户端装置102a接收数据访问控制代码。该数据访问控制代码可以是由存储在服务160上的数据对象的所有者生成或选择的定制控制代码。服务160可以提供用于注册或选择可以插入到i/o路径中的定制控制代码的一个或多个api。在一些实施方案中,从客户端装置102a接收数据访问控制代码的实际副本。在其他实施方案中,服务160从客户端装置102a接收与数据访问控制代码相关联的标识符,而不是从客户端装置102a接收数据访问控制代码的实际副本,其中该标识符可以用于从服务160内或在服务160可访问的另一存储装置中识别或检索数据访问控制代码的实际副本。在其他实施方案中,服务160从客户端装置102a接收与数据访问控制代码相关联的标识符,并且该标识符被用于使得执行数据访问控制代码(例如,在按需代码执行系统120上),但是服务160不检索或存储数据访问控制代码的实际副本。
[0142]
在框1104,服务160将数据访问控制代码存储到一个或多个i/o路径中(例如,通过存储数据访问控制代码与一个或多个i/o路径相关联的指示)。如上所述,一旦数据访问控制代码被存储到i/o路径中,服务106在接收到对i/o路径的调用时,使得数据访问控制代码被执行。
[0143]
在框1106,服务160从请求用户接收数据请求,其中该数据请求指示请求用户希望访问的数据对象和提供该数据请求的请求用户的身份。在一些实施方案中,每个用户可以被分配不同的门户,通过该门户,用户能够访问对象存储服务160中的数据对象。例如,门户可以是进入由对象存储服务160存储的数据的桶、文件夹、卷等的唯一网络路径。每个门户可以与一个或多个授权用户相关联,并且指示哪个(些)所有者提交的代码或哪个(些)所有者提交的代码系列被置于通过门户进行操作(例如,get、put、list等)的i/o路径中。例如,
对于数据对象的门户a,授权用户可以包括用户a和用户b,并且放置在到数据对象的get路径中的所有者提交代码可以包括数据访问控制代码和数据处理代码,该数据访问控制代码检查是否允许请求授权用户访问所请求的数据对象,该数据处理代码将数据对象转换成具有较小文件大小的另一格式。此外,对于门户a,放置在到数据对象的put路径中的所有者提交代码可包括在将所请求的数据写入数据对象之前检查恶意软件的病毒扫描代码。可以使用本文所描述的技术来实现授权用户、i/o操作和代码放置的任何其他组合。在一些实施方案中,每个门户被分配不同的标识符(例如,dns名称),并且服务160使用该标识符来识别通过其请求给定数据对象的特定门户。
[0144]
在框1108,服务160使用数据请求(或其元数据)、所请求的数据对象(或其元数据)或两者来执行数据访问控制代码。数据访问控制代码能够访问与数据请求相关联的元数据和与所请求的数据对象相关联的元数据,并且基于所访问的元数据来准许或拒绝数据请求(或者在这之前采取其他步骤,诸如执行数据操纵)。例如,数据访问控制代码可以在许可表中查找请求用户,以确定请求用户是否有许可来访问所请求的数据对象。作为另一个示例,数据访问控制代码可以通过访问政府许可数据库来确定请求用户是否具有所需的安全许可,确定数据请求是否包括任何禁止的关键字,并且通过访问与所请求的数据对象相关联的元数据以及访问指示请求用户的订阅时间窗口的订阅数据库(例如,允许访问小于1个月大的文档,允许访问大于5年大的图像,允许写入或修改小于1周大的数据,等等)来确定所请求的数据对象上的时间戳是否在时间窗口内。基于这些确定,数据访问控制代码可以确定请求用户是否被允许访问所请求的数据对象。
[0145]
作为另一个示例,数据访问控制代码可以确定所请求的数据对象是35天大(例如,通过访问与所请求的数据对象相关联的元数据),并且确定请求访问数据对象的用户可以访问比30天早的所有数据对象(例如,通过在数据访问表中查找数据请求中指示的请求用户的身份),并且进而基于该确定,准许对所请求的数据对象的访问。作为另一个示例,用户a可被给予30天窗口以访问由服务160存储(并且由数据所有者拥有)的任何数据,并且用户b可被给予对超过1年大的数据的存档访问。在从用户a接收到对数据对象的请求时,可以执行放置在到数据对象的i/o路径中的数据访问控制代码,并且基于所请求的数据对象是3个月大,数据访问控制代码可以拒绝用户a的请求。类似地,在从用户b接收到对数据对象的请求时,可以执行放置在到数据对象的i/o路径中的数据访问控制代码,并且基于所请求的数据对象是3个月大,数据访问控制代码可以拒绝用户b的请求。作为另一个示例,数据访问控制代码可以确定用户a仅具有对所请求的数据对象的一部分(例如,与诸如“合法”或“汽车”的特定关键字相关的部分)的访问权,并且仅将所请求的数据对象的该部分返回给请求用户(例如,用关键字“合法”和“汽车”标记的所有数据)。作为另一示例,数据访问控制代码可以访问用户访问表,并且基于用户访问表确定用户a可以访问所请求的数据对象的所有列,并且返回数据对象中的所有列。作为另一示例,数据访问控制代码可以访问用户访问表,并且基于用户访问表确定用户b仅能访问包括在数据对象中的五列中的前三列,并且返回数据对象的前三列。
[0146]
尽管作为示例描述了基于时间窗口准许或拒绝访问,但是可以根据任何其它标准做出准许或拒绝访问的决定,诸如请求用户的先前访问(例如,其中用户仅可以访问数据3次,并且在用户已经访问数据三次之后,将拒绝同一用户对数据的后续请求)、关键字(例
如,其中用户仅可以访问与关键字“书”有关的数据,并且仅在请求限于与关键字“书”有关的数据的情况下才准许用户的请求)、与请求用户相关联的地理区域(例如,其中仅来自美国的用户可以访问数据并且由美国之外的用户提供的请求将被拒绝)、用户的账户状态(例如,其中仅高级或vip用户可以访问数据,并且由不具有高级或vip账户的用户提供的请求将被拒绝)、与请求的数据对象相关联的安全级别(例如,在请求用户被允许访问与安全级别3、4或5相关联的数据对象但不被允许访问与安全级别1或2相关联的数据对象的情况下)、所请求的数据对象的内容(例如,在不允许请求用户访问包含单词“机密”的数据对象的情况下)等。尽管在图11中未示出,但是除了上述定制数据访问控制代码或作为其替代,服务160可以使默认数据访问控制代码被执行。在一些实施方案中,此类默认数据访问控制代码在定制数据访问控制代码执行之前被执行。在其他实施方案中,此类默认数据访问控制代码在定制数据访问控制代码执行之后被执行。
[0147]
在一些实施方案中,根据所调用的特定i/o请求方法,数据访问控制代码可以提供不同的访问级别。例如,数据访问控制代码可以确定请求用户有许可来list数据对象给定桶的内容,即使请求用户没有许可get给定桶中的各个数据对象。作为另一个示例,数据访问控制代码可以确定请求用户有许可来list数据对象给定桶的内容,并且尽管请求用户没有许可来get原始格式的各个数据对象,请求用户仍有许可来get给定桶中各个数据对象的一部分或各个数据对象的修改(例如,编辑)版本。在其他实施方案中,数据访问控制代码提供相同级别的访问,而不考虑所调用的特定i/o请求方法。例如,只有请求用户也有许可来get桶中各个数据对象时,数据访问控制代码才可以确定请求用户有许可来list数据对象桶的内容。作为另一个示例,只有当请求用户至少有许可来get桶中数据对象的一部分或数据对象的修改(例如,编辑)版本时,数据访问控制代码才可以确定请求用户有许可来list数据对象桶的内容。作为另一个示例,数据访问控制代码可以确定请求用户有许可来仅list数据对象桶中的部分内容(例如,包含在桶中的数据对象1-6的数据对象1-4),并确定请求用户有许可来get数据对象的更小子集(例如,请求用户有许可来list的数据对象1-4的数据对象1-3)。
[0148]
例程1100然后前进到框1110,其中服务160返回数据访问决定值,其指示请求用户是否被允许访问所请求的数据对象(或者与请求用户相关联的访问级别)。尽管在图11中未示出,但是在一些实施方案中,服务160可以基于数据访问决定值返回特定于与请求用户相关联的访问类型的所请求数据对象的版本。例如,基于请求用户对所请求的数据对象原样具有完全访问权,服务160将所请求的数据对象返回至请求用户。虽然在图11中未示出,但是同一请求用户可以在一周后请求同一数据对象,并且服务160可以确定请求用户不再能够访问所请求的数据对象(例如,由于请求用户的访问权限的改变,由于请求用户对数据对象的访问已经超过分配给请求用户的阈值计数,由于与数据对象相关联的时间戳不在允许请求用户访问数据对象的时间窗口内,等等),并拒绝后续的数据请求。可替代地,根据请求用户提交数据请求的上下文,可以向请求用户提供不同的粒度级别的数据对象的不同片段。因此,通过允许数据对象的所有者将数据访问控制代码置于数据对象的i/o路径中,所有者可以动态地控制对数据对象的访问。这样做可能特别有利于具有许可设置频繁改变的大量用户的对象存储服务。例如,利用对象存储服务来提供他或她订阅的数据订阅服务的数据所有者/提供者将发现,当新订阅者签约时,现有订阅者改变其订阅级别(例如,基本访
问到高级访问,或从付费访问到免费访问),以及从各个订阅者接收数据请求的上下文改变(例如,接收数据请求的时间、先前访问的计数、限制数据请求的关键字等)时,必须更新各个订阅者的许可设置是繁重的。相反,本文描述的技术允许此类数据所有者/提供者编写数据访问控制代码并将其置于i/o路径中,并使数据访问控制代码基于变化中的访问级别和上下文动态地确定准许还是拒绝数据请求。例程1100然后结束于框1112。
[0149]
参考图12,描述了执行所有者提交(或所有者指定)的数据访问控制代码的另一实施方案的说明性例程1200,其中基于与请求用户相关联的访问级别来执行另外的数据操纵。例程1200说明性地由图1的对象存储服务160实现。
[0150]
例程1200开始于框1202,其中服务160从请求用户获得访问由服务160存储的数据对象的请求,并且在框1204,服务160以类似于那些参考图11描述的方式来执行插入到与该请求相关联的i/o路径中的数据访问控制代码。
[0151]
在框1206,服务160确定与请求用户相关联的访问级别。例如,数据访问控制代码的执行可以提供与请求用户相关联的访问级别的指示。如果服务160确定请求用户对所请求的数据具有完全访问权,则在框1208,服务160返回所请求的数据。如果服务160确定请求用户不能访问所请求的数据,则在框1210,服务160拒绝该请求。尽管图12的示例示出了三个访问级别(例如,完全访问、修改访问和无访问),但是可以利用任何其他数量的访问级别来提供所有者提交的代码的访问级别特定的执行(例如,过滤、编辑、处理、聚合、加密、概括或模糊所请求的数据对象)。
[0152]
如果服务160确定请求用户已经修改了访问(例如,不同于完全访问和禁止访问的访问级别),则在框1212,服务160使得一个或多个数据操纵任务代码在所请求的数据上执行。例如,如图10a-图10b所示,服务160可以生成代码执行请求,并将代码执行请求传输给按需代码执行系统120。数据操纵任务代码可被配置为(i)移除数据对象的一部分(例如,段、列、行、页等),(ii)通过聚合数据对象的至少一部分来生成聚合数据,使得用户特定输出包括未包括在数据对象本身中的聚合数据,并且也不包括原始数据对象中包括的至少一些数据,或者(iii)通过数据的加密或编辑将数据对象的一部分渲染为不可理解的。在一些情况下,仅在确定数据请求不满足时间限制(例如,请求用户具有已经过期的尝试访问,因此仅提供文档的第一页)、地理限制(例如,可以处理来自美国外部的请求以减小所请求的图像对象的文件大小)、关键字限制(例如,特定关键字的存在或不存在可以使得所返回的数据对象被加密)、对先前访问的数量/量的限制(例如,在请求用户已经用尽他或她对数据对象的1次无限制访问之后,对数据对象的后续请求导致数据对象的编辑版本)或参考图11描述的其他标准中的一个或多个时,执行数据操纵。在其他情况下,无论是否满足此类限制/标准,均执行数据操纵。尽管图12中未示出,但是在一些实施方案中,返回至请求用户的数据分为多个阶段被发送给用户。例如,响应于在框1206确定请求用户对所请求的数据对象的访问级别,服务160可以向请求用户发送一个或多个http报头(第一阶段),以指示已经做出了成功的访问请求决定(或者已经发生了授权失败),并且当所请求的数据对象准备好被发送给请求用户时(在框1208没有数据操纵,或者在框1214有数据操纵),服务160在一个或多个http响应中向请求用户发送所请求的数据(第二阶段)。在一些实施方案中,在发起另外数据操纵代码的执行之前,服务160向请求用户发送一个或多个http报头。在其他实施方案中,在发起另外数据操纵代码的执行之后但在执行完成之前,服务160向请求用户发送
一个或多个http报头。在其他实施方案中,在另外数据操纵代码的执行完成之后,服务160向请求用户发送一个或多个http报头。通过迅速地向请求用户指示是否已经做出访问授权决定,服务160可以防止请求用户发送额外的请求以尝试获得对所请求的数据对象的访问(例如,基于来自服务160的响应延迟),从而消除或减少服务160的有价值的处理和网络资源在不必要的请求上的消耗。
[0153]
在框1214,服务160将数据操纵的输出返回至请求用户。在一些实施方案中,对所请求的数据对象执行的数据操纵对请求用户是透明的,使得请求用户不能确定所请求的数据对象是在有还是无数据操纵的情况下被返回。在其他实施方案中,请求用户可以确定所请求的数据对象是在有还是无数据操纵的情况下被返回(例如,基于与返回的数据一起输出的指示符或诸如“预览”或“在此订阅以获得完整版本”的消息)。尽管本文将数据访问控制代码和数据操纵任务代码描述为示例,但是其他类型的用户代码也可以用来进一步定制服务160。例如,数据所有者/提供者可以在put和get路径中插入跟踪代码,该跟踪代码监视将数据上传到服务160和从服务160下载数据的用户的身份,并且生成可以存储在服务160或另一外部日志记录服务内的分析数据(例如,用户a的发布被其他用户下载的次数、用户b已经下载的文件的数目等)。在一些实施方案中,可以基于分析数据向用户提供通知、信用或奖励(例如,每当用户的数据被另一用户访问时,可以向用户提供信用,或者每当用户访问另一用户的数据时,可以向用户收取费用)。因此,通过允许数据对象的所有者在数据对象的i/o路径中放置某些代码(例如,所有者提交的代码),所有者可以动态地对数据对象进行数据操纵,并向请求用户提供用户特定输出数据。这样做对于具有大量用户的对象存储服务可能是特别有利的,这些用户具有不同的访问级别和不同类型的输出(例如,一些用户具有对原始数据的访问权,一些用户仅具有对原始数据的预览版本的访问权,一些用户仅具有对原始数据的聚合版本的访问权,一些用户仅具有对原始数据的子集的访问权,等等)。例如,利用对象存储服务来提供他或她的订阅的数据订阅服务的数据所有者/提供者将发现,必须配置对象存储服务以向各个订阅者提供订阅者特定类型的输出并且在各个订阅者的访问级别改变时更新配置是繁重的。相反,本文描述的技术允许此类数据所有者/提供者写入数据访问控制代码和一个或多个数据操纵代码,并将代码置于i/o路径中,并使代码基于改变的访问级别和上下文动态地生成要返回给订阅者的所请求的数据对象的订阅者特定版本(例如,未修改的、编辑的、过滤的、加密的等)。然后,例程1200结束于框1216。
[0154]
参考图13,描述了说明性交互,用于使客户端装置102a能够指定代码执行环境规则,以便响应于来自请求用户的i/o请求而控制用于在按需代码执行系统120上执行的各种函数的代码执行环境。
[0155]
图13的交互开始于(1),其中客户端装置102a生成代码执行环境规则。对象存储服务160可以提供用于指定一个或多个代码执行环境规则的用户接口。例如,当向服务160提供或指定(例如,由代码的作者、代码的所有者或请求用户)代码时,可以结合特定代码来指定代码执行环境规则。在(2),客户端装置102a向服务160的前端162提交代码执行环境规则,并且在(3),前端162使得代码执行环境规则被存储在对象数据存储区166中。
[0156]
在(4),前端162使得一个或多个所有者提交的代码(例如,数据访问控制代码、数据操纵代码等)根据代码执行环境规则在按需代码执行系统120上被执行。例如,工作者管理器140可以获取执行此类所有者提交的代码所需的计算能力(例如,在其上创建的虚拟机
实例或容器),并且根据代码执行环境规则来配置计算能力,使得使用计算能力执行的用户代码被给予附加的特权(例如,访问外部服务或请求用户的私有资源)或以某种方式被进一步限制(例如,通过禁用与外部资源建立网络连接、限制代码所使用的计算资源的量、限制执行代码所花费的时间量等)。在一些实施方案中,可能已经为给定的代码执行(例如由代码的作者、代码的所有者、请求用户或其任何组合)指定了代码执行环境规则的两个或更多个模板。在此类实施方案中,可以根据特定的优先级顺序(例如,应用规则模板的顺序,以及规则模板是否被允许修改或覆盖另一个规则模板)来应用模板。例如,由代码作者或请求用户指定的规则模板可能不被允许修改或覆盖由数据所有者/提供者指定的规则模板。作为另一个示例,首先应用由作者指定的规则模板,然后应用由数据所有者/提供者指定的规则模板,只要该模板不修改由作者指定的规则模板,然后应用由请求用户指定的规则模板,只要该模板不修改由作者指定的规则模板或由数据所有者/提供者指定的规则模板。此外,在一些实施方案中,作为执行为系统120指定的一个或多个代码的操作的一部分,按需代码执行系统120可以重新使用根据在(2)处指定的规则配置的执行环境,或者高速缓存返回至服务160的结果。
[0157]
下面将参考图14对代码执行环境规则如何用于控制或修改一个或多个所有者提交的函数的执行环境的其他细节进行更详细地描述。
[0158]
参考图14,描述了用于定制响应于来自请求用户的i/o请求而执行的一个或多个代码执行的执行环境的说明性例程1400。例程1400说明性地由图1的对象存储服务160实现。
[0159]
例程1400开始于框1402,其中服务160接收代码执行环境规则来控制用户代码执行。例如,服务160可以提供用于生成或选择代码执行环境规则的用户接口或api。用户接口或api还可以允许所有者为不同的所有者提交的代码生成或选择不同的代码执行环境规则集。
[0160]
代码执行环境规则可以指定与响应于来自请求用户的i/o请求而执行的一个或多个代码执行相关联的一个或多个特权或限制。例如,代码执行环境规则可指定对所有者定义的代码的执行的持续时间的时间限制、对由所有者定义的代码的执行所使用的计算资源的量的资源限制、或要分配给所有者定义的代码要在其上执行的虚拟机实例的计算资源的量。在一些情况下,代码执行环境规则可以指定代码执行能够访问的一个或多个服务,或者访问此类服务(例如,日志记录服务、数据库服务、存储服务等)所需的参数或凭证(例如,数据对象所有者的凭证或请求用户的凭证)。在其他情况下,代码执行环境规则可以指定代码执行无法访问的一个或多个服务(例如,防止代码执行与不安全资源建立连接)。
[0161]
在框1404,服务160接收将i/o方法(例如,put、get、list等)应用到由服务160存储的特定数据的请求。在一些情况下,在应用i/o方法的请求中接收代码执行环境规则。在其他情况下,代码执行环境规则与该请求分开提供。
[0162]
在框1406,服务160使得已经被插入到与请求相关联的i/o路径中的一个或多个用户代码(例如,所有者提交的代码,诸如数据访问控制代码、数据操纵代码、分析数据生成代码等)根据代码执行环境规则而被执行。例如,基于代码执行环境规则,代码执行可访问外部日志记录服务,并将与代码执行相关联的分析数据存储到日志记录服务。作为另一个示例,基于代码执行环境规则,代码执行可访问外部许可数据库,并确定请求用户是否能够访
问所请求的数据对象。作为又一示例,基于代码执行环境规则,代码执行可以被禁止访问任何外部资源。在框1408,服务160将所请求的i/o方法应用于代码执行的结果。例程1400然后结束于框1410。
[0163]
其他考虑事项
[0164]
在由一个或多个计算机或处理器执行的软件代码模块中并由软件代码模块完全自动化体现上述所有方法和过程。所述代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。所述方法中的一些或所有可以可替代地在专用计算机硬件中体现。
[0165]
除非另外特别说明,否则如“可”、“可以”、“可能”或“也许”等的条件语言在上下文中通常应理解为用于表示尽管其它实施方案不包括,但某些实施方案包括某些特征、元件或步骤。因此,这种条件语言通常不旨在暗示无论如何特征、元件或步骤都是一个或多个实施方案必需的,或者一个或多个实施方案必然包括用于在有或没有其它输入或提示的情况下,判定这些特征、元件或步骤是否包括在或将要在任何特定实施方案中执行的逻辑。
[0166]
除非另有特别说明,否则分离性语言诸如短语“x、y或z中的至少一个”在上下文中应理解为通常使用的情况以表示项目、项等可以是x、y或z或其任何组合(例如,x、y或z)。因此,此类分离性语言一般不旨在并且将不应暗示某些实施方案要求x中的至少一者、y中的至少一者或z中的至少一者分别存在。
[0167]
除非另外明确规定,否则诸如

一(a)’或

一(an)’等冠词一般应理解为包括一个或多个所描述的项目。因此,诸如“被配置为
……
的装置”等措辞意在包括一个或多个所述装置。此类一个或多个所述装置还可共同地被配置为执行所陈述的叙述。例如,“被配置为执行叙述a、b和c的处理器”可包括与被配置为执行叙述b和c的第二处理器联合工作的被配置为执行叙述a的第一处理器。
[0168]
术语“或”通常应该理解为包含性的,而不是排他性的。因此,包含“a、b或c”的集应该被解释为包括包含a、b和c的组合的集。
[0169]
在本文中描述的或在附图中示出的流程图中的任何例程描述、元件或框应当被理解为潜在地表示代码的模块、段或部分,所述代码包括用于实现例程中的特定逻辑功能或元件的一个或多个可执行指令。替代实现方式包括在本文中所述实施方案的范围内,其中如本领域中的技术人员所理解的那样,根据所涉及的功能,元件或功能可删除、或不按照所示出或讨论的顺序执行,包括基本上同步执行或逆序执行。
[0170]
应当强调的是,可以对上述实施方案做出许多变化和修改,这些变化和修改的元件应当被理解为是在其他可接受的示例之中。本文中所有此类修改和变化均旨在包括在本公开的范围内,并且由本文所附的权利要求保护。
[0171]
示例条款
[0172]
鉴于以下示例条款,可以对本公开的实施方案的示例进行描述。
[0173]
条款1:一种用于提供存储在对象存储服务上的数据对象的定制数据操纵的系统,所述系统包括:一个或多个数据存储区,其包括:数据对象;以及指定对输入/输出(io)操作的修改以包括在提供对执行所述io操作的请求的响应之前执行所有者定义的数据访问控制代码的信息;一个或多个处理器,其被配置有计算机可执行指令以:从客户端装置获得用于检索所述数据对象的数据请求,其中所述数据请求指示所述数据对象和与所述数据请求
相关联的请求用户;至少基于所述数据请求和所述数据对象中的一者或两者来确定元数据;至少基于所确定的元数据,在按需代码执行系统上实现所述所有者定义的数据访问控制代码的执行;从所述所有者定义的数据访问控制代码的执行获得需要对所述数据对象执行数据操纵的指示;在所述按需代码执行系统上实现针对所述数据对象的所有者定义的数据操纵代码的执行;从所述所有者定义的数据操纵代码的执行获得表示所述请求用户可访问的所述数据对象的版本的用户特定输出数据;以及将来自所述所有者定义的数据操纵代码的执行的所述用户特定输出数据作为数据对象返回到客户端装置。
[0174]
条款2:如条款1所述的系统,其中执行所述所有者定义的数据操纵代码包括移除所述数据对象的一部分,并且生成不包括所述对象的被移除部分的用户特定输出。
[0175]
条款3:如条款1所述的系统,其中执行所述所有者定义的数据操纵代码包括通过聚合所述数据对象的至少一部分来生成聚合数据,并且生成所述用户特定输出,所述用户特定输出(i)包括所述数据对象中未包括的聚合数据,(ii)不包括所述数据对象中包括的至少一些数据。
[0176]
条款4:如条款1所述的系统,其中执行所述所有者定义的数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的时间限制,并且其中执行所述所有者定义的数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0177]
条款5:如条款1所述的系统,其中执行所述所有者定义的数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的地理限制,并且其中执行所述所有者定义的数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0178]
条款6:如条款1所述的系统,其中执行所述所有者定义的数据访问控制代码包括确定所述请求用户已经访问所述数据对象超过阈值次数,并且其中执行所述所有者定义的数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0179]
条款7:一种计算机实现的方法,其包括:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行数据访问控制代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示所述数据对象和与所述数据请求相关联的请求用户;至少基于与所述数据请求相关联的数据和与所述数据对象相关联的数据中的一者或两者来执行所述数据访问控制代码;至少基于所述数据访问控制代码的执行的输出,针对所述数据对象执行数据操纵代码;以及向所述客户端装置返回数据操纵代码的执行的用户特定输出作为数据对象。
[0180]
条款8:如条款7所述的计算机实现的方法,其中执行所述数据操纵代码包括移除所述数据对象的一部分,并且生成不包括所述对象的被移除部分的所述用户特定输出。
[0181]
条款9:如条款7所述的计算机实现的方法,其中执行所述数据操纵代码包括通过聚合所述数据对象的至少一部分来生成聚合数据,并且生成所述用户特定输出,所述用户特定输出(i)包括所述数据对象中未包括的聚合数据,和(ii)不包括所述数据对象中包括的至少一些数据。
[0182]
条款10:如条款7所述的计算机实现的方法,其中执行所述数据操纵代码包括将所
述数据对象的一部分渲染为不可理解的;并且生成包括被渲染为不可理解的数据对象的所述部分的用户特定输出。
[0183]
条款11:如条款7所述的计算机实现的方法,其中执行所述数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的时间限制,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0184]
条款12:如条款7所述的计算机实现的方法,其中执行所述数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的地理限制,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0185]
条款13:如条款7所述的计算机实现的方法,其中执行所述数据访问控制代码包括确定所述请求用户已经访问所述数据对象超过阈值次数,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0186]
条款14:一种存储指令的非暂时性计算机可读介质,所述指令在被计算系统执行时使所述计算系统执行包括以下项的操作:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行数据访问控制代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示数据对象和与所述数据请求相关联的请求用户;至少基于与所述数据请求和所述数据对象中的一者或两者相关联的元数据来执行所述数据访问控制代码;至少基于数据访问控制代码执行的输出,对数据对象执行数据操纵代码;和将数据操纵代码执行的输出作为数据对象返回至客户端装置。
[0187]
条款15:如条款14所述的非暂时性计算机可读介质,其中执行所述数据操纵代码包括移除所述数据对象的一部分;和生成不包括所述对象的被移除部分的用户特定输出。
[0188]
条款16:如条款14所述的非暂时性计算机可读介质,其中执行所述数据操纵代码包括通过聚合所述数据对象的至少一部分来生成聚合数据,并且生成所述用户特定输出,所述用户特定输出(i)包括所述数据对象中未包括的聚合数据,和(ii)不包括所述数据对象中包括的至少一些数据。
[0189]
条款17:如条款14所述的非暂时性计算机可读介质,其中执行所述数据操纵代码包括将所述数据对象的一部分渲染为不可理解的;和生成包括被渲染为不可理解的数据对象的所述部分的用户特定输出。
[0190]
条款18:如条款14所述的非暂时性计算机可读介质,其中执行所述数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的时间限制,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0191]
条款19:如条款14所述的非暂时性计算机可读介质,其中执行所述数据访问控制代码包括确定所述数据请求不满足对所述请求用户访问所述数据对象施加的地理限制,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0192]
条款20:如条款14所述的非暂时性计算机可读介质,其中执行所述数据访问控制
代码包括确定所述请求用户已经访问所述数据对象超过阈值次数,并且其中执行所述数据操纵代码包括通过移除、编辑、过滤、聚合、混淆、加密或处理所述数据对象的至少一部分来生成不同于所述数据对象的用户特定输出。
[0193]
条款21:一种用于提供对存储在对象存储服务上的数据对象进行定制访问的系统,所述系统包括:一个或多个数据存储区,其包括:数据对象;以及指定对输入/输出(io)操作的修改以包括在提供对执行所述io操作的请求的响应之前执行所有者定义的数据访问控制代码的信息;一个或多个处理器,其被配置有计算机可执行指令以:从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示数据对象和与所述数据请求相关联的请求用户;至少基于所述数据请求和所述数据对象中的一者或两者来确定元数据;至少基于所确定的元数据,在按需代码执行系统上实现所有者定义的数据访问控制代码的执行;从所述所有者定义的数据访问控制代码的执行获得允许所述请求用户访问所述数据对象的指示;至少基于从所述所有者定义的数据访问控制代码的执行获得的所述指示,生成表示所述请求用户可访问的所述数据对象的版本的用户特定输出数据;以及将所述用户特定输出数据作为所述数据对象返回至所述客户端装置。
[0194]
条款22:如条款21所述的系统,其中实现所述所有者定义的数据访问控制代码的执行包括确定所述数据请求满足对请求用户访问数据对象施加的时间限制,并且生成包括所述数据对象的全部的用户特定输出数据。
[0195]
条款23:如条款21所述的系统,其中实现所述所有者定义的数据访问控制代码的执行包括确定所述请求用户能够访问所述数据对象的第一部分,但不能访问所述数据对象的第二部分,并且生成包括所述数据对象的所述第一部分但是不包括所述数据对象的所述第二部分的用户特定输出数据。
[0196]
条款24:如条款21所述的系统,其中实现所述所有者定义的数据访问控制代码的执行包括确定所述请求用户与允许所述请求用户访问所述数据对象的地理区域相关联,以及生成包括所述数据对象的全部的所述用户特定输出数据。
[0197]
条款25:如条款21所述的系统,其中所述所有者定义的数据访问控制代码被配置为访问用户访问表,所述用户访问表针对所述对象存储服务的多个用户中的每个相应用户指示可由所述相应用户访问的所述数据对象的一个或多个部分。
[0198]
条款26:一种计算机实现的方法,其包括:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行数据访问控制代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示数据对象和与所述数据请求相关联的请求用户;至少基于与数据请求相关联的数据和与数据对象相关联的数据中的一者或两者来执行数据访问控制代码;从所述数据访问控制代码的执行获得允许所述请求用户访问所述数据对象的指示;至少基于从所述数据访问控制代码的执行获得的所述指示,生成用户特定输出数据;以及将所述用户特定输出数据作为所述数据对象返回至所述客户端装置。
[0199]
条款27:如条款26所述的计算机实现的方法,其还包括高速缓存所述指示,使得从所述客户端装置检索所述数据对象的后续数据请求不触发所述数据访问控制代码的执行。
[0200]
条款28:如条款26所述的计算机实现的方法,其中执行所述数据访问控制代码的指示指示所述数据访问控制代码将作为授权路径的一部分被执行,并且不包含对任何特定
io路径的引用。
[0201]
条款29:如条款26所述的计算机实现的方法,其中所生成的用户特定输出数据包括所述数据对象的全部。
[0202]
条款30:如条款26所述的计算机实现的方法,其中执行所述数据访问控制代码包括确定所述数据请求满足对所述请求用户访问所述数据对象施加的时间限制,并且其中所生成的用户特定输出数据包括所述数据对象的全部。
[0203]
条款31:如条款26所述的计算机实现的方法,其中执行数据访问控制代码包括确定所述请求用户能够访问所述数据对象的第一部分,但不能访问所述数据对象的第二部分,并且其中所生成的用户特定输出数据包括所述数据对象的所述第一部分,但不包括所述数据对象的所述第二部分。
[0204]
条款32:如条款26所述的计算机实现的方法,其中执行所述数据访问控制代码包括确定所述请求用户与允许所述请求用户访问所述数据对象的地理区域相关联,并且其中所生成的用户特定输出数据包括所述数据对象的全部。
[0205]
条款33:如条款26所述的计算机实现的方法,其还包括:经由第一门户获得所述数据请求;确定经由所述第一门户接收的数据请求与所述数据访问控制代码相关联;以及执行所述数据访问控制代码。
[0206]
条款34:如条款33所述的计算机实现的方法,其还包括:经由不同于所述第一门户的第二门户接收来自第二客户端装置的第二数据请求;确定经由所述第二门户接收的数据请求不与所述数据访问控制代码相关联;以及响应于所述第二数据请求,至少基于执行默认数据访问控制代码而不执行所述数据访问控制代码,向所述第二客户端装置返回用户特定输出数据。
[0207]
条款35:一种存储指令的非暂时性计算机可读介质,所述指令在被计算系统执行时使所述计算系统执行包括以下项的操作:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行数据访问控制代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示数据对象和与所述数据请求相关联的请求用户;至少基于与数据请求相关联的数据和与数据对象相关联的数据中的一者或两者来执行数据访问控制代码;从所述数据访问控制代码的执行获得允许所述请求用户访问所述数据对象的指示;至少基于从所述数据访问控制代码的执行获得的所述指示,生成用户特定输出数据;以及将所述用户特定输出数据作为所述数据对象返回至所述客户端装置。
[0208]
条款36:如条款35所述的非暂时性计算机可读介质,其中执行所述数据访问控制代码包括确定所述数据请求满足对所述请求用户访问数据对象施加的时间限制。
[0209]
条款37:如条款35所述的非暂时性计算机可读介质,其中执行数据访问控制代码包括确定所述请求用户能够访问所述数据对象的第一部分,但不能访问所述数据对象的第二部分,并且其中所生成的用户特定输出数据包括所述数据对象的所述第一部分,但不包括所述数据对象的所述第二部分。
[0210]
条款38:如条款35所述的非暂时性计算机可读介质,其中执行所述数据访问控制代码包括确定所述请求用户与允许所述请求用户访问所述数据对象的地理区域相关联。
[0211]
条款39:如条款35所述的非暂时性计算机可读介质,其中操作还包括:经由第一门户获得所述数据请求;确定经由所述第一门户接收的数据请求与所述数据访问控制代码相
关联;以及执行所述数据访问控制代码。
[0212]
条款40:如条款39所述的非暂时性计算机可读介质,其中操作还包括:经由不同于所述第一门户的第二门户接收来自第二客户端装置的第二数据请求;确定经由所述第二门户接收的数据请求不与所述数据访问控制代码相关联;以及响应于所述第二数据请求,向所述第二客户端装置返回用户特定输出数据而不执行所述数据访问控制代码。
[0213]
条款41:一种用于为对象存储服务提供定制代码执行环境的系统,所述系统包括:一个或多个数据存储区,其包括:数据对象以及指定对输入/输出(io)操作的修改以包括响应于rvtfio操作的请求而执行所有者定义的代码的信息;一个或多个处理器,其被配置有计算机可执行指令以:从客户端装置获得用于检索所述数据对象的数据请求,其中所述数据请求指示所述数据对象和与所述数据请求相关联的请求用户;确定由不同于所述请求用户的与所述数据对象相关联的所有者指定的一个或多个代码执行环境规则;至少基于所述一个或多个代码执行环境规则来在按需代码执行系统上实现所述所有者定义的代码的执行;从所述所有者定义的代码的执行获得表示所述请求用户可访问的所述数据对象的版本的用户特定输出数据;以及将来自所有者定义的代码的执行的所述用户特定输出数据作为数据对象返回至客户端装置。
[0214]
条款42:如条款41所述的系统,其中至少基于所述一个或多个代码执行环境规则来实现所述所有者定义的代码的执行包括对所述所有者定义的代码的执行设置由所述一个或多个代码执行环境规则定义的一个或多个限制。
[0215]
条款43:如条款42所述的系统,其中所述一个或多个限制包括对所述所有者定义的代码的执行的持续时间的时间限制和对由所述所有者定义的代码的执行所使用的计算资源的量的资源限制中的一者或两者。
[0216]
条款44:如条款41所述的系统,其中至少基于所述一个或多个代码执行环境规则来实现所述所有者定义的代码的所述执行包括允许所述所有者定义的代码的执行以建立与外部服务的网络连接。
[0217]
条款45:如条款44所述的系统,其中所述外部服务是(i)存储与所述所有者定义的代码的执行相关联的日志记录信息的日志记录服务和(ii)存储与所述请求用户相关联的许可信息的数据库服务中的一者。
[0218]
条款46:如条款41所述的系统,其中至少基于所述一个或多个代码执行环境规则来实现所述所有者定义的代码的执行包括至少基于所述一个或多个代码执行环境规则来获取虚拟机实例,以及在所获取的虚拟机实例上执行所述所有者定义的代码。
[0219]
条款47:一种计算机实现的方法,其包括:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行用户代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示所述数据对象和与所述数据请求相关联的请求用户;确定与所述数据请求相关联的一个或多个代码执行环境规则;至少基于所述一个或多个代码执行环境规则来执行所述用户代码;从所述用户代码的执行获得执行结果;以及至少基于执行结果,将用户特定输出数据作为数据对象返回至所述客户端装置。
[0220]
条款48:如条款47所述的计算机实现的方法,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括对所述用户代码的执行设置由所述一个或多个代码执行环境规则定义的一个或多个限制。
[0221]
条款49:如条款48所述的计算机实现的方法,其中所述一个或多个限制包括对所述用户代码的执行的持续时间的时间限制。
[0222]
条款50:如条款8所述的计算机实现的方法,其中所述一个或多个限制包括对由所述用户代码的执行所使用的计算资源的量的资源限制。
[0223]
条款51:如条款47所述的计算机实现的方法,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括允许所述用户代码的执行以建立与外部服务的网络连接。
[0224]
条款52:如条款51所述的计算机实现的方法,其中所述外部服务是(i)存储与所述所有者定义的代码的执行相关联的日志记录信息的日志记录服务和(ii)存储与所述请求用户相关联的许可信息的数据库服务中的一者。
[0225]
条款53:如条款47所述的计算机实现的方法,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括至少基于所述一个或多个代码执行环境规则来获取虚拟机实例,并在所获取的虚拟机实例上执行所述用户代码。
[0226]
条款54:如条款47所述的计算机实现的方法,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括根据由所述用户代码的作者指定的第一规则模板和由所述数据对象的所有者指定的第二规则模板两者来执行所述用户代码。
[0227]
条款55:一种存储指令的非暂时性计算机可读介质,所述指令在被计算系统执行时使所述计算系统执行包括以下项的操作:存储数据对象和结合与所述数据对象相关联的一个或多个输入/输出(io)操作执行用户代码的指示;从客户端装置获得检索所述数据对象的数据请求,其中所述数据请求指示数据对象和与所述数据请求相关联的请求用户;确定与数据请求相关联的一个或多个代码执行环境规则;至少基于一个或多个代码执行环境规则来执行用户代码;从所述用户代码的执行获得执行结果;以及至少基于所述执行结果,将用户特定输出数据作为所述数据对象返回至所述客户端装置。
[0228]
条款56:如条款55所述的非暂时性计算机可读介质,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括对所述用户代码的执行设置由所述一个或多个代码执行环境规则定义的一个或多个限制。
[0229]
条款57:如条款56所述的非暂时性计算机可读介质,其中所述一个或多个限制包括对所述用户代码的执行的持续时间的时间限制。
[0230]
条款58:如条款56所述的非暂时性计算机可读介质,其中一个或多个限制包括对用户代码的执行所使用的计算资源量的资源限制。
[0231]
条款59:如条款55所述的非暂时性计算机可读介质,其中至少基于所述一个或多个代码执行环境规则来执行所述用户代码包括允许所述用户代码的执行以建立与外部服务的网络连接。
[0232]
条款60:如条款59所述的非暂时性计算机可读介质,其中所述外部服务是(i)存储与所述所有者定义的代码的执行相关联的日志记录信息的日志记录服务和(ii)存储与所述请求用户相关联的许可信息的数据库服务中的一者。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1