CN114586011B - 将所有者指定的数据处理流水线***到对象存储服务的输入/输出路径 - Google Patents
将所有者指定的数据处理流水线***到对象存储服务的输入/输出路径 Download PDFInfo
- Publication number
- CN114586011B CN114586011B CN202080067195.5A CN202080067195A CN114586011B CN 114586011 B CN114586011 B CN 114586011B CN 202080067195 A CN202080067195 A CN 202080067195A CN 114586011 B CN114586011 B CN 114586011B
- Authority
- CN
- China
- Prior art keywords
- data
- request
- execution
- code
- owner
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 title claims description 50
- 238000000034 method Methods 0.000 claims abstract description 185
- 238000012986 modification Methods 0.000 claims description 40
- 230000004048 modification Effects 0.000 claims description 40
- 230000004044 response Effects 0.000 claims description 37
- 230000000977 initiatory effect Effects 0.000 claims description 34
- 238000013475 authorization Methods 0.000 claims description 27
- 238000004891 communication Methods 0.000 claims description 25
- 238000012546 transfer Methods 0.000 claims description 19
- 230000011218 segmentation Effects 0.000 claims description 12
- 230000005540 biological transmission Effects 0.000 claims description 8
- 230000006870 function Effects 0.000 abstract description 72
- 230000003993 interaction Effects 0.000 description 33
- 230000015654 memory Effects 0.000 description 23
- 230000007246 mechanism Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 230000000670 limiting effect Effects 0.000 description 6
- 230000002085 persistent effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0272—Virtual private networks
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
- Stored Programmes (AREA)
Abstract
本发明描述了用于通过实现对输入和输出(I/O)请求的一个或多个所有者指定的函数来修改对象存储服务的I/O的***和方法。能够在实现在所述I/O请求内指定的请求方法(例如,GET或PUT)之前应用所述函数,使得应用所述方法的所述数据可能不匹配在所述请求内指定的所述对象。例如,用户能够请求以获得(例如,GET)数据集。所述数据集能够被传递到对所述数据集过滤敏感数据的函数,然后所述GET请求方法能够被应用于所述函数的输出。以这种方式,向对象存储服务上的对象的所有者提供对存储在服务中或从服务中检索的对象的更强控制。
Description
背景技术
计算装置可以利用通信网络来交换数据。公司和组织操作将许多计算装置互连的计算机网络以支持操作或向第三方提供服务。计算装置可以位于单个地理位置或位于多个不同的地理位置(例如,经由私有或公共通信网络互连)。具体地说,数据中心或数据处理中心(本文通常称为“数据中心”)可以包括许多互连的计算***以向数据中心的用户提供计算资源。数据中心可以是代表组织运营的私有数据中心,或可以是代表公众或为公众利益运营的公共数据中心。
为了便于提高对数据中心资源的利用,虚拟化技术允许单个物理计算装置托管对数据中心的用户表现和操作为独立计算装置的虚拟机的一个或多个实例。通过虚拟化,单个物理计算装置可以以动态方式创建、维护、删除或以其他方式管理虚拟机。进而,用户可以从数据中心请求计算机资源,包括单个计算装置或联网计算装置的配置,并为用户提供不同数量的虚拟机资源。
除了计算资源之外,数据中心还为客户端装置提供许多其他有益的服务。例如,数据中心可以提供被配置为存储由客户端装置提交的数据的数据存储服务,并且通过网络实现对该数据的检索。可以提供各种类型的数据存储服务,通常根据其输入/输出(I/O)机制而变化。例如,数据库服务可以允许基于数据库查询语言(诸如结构化查询语言(SQL))的I/O。块存储服务可以以类似于操作***如何与本地存储交互的方式允许基于对一个或多个定义长度块的修改的I/O,并且因此可以促进可用于例如存储虚拟机的操作***的虚拟化磁盘驱动器。对象存储服务可以允许在单个对象或资源(诸如单个文件)的级别上的I/O,其内容和长度可能不同。例如,对象存储服务可以提供与表述性状态转移(REST)架构风格兼容的接口,诸如通过允许基于指定输入数据的调用的I/O和将超文本传输协议请求方法(例如,GET、PUT、POST、DELETE等)应用于该数据。通过传输指定输入数据的调用和请求方法,客户端因此可以从对象存储服务检索数据,将数据作为新对象写入对象存储服务,修改现有对象等。
附图说明
图1是描绘其中对象存储服务可以结合按需代码执行***操作以实现与对对象存储服务的输入/输出(I/O)请求相关的函数的示例性环境的框图;
图2描绘提供图1的对象存储服务的前端的计算装置的一般架构;
图3是描绘用于使客户端装置能够通过***通过在按需代码执行***上执行任务而实现的函数来修改对象存储服务的I/O路径的示例***互的流程图;
图4是待应用于图1的对象存储服务的I/O路径的函数的流水线的示例性可视化;
图5A至图5B示出描绘用于处理将输入数据作为对象存储在图1的对象存储服务上的请求的示例***互的流程图,包括对输入数据执行所有者指定的任务以及将任务的输出作为对象存储;
图6A至图6B示出描绘用于处理在图1的对象存储服务上检索对象的数据的请求的示例***互的流程图,包括对对象执行所有者指定的任务以及将任务的输出传输到作为对象的请求装置;
图7是描绘用于实现与通过I/O路径在图1的对象存储服务处获得的I/O请求相关的所有者定义函数的示例性例程的流程图;并且
图8是描绘用于在图1的按需代码执行***上执行任务以在实现所有者定义函数期间实现数据操作的示例性例程的流程图。
具体实施方式
一般来讲,本公开的各方面涉及处理对对象存储***上的数据对象进行读取或写入的请求。更具体地说,本公开的方面涉及对象存储服务的输入/输出(I/O)路径的修改,使得一个或多个数据操作可以被***到I/O路径中以修改被调用的请求方法所应用的数据,而不需要调用客户端装置来指定此类数据操作。在一个实施方案中,通过执行用户提交的代码来进行数据操作,该代码可以例如由对象存储***上的数据对象集合的所有者提供,以便控制与该数据对象的交互。例如,在对象集合的所有者希望确保终端用户不向集合提交包括任何个人识别信息的对象(以确保终端用户的隐私)的情况下,所有者可以提交可执行以从数据输入中删除此类信息的代码。所有者可以进一步指定在每次将数据对象写入集合期间应执行此类代码。因此,当终端用户试图将输入数据作为数据对象(例如,经由HTTPPUT方法)写入集合时,可以首先针对输入数据执行代码,并且可以将得到的输出数据作为数据对象写入集合。值得注意的是,这可能导致终端用户所请求的操作--诸如写入操作--不被应用于终端用户的输入数据,而是被应用于由数据操作(例如,所有者提交的)代码输出的数据。以这种方式,数据集合的所有者控制对这些集合的I/O,而不依赖终端用户来遵守所有者的要求。实际上,终端用户(或任何其他客户端装置)可能不知道正在对I/O进行修改。因此,本公开的实施方案能够在不修改服务接口的情况下修改对象存储服务的I/O,从而确保与利用该服务的其他预先存在的软件的相互兼容性。
在本公开的一些实施方案中,数据操作可以在按需代码执行***(有时称为无服务器执行***)上进行。一般来讲,按需代码执行***能够执行任意用户指定的代码,而不需要用户创建、维护或配置执行代码的执行环境(例如,物理机或虚拟机)。例如,尽管传统的计算服务通常要求用户提供特定装置(虚拟的或物理的)、在装置上安装操作***、配置应用程序、定义网络接口等,但按需代码执行***可以使用户提交代码,并且可以向用户提供应用程序编程接口(API),当使用时,该应用程序编程接口使用户能够请求代码的执行。在通过API接收到调用时,按需代码执行***可以为代码生成执行环境,向环境提供代码,执行代码,并提供结果。因此,按需代码执行***可以消除用户处理用于代码执行的环境的配置和管理的需要。例如,用于实现按需代码执行***的示例性技术公开于2014年9月30日提交的名称为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATION FOR REQUESTSTO EXECUTE PROGRAM CODE”的美国专利号9,323,556(“556专利”)内,其全部内容通过引用并入本文。
由于按需代码执行***执行任意代码的灵活性,此类***可以用于创建各种网络服务。例如,此类***可以用来创建“微服务”,即实现少量函数(或仅一个函数)并与其他服务交互以提供应用程序的网络服务。在按需代码执行***的上下文中,为创建此类服务而执行的代码通常被称为“函数”或“任务”,其可以被执行以实现服务。因此,一种用于在对象存储服务的I/O路径内执行数据操作的技术可以是在按需代码执行***上创建任务,该任务在执行时执行所需的数据操作。示例性地,任务可以提供与对象存储服务的接口相似或相同的接口,并且可操作以响应于请求方法调用(例如,HTTP PUT或GET调用)获得输入数据,针对输入数据执行任务的代码,并执行针对对象存储服务的调用,以便对得到的输出数据执行请求方法。这种技术的缺点是复杂性。例如,在这种情况下,可能需要终端用户向按需代码执行***而不是对象存储服务提交I/O请求,以确保任务的执行。如果终端用户直接向对象存储服务提交调用,则可能不会执行任务,因此所有者将无法对对象集合实施所需的数据操作。另外,该技术可能要求任务的代码被编写成既向终端用户提供能够处理对输入数据实现请求方法的调用的接口,又提供能够执行从任务执行到对象存储服务的调用的接口。这些网络接口的实现可能会大大增加所需代码的复杂性,从而使数据集合的所有者不愿意使用该技术。此外,在用户提交的代码直接实现网络通信的情况下,该代码可能需要根据所处理的请求方法进行更改。例如,可能需要第一组代码来支持GET操作,可能需要第二组代码来支持PUT操作等。由于本发明的实施方案解除用户提交的代码对处理网络通信的要求,因此在某些情况下可以使一组代码能够处理多个请求方法。
为了解决上述问题,本公开的实施方案可以实现无服务器任务执行与对象存储服务的接口的强集成,使得服务本身被配置为在接收到对数据集合的I/O请求时调用任务执行。此外,可以通过配置对象存储服务以促进来自任务执行的数据输入和输出来简化执行数据操作的代码的生成,而不需要任务执行本身实现用于I/O操作的网络通信。具体地说,在一个实施方案中,对象存储服务和按需代码执行***可以被配置为将输入数据以操作***级输入/输出流的句柄(例如,POSIX兼容描述符)的形式“分段”到任务执行,使得任务的代码可以经由定义的流操作来操纵输入数据(例如,就像数据存在于本地文件***中一样)。例如,这种对输入数据的流级访问可以与对输入数据的网络级访问进行对比,该网络级访问通常需要代码实现网络通信来检索输入数据。类似地,对象存储服务和按需代码执行***可以被配置为提供输出流句柄,该输出流句柄表示任务执行可以向其写入输出的输出流。在检测到对输出流的写入时,对象存储服务和按需代码执行***可以将此类写入作为任务执行的输出数据来处理,并将被调用的请求方法应用于输出数据。通过使任务能够基于传递给该任务的输入和输出流来操纵数据,而不是要求代码处理网络上的数据通信,可以大大简化任务的代码。
使任务能够基于输入和输出句柄操纵数据的另一个益处是提高了安全性。通用的按需代码执行***可以相对于来自任务执行的网络通信进行许可地操作,从而实现来自执行的任何网络通信,除非这种通信被明确拒绝。这种许可模型反映了将任务执行作为微服务的使用,微服务通常需要与各种其他网络服务进行交互。然而,这种许可模型也降低了函数的安全性,因为潜在的恶意网络通信也可以到达执行。与许可模型相反,用于在对象存储***的I/O路径上执行数据操作的任务执行可以利用限制性模型,从而只能从执行任务的环境中进行显式允许的网络通信。示例性地,由于数据操作可以经由输入和输出句柄进行,因此可以设想,在本公开的实施方案中用于执行数据操作的许多或大多数任务将根本不需要进行网络通信,从而极大地提高了这种执行的安全性。在任务执行确实需要某些网络通信(诸如联系外部服务以协助数据操作)的情况下,可以显式地允许或“白名单化”此类通信,从而仅以严格限制的方式公开执行。
在一些实施方案中,数据集合所有者可能只需要相对于该集合的I/O进行单次数据操作。因此,对象存储服务可以检测对集合的I/O,实现数据操作(例如,通过在提供有输入和输出句柄的环境中执行无服务器任务),并将被调用的请求方法应用于得到的输出数据。在其他实施方案中,所有者可以请求相对于I/O路径进行的多次数据操作。例如,为了增加可移植性和可重用性,所有者可以编写多个无服务器任务,这些任务可以在不同的I/O路径上以不同的方式组合。因此,对于每个路径,所有者可以定义待在路径的I/O上执行的一系列无服务器任务。此外,在一些配置中,对象存储***可以本机提供一个或多个数据操作。例如,对象存储***可以本机只接受对对象的部分(例如,定义的字节范围的)的请求,或者可以本机实现针对对象的数据执行查询(例如,SQL查询)。在一些实施方案中,可以为给定的I/O路径指定各种本机操纵和基于无服务器任务的操纵的任何组合。例如,所有者可以指定对于读取对象的特定请求,针对对象执行给定的SQL查询,该对象的输出经由第一任务执行来处理,该对象的输出经由第二任务执行来处理等。应用于I/O路径的数据操作(例如,本机操纵、基于无服务器任务的操作或其组合)的集合在本文中通常被称为应用于I/O路径的数据处理“流水线”。
根据本公开的方面,应用于I/O路径的特定路径修改(例如,添加流水线)可以根据路径的属性(诸如I/O请求源自的客户端装置或请求内的对象或对象集合)而变化。例如,流水线可以被应用于单个对象,使得流水线被应用于对对象的所有I/O请求,或者流水线可以仅在某些客户端装置访问对象时被选择性地应用。在一些情况下,对象存储服务可以为对象或集合提供多个I/O路径。例如,同一对象或集合可以与对象存储服务上的多个资源标识符相关联,使得可以通过多个标识符(例如,统一资源标识符或URI)来访问对象或集合,该多个标识符示例性地对应于不同的网络可访问端点。在一个实施方案中,对于给定对象,可以将不同的流水线应用于每个I/O路径。例如,第一I/O路径可以与对数据集的非特权访问相关联,并且因此受制于在检索期间之前从数据集移除机密信息的数据操作。第二I/O路径可以与特权访问相关联,因此不受制于那些数据操作。在一些情况下,可以基于其他标准选择性地应用流水线。例如,是否应用流水线可以基于一天中的时间、对对象或集合的访问次数或访问速率等。
如本领域技术人员根据本公开将了解的,本文所公开的实施方案提高诸如对象存储***的计算***提供和实施针对数据对象的数据操作函数的能力。尽管现有技术通常依赖于数据操作函数的外部实施(例如,请求用户在上传个人信息之前将其删除),但是本公开的实施方案能够将数据操作直接***到对象存储***的I/O路径中。此外,本公开的实施方案通过在隔离的执行环境内提供操纵函数的无服务器执行来提供用于实现数据操作的安全机制。本公开的实施方案通过使无服务器函数能够基于本地流(例如,“文件”)句柄进行操作,而不是要求该函数充当网络可访问的服务,从而进一步改进无服务器函数的操作。因此,本发明公开的实施方案解决了计算***内固有的技术问题,诸如在存储***处实施数据操作的困难以及创建外部服务以实施这种数据操作的复杂性。这些技术问题通过本文描述的各种技术解决方案来解决,包括在可能不知道请求用户的情况下将数据处理流水线***到用于对象或对象集合的I/O路径中,使用无服务器函数来执行此类流水线的方面,以及使用本地流句柄来实现无服务器函数的简化创建。因此,本公开总体上代表对现有数据处理***和计算***的改进。
现在将讨论按需代码执行***上任务的一般执行。如本文详细描述的,按需代码执行***可以提供网络可访问服务,使用户能够提交或指定待由按需代码执行***上的虚拟机实例执行的计算机可执行源代码。按需代码执行***上的每一组代码可限定“任务”并且当在按需代码执行***的虚拟机实例上被执行时实施与那个任务相对应的特定功能性。在按需代码执行***上单独地实施任务可称为“执行”任务(或“任务执行”)。在一些情况下,按需代码执行***可以使用户能够基于各种潜在事件(诸如向按需代码执行***传输应用编程接口(“API”)调用或将特殊格式的超文本传输协议(“HTTP”)数据包传输到按需代码执行***)来直接触发任务的执行。根据本公开的实施方案,按需代码执行***还可以与对象存储***交互,以便在将数据操作流水线应用到I/O路径期间执行任务。因此,按需代码执行***可以“按需”执行任何指定的可执行代码,而不需要配置或维护在其上执行代码的基础硬件或基础设施。此外,按需代码执行***可被配置为通过快速的方式(例如,在100毫秒[ms]以下)执行任务,从而实现“实时”(例如,在终端用户几乎不可感知的延迟的情况下)执行任务。为了能够实现这种快速执行,按需代码执行***可以包括一个或多个虚拟机实例,该虚拟机实例被“预热”或预初始化(例如,引导到操作***中并执行完整或基本上完整的运行时环境),并被配置为能够执行用户定义的代码,使得可以响应于执行代码的请求而快速执行代码,而不会因初始化虚拟机实例而导致延迟。因此,当触发任务的执行时,对应于该任务的代码可以在非常短的时间内在预初始化的虚拟机内执行。
具体地说,为了执行任务,本文描述的按需代码执行***可以维护在接收到执行任务的请求时就准备好使用的执行虚拟机实例的池。由于这些虚拟机的预初始化性质,与执行任务代码(例如,实例和语言运行时启动时间)相关联的延迟(有时被称为等待时间)可以显著降低,通常降低到低于100毫秒的水平。示例性地,按需代码执行***可以在一个或多个物理计算装置上维护虚拟机实例的池,其中每个虚拟机实例具有加载在其上的一个或多个软件部件(例如,操作***、语言运行时、库等)。当按需代码执行***接收到执行程序代码的请求(“任务”)时,按需代码执行***可以基于与任务相关的一个或多个计算约束(例如,所需的操作***或运行时)来选择用于执行用户的程序代码的虚拟机实例,并且使任务在所选择的虚拟机实例上执行。这些任务可以在虚拟机实例上创建的隔离容器中执行,或者可以在与充当其他任务的环境的其他虚拟机实例隔离的虚拟机实例中执行。由于在接收到请求时,池中的虚拟机实例已经被引导并加载了特定的操作***和语言运行时,因此与找到可以处理请求(例如,通过在虚拟机实例上创建的一个或多个容器中执行用户代码)的计算容量相关联的延迟可以显著减少。
如本文所用,术语“虚拟机实例”旨在指代仿真硬件以提供软件可以在其上执行的环境或平台(示例性“执行环境”)的软件或其他可执行代码的执行。虚拟机实例通常由硬件装置执行,硬件装置可能与虚拟机实例仿真的物理硬件不同。例如,虚拟机可仿真第一类型的处理器和存储器,同时在第二类型的处理器和存储器上执行。因此,可利用虚拟机在正在执行第二执行环境(例如,第二操作***)的物理装置上执行既定针对第一执行环境(例如,第一操作***)的软件。在一些情况下,由虚拟机实例仿真的硬件可与基础装置的硬件相同或类似。例如,具有第一类型的处理器的装置可实施多个虚拟机实例,每个虚拟机实例仿真那个第一类型的处理器的实例。因此,可使用虚拟机实例将装置分割为一定数目的逻辑子装置(每个逻辑子装置称为“虚拟机实例”)。虽然虚拟机实例一般可提供远离基础物理装置的硬件的抽象水平,但此抽象并非所需的。例如,假设装置实施多个虚拟机实例,所述多个虚拟机实例中的每一者仿真与由装置提供的硬件相同的硬件。在此类情景下,每个虚拟机实例可允许软件应用在不转译的情况下在基础硬件上执行代码,同时维持在其他虚拟机实例上运行的软件应用之间的逻辑分隔。一般称为“本机执行”的此过程可用于增加虚拟机实例的速度或性能。还可以使用允许直接利用基础硬件的其他技术,诸如硬件传递技术。
虽然在本文中将执行操作***的虚拟机描述为执行环境的一个示例,但是其他执行环境也是可能的。例如,任务或其他过程可以在软件“容器”内执行,该软件“容器”提供运行时环境而本身不提供硬件的虚拟化。可在虚拟机内实施容器以提供额外的安全性,或者可在虚拟机实例的外部运行所述容器。
结合附图参考以下详细描述,本公开的前述方面和许多附带优点将变得更容易领会并且变得更好理解。
图1是示例性操作环境100的框图,其中服务提供商***110操作以使客户端装置102能够对存储在对象存储服务160内的对象执行I/O操作并且对这种I/O操作应用路径修改,这些修改可以包括在按需代码执行***120上执行用户定义的代码。
以举例的方式,示出了与服务提供商***110通信的各种示例性客户端装置102,包括台式计算机、膝上型计算机和移动电话。通常,客户端装置102可以是任何计算装置,诸如台式计算机、膝上型计算机或平板计算机、个人计算机、可穿戴计算机、服务器、个人数字助理(PDA)、混合PDA/移动电话、电子书阅读器、机顶盒、语音命令装置、照相机、数字媒体播放器等。
一般来讲,对象存储服务160可以操作以使客户端能够读取、写入、修改和删除数据对象,数据对象中的每一者表示与可以作为单个资源交互的标识符(“对象标识符”或“资源标识符”)相关联的一组数据。例如,对象可以表示由客户端装置102提交的单个文件(尽管对象存储服务160可以或可以不将此类对象存储为单个文件)。这种对象级交互可以与其他类型的存储服务进行对比,诸如在单个块的级别上提供数据操作的基于块的存储服务,或者在表(或其部分)的级别上提供数据操作的数据库存储服务等。
对象存储服务160示例性地包括一个或多个前端162,其提供接口(命令行接口(CLI)、应用程序编程接口(API)或其他编程接口),客户端装置102可以通过该接口与服务160接口,以代表它们配置服务160并在服务160上执行I/O操作。例如,客户端装置102可以与前端162交互以在服务160上创建数据对象的集合(例如,对象的“桶”)并且为该集合配置许可。客户端装置102此后可以基于前端162的接口来创建、读取、更新或删除集合内的对象。在一个实施方案中,前端162提供支持各种请求方法的REST兼容HTTP接口,请求方法中的每一者对应于服务160上的所请求的I/O操作。作为非限制性示例,请求方法可以包括:
●请求通过引用对象的标识符来检索存储在服务160上的对象的GET操作;
●请求存储待存储在服务160上的对象(包括对象的标识符和待存储为对象的输入数据)的PUT操作;
●请求通过引用对象的标识符来删除存储在服务160上的对象的DELETE操作;以及
●请求通过引用集合的标识符来列出存储在服务160上的对象集合内的对象的LIST操作。
还可以支持各种其他操作。例如,服务160可以提供类似于PUT操作但与不同的上传机制(例如,基于浏览器的HTML上传)相关联的POST操作,或者能够在不检索对象本身的情况下检索对象的元数据的HEAD操作。在一些实施方案中,服务160可以实现将以上操作中的一个或多个组合的操作,或者将操作与本机数据操作组合的操作。例如,服务160可以提供能够将存储在服务160上的对象复制到另一对象的COPY操作,该操作将GET操作与PUT操作组合。作为另一示例,服务160可以提供使得能够在返回对象的内容之前将SQL查询的规范应用于该对象的SELECT操作,该操作将SQL查询对数据对象的应用(本机数据操作)与GET操作组合。作为又一示例,服务160可以提供“字节范围”GET,其使得能够仅对数据对象的一部分进行GET操作。在一些情况下,客户端装置102对服务160请求的操作可以经由HTTP请求传输到服务,其本身可以包括HTTP方法。在一些情况下,诸如在GET操作的情况下,在请求内指定的HTTP方法可以匹配在服务160处请求的操作。然而,在其他情况下,请求的HTTP方法可能与在服务160处请求的操作不匹配。例如,请求可以利用HTTP POST方法来传输请求以在服务160处实现SELECT操作。
在一般操作期间,前端162可以被配置为获得对请求方法的调用,并且将该请求方法应用于该方法的输入数据。例如,前端162可以通过将该输入数据作为对象存储在服务160上而响应于将输入数据作为对象PUT服务160的请求。例如,对象可以被存储在对象数据存储库168上,其对应于任何持久或基本上持久的存储器(包括硬盘驱动器(HDD)、固态驱动器(SSD)、网络可访问存储器(NAS)、存储区域网络(SAN)、非易失性随机存取存储器(NVRAM)或本领域已知的各种存储装置中的任一种)。作为另一示例,前端162可以通过从存储器168检索对象(表示对GET资源请求的输入数据的对象)并将该对象返回到请求客户端装置102来响应从服务160GET对象的请求。
在一些情况下,对请求方法的调用可以调用由服务160提供的一个或多个本机数据操作。例如,SELECT操作可以提供待应用于对象(也在请求中标识)的SQL格式查询,或者GET操作可以提供待返回的对象的特定字节范围。服务160示例性地包括被配置为执行本机数据操作的对象操纵引擎170,其示例性地对应于配置有可执行以在服务160上实现本机数据操作的软件的装置(例如,通过从用于字节范围GET的对象中删除非选择的字节,通过将SQL查询应用于对象并返回查询的结果等)。
根据本公开的实施方案,服务160还可以被配置为能够修改给定对象或对象集合的I/O路径,使得被调用的请求方法被应用于数据操作函数的输出,而不是在调用内标识的资源。例如,服务160可以使客户端装置102能够指定针对给定对象的GET操作应当受制于按需代码执行***120上的用户定义的任务的执行,使得响应于操作而返回的数据是任务执行的输出而不是所请求的对象。类似地,服务160可以使客户端装置102能够指定用于存储给定对象的PUT操作应当受制于按需代码执行***120上的用户定义的任务的执行,使得响应于操作而存储的数据是任务执行的输出,而不是由客户端装置102提供用于存储的数据。如将在下文更详细地讨论的,路径修改可以包括对数据操作(包括本机数据操作、基于任务的操纵或其组合)的流水线的规范。示例性地,客户端装置102可以通过前端162为对象或对象集合指定流水线或其他数据操作,该前端可以将流水线或操纵的记录存储在I/O路径修改数据存储库164中,存储164(与对象数据存储库168一样)可以表示任何持久或基本上持久的存储器。尽管在图1中示出为不同的,但在一些情况下,数据存储库164和168可以表示数据存储库的单个集合。例如,对对象或集合的数据修改本身可以作为对象存储在服务160上。
为了经由执行用户定义的代码来实现数据操作,该***还包括按需代码执行***120。在一个实施方案中,***120仅可由对象存储服务160结合I/O路径的数据操作来使用。在另一实施方案中,客户端装置102还可访问***120以直接实现无服务器任务执行。例如,按需代码执行***120可以向服务160(以及可能是客户端装置102)提供一个或多个用户接口、命令行接口(CLI)、应用程序编程接口(API)或其他编程接口,所述接口用于生成和上传用户可执行代码(例如,包括标识所上传代码的依赖代码对象的元数据)、调用用户提供的代码(例如,提交在按需代码执行***120上执行用户代码的请求)、调度基于事件的作业或定时作业、跟踪用户提供的代码或查看与其请求或用户代码相关的其他日志记录或监视信息。虽然一个或多个实施方案可能在本文被描述为使用用户接口,但应了解,这些实施方案可另外或可替代地使用任何CLI、API或其他编程接口。
客户端装置102、对象存储服务160和按需代码执行***120可以经由网络104进行通信,该网络可以包括任何有线网络、无线网络或其组合。例如,网络104可以是个域网、局域网、广域网、空中广播网络(例如,用于收音机或电视)、电缆网络、卫星网络、蜂窝电话网络或其组合。作为另一个示例,网络104可以是可能由各个不同方操作的链接网络的可公开访问网络,诸如互联网。在一些实施方案中,网络104可以是专用或半专用网络,诸如公司或大学内联网。网络104可以包括一个或多个无线网络,诸如全球移动通信***(GSM)网络、码分多址(CDMA)网络、长期演进(LTE)网络或任何其他类型的无线网络。网络104可使用用于经由互联网或其他前述类型的网络中的任一者进行通信的协议和部件。例如,由网络104使用的协议可包括超文本传输协议(HTTP)、HTTP安全(HTTPS)、消息队列遥测传输(MQTT)、受约束应用协议(CoAP)等。经由互联网或其他前述类型的通信网络中的任一种进行通信的协议和部件是本领域的技术人员所公知的,且因此未在本文进行更详细的描述。
为了实现与按需代码执行***120的交互,***120包括一个或多个前端130,其实现与按需代码执行***120的交互。在示例性实施方案中,前端130充当由按需代码执行***120提供的其他服务的“前门”,使得用户(经由客户端装置102)或服务160能够提供、请求执行计算机可执行代码并查看其结果。前端130包括各种部件以实现按需代码执行***120与其他计算装置之间的交互。例如,每个前端130可以包括请求接口,该请求接口向客户端装置102和服务160提供将用户指定的代码上传或以其他方式通信到按需代码执行***120以及随后请求执行该代码的能力。在一个实施方案中,请求接口经由图形用户接口(GUI)、CLI或API与外部计算装置(例如,客户端装置102、前端162等)通信。前端130处理请求,并确保请求得到适当授权。例如,前端130可以确定与请求相关联的用户是否被授权访问在请求中指定的用户代码。
本文所使用的对用户代码的引用可以指代以特定程序语言编写的任何程序代码(例如,程序、例程、子例程、线程等)。在本公开中,术语“代码”、“用户代码”和“程序代码”可以互换使用。可以执行这种用户代码来实现特定函数,例如,结合用户开发的特定数据转换。如上文所述,用户代码的单独集合(例如,用以实现特定函数)在本文称为“任务”,而对那个代码的特定执行(包括(例如)编译代码、解译代码或以其他方式使代码能够执行)称为“任务执行”或简称为“执行”。作为非限制性示例,可以用JavaScript(例如,node.js)、Java、Python或Ruby(或另一种编程语言)编写任务。
为了管理对代码执行的请求,前端130可以包括执行队列,其可以维护所请求的任务执行的记录。示例性地,由按需代码执行***120同时执行任务的数量是有限的,并且因此,在按需代码执行***120处发起的新任务执行(例如,经由API调用、经由来自已执行或正在执行任务的调用等)可以放置在执行队列上并且例如以先进先出的顺序进行处理。在一些实施方案中,按需代码执行***120可以包括多个执行队列,诸如每个用户账户的单独执行队列。例如,服务提供商***110的用户可能期望限制按需代码执行***120上的任务执行速率(例如,出于成本原因)。因此,按需代码执行***120可以利用账户特定的执行队列来限制特定用户账户同时执行任务的速率。在一些情况下,按需代码执行***120可以对任务执行进行优先级排序,使得特定账户或指定优先级的任务执行绕过执行队列或在执行队列内进行优先级排序。在其他情况下,按需代码执行***120可以在接收到任务的调用之后立即或基本上立即执行任务,并且因此,可以省略执行队列。前端130还可以包括输出接口,其被配置为输出关于按需代码执行***120上的任务的执行的信息。示例性地,输出接口可以将关于任务执行的数据(例如,任务的结果、与任务执行有关的错误或任务执行的细节,诸如完成执行所需的总时间、经由执行处理的总数据等)传输到客户端装置102或对象存储服务160。
在一些实施方案中,按需代码执行***120可以包括多个前端130。在此类实施方案中,可以提供负载均衡器以例如以循环方式将传入调用分配到多个前端130。在一些实施方案中,负载均衡器将传入调用分配到多个前端130的方式可以基于按需代码执行***120的其他部件的位置或状态。例如,负载均衡器可以将调用分配到地理上邻近的前端130,或者分配到具有服务该调用的能力的前端。在每个前端130对应于按需代码执行***120的另一部件的单独实例(诸如下面描述的活跃池148)的情况下,负载均衡器可以根据那些其他部件上的容量或负载来分配调用。在一些情况下,调用可以确定性地分配在前端130之间,使得执行任务的给定调用将总是(或几乎总是)路由到相同的前端130。这可(例如)辅助维持对任务的准确的执行记录,从而确保所述任务仅执行期望的次数。例如,可以将调用分配到前端130之间的负载均衡。诸如任播路由之类的其他分配技术对于本领域技术人员来说将是显而易见的。
按需代码执行***120还包括一个或多个工作者管理器140,其管理执行环境,诸如用于服务传入调用以执行任务的虚拟机实例150(示出为VM实例150A和150B,通常称为“VM”)。尽管以下将参考虚拟机实例150作为此类环境的示例来描述,但本公开的实施方案可以利用其他环境,诸如软件容器。在图1所示的示例中,每个工作者管理器140管理活跃池148,该活跃池是在一个或多个物理主机计算装置上执行的虚拟机实例150的组(有时称为池),该物理主机计算装置被初始化以执行给定任务(例如,通过将任务的代码和任何依赖数据对象加载到实例中)。
尽管虚拟机实例150在这里被描述为被分配给特定任务,但是在一些实施方案中,实例可以被分配给一组任务,使得该实例被绑定到该组任务,并且该组的任何任务可以在该实例内执行。例如,同一组中的任务可能属于同一安全组(例如,基于它们的安全凭证),从而在另一个任务已在同一实例上的另一个容器中执行之后,在特定实例150上的容器中执行一个任务不会带来安全风险。如下所述,任务可以与包含控制任务如何执行的各种方面的许可相关联。例如,任务的许可可以定义哪些网络连接(如果有)可以由任务的执行环境发起。作为另一示例,任务的许可可以定义向任务传递哪些认证信息,控制哪些网络可访问资源对任务的执行(例如,服务160上的对象)是可访问的。在一个实施方案中,任务的安全组基于一个或多个此类许可。例如,可以基于发起网络连接的许可和访问网络资源的许可的组合来定义安全组。作为另一示例,组的任务可以共享公共依赖性,使得用于执行组的一个任务的环境可以被快速修改以支持组内的另一个任务的执行。
一旦前端130成功处理了用于执行任务的触发事件,则前端130将请求传递给工作者管理器140以执行任务。在一个实施方案中,每个前端130可以与对应的工作者管理器140(例如,与前端130共同定位或地理上靠近该前端的工人管理器140)相关联,并且因此,前端130可以将大部分或所有请求传递给该工作者管理器140。在另一实施方案中,前端130可以包括位置选择器,其被配置为确定向其传递执行请求的工作者管理器140。在一个实施方案中,所述位置选择器可基于将调用散列来确定接收所述调用的工作者管理器140,并且将所述调用分发到基于散列值(例如,经由散列环)而选择的工作者管理器140。用于在工作者管理器140之间分配调用的各种其他机制对于本领域技术人员来说将是显而易见的。
此后,工作者管理器140可以修改虚拟机实例150(如果需要)并在实例150内执行任务的代码。如图1所示,各个实例150可以具有操作***(OS)152(示为OS 152A和152B)、语言运行时154(示为运行时154A和154B)和用户代码156(示为用户代码156A和156B)。OS152、运行时154和用户代码156可以共同地使用户代码的执行能够实现任务。因此,经由按需代码执行***120的操作,可以在执行环境中快速执行任务。
根据本公开的方面,每个VM 150另外包括可执行以促进VM 150上的输入数据的分段和写入VM 150上的输出数据的处理的分段代码157,以及可通过VM 150的本地文件***访问的VM数据存储库158。示例性地,分段代码157表示在VM 150(或可能是VM 150的主机装置)上执行并且被配置为从对象存储服务160获得数据并将该数据放置到VM数据存储库158中的过程。分段代码157还可以被配置为获得写入到VM数据存储库158内的文件的数据,并且将该数据传输到对象存储服务160。因为这种数据在VM数据存储库158处是可用的,所以不需要用户代码156来通过网络获得数据,从而简化了用户代码156并且使得用户代码156能够进一步限制网络通信,从而提高了安全性。相反,如上所述,通过使用在执行期间传递给代码156的文件句柄,用户代码156可以与作为VM数据存储库158上的文件的输入数据和输出数据进行交互。在一些实施方案中,输入和输出数据可以作为文件存储在数据存储库158的内核空间文件***内。在其他情况下,分段代码157可以提供虚拟文件***,诸如用户空间文件***(FUSE)接口,其提供用户代码156可访问的隔离文件***,使得用户代码对VM数据存储库158的访问受到限制。
如本文所使用的,术语“本地文件***”通常是指在执行环境中维护的文件***,使得在该环境中执行的软件可以作为文件而不是经由网络连接来访问数据。根据本公开的方面,经由本地文件***可访问的数据存储本身可以是本地的(例如,本地物理存储),或者可以是远程的(例如,经由网络协议(如NFS)访问,或表示为由网络可访问服务提供的虚拟化块装置)。因此,术语“本地文件***”旨在描述软件访问数据的机制,而不是数据的物理位置。
VM数据存储库158可以包括任何持久或非持久数据存储装置。在一个实施方案中,VM数据存储库158是主机装置的物理存储,或托管在主机装置的物理存储器上的虚拟磁盘驱动器。在另一实施方案中,VM数据存储库158被表示为本地存储库,但实际上是由网络可访问服务提供的虚拟化存储装置。例如,VM数据存储库158可以是由网络可访问块存储服务提供的虚拟化磁盘驱动器。在一些实施方案中,对象存储服务160可以被配置为提供对存储在数据存储库168上的对象的文件级访问,从而使得能够基于分段代码157与服务160之间的通信来虚拟化VM数据存储库158。例如,对象存储服务160可以包括文件级接口166,其提供对数据存储库168内作为文件的对象的网络访问。文件级接口166可以例如表示提供对作为文件的对象的访问的基于网络的文件***服务器(例如,网络文件***(NFS)),并且分段代码157可以实现该服务器的客户端,从而提供对服务160的对象的文件级访问。
在一些实例中,VM数据存储库158可以表示对在VM实例150的同一主机装置上执行的另一数据存储库的虚拟化访问。例如,活跃池148可以包括一个或多个数据分段VM实例(图1中未示出),其可以与在同一主机装置上的VM实例150共同租用。数据分段VM实例可以被配置为支持从服务160检索和存储数据(例如,数据对象或其部分、由客户端装置102传递的输入数据等),以及将该数据存储在数据分段VM实例的数据存储库上。例如,数据分段VM实例可以被指定为不可用于支持用户代码156的执行,并且因此与相对于支持用户代码的执行的实例150的提升许可相关联。数据分段VM实例可以使该数据可被其主机装置内(或可能是在附近的主机装置上)的其他VM实例150访问,例如通过使用基于网络的文件协议,如NFS。然后,其他VM实例150可以充当数据分段VM实例的客户端,使得能够创建虚拟化VM数据存储库158,从用户代码156A的角度来看,该虚拟化VM数据存储库显示为本地数据存储库。有利的是,如果数据分段VM和VM实例150在主机装置内或在附近的主机装置上共同定位,可以期望对存储在数据分段VM处的数据的基于网络的访问非常快地发生。
虽然本文提供了关于使用IO流句柄从VM数据存储库158读取或写入的一些示例,但是IO流还可以用于从VM实例150的其他接口读取或写入(同时仍然消除了对用户代码156进行除流级操作之外的操作(诸如创建网络连接)的需要)。例如,分段代码157可以将输入数据通过“流水线”传送到用户代码156的执行作为输入流,其输出可以通过“流水线”传送到分段代码157作为输出流。作为另一示例,VM实例150的分段VM实例或管理程序可以将输入数据传递到VM实例150的网络端口,其可以由分段代码157读取并作为输入流传递到用户代码157。类似地,由任务代码156写入到输出流的数据可以被写入到实例150A的第二网络端口以供分段VM实例或管理程序检索。在又一示例中,实例150的管理程序可以将输入数据作为写入到虚拟化硬件输入装置(例如,键盘)的数据传递,并且分段代码157可以将对应于该输入装置的IO流的句柄传递给用户代码156。管理程序可以类似地将对应于虚拟化硬件输出装置的IO流的句柄传递给用户代码156,并且读取写入到该流的数据作为输出数据。因此,本文提供的关于文件流的示例通常可以被修改以涉及任何IO流。
对象存储服务160和按需代码执行***120在图1中被描绘为在包括使用一个或多个计算机网络(图1中未示出)互连的若干计算机***的分布式计算环境中操作。对象存储服务160和按需代码执行***120还可以在具有比图1所示更少或更多数量的装置的计算环境内操作。因此,图1中的对象存储服务160和按需代码执行***120的描述应被视为示例性的,而不是对本公开的限制。例如,按需代码执行***120或其各种组成部分可实现各种Web服务组件、托管或“云”计算环境或对等网络配置,以实现本文所述过程的至少一部分。在一些情况下,对象存储服务160和按需代码执行***120可以组合成单个服务。此外,对象存储服务160和按需代码执行***120可以直接在由硬件装置执行的硬件或软件中实现,并且可以例如包括在物理计算机硬件上实现的一个或多个物理或虚拟服务器,该物理计算机硬件被配置为执行用于执行本文将描述的各种特征的计算机可执行指令。一个或多个服务器可以是地理位置分散的或在地理上共同位于例如一个或多个数据中心中。在一些情况下,一个或多个服务器可以作为快速供应和释放的计算资源的***(通常称为“云计算环境”)的一部分来操作。
在图1的示例中,对象存储服务160和按需代码执行***120被示为连接到网络104。在一些实施方案中,对象存储服务160和按需代码执行***120内的任何部件可以经由网络104与按需代码执行***120的其他部件通信。在其他实施方案中,并非对象存储服务160和按需代码执行***120的所有部件都能够与虚拟环境100的其他部件通信。在一个示例中,只有前端130和162(在一些情况下可以表示多个前端)可以连接到网络104,并且对象存储服务160和按需代码执行***120的其他部件可以经由相应前端130和162与环境100的其他部件通信。
虽然本文参考对象存储服务160和按需代码执行***120的单个部件一般描述了一些功能性,但其他部件或部件的组合可以附加地或替代地实现这些功能性。例如,虽然对象存储服务160在图1中被描绘为包括对象操纵引擎170,但该引擎170的函数可以附加地或替代地被实现为按需代码执行***120上的任务。此外,虽然按需代码执行***120被描述为应用数据操作任务的示例性***,但其他计算***也可以用于执行用户定义的任务,这些计算***可以包括比作为按需代码执行***120的一部分所描述的更多、更少或不同的部件。在简化示例中,对象存储服务160可以包括被配置为按需执行用户定义的任务的物理计算装置,从而表示根据本公开的实施方案可使用的计算***。因此,图1中的元件的特定配置旨在是示例性的。
图2描绘了实现图1的前端162的前端服务器200计算装置的一般架构。图2中描绘的前端服务器200的一般架构包括可以用于实现本公开的各方面的计算机硬件和软件的装置。硬件可以在物理电子装置上实现,如下面更详细地讨论的。前端服务器200可以包括比图2所示的元件更多(或更少)的元件。然而,为了提供能够实现的公开,没有必要显示所有这些通常常规的元件。图2所示的一般架构可以用于实现图1所示的其他部件中的一个或多个。
如图所示,前端服务器200包括处理单元290、网络接口292、计算机可读介质驱动器294和输入/输出装置接口296,所有这些都可以借助于通信总线彼此通信。网络接口292可以提供对一个或多个网络或计算***的连接性。处理单元290因此可以经由网络104从其他计算***或服务接收信息和指令。处理单元290还可以往返主存储器280或辅助存储器298通信,并且还经由输入/输出装置接口296为可选显示器(未示出)提供输出信息。输入/输出装置接口296也可以接受来自可选输入装置(未示出)的输入。
主存储器280或辅助存储器298可以包含处理单元290执行的计算机程序指令(在一些实施方案中被分组为单元),以便实现本公开的一个或多个方面。这些程序指令在图2中示出为包括在主存储器280内,但可以附加地或替代地存储在辅助存储器298内。主存储器280和辅助存储器298对应于一个或多个存储器装置层,包括(但不限于)RAM、3D XPOINT存储器、闪速存储器、磁存储器等。为了描述的目的,假定主存储器280表示工作者管理器140的主工作存储器,其速度比辅助存储器298高但总容量比该辅助存储器低。
主存储器280可以存储操作***284,其提供计算机程序指令以供处理单元290在前端服务器200的一般管理和操作中使用。存储器280还可以包括用于实现本公开的各方面的计算机程序指令和其他信息。例如,在一个实施方案中,存储器280包括用户接口单元282,其例如经由诸如安装在计算装置上的浏览器或应用程序之类的导航或浏览接口生成用户接口(或用于其的指令)以在计算装置上显示。
除了用户接口单元282之外或与之组合,存储器280可以包括控制平面单元286和数据平面单元288,每个都可执行以实现本公开的各方面。示例性地,根据本公开的实施方案,控制平面单元286可以包括可执行以使得数据对象或对象集合的所有者能够将操纵、无服务器函数或数据处理流水线附接到I/O路径的代码。例如,控制平面单元286可以使前端162能够实现图3的交互。数据平面单元288可以示例性地包括使得能够处理对象存储服务160上的I/O操作的代码,包括对附接到I/O路径的操纵、无服务器函数或数据处理流水线的实现(例如,经由图5A至图6B的交互、图7至图8的例程的实现等)。
图2的前端服务器200是这种装置的一种示例性配置,其他配置也是可能的。例如,虽然被示为单个装置,但在一些实施方案中,前端服务器200可以被实现为多个物理主机装置。示例性地,这种前端服务器200的第一装置可以实现控制平面单元286,而第二装置可以实现数据平面单元288。
虽然在图2中描述为前端服务器200,但在一些实施方案中可以利用类似的部件来实现图1的环境100中所示的其他装置。例如,类似的装置可以实现工作者管理器140,如在2014年9月30日提交的名称为“PROGRAMMATIC EVENT DETECTION AND MESSAGE GENERATIONFOR REQUESTS TO EXECUTE PROGRAM CODE”的美国专利号9,323,556(“556专利”)中更详细描述的,其全部内容通过引用并入本文。
参考图3,描绘了用于使客户端装置102A能够通过将数据操作***到I/O路径中来修改对象存储服务160上的一个或多个对象的I/O路径的示例***互,该操纵在可在按需代码执行***120上执行的任务内实现。
图3的交互开始于(1)处,其中客户端装置102A编写流操纵代码。代码可以示例性地用于访问在程序执行时提供的输入文件句柄(其例如可以由程序的标准输入流表示,通常为“stdin”),对从该文件句柄获得的数据执行操作,并且将数据写入在程序执行时提供的输出文件句柄(其可以例如由程序的标准输出流表示,通常为“stdot”)。
虽然本文关于“文件”句柄讨论示例,但是本公开的实施方案可以利用提供对任何操作***级输入/输出(IO)流的访问的句柄,其示例包括字节流、字符流、文件流等。如本文所用,术语操作***级输入/输出流(或简称为“IO流”)旨在指操作***为其提供定义的一组函数的数据流,诸如在流中搜索、从流中读取和向流中写入。可以以各种方式创建流。例如,编程语言可以通过使用函数库来在本地操作***上打开文件来生成流,或者可以通过使用“流水线”运算符(例如,在操作***外壳命令语言内)来创建流。如本领域技术人员将了解的,作为代码的基本功能性,大多数通用编程语言包括与流交互的能力。
根据本公开的实施方案,可以编写任务代码以接受作为代码的参数的输入句柄和输出句柄,这两者都表示IO流(例如,分别为输入流和输出流)。然后,代码可以操纵输入流的数据,并将输出写入输出流。给定使用通用编程语言,可以根据用户的期望来实现各种函数中的任何一种。例如,函数可以从输入流中搜索并移除机密信息。虽然一些代码可以仅利用输入和输出句柄,但其他代码可以实现附加接口,诸如网络通信接口。然而,通过向代码提供对在代码之外创建的输入和输出流的访问(经由相应的句柄),消除了对代码创建此类流的需求。此外,由于流可能是在代码之外并且可能是在代码的执行环境之外创建的,因此流操纵代码不一定需要被信任来执行创建流所必需的某些操作。例如,流可以表示通过网络连接传输的信息,而不向代码提供对该网络连接的访问。因此,使用IO流将数据传入和传出代码执行可以简化代码,同时提高安全性。
如上所述,可以用多种编程语言编写代码。用于此类语言的编写工具在本领域中是已知的,因此在本文中将不进行描述。虽然编写在图3中描述为发生在客户端装置102A上,服务160在一些情况下可以提供接口(例如,web GUI),通过该接口来编写或选择代码。
在(2)处,客户端装置102A向服务160的前端162提交流操纵代码,并请求将代码的执行***到一个或多个对象的I/O路径中。示例性地,前端162可以向装置102A提供一个或多个接口,该接口使得能够提交代码(例如,作为压缩文件)。前端162还可以提供接口,该接口使得能够指定代码的执行应被应用到的一个或多个I/O路径。例如,每个I/O路径可以对应于对象或对象集合(例如,对象的“桶”)。在一些情况下,I/O路径可以进一步对应于访问此类对象或集合的给定方式(例如,通过其创建对象的URI)、对应于试图访问对象或集合的一个或多个账户或对应于其他路径标准。然后,在(3)处,将路径修改的指定存储在I/O路径修改数据存储库164中。此外,在(4)处,流操纵代码被存储在对象数据存储库166内。
因此,当经由指定的I/O路径接收到I/O请求时,服务160被配置为在随后将请求应用到代码执行的输出之前,针对请求的输入数据(例如,由客户端装置102A或服务160的对象提供的数据,取决于I/O请求)执行流操纵代码。以这种方式,客户端装置102A(其在图3中示例性地表示对象或对象集合的所有者)可以获得对存储在对象存储服务160上并从其检索的数据的更大控制。
图3的交互一般涉及将单个数据操作***到服务160上的对象或集合的I/O路径中。然而,在本公开的一些实施方案中,使对象或集合的所有者能够将多个数据操作***到此类I/O路径中。每个数据操作可以对应于例如基于无服务器代码的操纵或服务160的本机操纵。例如,假设所有者已经将数据集作为对象提交给服务160,并且所有者希望向终端用户提供该数据集的一部分的过滤视图。虽然所有者可以将该部分的过滤视图存储为单独的对象,并向终端用户提供对该单独的对象的访问,但这导致服务160上的数据重复。在所有者希望向多个终端用户提供数据集的不同部分(可能具有定制的过滤器)的情况下,该数据重复增加,从而导致效率显著降低。根据本公开,另一选项可以是所有者编写或获得定制代码,以在对象的不同部分上实现不同的过滤器,并将该代码***到对象的I/O路径中。然而,该方法可能需要所有者复制服务160的某些本机功能性(例如,检索数据集的一部分的能力)。此外,这种方法将抑制代码的模块化和可重用性,因为需要单组代码来执行两个函数(例如,选择数据的一部分并过滤该部分)。
为了解决这些缺点,本公开的实施方案使得所有者能够创建待应用于I/O路径的数据操作的流水线,将多个数据操作链接在一起,其中每个数据操作也可以被***到其他I/O路径中。这种流水线的示例性可视化在图4中显示为流水线400。具体地说,流水线400示出所有者指定将在针对对象或对象集合调用请求方法时发生的一系列数据操作。如图4所示,流水线从输入数据开始,输入数据是根据被调用的请求方法在调用中指定的。例如,PUT调用通常可以包括作为待存储的数据的输入数据,而GET调用通常可以通过引用存储的对象包括输入数据。LIST调用可以指定目录,目录的清单是LIST请求方法的输入数据。
与请求方法的典型实现相反,在示例性流水线400中,被调用的请求方法最初不应用于输入数据。相反,输入数据最初被传递到“代码A”404的执行,其中代码A表示第一组用户编写的代码。该执行的输出然后被传递到“本机函数A”406,其示例性地表示服务160的本机函数,诸如由对象操纵引擎170实现的“SELECT”或字节范围函数。然后将该本机函数406的输出传递给“代码B”408的执行,其表示第二组用户编写的代码。此后,该执行408的输出被传递给被调用的请求方法410(例如,GET、PUT、LIST等)。因此,在图4的图示中,请求方法被应用于执行408的输出,其示例性地表示根据一个或多个所有者指定的操作412的输入数据的转换,而不是如在传统技术中那样将请求方法应用于输入数据。值得注意的是,流水线400的实现可以不需要任何动作或暗示调用客户端装置102一方对流水线400的任何知识。因此,可以期望流水线的实现不会影响与服务160交互的现有机制(除了根据流水线改变存储在服务160上或从其检索的数据)。例如,可以预期流水线的实现不需要使用服务160的API来重新配置现有程序。
尽管图4的流水线400是线性的,但在一些实施方案中,服务160可以使得所有者能够配置非线性流水线,诸如通过在流水线内包括条件节点或分支节点。示例性地,如下面更详细描述的,数据操作(例如,基于无服务器的函数)可以被配置为包括返回值,诸如成功执行、遇到错误等的指示。在一个示例中,数据操作的返回值可以用于选择分支流水线内的条件分支,使得第一返回值使流水线在第一分支上进行,而第二返回值使流水线在第二分支上进行。在一些情况下,流水线可以包括并行分支,使得将数据复制或划分为多个数据操作,在执行被调用的方法之前将其输出传递给单个数据操作以用于合并。服务160可以示例性地提供图形用户接口,所有者可以通过图形用户接口创建流水线,诸如通过指定流水线内的节点并经由逻辑连接将这些节点链接在一起。各种基于流的开发接口是已知的,并且可以结合本公开的方面来使用。
此外,在一些实施方案中,应用于特定I/O路径的流水线可以在请求时基于根据不同标准应用于路径的数据操作而即时生成。例如,数据集合的所有者可以将第一数据操作应用于与集合内的对象的所有交互,并且将第二数据操作应用于经由给定URI获得的所有交互。因此,当经由给定URI接收到与集合内的对象交互的请求时,服务160可以生成组合第一数据操作和第二数据操作的流水线。服务160可以示例性地实现标准的层次结构,使得应用于对象的操纵在应用于URI等的操纵之前被放置在流水线内。
在一些实施方案中,可以使客户端装置102能够请求将数据操作包括在流水线内。例如,在GET请求的参数内,客户端装置102可以指定待包括在结合请求应用的流水线内的特定数据操作。示例性地,集合所有者可以指定允许用于集合的一个或多个数据操作,并且进一步指定用于那些操纵的标识符(例如,函数名称)。因此,当请求与集合交互时,客户端装置102可以指定标识符以使得操纵被包括在应用于I/O路径的流水线内。在一个实施方案中,在所有者指定的数据操作之后并且在实现所请求的请求方法之前,将客户端请求的操作附加到流水线的端。例如,在客户端装置102请求GET数据集,并且在实现GET方法之前请求将搜索函数应用于数据集的情况下,搜索函数可以接收针对数据集的所有者指定的数据操作(例如,从数据集移除机密信息的操作)的输出作为输入数据。另外,在一些实施方案中,请求可以指定待传递给一个或多个数据操作的参数(无论是否在请求内指定)。因此,虽然本公开的实施方案可以在客户端装置102一方不知道那些操纵的情况下实现数据操作,但是其他实施方案可以使客户端装置102能够在I/O请求内传递信息以用于实现数据操作。
此外,虽然本公开的示例性实施方案是关于对被调用方法的输入数据的操纵来讨论的,但是本公开的实施方案还可以用于修改请求的方面,包括被调用的方法。例如,无服务器任务执行可以被传递请求的内容(包括例如被调用的方法和参数),并且被配置为修改和返回方法或参数的修改版本作为对前端162的返回值。示例性地,在客户端装置102被认证为只能访问数据对象的一部分的用户的情况下,无服务器任务执行可以被传递“GET”该数据对象的调用,并且可以转换GET请求的参数,使得其仅应用于与用户可以访问的部分相对应的数据对象的特定字节范围。作为另一示例,可以利用任务来实现对被调用方法的定制解析或限制,诸如通过限制用户可以调用的方法、对那些方法的参数等。在一些情况下,将一个或多个函数应用于请求(例如,以修改被调用的方法或方法参数)可以被视为“预数据处理”流水线,并且因此可以在获得流水线400内的输入数据(其输入数据可以由于请求的改变而改变)之前实现,或者可以独立于数据操作流水线400实现。
类似地,虽然本公开的示例性实施方案是关于应用被调用的方法来输出一个或多个数据操作的数据来讨论的,但在一些实施方案中,操纵可以附加地或替代地在应用被调用的方法之后发生。例如,数据对象可以包含数据所有者希望在将数据提供给客户端之前移除的敏感数据。所有者还可以使客户端能够指定对数据集的本机操作,诸如对数据集进行数据库查询(例如,经由SELECT资源方法)。虽然所有者可以指定用于数据集的流水线以使得在应用SELECT方法之前对敏感数据进行过滤,但此类操作顺序可能是不期望的,因为过滤可能针对整个数据对象而不是仅针对SELECT查询返回的部分进行。因此,除了指定在满足请求方法之前发生的操纵之外或作为替代,本公开的实施方案可以使得所有者能够指定在应用被调用的方法之后但在进行最终操作以满足请求之前发生的操纵。例如,在SELECT操作的情况下,服务160可以首先针对指定的输入数据(例如,数据对象)进行SELECT操作,然后将该SELECT操作的输出传递给数据操作,例如无服务器任务执行。然后可以将该执行的输出返回到客户端装置102以满足请求。
虽然图3和图4通常参考对象或集合的所有者编写的无服务器任务来描述,但在一些情况下,服务160可以使代码编写者能够与服务160的其他用户共享他们的任务,使得第一用户的代码在第二用户所拥有的对象的I/O路径中执行。服务160还可以提供任务库以供每个用户使用。在一些情况下,可以将共享任务的代码提供给其他用户。在其他情况下,共享任务的代码可以对其他用户隐藏,使得其他用户可以执行任务,但不能查看任务的代码。在这些情况下,可以示例性地使其他用户能够修改代码执行的特定方面,诸如代码将在其下执行的许可。
参考图5A和图5B,将讨论用于将修改应用到用于在服务160上存储对象的请求的I/O路径的示例***互,该请求结合这些图被称为“PUT”请求或“PUT对象调用”。虽然在两个图中示出,但在图5A和图5B中保持交互的编号。
交互开始于(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路径可以对应于使用指向特定URI(例如,与前端162相关联)PUT请求方法以将对象存储在服务160上的特定逻辑位置(例如,特定桶)中。在图5A和图5B中,假设该逻辑位置的所有者先前已经指定了对I/O路径的修改,并且具体地说,已经指定了在将无服务器函数的结果存储在服务160中之前应该将函数应用于输入数据。
因此,在(3)处,前端162在修改中检测I/O路径是否包含无服务器任务执行。因此,在(4)处,前端162向按需代码执行***120提交调用,以针对在调用中指定的输入数据执行在修改内指定的任务。
因此,在(5)处,按需代码执行***120生成执行环境502,在该执行环境中执行对应于任务的代码。示例性地,调用可以被引导到***的前端130,该前端可以向工作者管理器140分配指令以选择或生成在其中执行任务的VM实例150,该VM实例150示例性地表示执行环境502。在执行环境502的生成期间,***120进一步向环境提供在I/O路径修改内指示的任务的代码504(其可以例如从对象数据存储库166检索)。虽然在图5A中未显示,环境502还包括代码的其他依赖性,诸如对操作***的访问、执行代码所需的运行时等。
在一些实施方案中,执行环境502的生成可以包括用限制对网络资源的访问的安全约束来配置环境502。示例性地,在任务意图在不参考网络资源的情况下进行数据操作的情况下,环境502可以被配置为不具有经由网络发送或接收信息的能力。在任务意图利用网络资源的情况下,可以在“白名单”的基础上提供对这些资源的访问,从而仅允许来自环境502的网络通信用于指定的域、网络地址等。网络限制可以例如由托管环境502的主机装置(例如,由管理程序或主机操作***)来实现。在一些情况下,网络访问要求可以用于帮助在逻辑上或物理上放置环境502。例如,在任务不需要访问网络资源的情况下,用于任务的环境502可以被放置在远离服务提供商***110的其他网络可访问服务的主机装置上,诸如具有到那些服务的较低质量的通信信道的“边缘”装置。在任务需要访问其他专用网络服务的情况下,诸如在虚拟专用云中实现的服务(例如,代表给定用户在服务160上实现的类似局域网的环境),环境502可以被创建为逻辑上存在于该云内,使得任务执行502访问云中的资源。在一些实例中,任务可以被配置为在提交I/O请求的客户端装置102的私有云中执行。在其他情况下,任务可以被配置为在请求内引用的对象或集合的所有者的私有云中执行。
除了生成环境502之外,在(6)处,***120为环境提供对输入文件句柄506和输出文件句柄508的流级访问,其可以用于分别读取和写入任务执行的输入数据和输出数据。在一个实施方案中,文件句柄506和508可以指向附接到环境502的(物理的或虚拟的)块存储装置(例如,磁盘驱动器),使得任务可以与本地文件***交互以读取输入数据和写入输出数据。例如,环境502可以表示具有虚拟磁盘驱动器的虚拟机,并且***120可以从服务160获得输入数据并将输入数据存储在虚拟磁盘驱动器上。此后,在执行代码时,***120可以将存储在虚拟盘驱动器上的输入数据的句柄和要将输出数据写入到的驱动器上的文件的句柄传递给代码。在另一实施方案中,文件句柄506和508可以指向网络文件***,诸如NFS兼容文件***,输入数据已经存储在该网络文件***上。例如,在处理调用期间,前端162可以将输入数据作为对象存储在对象数据存储库166上,并且文件级接口166可以提供对输入数据和表示输出数据的文件的文件级访问。在一些情况下,文件句柄506和508可以指向虚拟文件***(诸如用户空间文件***)上的文件。通过提供句柄506和508,使任务代码504能够使用流操纵来读取输入数据并写入输出数据,而不是需要实现网络传输。句柄506和508(或对应于句柄的流)的创建可以示例性地通过在环境502内或与该环境相关联的分段代码157的执行来实现。
图5A的交互在图5B中继续,其中***120执行任务代码504。由于任务代码504可以是用户编写的,因此可以在代码504内实现任何数量的函数。然而,为了描述图5A和图5B,将假设代码504在执行时从输入文件句柄506(其可以作为通常使用的输入流传递,例如stdin),读取输入数据,操纵输入数据,并将输出数据写入输出文件句柄508(其可以作为通常使用的输出流传递,例如stdout)。因此,在(8)处,***120获得写入到输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,***120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。为了描述图5A和图5B,将假定返回值指示执行成功。在(10)处,输出数据和成功返回值随后被传递到前端162。
尽管在图5B中示出为单个交互,但在一些实施方案中,可以分别返回任务执行的输出数据和该执行的返回值。例如,在执行期间,任务代码504可以通过句柄508写入输出文件,并且该数据可以周期性地或迭代地返回到服务160。示例性地,在输出文件存在于由分段代码实现的用户空间文件***上的情况下,分段代码可以检测对输出文件的每个写入并将其转发到前端162。在输出文件存在于网络文件***上的情况下,对文件的写入可以直接导致将写入的数据传输到接口166,从而传输到服务160。在一些情况下,迭代地传输写入的数据可以减少环境502本地所需的存储量,因为根据一些实施方案,可以从环境502的本地存储中删除写入数据。
另外,虽然在图5A和图5B中假设成功返回值,但其他类型的返回值也是可能的和预期的。例如,错误返回值可以用于向前端162指示在执行任务代码504期间发生错误。作为另一示例,用户定义的返回值可以用于控制流水线内的条件分支如何进行。在一些情况下,返回值可以向前端162指示进一步处理的请求。例如,任务执行可以向前端162返回执行另一无服务器任务(可能未在针对当前I/O路径的路径修改中指定)的调用。此外,返回值可以向前端162指定要向客户端装置102A返回什么返回值。例如,在服务160处调用的典型PUT请求方法可以期望返回HTTP 200代码(“OK”)。这样,来自任务代码的成功返回值可以进一步指示前端162应当向客户端装置102A返回HTTP 200代码。例如,错误返回值可以指示前端162应该向客户端装置102A返回3XX HTTP重定向或4XX HTTP错误代码。此外,在一些情况下,返回值可以向前端162指定除返回值之外的给客户端装置102A的返回消息的内容。例如,前端162可以被配置为返回来自客户端装置102A的任何请求的给定HTTP代码(例如,200),该请求在前端162处被成功检索并且调用数据处理流水线。然后,任务执行可以被配置为在其返回值内指定除了该HTTP代码之外要传递给客户端装置102A的数据。此类数据可以示例性地包括提供由任务执行生成的信息的结构化数据(例如,可扩展标记语言(XML)数据),诸如指示任务的成功或失败的数据。该方法可以有利地使前端162能够快速响应请求(例如,不等待任务的执行),同时仍使任务执行能够将信息传递到客户端装置102。
出于本说明的目的,假设任务的成功返回值指示应该将HTTP 2XX成功响应传递给装置102A。因此,在接收到输出数据时,前端162将输出数据作为对象存储在对象数据存储库166、(11)内。交互(11)示例性地对应于最初由客户端装置102A调用的PUT请求方法的实现,尽管通过存储任务执行的输出而不是所提供的输入数据。在实现调用的PUT请求方法之后,前端162在(12)处向客户端装置102A返回由任务的成功返回值(例如,HTTP 200响应代码)指示的成功指示符。因此,从客户端装置102A的角度来看,在存储服务160上PUT对象的调用导致在服务160上创建该对象。然而,存储在服务160上的对象不是存储由装置102A提供的输入数据,而是对应于所有者指定任务的输出数据,从而使对象的所有者能够更好地控制该对象的内容。在一些使用情况下,服务160可以附加地将输入数据存储为对象(例如,在所有者指定的任务对应于可执行以提供可与输入数据结合使用的输出数据的代码的情况下,诸如从输入数据生成的校验和)。
参考图6A和图6B,将讨论用于对用于检索服务160上的对象的请求的I/O路径应用修改的示例***互,该请求结合这些图被称为“GET”请求或“GET调用”。虽然在两个图中示出,但在图6A和图6B中保持交互的编号。
交互开始于(1)处,其中客户端装置102A向存储服务160提交GET调用,该调用对应于获取存储在服务160上的对象(在调用中标识)的数据的请求。如图6A所示,调用被引导到服务160的前端162,在(2)处,该前端从I/O路径修改数据存储库164中检索对调用的I/O路径的修改的指示。例如,在图6A中,所使用的I/O路径可以对应于使用指向特定URI(例如,与前端162相关联)的GET请求方法以检索服务160上的特定逻辑位置(例如,特定桶)中的对象。在图6A和图6B中,假设该逻辑位置的所有者先前已经指定了对I/O路径的修改,并且具体地说,已经指定了在将无服务器函数的结果作为所请求的对象返回到装置102A之前应该将该函数应用于对象。
因此,在(3)处,前端162在修改中检测I/O路径是否包含无服务器任务执行。因此,在(4)处,前端162向按需代码执行***120提交调用,以针对在调用中指定的对象执行在修改内指定的任务。因此,在(5)处,按需代码执行***120生成执行环境502,在该执行环境中执行对应于任务的代码。示例性地,调用可以被引导到***的前端130,该前端可以向工作者管理器140分配指令以选择或生成在其中执行任务的VM实例150,该VM实例150示例性地表示执行环境502。在执行环境502的生成期间,***120进一步向环境提供在I/O路径修改内指示的任务的代码504(其可以例如从对象数据存储库166检索)。虽然在图6A中未显示,环境502还包括代码的其他依赖性,诸如对操作***的访问、执行代码所需的运行时等。
另外,在(6)处,***120为环境提供对输入文件句柄506和输出文件句柄508的文件级访问,其可以用于分别读取和写入任务执行的输入数据(对象)和输出数据。如上所述,文件句柄506和508可以指向附接到环境502的(物理的或虚拟的)块存储装置(例如,磁盘驱动器),使得任务可以与本地文件***交互以读取输入数据和写入输出数据。例如,环境502可以表示具有虚拟磁盘驱动器的虚拟机,并且***120可以在(6')处从服务160获得在调用内引用的对象,并且将该对象存储在虚拟磁盘驱动器上。此后,在执行代码时,***120可以将存储在虚拟盘驱动器上的对象的句柄和要将输出数据写入到的驱动器上的文件的句柄传递给代码。在另一实施方案中,文件句柄506和508可以指向网络文件***,诸如NFS兼容文件***,对象已经存储在该网络文件***上。例如,文件级接口166可以提供对存储在对象数据存储库内的对象以及对表示输出数据的文件的文件级访问。通过提供句柄506和508,使任务代码504能够使用流操纵来读取输入数据并写入输出数据,而不是需要实现网络传输。句柄506和508的创建可以示例性地通过在环境502内或与该环境相关联的分段代码157的执行来实现。
图6A的交互在图6B中继续,其中***120在(7)处执行任务代码504。由于任务代码504可以是用户编写的,因此可以在代码504内实现任何数量的函数。然而,为了描述图6A和图6B,将假设代码504在执行时从输入文件句柄506(其可以作为通常使用的输入流传递,诸如stdin)读取输入数据(对应于在调用中标识的对象),操纵输入数据,并将输出数据写入输出文件句柄508(其可以作为通常使用的输出流传递,例如stdot)。因此,在(8)处,***120获得写入到输出文件(例如,在输出文件句柄中引用的文件)的数据作为执行的输出数据。另外,在(9)处,***120获得代码执行的返回值(例如,在函数的最终调用中传递的值)。为了描述图6A和图6B,将假定返回值指示执行成功。在(10)处,输出数据和成功返回值随后被传递到前端162。
在接收到输出数据和返回值时,前端162将任务执行的输出数据作为请求对象返回。交互(11)因此示例性地对应于最初由客户端装置102A调用的GET请求方法的实现,尽管通过返回任务执行的输出而不是在调用中指定的对象。从客户端装置102A的角度来看,从存储服务160GET对象的调用因此导致将数据作为对象返回到客户端装置102A。然而,提供给客户端装置102A的数据不是返回存储在服务160上的对象,而是对应于所有者指定的任务的输出数据,从而使对象的所有者能够更好地控制返回给客户端装置102A的数据。
类似于上面关于图5A和图5B所讨论的,尽管在图6B中示出为单个交互,在一些实施方案中,可以分别返回任务执行的输出数据和该执行的返回值。另外,虽然在图6A和图6B中假设成功返回值,但其他类型的返回值也是可能的和预期的,诸如错误值、流水线控制值或执行其他数据操作的调用。此外,返回值可以指示将向客户端装置102A返回什么返回值(例如,作为HTTP状态代码)。在从任务执行迭代地返回输出数据的一些情况下,输出数据也可以由前端162迭代地提供给客户端装置102A。在输出数据很大(例如,在数百兆字节、千兆字节等的数量级上)的情况下,将输出数据迭代地返回到客户端装置102A可以使该数据能够被提供为流,从而相对于延迟数据的返回直到任务的执行完成,加速向装置102A的内容递送。
虽然上面参考图5A至图6B描述了示意***互,但对这些交互的各种修改是可能的,并且在本文中考虑。例如,虽然上述交互涉及输入数据的操纵,但在一些实施方案中,无服务器任务可以被***到服务160的I/O路径中以执行除数据操作以外的函数。示例性地,可以利用无服务器任务来执行关于被调用的请求方法的验证或授权,以验证客户端装置102A被授权执行该方法。基于任务的验证或授权可以实现不是由服务160本机提供的函数。例如,考虑希望将某些客户端装置102限制为仅访问在特定时间范围(例如,最近30天、除过去30天之外的任何时间等)期间创建的集合中的对象的集合所有者。虽然服务160可以在每个对象或每个集合的基础上本机地提供授权,但服务160在一些情况下可以不在创建持续时间的基础上本机地提供授权。因此,本公开的实施方案使所有者能够在到集合的I/O路径(例如,使用到集合的给定URI的GET路径)中***无服务器任务,该无服务器任务基于对象的创建时间来确定客户端是否被授权检索所请求的对象。示例性地,由任务的执行提供的返回值可以对应于“授权”或“未经授权”响应。在任务不执行数据操作的情况下,可能不需要为任务执行的环境提供输入和输出流句柄。因此,在这些情况下,服务160和***120可以被配置为放弃为环境提供此类句柄。例如,可以在创建任务时指定任务是否实现数据操作,并将其存储为任务的元数据(例如,在对象数据存储库166内)。因此,服务160可以从该元数据确定是否应该通过提供适当的流句柄来支持任务内的数据操作。
虽然一些实施方案可以在不使用流句柄的情况下利用返回值,但其他实施方案可以在不使用返回值的情况下利用流句柄。例如,虽然上述交互涉及向存储服务160提供任务执行的返回值,但在一些情况下,***120可以被配置为基于与输出流句柄的交互来检测函数的完成。示例性地,环境内的分段代码(例如,在用户空间中提供文件***或基于网络的文件***)可以检测到对流句柄进行解除分配的调用(例如,通过调用“file.close()”函数等)。分段代码可以将这种调用解释为函数的成功完成,并且在不需要任务执行显式地提供返回值的情况下通知服务160成功完成。
虽然上述交互一般涉及将输入数据传递给任务执行,但可以将附加或替代信息传递给执行。作为非限制性示例,此类信息可以包括来自客户端装置102的请求的内容(例如,传输的HTTP数据)、关于请求的元数据(例如,从其接收到请求的网络地址或请求的时间)、关于客户端装置102的元数据(例如,装置的认证状态、账户时间或请求历史)、或关于所请求的对象或集合的元数据(例如,大小、存储位置、许可或创建、修改或访问的时间)。此外,作为对输入数据的操纵的补充或替代,任务执行可以被配置为修改关于输入数据的元数据,该元数据可以与输入数据一起存储(例如,在对象内),并且因此借助于输出流句柄来写入,或者可以被单独存储并因此借助于元数据流句柄、在返回值中包括元数据、或者到服务160的单独网络传输来修改。
参考图7,将描述用于通过I/O路径实现与在图1的对象存储服务处获得的I/O请求相关联的所有者定义函数的示例性例程700。例程700可以示例性地在I/O路径(例如,根据对象或集合、访问对象或集合的机制(诸如URI)、传输IO请求的账户等来定义)与数据操作的流水线相关联之后实现。例如,例程700可以在上面讨论的图3的交互之前实现。例程700由前端162示例性地实现。
例程700开始于框702处,其中前端162获得将I/O方法应用于输入数据的请求。请求示例性地对应于客户端装置(例如,终端用户装置)。例如,I/O方法可以对应于HTTP请求方法,诸如GET、PUT、LIST、DELETE等。输入数据可以包括在请求内(例如,在PUT请求内),或者在请求中引用(例如,作为对象存储服务160上的现有对象)。
在框704处,前端162确定请求的I/O路径中的一个或多个数据操作。如上所述,I/O路径可以基于各种标准(或其组合)来定义,诸如在请求中引用的对象或集合、通过其传输请求的URI、与请求相关联的账户等。每个定义的I/O路径的操纵可以示例性地存储在对象存储服务160处。因此,在框704处,前端162可以将用于请求的I/O路径的参数与对象存储服务160处的存储数据操作进行比较,以确定***到I/O路径中的数据操作。在一个实施方案中,操纵形成流水线(诸如图4的流水线400),其可以由前端162在框704处预先存储或构建(例如,通过组合应用于I/O路径的多个操纵)。在一些情况下,可以在请求内指定附加数据操作,例如,可以在预先指定的数据操作(例如,在请求内未指定)之前***该数据操作。在其他情况下,请求可以不包括对任何数据操作的引用。
在框706处,前端162将I/O请求的输入数据传递给I/O路径的初始数据操作。初始数据操作可以包括例如对象存储服务160的本机操纵或由在调用中引用的对象或集合的所有者定义的无服务器任务。示例性地,在初始数据操作是本机操纵的情况下,前端162可以将输入传递到图1的对象操纵引擎170。在初始数据操作是无服务器任务的情况下,前端162可以将输入传递到图1的按需代码执行***120,用于经由任务的执行进行处理。下面参考图8描述用于实现无服务器任务的示例性例程。
尽管图7示例性地描述了数据操作,但在一些情况下,所有者可以将其他处理应用于I/O路径。例如,所有者可以将提供独立于数据操作的身份验证的无服务器任务***到对象或集合的I/O路径中。因此,在一些实施方案中,块706可以被修改,使得诸如关于请求或在请求中指定的对象的元数据的其他数据被传递给认证函数或其他路径操纵。
此后,例程700进行到框708,其中例程700的实现根据附加数据操作是否已经与I/O路径相关联而变化。如果是,则例程700进行到框710,其中将先前操纵的输出传递到与I/O路径相关联的下一操纵(例如,流水线的后续级)。
在框710之后,例程700然后返回到框708,直到不存在待实现的附加操作。例程700然后进行到框712,其中前端162将被调用的I/O方法(例如,GET、PUT、POST、LIST、DELETE等)应用于先前操纵的输出。例如,前端162可以作为GET或LIST请求的结果提供输出,或者可以作为PUT或POST请求的结果将输出存储为新对象。前端162还可以向请求装置提供对请求的响应,诸如例程700成功的指示(或者,在失败的情况下,例程失败)。在一个实施方案中,响应可以由在块706或710处实现的数据操作(例如,在错误或成功之前实现的最终操纵)提供的返回值来确定。例如,指示错误(例如,缺乏授权)的操纵可以指定指示该错误的HTTP代码,而成功进行的操纵可以指示前端162返回指示成功的HTTP代码,或者可以指示前端162返回与I/O方法的应用相关联的代码(例如,在没有数据操作的情况下)。此后,例程700在框714处结束。
值得注意的是,将被调用的方法应用于该输出而不是在初始请求中指定的输入可以改变存储在对象存储服务160中或从该对象存储服务中检索的数据。例如,作为对象存储在服务160上的数据可以不同于在存储此类数据的请求内提交的数据。类似地,作为对象从***检索的数据可能与存储在***上的对象不匹配。因此,例程700的实现使得数据对象的所有者能够代表所有者主张对存储在对象存储服务160上的对象或集合的I/O的更大控制。
在一些情况下,附加的或替代的块可以包括在例程700内,或者此类块的实现可以包括附加的或替代的操作。例如,如上所述,作为提供输出数据的补充或替代,无服务器任务执行可以提供返回值。在一些情况下,该返回值可以指示前端162关于在实现操纵中要采取的进一步动作。例如,错误返回值可以指示前端162停止操纵的实现,并且向请求装置提供指定的错误值(例如,HTTP错误代码)。另一返回值可以指示前端162实现附加的无服务器任务或操纵。因此,例程700在一些情况下可以被修改为例如在框706和710之后包括对先前操纵的返回值的处理(或框708可以被修改为包括对这种值的处理)。因此,例程700本质上旨在是示例性的。
参考图8,将描述用于在图1的按需代码执行***上执行任务以在实现所有者定义函数期间实现数据操作的示例性例程800。例程800由图1的按需代码执行***120示例性地实现。
例程800开始于框802处,其中***120获得实现流操纵任务(例如,操纵作为输入IO流句柄提供的数据的任务)的调用。例如,可以结合图7的例程700的框706或710来获得调用。调用可以包括用于任务的输入数据,以及其他元数据,诸如在调用之前的请求的元数据、在调用内引用的对象的元数据等。
在框804处,***120生成任务的执行环境。环境的生成可以包括例如任务可以在其中执行的容器或虚拟机实例的生成,以及向环境提供任务的代码,以及代码的任何依赖性(例如,运行时、库等)。在一个实施方案中,用与为任务指定的许可相对应的网络许可来生成环境。如上所述,根据例如白名单,可以限制性地(而不是许可地)设置此类许可。因此,如果I/O路径的所有者没有规范许可,则环境可能缺乏网络访问权。由于任务操作以操纵流,而不是网络数据,因此这种限制性模型可以提高安全性,而不会对功能性产生不利影响。在一些实施方案中,可以在逻辑网络位置处生成环境,该逻辑网络位置提供对其他受限网络资源的访问。例如,环境可以在与调用装置相关联的虚拟专用局域网(例如,虚拟专用云环境)内生成。
在框806处,***120对具有表示输入数据的IO流的环境进行分段。示例性地,***120可以用包括输入数据的文件***来配置环境,并且将使能作为文件流访问输入数据的句柄传递给任务代码。例如,***120可以用网络文件***配置环境,从而提供对输入数据(例如,存储在对象存储***上)的基于网络的访问。在另一示例中,***120可以用“本地”文件***(例如,从提供文件***的操作***的观点来看)配置环境,并且将输入数据复制到本地文件***。本地文件***可以例如是用户空间文件***(FUSE)。在一些情况下,本地文件***可以在由环境的主机装置或由基于网络的装置(例如,作为网络可访问块存储装置)提供的虚拟化磁盘驱动器上实现。在其他实施方案中,***120可以通过将输入数据通过“流水线”传送到执行环境、通过将输入数据写入环境的网络套接字(其可以不提供对外部网络的访问)等来提供IO流。***120进一步配置具有对输出流的流级访问的环境,例如通过在文件***上创建用于输出数据的文件,使任务的执行能够创建此类文件,将环境的句柄(例如,stdout)通过流水线传送到与环境或环境的管理程序共同定位的另一个VM实例上的位置,等等。
在框808处,在环境内执行任务。任务的执行可以包括执行任务的代码,以及传递给输入流和输出流的执行句柄。例如,***120可以将存储在文件***上的输入数据的句柄作为“stdin”变量传递给执行。***还可以将输出数据流的句柄例如作为“stdout”变量传递给执行。另外,***120可以将其他信息(诸如请求的元数据或在请求内指定的对象或集合)作为参数传递给执行。因此,任务的代码可以执行以根据代码的函数对输入数据进行流操纵,并使用OS级流操作将执行的输出写入输出流。
例程800然后进行到框810,其中***120返回写入输出流的数据作为任务的输出数据(例如,返回到对象存储***的前端162)。在一个实施方案中,框810可以在任务的执行完成之后发生,并且因此,***120可以返回作为任务的完整输出数据写入的数据。在其他情况下,框810可以在任务的执行期间发生。例如,***120可以检测写入输出流的新数据并立即返回该数据,而无需等待任务的执行。示例性地,在将输出流写入输出文件的情况下,***120可以在写入之后删除输出文件的数据,使得新数据的发送立即消除文件***维持足够的存储以存储任务执行的所有输出数据的需要。此外,在一些实施方案中,框810可以在检测到描述输出流的输出流句柄的关闭时发生。
另外,在框812处,在执行完成之后,***120返回由执行提供的返回值(例如,返回到对象存储***的前端162)。返回值可以指定执行的结果,诸如成功或失败。在一些情况下,返回值可以指定待执行的下一个动作,诸如实现附加数据操作。此外,返回值可以指定待提供给请求对数据对象(诸如待返回的HTTP代码)的I/O操作的调用装置的数据。如上所述,前端162可以获得此类返回值并采取适当的动作,诸如将错误或HTTP代码返回到调用装置、实现附加的数据操作、对输出数据执行I/O操作等。在一些情况下,返回值可以在任务的代码中明确指定。在其他情况下,诸如在代码中没有指定返回值的情况下,可以返回默认返回值(例如,指示成功的‘1’)。例程800然后在框814处结束。
示例性实施方案
本公开的实施方案的示例可以根据以下条款来描述:
条款1.一种将数据处理流水线应用于数据对象存储服务上存储的数据对象集合的输入/输出(IO)操作的***,所述***包括:
一个或多个数据存储库,所述一个或多个数据存储库包括:
数据对象集合;以及
在提供对执行所述IO操作的请求的响应之前将所述数据处理流水线指定为被应用于所述IO操作的信息,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于每个IO请求的输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从客户端装置接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法,其中当所述IO操作对应于从所述数据对象集合检索现有数据对象时,所述输入数据对应于所述数据对象集合的所述现有数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述数据对象集合中时,所述输入数据对应于由所述客户端装置提供的数据;
针对所述输入数据的数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述请求方法应用于所述系列中的最终数据操作的输出,其中将所述请求方法应用于所述输出包括将所述输出作为所述现有数据对象传输到所述客户端装置或将所述输出数据存储为所述新数据对象中的至少一者。
条款2.如条款1所述的***,其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由数据对象集合的所有者指定的代码来实现的无服务器函数。
条款3.如条款2所述的***,其中为了实现所述至少一个数据操作,所述一个或多个处理器被配置为向所述执行的执行环境提供对与输入数据文件对应的第一IO流和与输出数据文件对应的第二IO流的访问以用于所述执行。
条款4.如条款1所述的***,其中所述系列的至少一个数据操作被实现为所述数据对象存储服务的本机功能性。
条款5.一种计算机实现的方法,其包括:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象中的所述现有数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
在提供响应之前确定待应用于所述IO操作的数据处理流水线,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于所述输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
针对所述输入数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述IO操作应用于所述系列中的最终数据操作的输出,其中将所述IO操作应用于所述输出包括将所述输出作为所述现有数据对象传输到请求装置或将所述输出数据存储为所述一个或多个数据对象的所述新数据对象中的至少一者。
条款6.如条款5所述的计算机实现的方法,其中在提供所述响应之前确定待应用于所述IO操作的所述数据处理流水线包括至少部分地基于所述一个或多个数据对象、所述请求被传输到的资源标识符或所述客户端装置来标识所述请求的IO路径。
条款7.如条款5所述的计算机实现的方法,其中在提供所述响应之前确定待应用于所述IO操作的所述数据处理流水线包括组合与所述一个或多个数据对象相关联的第一数据操作和与所述请求被传输到的资源标识符相关联的第二数据操作。
条款8.如条款5所述的计算机实现的方法,其中所述IO操作对应于超文本传输协议(HTTP)GET操作,并且其中将所述请求方法应用于所述输出包括向所述客户端装置传输对所述GET操作的响应。
条款9.如条款5所述的计算机实现的方法,其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由所述一个或多个数据对象的所有者指定的代码来实现的无服务器函数。
条款10.如条款9所述的计算机实现的方法,其中实现所述至少一个数据操作包括在所述按需代码执行***上生成用于所述执行的执行环境,所述执行环境缺乏网络访问。
条款11.如条款9所述的计算机实现的方法,其中实现所述至少一个数据操作包括在所述按需代码执行***上生成用于所述执行的执行环境,所述执行环境能够访问与所述客户端装置相关联的虚拟专用局域网。
条款12.如条款5所述的计算机实现的方法,其中所述数据处理流水线还包括在所述系列之前的授权函数,并且其中所述方法还包括:
实现所述授权函数;
将关于所述请求的元数据传递给所述授权函数;以及
验证指示授权成功的所述授权函数的返回值。
条款13.如条款12所述的计算机实现的方法,其还包括将关于所述现有数据对象的元数据传递给所述授权函数。
条款14.包括计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由计算***执行时使所述计算***:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据;
在提供响应之前确定待应用于所述IO操作的数据处理流水线,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于所述输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
针对所述数据对象的数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述IO操作应用于所述系列中的最终数据操作的输出。
条款15.如条款14所述的非暂时性计算机可读介质,其中所述IO操作是HTTP请求方法。
条款16.如条款14所述的非暂时性计算机可读介质,其中当所述IO操作对应于检索所述一个或多个数据对象中的数据对象的列表时,所述输入数据对应于所述一个或多个数据对象的清单。
条款17.如条款14所述的非暂时性计算机可读介质,其中所述系列是第一系列,其中所述数据处理流水线还包括数据操作的第二系列,并且其中所述指令还使所述计算***至少部分地基于在所述第一系列与所述第二系列之间的分支之前所述流水线中的数据操作的返回值来选择用于实现的所述第一系列。
条款18.如条款14所述的非暂时性计算机可读介质,其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由数据对象集合的所有者指定的代码来实现的无服务器函数。
条款19.如条款18所述的非暂时性计算机可读介质,其中为了实现所述至少一个数据操作,所述指令使所述***向所述执行的执行环境提供对与输入数据文件对应的第一IO流和与输出数据文件对应的第二IO流的访问以用于所述执行。
条款20.如条款14所述的非暂时性计算机可读介质,其中所述数据处理流水线还包括在所述系列之前的授权函数,并且其中所述指令还使所述计算***:
实现所述授权函数;
将关于所述请求的元数据传递给所述授权函数;以及
验证指示授权成功的所述授权函数的返回值。
本公开的实施方案的其他示例可以根据以下条款来描述:
条款1.一种将数据操作应用于请求检索存储在对象存储服务上的数据对象的输入/输出(IO)操作的***,所述***包括:
一个或多个数据存储库,所述一个或多个数据存储库包括:
所述数据对象;以及
指定对所述IO操作的修改以包括在提供对执行所述IO操作的请求的响应之前针对所述数据对象发起所有者定义代码的执行的信息;
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从客户端装置获得检索所述数据对象的请求;
在按需代码执行***上发起所述所有者定义代码的所述执行;
将提供对表示所述数据对象的IO流的访问的输入句柄传递给所述所有者定义代码的所述执行;
从所述所有者定义代码的所述执行获得表示所述数据对象的所述数据的操纵的输出数据;以及
将所述所有者定义代码的所述执行输出数据作为所述数据对象返回给所述客户端装置。
条款2.如条款1所述的***,其中所述请求是超文本传输协议(HTTP)GET请求。
条款3.如条款1所述的***,其中所述执行发生在所述按需代码执行***的隔离执行环境内,并且其中所述输入句柄描述所述执行环境的本地文件***上的文件。
条款4.如条款3所述的***,其中所述本地文件***在存储所述数据对象的副本的虚拟化磁盘驱动器上实现,并且其中所述一个或多个处理器还被配置为通过从所述一个或多个数据存储库复制所述数据对象来将所述数据对象的所述副本存储在所述虚拟化磁盘驱动器中。
条款5.一种计算机实现的方法,其包括:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象的数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
确定对由所述一个或多个数据对象的所有者建立的独立于所述请求的IO操作的修改,所述修改请求在提供对所述请求的响应之前针对所述输入数据发起所有者定义代码的执行;
在按需代码执行***上发起所述所有者定义代码的所述执行;
从所述所有者定义代码的所述执行获得表示所述输入数据的操纵的输出数据;以及
对所述输出数据执行所述IO操作,其中执行所述IO操作包括将所述输出数据作为所述现有数据对象传输到所述客户端装置或将所述输出数据存储为所述一个或多个数据对象的所述新数据对象中的至少一者。
条款6.如条款5所述的计算机实现的方法,其中所述IO操作是GET请求、PUT请求、POST请求、LIST请求或DELETE请求中的至少一者。
条款7.如条款5所述的计算机实现的方法,其还包括将提供对作为IO流的输入数据的访问的输入句柄传递给所述所有者定义代码的所述执行。
条款8.如条款7所述的计算机实现的方法,其还包括将提供对作为IO流的输出数据的访问的输出句柄传递给所述所有者定义代码的所述执行。
条款9.如条款8所述的计算机实现的方法,其中实现所述所有者定义代码的所述执行包括在没有网络访问的隔离执行环境中实现所述执行。
条款10.如条款7所述的计算机实现的方法,其中所述输入句柄描述网络文件***上的文件。
条款11.如条款5所述的计算机实现的方法,其还包括从所述所有者定义代码的所述执行获得指示所述执行成功的返回值,并且其中对所述输出数据执行所述IO操作响应于指示所述执行成功的所述返回值。
条款12.如条款5所述的计算机实现的方法,其中所述请求是超文本传输协议(HTTP)请求,并且其中所述方法还包括:
从所述所有者定义代码的所述执行获得标识HTTP响应代码的返回值;以及
响应于所述请求,将所述HTTP响应代码返回给所述客户端装置。
条款13.包括计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由计算***执行时使所述计算***:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象的数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
确定对由所述一个或多个数据对象的所有者建立的独立于所述请求的IO操作的修改,所述修改请求在提供对所述请求的响应之前针对所述输入数据发起所有者定义代码的执行;
在按需代码执行***上发起所述所有者定义代码的所述执行;
从所述所有者定义代码的所述执行获得表示所述输入数据的操纵的输出数据;以及
通过将所述输出数据作为所述现有数据对象传输到所述客户端装置或将所述输出数据存储为所述一个或多个数据对象的所述新数据对象的至少一者来对所述输出数据执行所述IO操作。
条款14.如条款13所述的非暂时性计算机可读介质,其中所述计算机可执行指令还使所述计算***将提供对作为IO流的输入数据的访问的输入句柄传递给所述所有者定义代码的所述执行。
条款15.如条款14所述的非暂时性计算机可读介质,其中所述输入句柄描述在所述按需代码执行***的执行环境中实现的虚拟文件***上的文件。
条款16.如条款15所述的非暂时性计算机可读介质,其还包括分段代码,所述分段代码在由所述计算***执行时使所述计算***:
为所述执行环境提供所述文件;以及
为所述执行环境提供输出文件;
其中按需代码执行***被配置为将所述输出文件的输出文件句柄传递给所述所有者定义代码的所述执行,并且其中所述输出数据通过所述执行使用所述输出文件句柄被写入所述输出文件。
条款17.如条款16所述的非暂时性计算机可读介质,其中所述计算机可执行指令在所述计算***的一个或多个计算装置上执行,并且其中所述分段代码还使所述计算***:
通过所述执行检测所述输出文件句柄的关闭;以及
将所述输出文件的内容提供给所述一个或多个计算装置。
条款.18如条款15所述的非暂时性计算机可读介质,其中所述客户端装置被认证为与用户账户相关联,其中所述用户账户的用户已经指定了从所述所有者定义代码的所述执行所允许的一组网络传输,并且其中为了在所述按需代码执行***上实现所述所有者定义代码的所述执行,所述计算***被配置为在所述按需代码执行***上生成具有限于所允许的网络传输集合的网络通信的执行环境。
条款19.如条款18所述的非暂时性计算机可读介质,其中所述用户是所述所有者。
条款20.如条款15所述的非暂时性计算机可读介质,其中所述执行在所述按需代码执行***的执行环境中实现,并且其中所述执行环境位于与所述客户端装置的用户账户相关联的虚拟专用局域网内。
本公开的实施方案的其他示例可以根据以下条款来描述:
条款1.一种使数据操作能够应用于请求检索存储在对象存储服务上的数据对象的输入/输出(IO)操作的***,所述***包括:
一个或多个计算装置,所述一个或多个计算装置实现所述对象存储服务,所述服务代表所有者存储数据对象集合;以及
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从所述所有者的计算装置接收将所有者定义代码的执行***到用于数据对象集合的输入/输出(IO)路径中的请求;
存储所述IO路径与所述所有者定义代码的关联,所述所有者定义代码将所述对象存储服务配置为在满足经由所述IO路径接收的用于数据对象集合请求之前,发起所述所有者定义代码的执行;以及
其中所述对象存储服务通过所述IO路径与所述所有者定义代码的所存储的关联被配置为:
经由所述IO路径接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法;以及
至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据,并将所述请求方法应用于所述输出数据来满足所述IO请求。
条款2.如条款1所述的***,其中所述请求方法是超文本传输协议(HTTP)GET,其中所述输入数据是待由所述请求检索的所述对象集合内的对象,并且其中将所述请求方法应用于所述输出数据包括将所述输出数据作为所述对象返回。
条款3.如条款1所述的***,其中所述IO路径至少部分地基于所述数据对象集合、所述IO请求被传输到的资源标识符或从其接收所述IO请求的计算装置中的一个或多个来定义。
条款4.如条款1所述的***,其中所述一个或多个处理器进一步配置有所述计算机可执行指令以:
从所述所有者的所述计算装置接收将第二所有者定义代码的执行***到用于数据对象集合的第二输入/输出(IO)路径中的请求;
存储所述第二IO路径与所述第二所有者定义代码的关联,所述第二所有者定义代码将所述对象存储服务配置为在满足经由所述第二IO路径接收的针对所述数据对象集合的请求之前,执行所述第二所有者定义代码;以及
其中所述对象存储服务通过所述第二IO路径与所述第二所有者定义代码的所存储的关联被配置为:
经由所述第二IO路径接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于第二输入数据的附加请求方法;以及
至少部分地通过针对所述第二输入数据发起所述第二所有者定义代码的所述执行以产生第二输出数据,并且将所述附加请求方法应用于所述第二输出数据来满足所述第二IO请求。
条款5.一种计算机实现的方法,其包括:
从所述所有者的计算装置接收将所有者定义代码的执行***到代表所述所有者存储在对象存储服务上的数据对象集合的输入/输出(IO)路径中的请求;以及
存储所述IO路径与所述所有者定义代码的关联,所述所有者定义代码将所述对象存储服务配置为在满足对所述数据对象集合的IO请求之前,执行所述所有者定义代码;
其中配置所述对象存储服务使所述对象存储服务响应于与所述数据对象集合相关联并且指定待应用于输入数据的请求方法的IO请求,至少部分地通过以下方式满足所述IO请求:
针对所述输入数据发起所述所有者定义代码的执行以产生输出数据,以及
将所述请求方法应用于所述输出数据。
条款6.如条款5所述的计算机实现的方法,其中所述所有者定义代码由所述所有者的所述计算装置提供。
条款7.如条款5所述的计算机实现的方法,其中所述所有者定义代码是从与所述对象存储服务相关联的代码库中选择的。
条款8.如条款5所述的计算机实现的方法,其中所述请求方法是超文本传输协议(HTTP)PUT,其中所述输入数据在所述IO请求内提供,并且其中将所述请求方法应用于所述输出数据包括将所述输出数据存储为所述对象集合内的新对象。
条款9.如条款5所述的计算机实现的方法,其中所述IO请求包括对与所述数据对象集合相关联的第二所有者定义代码的调用,并且其中所述对象存储服务被配置为响应于所述IO请求执行所述第二所有者定义代码以产生所述输入数据。
条款10.如条款5所述的计算机实现的方法,其中IO请求不引用所述所有者定义代码。
条款11.如条款5所述的计算机实现的方法,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输入数据的访问的句柄作为IO流传递给所述执行。
条款12.如条款11所述的计算机实现的方法,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为在所述执行的本地文件***上分段所述输入数据的副本。
条款13.存储计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由数据对象存储***执行时使所述数据对象存储***:
从所述所有者的计算装置接收将所有者定义代码的执行***到代表所述所有者存储在对象存储服务上的数据对象集合的输入/输出(IO)路径中的请求;
存储所述IO路径与所述所有者定义代码的关联;
接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法;以及
响应于所存储的IO路径与所述所有者定义代码的关联,至少部分地通过针对所述输入数据发起所述所有者定义代码的执行以产生输出数据,并将所述请求方法应用于所述输出数据来满足所述IO请求。
条款14.如条款13所述的非暂时性计算机可读介质,其中所述请求方法是超文本传输协议(HTTP)LIST,其中所述输入数据是所述数据对象集合内的数据对象的清单,并且其中将请求方法应用于所述输出数据包括将所述输出数据作为所述数据对象集合内的数据对象的所述清单返回。
条款15.如条款14所述的非暂时性计算机可读介质,其中所述输出数据不包括在所述所有者定义代码执行期间从所述清单移除的所述数据对象集合内的至少一个数据对象的标识。
条款16.如条款13所述的非暂时性计算机可读介质,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输入数据的访问的文件句柄作为IO流传递给所述执行。
条款17.如条款13所述的非暂时性计算机可读介质,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输出数据的输出流的访问的文件句柄传递给所述执行。
条款18.如条款13所述的非暂时性计算机可读介质,其中所述所有者定义代码是第一所有者定义代码,并且其中所述计算机可执行指令还使所述数据对象存储***:
从所述所有者的所述计算装置接收在所述第一所有者定义代码的执行之后将第二所有者定义代码的执行***到用于数据对象集合的所述输入/输出(IO)路径中的请求;
存储所述IO路径与所述第二所有者定义代码的关联;
接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于附加输入数据的附加请求方法;以及
响应于所存储的IO路径与所述第一所有者定义代码和所述第二所有者定义代码的关联,至少部分地通过针对所述输入数据发起所述第一所有者定义代码的执行以产生中间数据,针对所述中间数据发起所述第二所有者定义代码的执行以产生输出数据,以及将请求方法应用于所述输出数据来满足IO请求。
条款19.如条款13所述的非暂时性计算机可读介质,其中所述所有者定义代码是第一所有者定义代码,并且其中所述计算机可执行指令还使所述数据对象存储***:
从所述所有者的所述计算装置接收在所述第一所有者定义代码的执行之前将第二所有者定义代码的执行***到用于所述数据对象集合的所述输入/输出(IO)路径中的请求;
存储所述IO路径与所述第二所有者定义代码的关联;
接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于附加输入数据的附加请求方法;以及
响应于所存储的IO路径与所述第一所有者定义代码和所述第二所有者定义代码的关联,至少部分地通过以下方式满足所述IO请求:
发起所述第二所有者定义代码的执行以产生返回值;
验证所述返回值指示所述IO请求被授权;以及
针对所述输入数据发起所述第一所有者定义代码的执行以产生输出数据,并且将所述请求方法应用于所述输出数据。
条款20.如条款19所述的非暂时性计算机可读介质,其中发起所述第二所有者定义代码的执行以产生返回值包括将所述IO请求的第二所有者定义代码元数据传递给所述执行。
上述所有方法和过程都可以体现在由一个或多个计算机或处理器执行的软件代码模块中,并经由这些软件代码模块完全自动化。所述代码模块可存储在任何类型的非暂时性计算机可读介质或其他计算机存储装置中。可选地,该方法中的一些或全部可以体现在专用计算机硬件中。
除非另有特别说明,否则除了别的之外,诸如“能够”,“可以”,“可能”或“会”的条件语言在上下文中被理解为表示某些实施方案包括而其他实施方案不包括某些特征、元件或步骤。因此,该类条件语言通常不旨在暗示特征、元件和/或步骤无论如何都是一个或多个实施方案所必需的,或者一个或多个实施方案无论有或没有用户输入或提示都必然包括用于决定任何特定实施方案中是否包括或将执行这些特征、元件和/或步骤的逻辑。
除非另有特别说明,否则诸如短语“X、Y或Z中的至少一者”的析取语言在上下文中被理解为表示项目、术语等可以是X、Y或Z,或其任何组合(例如,X、Y或Z)。因此,这种析取语言通常不旨在并且不应该暗示某些实施方案需要X中的至少一者、Y中的至少一者或Z中的至少一者每个都存在。
除非另有明确说明,否则诸如“一/一个(a/an)”之类的冠词通常应被解释为包括一个或多个描述项。因此,诸如“被配置为……的装置”等措辞意在包括一个或多个所述装置。此类一个或多个所述装置还可共同地被配置为执行所陈述的叙述。例如,“被配置为执行陈述A、B和C的处理器”可以包括被配置为与被配置为执行陈述B和C的第二处理器一起工作的第一处理器。
术语“或”通常应理解为包容性的,而不是排他性的。因此,包含“a、b或c”的组应被解释为包含包括a、b和c的组合的组。
在本文中描述或在附图中描绘的流程图中的任何例程描述、元件或块应被理解为潜在地表示包括用于实现例程中的特定逻辑函数或元件的一个或多个可执行指令的代码的模块、段或部分。替代实现方式包括在本文中所述实施方案的范围内,其中如本领域中的技术人员所理解的那样,根据所涉及的函数,元件或功能可删除、或不按照所示出或讨论的顺序执行,包括基本上同步执行或逆序执行。
应当强调的是,可以对上述实施方案做出许多变化和修改,这些变化和修改的元件应当被理解为是在其他可接受的示例之中。所有此类修改和变化旨在被包括在本公开的范围内,并受以下权利要求保护。
Claims (57)
1.一种将数据操作应用于请求检索存储在对象存储服务上的数据对象的输入/输出(IO)操作的***,所述***包括:
一个或多个数据存储库,所述一个或多个数据存储库包括:
所述数据对象;以及
指定对所述IO操作的修改以包括在提供对执行所述IO操作的请求的响应之前针对所述数据对象发起所有者定义代码的执行的信息;
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从客户端装置获得检索所述数据对象的请求;
在无服务器代码执行***上发起所述所有者定义代码的所述执行,其中所述执行发生在所述无服务器代码执行***的隔离执行环境内;
将提供对表示所述数据对象的IO流的访问的输入句柄传递给所述所有者定义代码的所述执行;
从所述所有者定义代码的所述执行获得表示所述数据对象的所述数据的操作的输出数据;以及
将所述所有者定义代码的所述执行的输出数据作为所述数据对象返回给所述客户端装置。
2.如权利要求1所述的***,其中所述请求是超文本传输协议(HTTP)GET请求。
3.如权利要求1所述的***,其中所述输入句柄描述所述执行环境的本地文件***上的文件。
4.如权利要求3所述的***,其中所述本地文件***在存储所述数据对象的副本的虚拟化磁盘驱动器上实现,并且其中所述一个或多个处理器还被配置为通过从所述一个或多个数据存储库复制所述数据对象来将所述数据对象的所述副本存储在所述虚拟化磁盘驱动器中。
5.一种计算机实现的方法,其包括:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象的数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
确定对由所述一个或多个数据对象的所有者建立的独立于所述请求的IO操作的修改,所述修改请求在提供对所述请求的响应之前针对所述输入数据发起所有者定义代码的执行;
在无服务器代码执行***上发起所述所有者定义代码的所述执行,其中所述执行发生在所述无服务器代码执行***的隔离执行环境内;
从所述所有者定义代码的所述执行获得表示所述输入数据的操作的输出数据;以及
对所述输出数据执行所述IO操作,其中执行所述IO操作包括将所述输出数据作为所述现有数据对象传输到所述客户端装置或将所述输出数据存储为所述一个或多个数据对象的所述新数据对象中的至少一者。
6.如权利要求5所述的计算机实现的方法,其中所述IO操作是GET请求、PUT请求、POST请求、LIST请求或DELETE请求中的至少一者。
7.如权利要求5所述的计算机实现的方法,其还包括将提供对作为IO流的输入数据的访问的输入句柄传递给所述所有者定义代码的所述执行。
8.如权利要求7所述的计算机实现的方法,其还包括将提供对作为IO流的输出数据的访问的输出句柄传递给所述所有者定义代码的所述执行。
9.如权利要求8所述的计算机实现的方法,其中所述隔离执行环境缺乏网络访问。
10.如权利要求7所述的计算机实现的方法,其中所述输入句柄描述网络文件***上的文件。
11.如权利要求5所述的计算机实现的方法,其还包括从所述所有者定义代码的所述执行获得指示所述执行成功的返回值,并且其中对所述输出数据执行所述IO操作响应于指示所述执行成功的所述返回值。
12.如权利要求5所述的计算机实现的方法,其中所述请求是超文本传输协议(HTTP)请求,并且其中所述方法还包括:
从所述所有者定义代码的所述执行获得标识HTTP响应代码的返回值;以及
响应于所述请求,将所述HTTP响应代码返回给所述客户端装置。
13.一种包括计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由计算***执行时使所述计算***:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象的数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
确定对由所述一个或多个数据对象的所有者建立的独立于所述请求的IO操作的修改,所述修改请求在提供对所述请求的响应之前针对所述输入数据发起所有者定义代码的执行;
在无服务器代码执行***上发起所述所有者定义代码的所述执行,其中所述执行发生在所述无服务器代码执行***的隔离执行环境内;
从所述所有者定义代码的所述执行获得表示所述输入数据的操作的输出数据;以及
通过将所述输出数据作为所述现有数据对象传输到所述客户端装置或将所述输出数据存储为所述一个或多个数据对象的所述新数据对象的至少一者来对所述输出数据执行所述IO操作。
14.如权利要求13所述的非暂时性计算机可读介质,其中所述计算机可执行指令还使所述计算***将提供对作为IO流的输入数据的访问的输入句柄传递给所述所有者定义代码的所述执行。
15.如权利要求14所述的非暂时性计算机可读介质,其中所述输入句柄描述在所述无服务器代码执行***的所述执行环境中实现的虚拟文件***上的文件。
16.如权利要求15所述的非暂时性计算机可读介质,其还包括分段代码,所述分段代码在由所述计算***执行时使所述计算***:
为所述执行环境提供所述文件;以及
为所述执行环境提供输出文件;
其中无服务器代码执行***被配置为将所述输出文件的输出文件句柄传递给所述所有者定义代码的所述执行,并且其中所述输出数据通过所述执行使用所述输出文件句柄被写入所述输出文件。
17.如权利要求16所述的非暂时性计算机可读介质,其中所述计算机可执行指令在所述计算***的一个或多个计算装置上执行,并且其中所述分段代码还使所述计算***:
通过所述执行检测所述输出文件句柄的关闭;以及
将所述输出文件的内容提供给所述一个或多个计算装置。
18.如权利要求15所述的非暂时性计算机可读介质,其中所述客户端装置被认证为与用户账户相关联,其中所述用户账户的用户已经指定了从所述所有者定义代码的所述执行所允许的一组网络传输,并且其中为了在所述无服务器代码执行***上实现所述所有者定义代码的所述执行,所述计算***被配置为在所述无服务器代码执行***上生成具有限于所允许的网络传输集合的网络通信的执行环境。
19.如权利要求18所述的非暂时性计算机可读介质,其中所述用户是所述所有者。
20.如权利要求15所述的非暂时性计算机可读介质,其中所述执行环境位于与所述客户端装置的用户账户相关联的虚拟专用局域网内。
21.一种使数据操作能够应用于请求检索存储在对象存储服务上的数据对象的输入/输出(IO)操作的***,所述***包括:
一个或多个计算装置,所述一个或多个计算装置实现所述对象存储服务,所述服务代表所有者存储数据对象集合;以及
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从所述所有者的计算装置接收将所有者定义代码的执行***到用于数据对象集合的输入/输出(IO)路径中的请求;
存储所述IO路径与所述所有者定义代码的关联,所述所有者定义代码将所述对象存储服务配置为在满足经由所述IO路径接收的用于数据对象集合请求之前,发起所述所有者定义代码的执行;以及
其中所述对象存储服务通过所述IO路径与所述所有者定义代码的所存储的关联被配置为:
经由所述IO路径接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法;以及
至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据,并将所述请求方法应用于所述输出数据来满足所述IO请求。
22.如权利要求21所述的***,其中所述请求方法是超文本传输协议(HTTP)GET,其中所述输入数据是待由所述请求检索的所述对象集合内的对象,并且其中将所述请求方法应用于所述输出数据包括将所述输出数据作为所述对象返回。
23.如权利要求21所述的***,其中所述IO路径至少部分地基于所述数据对象集合、所述IO请求被传输到的资源标识符或从其接收所述IO请求的计算装置中的一个或多个来定义。
24.如权利要求21所述的***,其中所述一个或多个处理器进一步配置有所述计算机可执行指令以:
从所述所有者的所述计算装置接收将第二所有者定义代码的执行***到用于数据对象集合的第二输入/输出(IO)路径中的请求;
存储所述第二IO路径与所述第二所有者定义代码的关联,所述第二所有者定义代码将所述对象存储服务配置为在满足经由所述第二IO路径接收的针对所述数据对象集合的请求之前,执行所述第二所有者定义代码;以及
其中所述对象存储服务通过所述第二IO路径与所述第二所有者定义代码的所存储的关联被配置为:
经由所述第二IO路径接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于第二输入数据的附加请求方法;以及
至少部分地通过针对所述第二输入数据发起所述第二所有者定义代码的所述执行以产生第二输出数据,并且将所述附加请求方法应用于所述第二输出数据来满足所述第二IO请求。
25.一种计算机实现的方法,其包括:
从所有者的计算装置接收将所有者定义代码的执行***到代表所述所有者存储在对象存储服务上的数据对象集合的输入/输出(IO)路径中的请求;以及
存储所述IO路径与所述所有者定义代码的关联,所述所有者定义代码将所述对象存储服务配置为在满足对所述数据对象集合的IO请求之前,执行所述所有者定义代码;
其中配置所述对象存储服务使所述对象存储服务响应于与所述数据对象集合相关联并且指定待应用于输入数据的请求方法的IO请求,至少部分地通过以下方式满足所述IO请求:
针对所述输入数据发起所述所有者定义代码的执行以产生输出数据,以及
将所述请求方法应用于所述输出数据。
26.如权利要求25所述的计算机实现的方法,其中所述所有者定义代码由所述所有者的所述计算装置提供。
27.如权利要求25所述的计算机实现的方法,其中所述所有者定义代码是从与所述对象存储服务相关联的代码库中选择的。
28.如权利要求25所述的计算机实现的方法,其中所述请求方法是超文本传输协议(HTTP)PUT,其中所述输入数据在所述IO请求内提供,并且其中将所述请求方法应用于所述输出数据包括将所述输出数据存储为所述对象集合内的新对象。
29.如权利要求25所述的计算机实现的方法,其中所述IO请求包括对与所述数据对象集合相关联的第二所有者定义代码的调用,并且其中所述对象存储服务被配置为响应于所述IO请求执行所述第二所有者定义代码以产生所述输入数据。
30.如权利要求25所述的计算机实现的方法,其中IO请求不引用所述所有者定义代码。
31.如权利要求25所述的计算机实现的方法,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输入数据的访问的句柄作为IO流传递给所述执行。
32.如权利要求31所述的计算机实现的方法,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为在所述执行的本地文件***上分段所述输入数据的副本。
33.一种存储计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由数据对象存储***执行时使所述数据对象存储***:
从所有者的计算装置接收将所有者定义代码的执行***到代表所述所有者存储在对象存储服务上的数据对象集合的输入/输出(IO)路径中的请求;
存储所述IO路径与所述所有者定义代码的关联;
接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法;以及
响应于所存储的IO路径与所述所有者定义代码的关联,至少部分地通过针对所述输入数据发起所述所有者定义代码的执行以产生输出数据,并将所述请求方法应用于所述输出数据来满足所述IO请求。
34.如权利要求33所述的非暂时性计算机可读介质,其中所述请求方法是超文本传输协议(HTTP)LIST,其中所述输入数据是所述数据对象集合内的数据对象的清单,并且其中将请求方法应用于所述输出数据包括将所述输出数据作为所述数据对象集合内的数据对象的所述清单返回。
35.如权利要求34所述的非暂时性计算机可读介质,其中所述输出数据不包括在所述所有者定义代码执行期间从所述清单移除的所述数据对象集合内的至少一个数据对象的标识。
36.如权利要求33所述的非暂时性计算机可读介质,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输入数据的访问的文件句柄作为IO流传递给所述执行。
37.如权利要求33所述的非暂时性计算机可读介质,其中为了至少部分地通过针对所述输入数据发起所述所有者定义代码的所述执行以产生输出数据来满足所述IO请求,所述对象存储服务还被配置为将提供对所述输出数据的输出流的访问的文件句柄传递给所述执行。
38.如权利要求33所述的非暂时性计算机可读介质,其中所述所有者定义代码是第一所有者定义代码,并且其中所述计算机可执行指令还使所述数据对象存储***:
从所述所有者的所述计算装置接收在所述第一所有者定义代码的执行之后将第二所有者定义代码的执行***到用于数据对象集合的所述输入/输出(IO)路径中的请求;
存储所述IO路径与所述第二所有者定义代码的关联;
接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于附加输入数据的附加请求方法;以及
响应于所存储的IO路径与所述第一所有者定义代码和所述第二所有者定义代码的关联,至少部分地通过针对所述输入数据发起所述第一所有者定义代码的执行以产生中间数据,针对所述中间数据发起所述第二所有者定义代码的执行以产生输出数据,以及将请求方法应用于所述输出数据来满足IO请求。
39.如权利要求33所述的非暂时性计算机可读介质,其中所述所有者定义代码是第一所有者定义代码,并且其中所述计算机可执行指令还使所述数据对象存储***:
从所述所有者的所述计算装置接收在所述第一所有者定义代码的执行之前将第二所有者定义代码的执行***到用于所述数据对象集合的所述输入/输出(IO)路径中的请求;
存储所述IO路径与所述第二所有者定义代码的关联;
接收与所述数据对象集合相关联的第二IO请求,其中所述第二IO请求指定待应用于附加输入数据的附加请求方法;以及
响应于所存储的IO路径与所述第一所有者定义代码和所述第二所有者定义代码的关联,至少部分地通过以下方式满足所述IO请求:
发起所述第二所有者定义代码的执行以产生返回值;
验证所述返回值指示所述IO请求被授权;以及
针对所述输入数据发起所述第一所有者定义代码的执行以产生输出数据,并且将所述请求方法应用于所述输出数据。
40.如权利要求39所述的非暂时性计算机可读介质,其中发起所述第二所有者定义代码的执行以产生返回值包括将所述IO请求的元数据传递给所述第二所有者定义代码的所述执行。
41.一种将数据处理流水线应用于数据对象存储服务上存储的数据对象集合的输入/输出(IO)操作的***,所述***包括:
一个或多个数据存储库,所述一个或多个数据存储库包括:
数据对象集合;以及
在提供对执行所述IO操作的请求的响应之前将所述数据处理流水线指定为被应用于所述IO操作的信息,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于每个IO请求的输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
一个或多个处理器,所述一个或多个处理器被配置有计算机可执行指令以:
从客户端装置接收与所述数据对象集合相关联的IO请求,其中所述IO请求指定待应用于输入数据的请求方法,其中当所述IO操作对应于从所述数据对象集合检索现有数据对象时,所述输入数据对应于所述数据对象集合的所述现有数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述数据对象集合中时,所述输入数据对应于由所述客户端装置提供的数据;
针对所述输入数据的数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述请求方法应用于所述系列中的最终数据操作的输出,其中将所述请求方法应用于所述输出包括将所述输出作为所述现有数据对象传输到所述客户端装置或将所述系列中的最终数据操作的输出存储为所述新数据对象中的至少一者;
其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由数据对象集合的所有者指定的代码来实现的无服务器函数。
42.如权利要求41所述的***,其中为了实现所述至少一个数据操作,所述一个或多个处理器被配置为向所述执行的执行环境提供对与输入数据文件对应的第一IO流和与输出数据文件对应的第二IO流的访问以用于所述执行。
43.如权利要求41所述的***,其中所述系列的至少第二数据操作被实现为所述数据对象存储服务的本机功能性。
44.一种计算机实现的方法,其包括:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据,其中当所述IO操作对应于从所述一个或多个数据对象检索现有数据对象时,所述输入数据对应于所述一个或多个数据对象中的所述现有数据对象,并且其中当所述IO操作对应于将新数据对象存储到所述一个或多个数据对象中时,所述输入数据对应于由所述客户端装置提供的数据;
在提供响应之前确定待应用于所述IO操作的数据处理流水线,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于所述输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
针对所述输入数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述IO操作应用于所述系列中的最终数据操作的输出,其中将所述IO操作应用于所述输出包括将所述输出作为所述现有数据对象传输到请求装置或将所述系列中的最终数据操作的输出存储为所述一个或多个数据对象的所述新数据对象中的至少一者;
其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由所述一个或多个数据对象的所有者指定的代码来实现的无服务器函数。
45.如权利要求44所述的计算机实现的方法,其中在提供所述响应之前确定待应用于所述IO操作的所述数据处理流水线包括至少部分地基于所述一个或多个数据对象、所述请求被传输到的资源标识符或所述客户端装置来标识所述请求的IO路径。
46.如权利要求44所述的计算机实现的方法,其中在提供所述响应之前确定待应用于所述IO操作的所述数据处理流水线包括组合与所述一个或多个数据对象相关联的第一数据操作和与所述请求被传输到的资源标识符相关联的第二数据操作。
47.如权利要求44所述的计算机实现的方法,其中所述IO操作对应于超文本传输协议(HTTP)GET操作,并且其中将所述请求方法应用于所述输出包括向所述客户端装置传输对所述GET操作的响应。
48.如权利要求47所述的计算机实现的方法,其中实现所述至少一个数据操作包括在所述按需代码执行***上生成用于所述执行的执行环境,所述执行环境缺乏网络访问。
49.如权利要求47所述的计算机实现的方法,其中实现所述至少一个数据操作包括在所述按需代码执行***上生成用于所述执行的执行环境,所述执行环境能够访问与所述客户端装置相关联的虚拟专用局域网。
50.如权利要求44所述的计算机实现的方法,其中所述数据处理流水线还包括在所述系列之前的授权函数,并且其中所述方法还包括:
实现所述授权函数;
将关于所述请求的元数据传递给所述授权函数;以及
验证指示授权成功的所述授权函数的返回值。
51.如权利要求50所述的计算机实现的方法,其还包括将关于所述现有数据对象的元数据传递给所述授权函数。
52.一种包括计算机可执行指令的非暂时性计算机可读介质,所述计算机可执行指令在由计算***执行时使所述计算***:
从客户端装置获得针对对象存储服务上的一个或多个数据对象执行输入/输出(IO)操作的请求,其中所述请求指定用于所述IO操作的输入数据;
在提供响应之前确定待应用于所述IO操作的数据处理流水线,其中所述数据处理流水线包括一系列单独的数据操作,所述系列的初始数据操作被应用于所述输入数据,并且所述系列的后续数据操作被应用于所述系列中的先前数据操作的输出;
针对所述数据对象的数据实现所述系列的初始数据操作;
对于所述系列的每个后续数据操作,针对所述系列中的先前数据操作的输出实现所述后续数据操作;以及
将所述IO操作应用于所述系列中的最终数据操作的输出;
其中所述系列的至少一个数据操作在按需代码执行***上被实现为通过执行由所述一个或多个数据对象的所有者指定的代码来实现的无服务器函数。
53.如权利要求52所述的非暂时性计算机可读介质,其中所述IO操作是HTTP请求方法。
54.如权利要求52所述的非暂时性计算机可读介质,其中当所述IO操作对应于检索所述一个或多个数据对象中的数据对象的列表时,所述输入数据对应于所述一个或多个数据对象的清单。
55.如权利要求52所述的非暂时性计算机可读介质,其中所述系列是第一系列,其中所述数据处理流水线还包括数据操作的第二系列,并且其中所述指令还使所述计算***至少部分地基于在所述第一系列与所述第二系列之间的分支之前所述流水线中的数据操作的返回值来选择用于实现的所述第一系列。
56.如权利要求52所述的非暂时性计算机可读介质,其中为了实现所述至少一个数据操作,所述指令使所述***向所述执行的执行环境提供对与输入数据文件对应的第一IO流和与输出数据文件对应的第二IO流的访问以用于所述执行。
57.如权利要求52所述的非暂时性计算机可读介质,其中所述数据处理流水线还包括在所述系列之前的授权函数,并且其中所述指令还使所述计算***:
实现所述授权函数;
将关于所述请求的元数据传递给所述授权函数;以及
验证指示授权成功的所述授权函数的返回值。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/586,704 US11055112B2 (en) | 2019-09-27 | 2019-09-27 | Inserting executions of owner-specified code into input/output path of object storage service |
US16/586,619 US11106477B2 (en) | 2019-09-27 | 2019-09-27 | Execution of owner-specified code during input/output path to object storage service |
US16/586,619 | 2019-09-27 | ||
US16/586,673 | 2019-09-27 | ||
US16/586,704 | 2019-09-27 | ||
US16/586,673 US11360948B2 (en) | 2019-09-27 | 2019-09-27 | Inserting owner-specified data processing pipelines into input/output path of object storage service |
PCT/US2020/051955 WO2021061620A1 (en) | 2019-09-27 | 2020-09-22 | Inserting owner-specified data processing pipelines into input/output path of object storage service |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114586011A CN114586011A (zh) | 2022-06-03 |
CN114586011B true CN114586011B (zh) | 2023-06-06 |
Family
ID=72744930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080067195.5A Active CN114586011B (zh) | 2019-09-27 | 2020-09-22 | 将所有者指定的数据处理流水线***到对象存储服务的输入/输出路径 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP4035007A1 (zh) |
CN (1) | CN114586011B (zh) |
WO (1) | WO2021061620A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11394761B1 (en) | 2019-09-27 | 2022-07-19 | Amazon Technologies, Inc. | Execution of user-submitted code on a stream of data |
US11550944B2 (en) | 2019-09-27 | 2023-01-10 | Amazon Technologies, Inc. | Code execution environment customization system for object storage service |
US11656892B1 (en) | 2019-09-27 | 2023-05-23 | Amazon Technologies, Inc. | Sequential execution of user-submitted code and native functions |
US11263220B2 (en) | 2019-09-27 | 2022-03-01 | Amazon Technologies, Inc. | On-demand execution of object transformation code in output path of object storage service |
US11416628B2 (en) | 2019-09-27 | 2022-08-16 | Amazon Technologies, Inc. | User-specific data manipulation system for object storage service based on user-submitted code |
US11360948B2 (en) | 2019-09-27 | 2022-06-14 | Amazon Technologies, Inc. | Inserting owner-specified data processing pipelines into input/output path of object storage service |
CN117111904B (zh) * | 2023-04-26 | 2024-05-28 | 领悦数字信息技术有限公司 | 用于将Web应用自动转换成无服务器函数的方法和*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018005829A1 (en) * | 2016-06-30 | 2018-01-04 | Amazon Technologies, Inc. | On-demand code execution using cross-account aliases |
CN108885568A (zh) * | 2016-03-30 | 2018-11-23 | 亚马逊技术有限公司 | 在按需代码执行环境处处理先已存在的数据集 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9813381B2 (en) * | 2014-06-18 | 2017-11-07 | Open Text Sa Ulc | Flexible and secure transformation of data using stream pipes |
US9323556B2 (en) | 2014-09-30 | 2016-04-26 | Amazon Technologies, Inc. | Programmatic event detection and message generation for requests to execute program code |
US10305734B2 (en) * | 2016-04-07 | 2019-05-28 | General Electric Company | Method, system, and program storage device for customization of services in an industrial internet of things |
US10540364B2 (en) * | 2017-05-02 | 2020-01-21 | Home Box Office, Inc. | Data delivery architecture for transforming client response data |
-
2020
- 2020-09-22 EP EP20786202.0A patent/EP4035007A1/en active Pending
- 2020-09-22 CN CN202080067195.5A patent/CN114586011B/zh active Active
- 2020-09-22 WO PCT/US2020/051955 patent/WO2021061620A1/en active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108885568A (zh) * | 2016-03-30 | 2018-11-23 | 亚马逊技术有限公司 | 在按需代码执行环境处处理先已存在的数据集 |
WO2018005829A1 (en) * | 2016-06-30 | 2018-01-04 | Amazon Technologies, Inc. | On-demand code execution using cross-account aliases |
Also Published As
Publication number | Publication date |
---|---|
CN114586011A (zh) | 2022-06-03 |
WO2021061620A1 (en) | 2021-04-01 |
EP4035007A1 (en) | 2022-08-03 |
WO2021061620A9 (en) | 2022-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114586011B (zh) | 将所有者指定的数据处理流水线***到对象存储服务的输入/输出路径 | |
US11836516B2 (en) | Reducing execution times in an on-demand network code execution system using saved machine states | |
EP4034998B1 (en) | User-specific data manipulation system for object storage service based on user-submitted code | |
KR102541295B1 (ko) | 온-디맨드 네트워크 코드 실행 시스템에서의 운영 체제 커스터마이제이션 | |
US11386230B2 (en) | On-demand code obfuscation of data in input path of object storage service | |
US11106477B2 (en) | Execution of owner-specified code during input/output path to object storage service | |
CN114586010B (zh) | 对象存储服务的输出路径中对象过滤代码的按需执行 | |
US10908927B1 (en) | On-demand execution of object filter code in output path of object storage service | |
US11055112B2 (en) | Inserting executions of owner-specified code into input/output path of object storage service | |
US11263220B2 (en) | On-demand execution of object transformation code in output path of object storage service | |
US20180307524A1 (en) | Executing code referenced from a microservice registry | |
US11023416B2 (en) | Data access control system for object storage service based on owner-defined code | |
US11360948B2 (en) | Inserting owner-specified data processing pipelines into input/output path of object storage service | |
US11550944B2 (en) | Code execution environment customization system for object storage service | |
US10996961B2 (en) | On-demand indexing of data in input path of object storage service | |
US11416628B2 (en) | User-specific data manipulation system for object storage service based on user-submitted code | |
US11023311B2 (en) | On-demand code execution in input path of data uploaded to storage service in multiple data portions | |
US11250007B1 (en) | On-demand execution of object combination code in output path of object storage service | |
CN114586020A (zh) | 在对象存储服务的输入路径中的数据的按需代码模糊 | |
US11394761B1 (en) | Execution of user-submitted code on a stream of data | |
US11656892B1 (en) | Sequential execution of user-submitted code and native functions | |
US20240103942A1 (en) | On-demand code execution data management |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |