CN112753028A - 远程储存库的客户端侧文件系统 - Google Patents

远程储存库的客户端侧文件系统 Download PDF

Info

Publication number
CN112753028A
CN112753028A CN201980063533.5A CN201980063533A CN112753028A CN 112753028 A CN112753028 A CN 112753028A CN 201980063533 A CN201980063533 A CN 201980063533A CN 112753028 A CN112753028 A CN 112753028A
Authority
CN
China
Prior art keywords
repository
files
client device
hosts
service
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.)
Pending
Application number
CN201980063533.5A
Other languages
English (en)
Inventor
M·M·泰默
J·J·埃里埃
C·沃特森
U·圣克拉
S·辛格
K·哈特
P·安德森
B·达赫曼
S·纳迪恩
陈云翰
刘姝
A·拉曼
谢宇欣
熊峰佳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/147,471 external-priority patent/US11379599B2/en
Priority claimed from US16/147,468 external-priority patent/US11467878B2/en
Priority claimed from US16/147,474 external-priority patent/US10983830B2/en
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of CN112753028A publication Critical patent/CN112753028A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems

Abstract

本发明公开了用于远程储存库的客户端侧文件系统的方法、系统和计算机可读介质。将储存库的一个或多个文件从存储服务发送到客户端装置。所述客户端使用由储存库管理器发送的凭证来获得所述文件。所述文件的本地副本可经由安装在所述客户端装置处的本地文件系统来访问。在所述客户端装置处生成与所述储存库相关联的一个或多个新文件。使用所述凭证,在所述存储服务处从所述客户端装置获得所述一个或多个新文件。将所述一个或多个新文件添加到所述储存库。

Description

远程储存库的客户端侧文件系统
背景技术
许多公司和其它组织操作互连许多计算系统以支持它们操作的计算机网络,诸如计算系统共处一地(例如,作为本地网络的一部分)或替代地位于多个不同的地理位置(例如,经由一个或多个私有或公共中间网络连接)。例如,容纳大量互连计算系统的数据中心已经变得司空见惯,如由单个组织和代表单个组织运营的专用数据中心,以及由作为企业的实体运营以向客户提供计算资源的公共数据中心。一些公共数据中心运营商为各种客户拥有的硬件提供网络接入、电力和安全安装设施,而其它公共数据中心运营商提供“全方位服务(full service)”设施,所述全方位服务设施还包括可供所述运营商的客户使用的硬件资源。
附图说明
图1绘示了根据一些实施例的可由流水线中的多个计算访问的远程储存库的实例。
图2绘示了根据一些实施例的远程储存库的客户端侧文件系统的实例系统环境。
图3绘示了根据一些实施例的远程储存库的客户端侧文件系统的实例系统环境的其它方面,包括具有储存库和引用的命名空间的实例层次结构,引用指向具有目录和文件树的提交实例。
图4A、4B、4C和4D是绘示根据一些实施例的初始化远程储存库的客户端侧文件系统的实例的时序图。
图5A、5B、5C和5D是绘示根据一些实施例的使用远程储存库的客户端侧文件系统来修改和上传文件的实例的时序图。
图6是绘示了根据一些实施例的用于使用远程储存库的客户端侧文件系统的方法的流程图。
图7绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境,包括使用储存库管理器来存储用于计算的程序代码。
图8绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括访问储存库管理器的任务运行器主机。
图9绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括执行容器化逻辑以执行计算的任务运行器服务。
图10绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括由任务运行器服务使用具有不同能力的集群。
图11是绘示了根据一些实施例的使用远程储存库协调计算的方法的流程图。
图12绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的实例系统环境。
图13是绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的方法的流程图,包括参数变化的串行执行。
图14是绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的方法的流程图,包括参数变化的并行执行。
图15A和图15B绘示了可以在一些实施例中使用的实例计算装置。
虽然本文通过若干实施例和说明性附图的实例来描述实施例,但是本领域技术人员将认识到,实施例不限于所描述的实施例或附图。应当理解的是,附图和对其的详细描述并不旨在将实施例限制于所公开的特定形式,而是相反,旨在覆盖落入由所附权利要求书限定的精神和范围内的所有修改、等同物和替换物。本文所用的标题仅用于组织目的,并不意味着用于限制说明书或权利要求书的范围。如贯穿本申请所使用的,词语“可以”以允许的意义(即,意味着“有可能”)而不是强制的意义(即,意味着“必须”)来使用。类似地,词语“包括”、“包括的”、以及“包括有”意味着“包括,但不限于此”。
具体实施方式
描述了用于远程储存库的客户端侧文件系统的方法、系统和计算机可读介质的各种实施例。在一个实施例中,储存库管理器可由多个客户端访问以将数据项添加到储存库或获得数据项的副本以供本地使用。储存库管理器可以管理对多个储存库的访问,并且每个储存库可以包括对“提交”的一个或多个引用,该“提交”表示具有目录和文件的树结构的版本。可以使用文件的内容散列对文件进行内容可寻址。储存库可以是不可变的,因此可以将数据添加到储存库中,但不能将其减去。储存库可以记录数据的谱系。在客户端装置处,可以获得储存库的所有或部分文件和元数据的本地副本,并将其本地存储在高速缓存中。可以经由本地文件系统在客户端上访问目录和文件。可以生成与储存库相关联的新文件(包括修改的文件)并将其存储在高速缓存中。在一个实施例中,新文件可以与从储存库管理器获得的原始(未修改的)文件分开存储。当客户端向储存库管理器提交储存库的当前版本时,客户端可以仅检测和发送新文件(和元数据),而不检测和发送未修改的文件(和元数据)。储存库管理器然后可以将新文件添加到储存库,而无需分析整个储存库以确定哪些数据是新的。为了进一步提高储存库管理器的可缩放性和性能,储存库管理器服务可以向客户端提供对存储服务中的文件的访问凭证,并且客户端可以直接访问存储服务以获得或上传储存库的文件。为了提高网络使用率,可以在客户端处高速缓存访问凭证,并且在单个会话期间多次重复使用访问凭证。为了提高网络使用率,可以将小文件(例如,元数据文件)聚集成批。为了提高网络使用率,可以仅将储存库(和元数据)的一部分加载到客户端处的本地高速缓存中。
描述了用于使用远程储存库协调计算的方法、系统和计算机可读介质的各种实施例。在一个实施例中,计算协调器管理跨一组主机的计算。协调器可以使用远程储存库管理器来记录计算的输入、计算的程序代码和计算的输出。在一个实施例中,储存库管理器可由包括主机的多个客户端访问,以将数据项添加到储存库或获得数据项和程序代码的副本以供本地使用。在主机处,可以从储存库管理器获得目录和文件的本地副本,并经由本地文件系统在主机上进行访问。用于计算的程序代码可以使用容器来实现,并且还可以由主机从储存库管理器获得。可以通过从储存库管理器获得输入和程序代码的档案记录来重放计算。协调器可以根据主机的能力和计算需求来选择用于特定计算的主机。计算可以表示工作流中的步骤,并且可以将不同的步骤分配给同时或串行运行的不同主机。工作流可被配置成对许多实体(例如,帐户、主键等)执行计算,并且这些实体可以由协调器划分成子集并分配给不同的主机。协调器可以例如基于与计算相关联的实体的数目来来按比例放大或缩小同时使用的主机的数目。协调器可以执行每个实体的异常处理,使得即使在对一批处理中的其它实体的计算失败之后,也可以继续执行该批处理中的一些实体的计算。协调器可以维护实体到主机的映射,并且可以基于该映射将计算分配给主机,例如,使得高速缓存的数据在主机处从一个计算重用到另一计算。对特定实体的计算请求可以由协调器缓冲或排队,然后分批到单个工作流步骤中。使用这些技术,可以协调计算和工作流以有效利用计算资源、存储器资源和网络资源,同时允许存档、重放和审计。
描述了用于使用远程储存库进行计算的参数变化的方法、系统和计算机可读介质的各种实施例。在一个实施例中,计算协调器管理跨一组主机的计算。协调器可以使用远程储存库管理器来记录计算的输入、计算的程序代码和计算的输出。在一个实施例中,储存库管理器可由包括主机的多个客户端访问,以将数据项添加到储存库或获得数据项和程序代码的副本以供本地使用。在主机处,可以从储存库管理器获得目录和文件的本地副本,并经由本地文件系统在主机上进行访问。用于计算的程序代码可以使用容器来实现,并且还可以由主机从储存库管理器获得。在一个实施例中,协调器可以管理具有某些相似性但也具有参数变化的计算。例如,协调器可以使用一组输入来管理第一计算并使用相同的程序代码但不同的一组输入来管理第二计算。作为另一实例,协调器可以使用一组程序代码来管理第一计算并使用相同的输入但不同的一组程序代码来管理第二计算。参数变化可以同时或串行运行。协调器可以确定计算的结果,并且可以允许基于这些结果选择一组参数。协调器可以基于具有特定参数组的先前计算的结果来改变用于计算的一组参数。使用参数变化,协调器可以执行软件的A/B测试以选择最佳构建。使用参数变化,协调器可以用不同的输入,例如不同的使用模式或不同的定价计划来执行“假设”仿真,以确定多租户供应商网络的客户的帐单。使用参数变化,协调器可以以并行方式用不同组的输入数据测试软件构建。参数变化可以允许协调器运行模拟、机器学习任务、财务分析任务等。
如本领域技术人员根据本公开将理解的,实施例能够实现某些技术优势,包括以下的一些或全部:(1)通过允许客户端访问数据存储区(使用由服务提供的凭证)而不是访问服务本身以读取或写入数据来提高储存库管理器服务的可缩放性;(2)通过将小文件聚合成通过网络发送的批处理来改进对网络带宽的使用;(3)通过对通过网络获得的数据进行缓存和重用访问凭据来改进对网络带宽的利用;(4)通过在客户端装置处仅加载储存库的所需文件和元数据来改进对网络带宽的使用;(5)通过实施数据不可变性和通过记录数据谱系来提高储存库中数据的可审计性;(6)使用集中式数据存储所允许的去重复来减少对存储器资源的使用;(7)通过跟踪客户端上的新文件并且仅将新文件发送到远程储存库来改进对计算和网络资源的使用;(8)通过协调分配给具有特定特性的资源的计算来改进对计算资源的使用;(9)通过主机的高速缓存感知协调来改进对存储器和网络资源的使用,使得主机处的高速缓存的数据在计算之间重复使用;(10);通过实体的微批处理来改进对计算资源的使用(11);通过特定于实体的异常处理来改进对计算资源的使用;(12)通过协调具有参数变化的计算来提高软件测试的速度和准确性;(13)通过协调具有参数变化的机器学习计算来改进对计算资源的使用;(14)通过协调具有参数变化的科学计算来改进对计算资源的使用;等等。
远程储存库的客户端侧文件系统
图1绘示了根据一些实施例的可由流水线中的多个计算访问的远程储存库的实例。储存库管理器100可以提供对数据储存库101的访问。储存库管理器100可以充当整个企业中许多实体的数据的集中式代理。例如,如图1所示,流水线可以包括各种步骤、阶段或组件,如计算20,30,40,50和60。计算20至60可以表示储存库管理器100的客户端或由其执行。在一个实施例中,计算20至60可以由企业内的不同实体(如组织内团队的不同部门)拥有或管理。在一个实施例中,计算20至60中的任一个可以与储存库管理器100交互以从储存库101中的一个或多个获得数据。在一个实施例中,计算20至60中的任一个然后可以(至少部分地)基于从储存库管理器100获得的输入数据来生成输出数据。在一个实施例中,计算20至60中的任一个可以与储存库管理器100交互以将输出数据添加到储存库101中的一个或多个。在一个实施例中,计算20至60中的任一个可以由协调器700调用和/或管理。在一个实施例中,可以在不使用协调器700的情况下执行计算20至60中的任何一个。通过以这种方式集中访问储存库101,组织可以减少数据的复制,同时提供可审计性、不可改变性、可重用性和历史可用性。储存库管理器100和相关联的客户端侧组件可以为客户端提供统一接口以对储存库101进行读取和写入。使用储存库管理器100,可以在数据通过组织的流水线10移动时对其进行监视、跟踪和审计。
图2绘示了根据一些实施例的远程储存库的客户端侧文件系统的实例系统环境。储存库管理器100可由如客户端200等多个客户端用来访问与一个或多个储存库相关联的文件135。文件135也可以被称为数据对象或项目。储存库管理器100可以表示一组远程组件,而客户端200可以表示一组本地组件。在各种实施例中,储存库管理器100及其客户端侧组件可以负责向客户端200提供远程储存库内容的本地表示、跟踪内容的修改,并将修改的数据上传回远程存储装置。储存库管理器100可以包括代理远程数据和元数据的储存库管理器服务110。储存库管理器100可与客户端200上的储存库管理器客户端库220相关联,储存库管理器客户端库提供客户端200与储存库管理器100的远程组件之间的接口,以(例如)将数据从储存库管理器100复制到客户端200处的本地高速缓存目录230中。储存库管理器100还可与客户端200上的储存库管理器文件系统240相关联,储存库管理器文件系统从高速缓存230读取更新并将更新写入到高速缓存。
储存库管理器服务110可以提供允许其它实体请求服务110以执行各种功能的各种应用编程接口(API)或其它编程接口。在一个实施例中,储存库管理器服务110负责例如使用提供数据库150的存储服务来存储和出售与客户相关联的各种元数据155(例如,提交、树、树索引、命名空间策略等)。关于图3更详细地讨论了提交、树、树索引和命名空间。在一个实施例中,储存库管理器服务110还负责出售对维护容器存储区130的存储服务的访问。储存库管理器100所使用的存储服务可以表示与储存库管理器服务110不同且分离的服务,并且可向存储服务的客户端呈现一个或多个API。储存库管理器100所使用的存储服务可以使用任何合适的存储技术,包括基于块的存储、基于文件的存储或数据库存储,以便代表客户端维护数据对象。在一个实施例中,容器存储区130可将文件135存储在储存库管理器100所拥有的一个或多个称为“存储桶”的存储位置中。在一个实施例中,由储存库管理器100使用的容器存储区130的部分可以表示由储存库管理器“拥有”的一个存储桶。文件135可以通过命名空间来隔离。在一个实施例中,可以经由来自令牌服务160的临时访问令牌给出对容器存储区130的访问。在一个实施例中,可以使用由储存库管理器100出售的预签名的统一资源定位符(URL)来访问容器存储区130。在一个实施例中,储存库管理器服务110向客户端提供直接从存储区130读取和向其写入的能力(在由服务110授予凭证之后),且无需针对每一读取或写入而通过服务110。
可以通过命名空间隔离的数据密钥在客户端侧对写入到容器存储区130的文件进行加密。可以经由密钥管理服务140出售数据密钥。使用密钥管理服务140,帐户可以创建客户主密钥(CMK)。在一个实施例中,CMK可以具有对可加密的数据量的较小限制(因为CMK从不离开密钥管理服务140),因此其通常用于加密额外“数据密钥”,这些“数据密钥”本身加密服务之外的较大数据片段。储存库管理器100可以通过拥有每个命名空间的客户主密钥来利用此能力。当创建命名空间时,储存库管理器服务110可以创建并存储与命名空间相关联的CMK。当客户端200稍后请求访问容器存储区130(例如,经由“GetContainerStoreAccess”API)时,服务110可以出售与客户端的命名空间相关联的CMK的资源标识符。在一个实施例中,该CMK使客户端200能够稍后自己调用密钥管理服务140的能力,以请求数据密钥用于在将其文件上传到容器存储区130之前在本地对其文件进行加密。
在本地或客户端侧,客户端软件210可以表示客户端专用程序代码或逻辑。客户端软件210可被配置成使用由储存库管理器100出售的文件135在各种域中执行任务,如机器学习、科学计算、模拟、金融分析、基于使用记录和定价模型生成记帐记录等。客户端软件210可以使用标准文件输入/输出操作与文件系统240交互。文件系统240可以对本地高速缓存目录230进行读取或写入。如下文将关于图4A、4B、4C和4D描述的,客户端软件210可以使高速缓存230初始化,并且可以安装文件系统240。客户端软件210可以用于生成新文件,然后将其写入到高速缓存230。如下文将关于图5A、5B、5C和5D描述的,客户端软件210可以将新的(或修改的)数据推送到储存库管理器100并卸载文件系统240。在一些实施例中,客户端可以访问储存库而不使用本地文件系统240。例如,客户端可以使用储存库管理器API直接从储存库读取文件、使用这些文件执行操作,并使用客户端侧更改日志来确定要添加回储存库的任何新的或修改的文件。
在一个实施例中,储存库管理器服务110可以提供称为GetContainerStoreAccess的API,其接受要访问的储存库、ref或命名空间作为输入,并提供用于对容器存储区130的授权访问的临时密钥、用于容器存储区的授权的会话令牌以及与命名空间相关联的加密密钥资源标识符作为输出。在一个实施例中,储存库管理器服务110可以提供称为GetRef的API,其接受储存库的ref作为输入并提供ref的当前头的提交ID作为输出。在一个实施例中,储存库管理器服务110可以提供称为PutRef的API,其接受储存库的ref,当前远程提交ID和新提交ID作为输入,并提供写入的成功或失败(其中,如果所提供的提交ID在储存库中已更改,则可能发生失败)作为输出。在一个实施例中,储存库管理器服务110可以提供称为BatchGetRawObject的API,其接受要返回的内容散列(例如,提交、树或树索引)和数据所属的命名空间的列表作为输入,并提供所请求的元数据内容作为输出。在一个实施例中,储存库管理器服务110可以提供称为BatchPutRawObject的API,其接受要上传的散列和数据内容(例如,提交、树或树索引)的列表以及数据所属的命名空间作为输入,并提供写入的成功或失败作为输出。在一个实施例中,储存库管理器服务110可以提供称为GetNamespacePolicy的API,其接受命名空间作为输入并提供相应的命名空间策略作为输出。在一个实施例中,储存库管理器服务110可以提供称为PutNamespacePolicy的API,其接受命名空间和命名空间策略作为输入,并提供写入的成功或失败作为输出。
在一个实施例中,本地高速缓存目录230可用于存储与储存库相关的数据。高速缓存目录230可以被划分到命名空间的范围,使得只有特定命名空间内的数据被存储在一起。高速缓存230的层次结构可以不表示其表示的储存库,而是可以是用于将储存库数据本地表示到文件系统240的资源。高速缓存230可用于储存库数据和元数据的本地(客户端侧)去重复。在一个实施例中,高速缓存230可以将已由储存库管理器100远程表示的数据与已被分段以供上传但尚未远程呈现的数据隔离并区分开。该隔离可以由文件系统240实施。使用该隔离,客户端200可以负责跟踪对文件135的更改,从而释放储存库管理器100的责任,并为图2所示的远程组件产生增强的可伸缩性。通过使用客户端200来确定储存库中的哪些文件是新的(包括现有文件的修改版本),储存库管理器100可以避免远程侧上的每个项目与客户端侧上的每个项目的复杂且资源密集的比较。
在一个实施例中,高速缓存230可以包括文件夹231,其包括已经存在于远程储存库管理器100中的内容可寻址数据对象。文件夹231可用于在上传或下载时对文件进行本地去重复。在一个实施例中,高速缓存230可以包括新文件夹232,其包括已从本地存储的命名空间中的ref的最后提交更改(经由修改或创建)的内容可寻址数据对象。假定文件夹232中的文件不存在于储存库管理器100中,并且被暂存以供上传。客户端200可以使用该文件夹232检测新文件并跟踪更改。在一个实施例中,高速缓存230可以包括元数据文件夹233,其包括已经存在于远程储存库管理器100中的内容可寻址元数据对象(例如,提交、树和树索引)。元数据文件夹233可用于在上传或下载时对元数据进行本地去重复。在一个实施例中,高速缓存230可以包括新的元数据文件夹234,其包括已从本地存储的命名空间中的ref的最后提交更改(经由修改或创建)的内容可寻址元数据对象。在一个实施例中,高速缓存230可以包括头文件夹235,其包括具有它们表示的ref的名称的文件。这些头文件中的一个可以包含最后已知是ref的头(最近)的提交的散列。在一个实施例中,高速缓存230可以包括新头文件夹236,其包括具有它们表示的ref的名称的文件。假设这些提交不存在于储存库管理器100中,且可例如通过PutRef调用在远程侧上进行更新。在一个实施例中,高速缓存230可以包括指示与高速缓存相关联的命名空间的文件。
在一个实施例中,文件系统240可以是用户空间(FUSE)中的文件系统的实现。可以提供文件系统240作为客户端库220的运行时依赖性。文件系统240可以基于高速缓存目录230中存在的数据在本地为客户端公开储存库的内容。文件系统230可以负责跟踪哪些文件和目录已更改(经由上述隔离)、对新内容和元数据进行散列化和序列化,并将其移动到高速缓存230内的适当位置。在被初始化和安装时,可以假设文件系统240包含储存库的数据和元数据的最新版本。该假设可以允许文件系统240异步地对修改的文件进行散列化和序列化以供上传,而无需就任何文件或元数据的存在(或缺少)重复查询远程存储区130,从而节省网络带宽并释放储存库管理器100的远程组件以执行其它任务。
储存库管理器100和客户端200的各方面可以使用任何合适数目和配置的计算装置来实现,其中的任一个可以由图15A所示的实例计算装置1500来实现。计算装置可以位于任何合适数目的数据中心或地理位置。在一些实施例中,实现储存库管理器的各方面的任何计算装置可以表示服务器或主机。在各种实施例中,储存库管理器100的至少一些功能可以由同一计算装置或由不同计算装置提供。如果使用不同计算装置来实现储存库管理器100的组件中的任一个,则这些组件及其相应计算装置可以(例如)经由一个或多个网络以通信方式联接。储存库管理器100的组件中的每一个可以表示可用于执行其各自功能的软件与硬件的任何组合,如下文所讨论。由储存库管理器100实现的操作可以自动执行,例如在初始配置阶段之后不需要用户发起或用户干预,并且以编程方式执行,例如通过在至少一个计算装置上执行程序指令。可以设想,储存库管理器100和客户端200可以包括未示出的附加组件、比示出的组件更少的组件,或示出的组件的不同组合、配置或数量。
储存库管理器100可以在面向服务的系统中实现,其中多个服务根据面向服务的体系结构进行协作。例如,容器存储区130可由一个存储服务实现,而数据库可由另一存储服务实现。另外,面向服务的系统可以包括密钥管理服务140和令牌服务160。在此类环境中,储存库管理器服务110可以向多个客户端提供其作为服务的功能。可以使用分布在一个或多个网络中的多个不同实例来实现服务,并且每个实例可以向各个客户端提供对相应服务的功能的访问。可以设想,任何合适数目和配置的客户端可以与储存库管理器服务110交互。为了使客户端能够调用其功能,储存库管理器服务110可以公开任何合适的接口,如一个或多个API或其它编程接口和/或图形用户接口(GUI)。在一个实施例中,可以向客户端提供储存库管理器服务110的功能以换取费用储存库管理器服务110的客户端可以表示与提供储存库管理器100的同一实体相关联的其它用户、群组或实体,或客户端可以是外部用户、群组或实体。
储存库管理器服务110可以经由一个或多个网络联接到客户端200和其它服务。在各种实施例中,网络可以涵盖在储存库管理器服务110与客户端200或服务之间建立基于网络的通信所必需的联网硬件和协议的任何合适组合。例如,网络通常可以涵盖共同实现因特网的各种电信网络和服务提供商。网络还可以包括专用网络(如局域网(LAN)或广域网(WAN))以及公共或专用无线网络。例如,储存库管理器100和客户端200可以分别在具有它们自己的内部网络的企业内提供。在此类实施例中,网络可以包括在储存库管理器100与因特网之间以及因特网与客户端200之间建立连网链路所必需的硬件(例如,调制解调器、路由器、交换机、负载平衡器、代理服务器等)和软件(例如,协议栈、会计软件、防火墙/安全软件等)。注意,在一些实施例中,储存库管理器100可以使用专用网络而非公共因特网与客户端200通信。
在一些实施例中,储存库管理器100和/或客户端200的各方面可以使用供应商网络的计算资源来实现。供应商网络可以表示由如企业或公共部门组织之类的实体建立的网络,以向一组分布式客户端提供可经由因特网和/或其它网络访问的一个或多个服务(如各种类型的网络可访问计算或存储)。供应商网络可以包括托管各种资源池(诸如物理和/或虚拟化计算机服务器、存储设备、联网装置等的集合)的众多数据中心,这些资源池用于实施和分布由供应商所提供的基础设施和服务。在一些实施例中,计算资源可以在等被称为“实例”的单元(诸如虚拟或物理计算实例)中被提供给客户端。例如,虚拟计算实例可以包含具有指定的计算能力(可以通过指示CPU的类型和数量、主存储器大小等来指定)的一个或多个服务器以及指定的软件栈(例如,可以在管理程序之上运行的操作系统的特定版本)。许多不同类型的计算装置可以被单独地或以组合方式使用以实施不同实施例中的供应商网络的资源(包括通用或专用计算机服务器、存储装置、网络装置等)。因为供应商网络的资源可以同时在多个客户端(或承租人)的控制下,所以可以说供应商网络提供了多租户并且可以被称为多承租人供应商网络。
在一些实施例中,供应商网络的运营商可以为其客户端实施一组灵活的资源预留、控制和访问界面。例如,资源管理器可以实施程序资源预留界面(例如,经由网站或一组网页),所述程序资源预留界面允许(可能包括提供商网络内的其它组件)了解、选择、购买访问和/或预留供应商网络供应的计算实例。此类接口可以包括允许浏览资源目录并提供所支持的不同类型或大小的资源、所支持的不同预订类型或模式、定价模型等的细节和规范的能力。例如,客户端200可以表示从供应商网络提供的可用资源池中预留的虚拟计算实例。
图3绘示了根据一些实施例的远程储存库的客户端侧文件系统的实例系统环境的其它方面,包括具有储存库和引用的命名空间的实例层次结构,引用指向具有目录和文件树的提交实例。在一个实施例中,储存库管理器100可以允许客户端创建表示目录结构的内容的“提交”。提交可以表示散列树,其中根节点、一个或多个分支节点以及一个或多个叶节点各自与散列值相关联。根节点或分支节点的散列值可以表示从该节点派生的子树的内容的散列。叶节点的散列值可以表示文件或其它数据对象的内容的散列。在一个实施例中,如果叶节点(例如,文件381)的内容被修改,则为该节点计算新的散列。还可以为修改的叶节点从其派生的任何分支节点(例如,目录370)或根节点(例如,目录360)计算新的散列。然而,如果其内容不变,则“兄弟”叶节点(例如,文件380)将保持与不同子树中的叶节点(例如,文件371)相同的散列。储存库管理器100可以使用此类散列树来维护数据的层次结构。
由储存库管理器100管理的数据可以根据内容散列是内容可寻址的。在一个实施例中,内容可寻址构造是由储存库管理器100独立存储的元数据(或原始数据)的可散列片段,以帮助向客户端呈现目录结构。在一个实施例中,储存库管理器100内的最低层数据结构可以是原始数据文件(文本、二进制等)或其它数据对象或项目,也称为“二进制大对象”。储存库管理器100可以不在这些低级构造的不同文件类型之间进行区分。每个文件或二进制大对象可以具有其内容的相关联散列,储存库管理器100可以将其用作用于寻址并与数据交互的“主密钥”。虽然此类文件可以表示为散列树中的叶节点,但散列树中的目录可以包含文件或其它目录。根目录360可以使用数据结构来表示,该数据结构指示目录370的节点类型(树或目录)和散列以及文件371的节点类型(叶或文件)和散列。类似地,目录370可以使用数据结构来表示,该数据结构指示文件380的节点类型(叶或文件)和散列以及文件871的节点类型(叶或文件)和散列。在一个实施例中,子树内的项目可以与元数据的各种项相关联,如其八进制模式和权限、其类型(目录或文件)、其散列、其最后修改时间和/或客户端提供的名称。
在一个实施例中,储存库管理器100存储列出所有树或包括根并从根派生的目录的散列的树索引。例如,具有根节点360的树的树索引可以包括节点360的散列和节点370的散列。树索引可以用于有效地访问树的各部分,例如,为客户端200提供仅一部分树而不是整个树,以节省存储器和网络资源。树索引本身可以通过树列表的散列进行内容可寻址。
在一个实施例中,提交350存储与根树的内容的“快照”相关联的元数据。提交可以包括元数据(如串行化版本)、从中导出该提交的一个或多个父提交的列表(例如,如由那些父提交的散列表示的)、该提交350指向的根树360的散列、对应树索引的散列、提交的创建日期、作者标识符,和/或描述提交中反映的与先前版本相比的任何更改的消息。如图3所示,提交350可以标识或引用其父提交349,该父提交349可以标识或引用其父提交等,使得可跟踪提交的谱系。提交350可以通过其所有元数据的散列进行内容可寻址。
在一个实施例中,引用或“ref”339是存储最近提交350的散列的命名标识符。每个ref 330至339可以指向表示储存库310的不同版本的不同提交,例如,在不同的时间点。如针对文件381、目录370和目录360的新散列值所指示的,ref 339可以表示包括对文件381的更新的新提交350。ref 339可以具有人类可读名称,如“mainline”。
在一个实施例中,储存库或“repo”310是ref 330至339的命名集合。储存库管理器100可以允许客户端通过指定其命名及其引用(或者任选地其提交)来“检查出”储存库。利用该信息,储存库管理器100能够为给定ref或提交构造给定储存库下面的所有数据。在一个实施例中,一次仅有一个客户端可以检查出特定的储存库。
在一个实施例中,命名空间300是储存库310至319的命名集合。命名空间可以包括一个储存库或多个储存库。命名空间可以允许一个或多个用户(个人、团队、组织等)对谁可以在与其相关联的储存库上执行哪些动作制定一组权限。在同一命名空间下面的储存库可以共享在储存库管理器100内和在储存库的本地高速缓存230表示中的其文件、目录和提交的去重复的益处。在一个实施例中,命名空间的所有储存库中的所有文件可以用对该命名空间唯一的主密钥来加密。在一个实施例中,命名空间策略可以用于表示与命名空间相关联的权限。例如,特定命名空间可以具有指示对命名空间所有者、数据读取器和数据写入器的权限的策略。
图3所示的组件可以用于许多计算域。例如,命名空间300可以被命名为Billing.Usage,并且可以由计算帐单以在供应商网络中使用计算资源的团队使用。储存库310可以被命名为Acct123-UsageRecords,并且可以与特定客户帐户的使用记录相关联。类似地,储存库319可以被命名为Acct999-UsageRecords,并且可以与不同客户帐户的使用记录相关联。储存库310至319可以表示随时间推移产生的大量记录。引用330至339可以以月或其它计费周期命名。提交350可以表示使用记录的树360的散列值。目录370可以表示一个月中的特定日期,而文件380和381可以表示该日内的特定时间。提交350中的使用记录可以用于例如根据特定的定价计划计算与储存库310相关联的客户帐户的帐单。
图4A、4B、4C和4D是绘示根据一些实施例的初始化远程储存库的客户端侧文件系统的实例的时序图。图4A、4B、4C和4D绘示了本地客户端200和远程储存库管理器100的各个组件之间的事件和交互的序列,包括客户端软件401、客户端侧高速缓存402、客户端侧储存库管理器库403、客户端侧文件系统404、远程储存库管理器服务405、远程元数据存储区406(例如,数据库150)、远程容器存储区407、远程令牌服务408和远程密钥服务409,其中任何一个均可以使用图2的相应组件来实现。
如411所示,客户端软件401可以向客户端库403发送储存库的引用以执行文件系统的初始化。如412所示,客户端库403可以请求从储存库管理器服务405获取ref。如413所示,储存库管理器服务405可以从元数据存储区406提取并高速缓存用于读取权限的命名空间策略。如414所示,储存库管理器服务405可以向客户端库403提供ref的头ID。如415所示,客户端库403可以在高速缓存402中高速缓存提交ID。如416所示,客户端库403可以询问提交是否本地存在于高速缓存402中。如417所示,客户端高速缓存402可以响应提交在本地不存在。如418所示,客户端库403可以使用储存库管理器服务405的BatchGetObjects API。如419所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。如420所示,储存库管理器服务405可将ref的头提交发送到客户端库403。如421所示,客户端库403可以高速缓存提交。如422所示,客户端库403可以询问树索引是否在本地存在。如423所示,客户端高速缓存402可以响应该树索引中的一些确实存在,但应该检索其余部分。
如424所示,客户端库403可以使用储存库管理器服务405的BatchGetObjects API来请求树索引。如425所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。如426所示,储存库管理器服务405可以将ref头的树索引发送到客户端库403。如427所示,客户端库403可以高速缓存树索引。如428所示,客户端库403可以询问树索引中的树是否在本地存在。如429所示,客户端高速缓存402可以响应树中的一些确实存在,但应该检索其余部分。如430所示,客户端库403使用储存库管理器服务405的BatchGetObjects API来请求树。如431所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。如432所示,储存库管理器服务405可以将ref头的树发送到客户端库403。如433所示,客户端库403可以高速缓存树。如434所示,客户端库403可以询问文件是否在本地存在。如435所示,客户端高速缓存402可以响应文件中的一些确实存在,但应该检索其余部分。
如436所示,客户端库403可以请求从储存库管理器服务405访问容器存储区。如437所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。如438所示,储存库管理器服务405可以请求容器存储区的令牌。如439所示,令牌服务408可以用临时会话令牌进行响应。如440所示,储存库管理器服务405可以向客户端库403提供加密(经由命名空间策略)临时凭证的资源标识符。如441所示,客户端库403可以向密钥服务409提供加密标识符,并请求文件的数据密钥。如442所示,密钥服务409可以用数据密钥进行响应。如443所示,客户端库403可以提供临时会话令牌并使用GetObjects API来从容器存储区407中获取文件。
如444所示,容器存储区407可以用文件进行响应,其中数据密钥可由客户端库403用来解密文件。如445所示,客户端库403可以高速缓存文件。如446所示,客户端库403可以安装文件系统404。如447所示,客户端库403可以向客户端软件401报告文件系统就绪并可以通过客户端专用代码访问。
图5A、5B、5C和5D是绘示根据一些实施例的使用远程储存库的客户端侧文件系统来修改和上传文件的实例的时序图。图5A、5B、5C和5D绘示了本地客户端200和远程储存库管理器100的各个组件之间的事件和交互的序列,包括客户端软件401、客户端侧高速缓存402、客户端侧储存库管理器库403、客户端侧文件系统404、远程储存库管理器服务405、远程元数据存储区406(例如,数据库150)、远程容器存储区407、远程令牌服务408和远程密钥服务409,其中任何一个均可以使用图2的相应组件来实现。
如511所示,客户端软件401可以经由安装的文件系统404与储存库内容的本地副本交互。如512所示,本地文件系统404可以对修改的文件进行散列化并将散列存储在本地高速缓存中的新文件目录中。如513所示,客户端软件401可以向客户端库请求卸载文件系统。如514所示,客户端库403可以调用卸载到文件系统。如515所示,本地文件系统404可以对来自修改(或新)的文件的新元数据进行序列化并将结果存储在高速缓存中的适当目录中。如516所示,本地文件系统404可以向客户端库403报告卸载完成。如517所示,客户端库403可以向客户端软件401报告卸载完成。如518所示,客户端软件401可以将储存库的引用推送到客户端库403。如519所示,客户端库403可以询问在新头目录中是否有对该ref的新提交。如520所示,客户端高速缓存402可以肯定地响应。
如521所示,客户端库403可以从本地高速缓存提取提交。如522所示,客户端库403可以使用BatchPutObject API将提交上传到储存库管理器服务405。如523所示,储存库管理器服务405可以从元数据存储区406提取并高速缓存用于写入权限的命名空间策略。如524所示,客户端库403可以从本地高速缓存提取树索引。如525所示,客户端库403使用BatchPutObject API将树索引上传到储存库管理器服务405。如526所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。如527所示,客户端库403可以遍历树索引中的树并询问它们是否存在于本地高速缓存中。如528所示,客户端高速缓存402可以响应仅存在一些树。如529所示,客户端库403可使用BatchPutObjectAPI将新元数据文件夹中的树上传到储存库管理器服务405。如530所示,储存库管理器服务405可以与元数据存储区406交互以执行利用命名空间策略的权限检查。
如531所示,客户端库403遍历树中的文件并询问它们是否存在于本地高速缓存中。如532所示,客户端高速缓存402可以响应仅存在一些文件。如533所示,客户端库403可以请求从储存库管理器服务405访问容器存储区。如534所示,储存库管理器服务405可以执行利用命名空间策略的权限检查。如535所示,储存库管理器服务405可以请求容器存储区的令牌。如536所示,令牌服务408可以用临时会话令牌进行响应。如537所示,储存库管理器服务405可以向客户端库403提供加密(经由命名空间策略)临时凭证的资源标识符。如538所示,客户端库403向密钥服务409提供加密标识符并请求文件的数据密钥。如539所示,密钥服务539,密钥服务409可以用数据密钥进行响应。
如540所示,客户端库403可以上传用数据密钥加密的新文件目录中的文件。如541所示,客户端库403可以使用PutRef API并提供先前的提交ID。如542所示,储存库管理器服务405,储存库管理器服务405可以执行利用命名空间策略的权限检查。如543所示,储存库管理器服务405可以向客户端库403报告成功。如544所示,客户端库403可以向客户端软件401报告推送完成。
在一个实施例中,客户端库220可以以高度并行化的方式执行上传和下载。在一个实施例中,当客户端传递要拉取的ref列表时,立即将ref添加到队列中。通过从元数据存储区中拉取提交ID并将这些提交中的每一个添加到队列中,可以启动工作线程池以处理解析引用。在一个实施例中,每组任务直到前一个任务完成才开始。在一个实施例中,该过程自身重复直到所有文件已经被下载到客户端。使用这些队列,客户端库能够并行化大目录结构的下载和上传,同时在高速缓存中本地执行上传和下载的去重复。
图6是绘示了根据一些实施例的用于使用远程储存库的客户端侧文件系统的方法的流程图。如610所示,储存库管理器可以使用存储服务来存储包含文件的储存库。储存库内的文件可以根据层次结构进行组织。储存库可以包括内容可寻址数据,使得文件和目录可经由它们的内容散列来访问。可以认为储存库是不可变的,使得可以添加文件和目录的新版本,而可以保留较旧的版本。
如620中所示,储存库管理器可以将凭证发送到客户端装置。例如,可以将凭证发送到客户端装置以初始化客户端装置上的储存库的本地版本。凭证可以允许对存储服务中的储存库的文件的访问(例如,读取访问和/或写入访问)。凭证可以表示由令牌服务提供的临时访问令牌。凭证可以包括可以通过其访问储存库的预签名的统一资源定位符(URL)。在一个实施例中,与存储服务不同且分开的储存库管理器服务可以将凭证发送到客户端。
如630所示,可以将至少一些文件的本地副本从存储服务发送到客户端装置。本地副本可以存储在客户端装置处的本地高速缓存中。本地副本可以经由安装在客户端装置处的本地文件系统来访问。客户端装置上的客户端库可以提供到储存库管理器的远程组件的接口。
如640所示,可以在客户端装置处创建新的或修改的文件。新的或修改的文件可以与同一储存库相关联。可以(至少部分地)基于高速缓存中的本地副本来生成新的或修改的文件。新的或修改的文件可以经由本地文件系统存储在高速缓存中。在一个实施例中,例如通过将新的或修改的文件存储在它们自己的目录或高速缓存的部分中,可以将新的或修改的文件与未修改的本地副本隔离。如650所示,可以在客户端装置处检测或区分新的或修改的文件。在一个实施例中,新的或修改的文件可以(至少部分地)基于它们与未修改的本地副本的隔离来检测。在一个实施例中,新的或修改的文件可以(至少部分地)基于它们的内容散列相对于未修改的本地副本的差异来检测。
如660所示,客户端装置可以使用凭证将新的或修改的文件添加到存储服务中的储存库。这样做时,客户端装置可以不向存储服务发送任何未修改的文件,并且可以不进一步与储存库管理器交互以确定储存库的哪些文件是新的或修改的。凭证可以被高速缓存在客户端装置处,并例如在同一会话内被重新用于多个文件。通过确定在客户端侧而不是在远程侧发送哪些文件,储存库管理器可以免除执行新数据与旧数据的计算上昂贵且耗时的比较的责任。通过允许客户端直接使用凭证将文件添加到储存库,而无需涉及用于每个文件的储存库管理器服务,储存库管理器可以扩展到大量客户端、储存库和文件。
使用远程储存库协调计算
图7绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境,包括使用储存库管理器来存储用于计算的程序代码。在一个实施例中,计算协调器700管理跨一组主机780(如主机780A至780Z)的计算。协调器700可以实现计算的再现性。协调器700可以使用储存库管理器100记录计算的输入、计算的程序代码和计算的输出。协调器700然后可以使用与使用储存库管理器100记录的同一输入和同一程序代码来管理计算的重放。在一个实施例中,协调器700可以将重放的计算的输出与原始记录的输出进行比较,以确保以基本相同的方式执行计算。只要输入和程序代码从储存库管理器100保持可用,可以在任何时间点重放计算。在一个实施例中,输入(以文件135的形式)和程序代码735可以被视为不可变的且可由储存库管理器100保持无限长的时间。随着时间的变化,可以将不同版本的文件135和程序代码735添加到容器存储区130,并且可以保留较早的版本。在一个实施例中,主机780A至780Z中的任一个可以通过充当如图2中所示的客户端200来访问储存库管理器100。
作为由协调器700和储存库管理器100管理的计算的实例,输入可以表示一个或多个帐户的使用记录和定价模型,并且计算可以(至少部分地)基于使用记录和定价模型来产生一个或多个帐户的帐单。帐单可以基于用于计算的程序代码来计算。随着时间的推移,可以将附加的使用记录添加到容器存储区130,和/或可以修改用于计算的程序代码。然而,使用协调器700,原始计算可以再次使用由储存库管理器100记录的原始使用记录、原始定价模型和原始程序代码来执行。例如,可以(至少部分地)基于验证帐单的客户请求来启动计算的重放,并且可以在执行原始计算之后数月或数年接收该客户请求。
在一个实施例中,用于计算的程序代码735可经由开发环境790提供给储存库管理器100。开发环境790可以表示用于以任何合适的编程语言或平台编写、构建、修改和/或测试程序代码的环境。使用开发环境790,一个或多个开发者可以对程序代码735做出贡献。在一个实施例中,程序代码735的不同部分可以由组织内的不同团队或团体开发和/或拥有。在一个实施例中,程序代码735的不同部分可以表示不同的编程语言或执行平台。程序代码735的不同部分可以表示工作流或流水线的不同步骤或阶段,如参考图1所讨论的。程序代码735可以由储存库管理器100使用容器存储区130以与文件135类似的方式来存储。程序代码735可由开发者或开发环境790直接或间接地(例如,通过与储存库管理器服务110交互)写入到容器存储区130。
在一个实施例中,协调器700可以包括实现与工作流或任务流相关联的任务、计算或其它操作的执行的任务运行器服务770。任务运行器服务770可以包括可由协调工作者750A至750N通过网络访问的多个实例或任务运行器服务端点。任务运行器服务770可以在主机780A至780Z中的每一个上实现。在由负责的协调工作者指示这样做时,任务运行器服务770可以使用一个或多个主机来执行计算。在一个实施例中,工作流可以表示以特定次序执行的一组步骤,并且步骤可以表示用例周围的域不可知包装。在一个实施例中,任务流可以表示以特定次序执行的一组任务,并且任务可以表示通常从储存库管理器100获取输入并使用储存库管理器产生用于存储的输出的一组特定域逻辑。协调工作者750A至750N可以负责执行对应于工作流中的每个步骤的逻辑,例如域不可知步骤。任务运行器服务770可以负责执行任务流,例如域特定计算。
主机780A至780Z中的任一个可以表示各种类型的计算资源,如虚拟计算实例、具有多个节点的集群等。由一个或多个主机执行的计算可以表示工作流中的步骤,并且可以将不同的步骤分配给同时或串行运行的不同主机780A至780Z。工作流可被配置成对许多实体执行计算。实体可以表示客户帐户、主密钥等。例如,工作流可被配置成(至少部分地)基于使用记录和定价模型来计算任何数目的帐户的帐单。协调器可以将实体划分为子集并分配给不同的主机780A至780Z。例如,一半帐户可以使用主机780A处理,而另一半帐户可以使用主机780Z处理。在一个实施例中,可以确定此类子集以便优化跨主机组的执行时间、资源使用或性能度量和/或成本。协调器700的组件(如协调工作者)可以管理工作流或工作流步骤在各种主机之间的计算划分。
协调服务710可以允许用户定义、修改和发起如工作流的协调计算。协调服务710可以提供允许用户或其它外部客户端调用其功能的一部分的一个或多个API或其它编程接口。在一些实施例中,协调服务710可以提供API或其它编程接口,如CreateOrchestration、DeleteOrchestration、StartExecution、StopExecution、ListOrchestrations和ListExecutionsForOrchestration。因此,协调服务710可以提供协调器700的面向客户的组件。在一个实施例中,协调服务710可以仅允许在给定时间进行给定协调的单次执行。然而,协调可以表示对许多不同实体反复执行的计算。在一个实施例中,协调服务710可以将调用者的身份传递给协调工作者,使得客户端可以对谁能够和不能开始和停止执行具有细粒度的控制。
在一个实施例中,在协调服务710调用工作流之后,可以分配一个或多个协调工作者750A至750N来管理工作流中的一个或多个步骤的执行。步骤也可称为计算。在一个实施例中,可以将给定步骤分配给工作者750A至750N中的给定一个,然后工作者可以使用所需数量的主机780A至780Z以执行该步骤。在管理步骤的执行时,协调工作者可以将一组实体划分成各种子集,并且可以将不同的子集分配给不同的主机组。例如,如果计算试图为一组帐户生成帐单,则负责的协调工作者可以使用主机780A来处理一半帐户,并使用主机780Z来处理另一半帐户。在一个实施例中,协调工作者可以提供冗余,使得可以在多于一个主机上执行相同的步骤,例如用于故障转移。在一个实施例中,协调工作者可以提供单个执行,使得在给定时间在单个主机上执行步骤。
可以对多个实体(也称为密钥)执行计算。例如,特定实体或密钥可以涉及特定客户帐户。在一些实施例中,可以为数百万个实体协调单个计算。对于具有大量实体的工作流,协调工作者可以为所有实体启动一个工作流,而不是许多实体专用的工作流。单个工作流可以包括负责对所有实体执行计算的步骤。该步骤可以使用一个或多个任务运行器节点、主机或其它计算资源来执行。可以为实体的不同(非重叠)子集运行计算,而不是为每个实体运行一个步骤。协调工作者可以跟踪计算中的每一个的状态,而不是实体中的每一个的状态。协调器700可以使用特定主机780A至780Z处的高速缓存内容的知识来作出关于向这些主机分配工作的智能决定。在一个实施例中,协调工作者可以监视各个主机780A至780Z的性能,并(至少部分地)基于该性能监视将工作从一个主机重新分配给另一主机。在一个实施例中,协调工作者可以监视各个主机780A至780Z的性能,并(至少部分地)基于该性能监视将下一轮工作分配给主机。
任务运行器服务770可以将任务流作为输入,并且可以使用合适数量和配置的计算资源(例如,具有特定数量的节点的集群)来执行任务流。由任务运行器主机执行的程序代码735可以期望输入在文件系统(例如,与储存库管理器100相关联的本地文件系统240)的特定位置或目录中。在一个实施例中,任务可以从命令行运行。在一个实施例中,任务是幂等的。在一个实施例中,执行任务所需的数据经由自变数传递到任务。在一个实施例中,任务经由本地文件系统上的路径引用和读取输入数据。在一个实施例中,任务经由本地文件系统上的路径引用和写入输出数据。在一个实施例中,任务流中的每个任务具有可执行名称、用作输入的<string,repository references>的映射、用作输出的<string,repository references>的映射,以及用作执行计算的运行时可执行文件的<string,repository references>的映射。
在一个实施例中,可以使用无服务器计算服务来执行协调中的计算。计算服务可以由客户端调用以运行程序代码或执行业务逻辑而无需客户端提供或管理服务器。在一个实施例中,任务运行器服务770可以与计算服务交互以按需执行各个计算。无论是否使用计算服务,协调器700都可以记录输入、输出、在计算中采用的业务逻辑或程序代码、关于计算中使用的任何计算虚拟化的信息(例如,虚拟机的类型和版本)、依赖性链,以及可用于重构等效基础设施以便在未来时间重复计算的任何其它信息。
使用本文描述的技术,可以协调计算和工作流以有效地利用计算资源、存储器资源和网络资源,同时允许存档、重放和审计。协调器700可以向上或向下缩放同时使用的主机的数目。用于步骤的主机的数目和/或主机的类型可以基于该步骤所需的计算资源而变化。例如,主机的数目可能倾向于随着计算的实体数量的增加而增加。作为另一实例,与如科学计算、模拟和机器学习等域相关联的计算可被分配给具有与典型主机不同的硬件能力和/或配置的专用主机。
协调器700可以执行每个实体的异常处理,使得即使在对一批处理中的其它实体的计算失败之后,也可以继续执行该批处理中的一些实体的计算。如上所讨论,可以使用对实体的各种子集的并行计算来跨主机780A至780Z分布对一组实体的计算。如果一个子集例如由于软件配置错误或硬件故障而失败,则该子集中的剩余实体可由负责的协调工作者重新分配给一个或多个其它主机。在一个实施例中,如果对于子集内的特定实体的计算失败,则该失败可以由主机报告给负责的协调工作者,但是对于使用相同主机或不同主机的未受影响的实体,可以继续该计算。在一个实施例中,可以通过将虚拟存储卷(例如,基于虚拟块的存储区)从发生故障的主机转移到另一主机来实现此类故障转移。在一个实施例中,协调器700可以收集每个实体的执行度量,例如,应用于特定实体的计算的执行时间和/或资源使用。在一个实施例中,可以对具有成功计算的实体而不是具有失败计算的实体执行附加的下游计算任务。
如上所讨论,可以使用对实体的各种子集的并行计算来跨主机780A至780Z分布对一组实体的计算。协调器700可以维护实体到主机的映射,并且可以基于该映射将计算分配给主机。例如,在一次计算期间,特定主机可以处理与特定实体相关联的数据。在该计算期间,主机可以从储存库管理器100获得与该实体相关联的文件135,和/或主机可以存储计算的输出。如果协调器700发起也涉及该实体的另一计算,则协调器的组件(例如,协调工作者)可以基于协调器对实体到主机的映射的知识将第二计算分配给与较早计算相同的主机。然后,第二计算可以重新使用在主机处高速缓存的数据用于第二计算,如通过重新使用一些输入数据或使用来自较早计算的一些输出数据。通过以这种方式使用计算的高速缓存器分配,协调器700可以实现网络带宽和存储器使用的节省。
对特定实体的计算请求可以由协调器缓冲或排队,然后分批到单个工作流步骤中。在一个实施例中,计算请求可以与单个实体(例如,客户帐户)或少量实体相关联。例如,客户服务代表可以生成计算或重新计算供应商网络中特定客户对计算资源的使用的帐单的请求。此类请求可以由协调器700保持,直到对于相同类别的计算已经接收到足够数量的请求或者直到达到超时。然后可以为所有累积的实体协调计算。通过以这种方式使用周期性调度方法进行计算,协调器700可以实现计算资源、存储器和网络带宽的使用的节省。
协调器700的各方面(包括协调器工作者750A至750N和主机780A至780Z)可以使用任何合适数目和配置的计算装置来实现,其中的任一个可以由图15B所示的实例计算装置1500来实现。计算装置可以位于任何合适数目的数据中心或地理位置。在各种实施例中,协调器700的至少一些功能可以由同一计算装置或由不同的计算装置提供。如果使用不同的计算装置来实现协调700的组件中的任一个,则这些组件及其相应计算装置可以(例如)经由一个或多个网络以通信方式联接。协调器700的组件中的每一个可以表示可用于执行其各自功能的软件和硬件的任意组合,如下所讨论。由协调器700实现的操作可以自动执行,例如在初始配置阶段之后不需要用户发起或用户干预,并且以编程方式执行,例如通过在至少一个计算装置上执行程序指令。可以设想,协调器700可以包括未示出的附加组件、比示出的组件更少的组件,或示出的组件的不同组合、配置或数量。
协调器700可以在面向服务的系统中实现,其中多个服务根据面向服务的体系结构进行协作。在此类环境中,协调器服务710可以向多个客户端提供其作为服务的功能。可以使用分布在一个或多个网络中的多个不同实例来实现服务,并且每个实例可以向各个客户端提供对相应服务的功能的访问。可以设想,任何合适数目和配置的客户端可以与协调器服务710交互。为了使客户端能够调用其功能,协调器服务710可以公开任何合适的接口,如一个或多个API或其它编程接口和/或图形用户接口(GUI)。在一个实施例中,可以向客户端提供协调器服务710的功能以换取费用。协调器服务710的客户端可以表示与提供储存库管理器100的同一实体相关联的其它用户、群组或实体,或者客户端可以是外部用户、群组或实体。
协调器700及其组成元件可以经由一个或多个网络联接到其它组件和服务。在各种实施例中,网络可以涵盖在协调器700和其它组件或服务之间建立基于网络的通信所需的联网硬件和协议的任何适当组合。例如,网络通常可以涵盖共同实现因特网的各种电信网络和服务提供商。网络还可以包括专用网络(如局域网(LAN)或广域网(WAN))以及公共或专用无线网络。例如,协调器服务710和协调工作者750A至750N或主机780A至780Z可以分别在具有它们自己的内部网络的企业内提供。在此类实施例中,网络可以包括在协调器服务710和因特网之间以及在因特网和协调工作者750A至750N或主机780A-780Z之间建立连网链路所必需的硬件(例如,调制解调器、路由器、交换机、负载平衡器、代理服务器等)和软件(例如,协议栈、会计软件、防火墙/安全软件等)。注意,在一些实施例中,协调器服务710可以使用专用网络而非公共因特网与协调工作者750A至750N或主机780A至780Z通信。在一些实施例中,协调器服务710和协调工作者750A至750N或主机780A至780Z的各方面可以使用供应商网络的计算资源来实现。
图8绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括访问储存库管理器的任务运行器主机。如以上关于图1至图6所讨论的,储存库管理器100可以由包括主机780A至780Z的多个客户端访问,以将数据项添加到储存库或获得数据项和程序代码的副本以供本地使用。在如主机780A的主机处,目录和文件的本地副本可以从储存库管理器100获得、存储在本地高速缓存230中,并经由本地文件系统240在主机上访问。如上所讨论,主机780A可以包括与储存库管理器100的组件交互的客户端库220。用于计算的程序代码735也可由主机780A从储存库管理器100获得,且可本地存储在主机上;客户端软件210可以表示此类程序代码。在一个实施例中,可以通过从储存库管理器100获得输入和程序代码的存档记录来在同一主机或不同主机上重放计算。
图9绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括执行容器化逻辑以执行计算的任务运行器服务。可以使用利用储存库管理器100存储的容器935来实现用于计算的程序代码。容器935可以包括或实现特定的计算逻辑。例如,容器935可以实现业务逻辑以基于客户端的使用记录和客户端的定价模型来生成客户端帐户的帐单。作为另一实例,容器935可以实现逻辑以执行模拟或其它科学计算。作为又一实例,容器935可以实现执行机器学习任务的逻辑,例如训练机器学习模型或应用机器学习模型来预测未来事件。可以根据如在操作系统级上执行虚拟化的Docker平台的容器化系统来实现容器935。在一个实施例中,容器935可以包括可在主机780A至780Z中的一个上执行的操作系统的图像以及用于计算的特定逻辑。
在一个实施例中,可以使用也被称为服务端点的不同实例来实现任务运行器服务770。图9中绘示了一个此类服务端点910。任务运行器服务端点910可以包括任务运行器服务逻辑920,其表示任务运行器服务770的功能,例如,以管理任务执行。任务运行器服务端点910还可以包括如Docker系统的容器化系统930。容器化系统930可以允许端点910执行容器或其它图像935。容器或图像935可以包括操作系统和特定计算逻辑,并且可以从容器存储区130获取并本地存储。容器化系统930可以表示其中可以运行操作系统的实例以执行与计算相关联的特定业务逻辑的虚拟化计算环境。容器存储区130可以将此类容器存储无限长的时间,以便确保计算的再现性。
图10绘示了根据一些实施例的用于使用远程储存库协调计算的实例系统环境的其它方面,包括由任务运行器服务使用具有不同能力的集群。协调器700可以根据主机的能力和计算的需要来选择用于特定计算的主机。使用本文描述的技术,可以协调计算和工作流以有效地利用计算资源、存储器资源和网络资源,同时允许存档、重放和审计。协调器700可以向上或向下缩放同时使用的主机的数目。用于步骤的主机的数目和/或主机的类型可以基于该步骤所需的计算资源而变化。例如,主机的数目可能倾向于随着用于计算的密钥(或实体)的数目增加而增加。作为另一实例,与如科学计算、模拟和机器学习等域相关联的计算可被分配给具有与典型主机不同的硬件能力和/或配置的专用主机。
如图10的实例所示,协调器700可以采用具有不同能力和/或硬件和/或软件配置的主机或计算资源。例如,任务运行器服务770可以在通用集群780B上实现,该通用集群能够执行基本计算,例如,以计算用于供应商网络中资源使用的客户帐单。作为另一实例,任务运行器服务770可以在专用集群780C上实现,该专用集群能够执行专用操作,例如,用于如科学计算、模拟和机器学习等域。作为另一实例,任务运行器服务770可以在能够在隔离测试环境中执行任务的测试集群780D上实现。集群780B至780D中的每一个可以包括具有特定硬件配置的特定数量的节点。任务运行器服务770可以提供具有不同处理器能力、不同存储器能力或体系结构、不同网络能力等的各种计算资源(包括集群和单个主机)。在一个实施例中,负责的协调工作者可以基于特定计算的需要为特定计算选择该特定集群或其它计算资源。在一个实施例中,协调工作者可以跨不同类型的集群或主机分发工作负载。
图11是绘示了根据一些实施例的使用远程储存库协调计算的方法的流程图。如1110所示,包含一个或多个步骤的工作流可以被分配给一个或多个主机。一个或多个步骤可以表示一个或多个计算,并且计算可以与应该对其尝试计算的一组密钥(例如,帐户或实体)相关联。一个或多个主机可以选自一组在其能力、配置和/或成本方面不同的可用主机。在一个实施例中,可以由协调器基于输入量(例如,密钥的数量)、计算类型(例如,简单业务逻辑对科学计算)等来选择主机。
如1120所示,可以使用储存库管理器来存储对工作流(例如,对工作流的一个或多个步骤)的一个或多个输入的表示。该表示可以包括捕获一个或多个输入(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。输入可以由储存库管理器的一个或多个外部实体或一个或多个客户端提供给储存库管理器。例如,摄取客户端可以从多租户供应商网络接收使用记录流,并将这些记录添加到一个或多个集中式储存库。储存库管理器可以以附加方式维护数据,使得储存库中的现有文件可以被认为是不可变的,但是可以添加新文件(包括旧文件的新版本)。
如1130所示,可以使用储存库管理器来存储可执行以执行工作流(例如,工作流的一个或多个步骤)的程序代码的表示。该表示可以包括捕获程序代码或逻辑的任何数据对象或数据结构。程序代码可以是容器或图像的一部分,例如,Docker容器。容器或图像还可以包括要在虚拟计算实例上运行的操作系统图像。程序代码可以由一个或多个开发者构建并经由开发环境提供给储存库管理器。在一个实施例中,程序代码可以表示将由无服务器计算服务执行的一个或多个功能或任务。
如1140所示,可以使用所选主机来执行工作流(例如,一个或多个步骤)。主机可以执行从储存库管理器获得的程序代码的本地副本。可以(至少部分地)基于从储存库管理器获得的一个或多个输入的本地副本来执行程序代码。输入的本地副本可以存储在本地高速缓存目录中并由本地计算经由与储存库管理器相关联的本地文件系统来访问。可以对多个密钥执行工作流。可以为各个主机调度各个密钥。密钥可以分布在多个主机上,或者可以由单个主机处理。在一个实施例中,每密钥或每实体异常处理可以用于工作流。对于一个或多个密钥,计算可能会失败,但是随后可以尝试相同的计算并且对于一个或多个其它密钥可能会成功。相反,使用大数据作业的传统方法,单个密钥的单个故障可能导致整个计算在所有密钥上终止。在一个实施例中,大量的密钥可以使用较小的密钥微批量在一组工作者主机上进行划分。使用微批量,对于单个密钥,计算可能会更快地失败,从而允许更快的错误恢复。
工作流可以产生一个或多个输出。例如,机器学习工作流可以生成训练模型,或者模拟可以生成关于真实世界行为的预测。如1150所示,一个或多个输出的表示可以由协调器记录并使用储存库管理器存储。该表示可以包括捕获一个或多个输出(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。存档的输入和程序代码可以用于重放计算,而存档的输出可以用于与任何重放进行比较。
使用远程储存库计算的参数变化
图12绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的实例系统环境。如上所讨论,计算协调器700可以管理跨一组主机780A至780Z的计算。协调器可以使用远程储存库管理器100来记录计算的输入、计算的程序代码和计算的输出。在一个实施例中,协调器700可以管理具有一些相似性但也具有参数变化的计算。例如,协调器可以使用一组输入来管理第一计算并使用相同的程序代码但不同的一组输入来管理第二计算。作为另一实例,协调器可以使用一组程序代码来管理第一计算并使用相同的输入但不同的一组程序代码来管理第二计算。
使用用于参数变化1220的组件,协调器700可以同时或串行地运行具有不同参数的类似计算。协调器700可以确定计算的结果,并且可以允许基于这些结果选择一组参数。协调器可以基于具有特定参数组的先前计算的结果来改变用于计算的一组参数。使用参数变化1220,协调器700可以执行软件的A/B测试以选择最佳构建。使用参数变化1220,协调器700可以用不同的输入,例如不同的使用模式或不同的定价计划来执行“假设”仿真,以确定多租户供应商网络的客户的帐单。使用参数变化1220,协调器700可以以并行方式用不同组的输入数据来测试软件构建。参数变化1220可以允许协调器700运行模拟、机器学习任务、财务分析任务等,并且在许多变化中选择最优的参数组。
图13是绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的方法的流程图,包括参数变化的串行执行。如1310所示,可以将第一计算分配给第一组一个或多个主机。第一计算可以表示工作流中的步骤。第一计算可以与第一组参数相关联。第一组参数可以包括用于计算的第一组一个或多个输入和第一组程序代码。可以使用远程储存库管理器来存储第一组输入和第一组程序代码。程序代码可以是容器或图像的一部分,例如,Docker容器。容器或图像还可以包括要在虚拟计算实例上运行的操作系统图像。程序代码可以由一个或多个开发者构建并经由开发环境提供给储存库管理器。第一组主机可以包括一个或多个集群、一个或多个虚拟计算实例,或一个或多个其它计算资源。第一计算可以与应当尝试对其进行计算的一组实体(例如,帐户或主密钥)相关联。一个或多个主机可以选自一组在其能力、配置和/或成本方面不同的可用主机。在一个实施例中,可以由协调器基于输入量(例如,实体数量)、计算类型(例如,简单业务逻辑对科学计算)等来选择主机。
如1320所示,可以使用第一组主机来发起第一计算的执行。执行可以使用第一组程序代码和第一组输入。在一个实施例中,可以使用由储存库管理器服务发送到主机的凭证将程序代码的本地副本从存储服务传送到第一组主机。在一个实施例中,输入的本地副本可以使用凭证从存储服务传送到第一组主机、存储在本地高速缓存中,并由计算经由与储存库管理器相关联的本地文件系统来访问。可以为各个主机调度各个密钥。密钥可以分布在多个主机上,或者可以由单个主机处理。在一个实施例中,每密钥或每实体异常处理可以用于工作流。对于一个或多个密钥,计算可能会失败,但是随后可以尝试相同的计算并且对于一个或多个其它密钥可能会成功。相反,使用大数据作业的传统方法,单个密钥的单个故障可能导致整个计算在所有密钥上终止。
该计算可以产生一个或多个输出。例如,机器学习工作流可以生成经过训练的模型,模拟可以生成关于真实世界行为的预测,或者财务计算可以为客户生成帐单。如1330所示,可以使用储存库管理器来存储一个或多个输出的表示,例如,通过主机使用所提供的凭证将输出添加到存储服务。该表示可以包括捕获一个或多个输出(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。
如1340所示,可以将第二计算分配给第二组一个或多个主机。第二计算也可以表示工作流中的步骤,但可以表示第一计算的变化。第二计算可以与(至少部分地)不同于第一组参数的第二组参数相关联。例如,第二组参数可以包括第二组一个或多个输入而不是第一组一个或多个输入。作为另一实例,第二组参数可以包括第二组程序代码而不是第一组程序代码。第二组程序代码可以表示第一组程序代码的更新构建。在一个实施例中,可以(至少部分地)基于第一计算的结果来确定第二组参数,例如,以调整该计算。可以使用远程储存库管理器来存储用于第二计算的输入组和程序代码组。第二组主机可以包括一个或多个集群、一个或多个虚拟计算实例,或一个或多个其它计算资源。第二组主机可以不包括第一组主机、第一组主机中的一些,或者第一组主机中的全部。第二计算可以与应当尝试对其进行计算的一组实体(例如,帐户或主密钥)相关联;这些实体相对于第一计算可以相同或可以不同。第二组一个或多个主机可以选自一组在其能力、配置和/或成本方面不同的可用主机。在一个实施例中,可以由协调器基于输入量(例如,实体数量)、计算类型(例如,简单业务逻辑对科学计算)等来选择主机。
如1350所示,可以使用第二组主机来发起第二计算的执行。执行可以使用该组程序代码和与第二组参数相关联的该组输入。在一个实施例中,与第一计算相同的输入可以与不同的程序代码一起使用。例如,可以使用第二计算来测试软件的新构建,以确定输出是否与第一构建相同或者比较两个构建的性能。在一个实施例中,不同的输入可以与相同的程序代码一起使用。例如,不同的使用记录可以与相同的定价模型一起使用以生成替代帐单,或者相同的使用记录可以与不同的定价模型一起使用以生成替代帐单。在一个实施例中,可以使用由储存库管理器服务发送到主机的凭证将程序代码的本地副本从存储服务传送到第二组主机。在一个实施例中,输入的本地副本可以使用凭证从存储服务传送到第二组主机、存储在本地高速缓存中,并由计算经由与储存库管理器相关联的本地文件系统来访问。与第一计算一样,可以为各个主机调度各个密钥。密钥可以分布在多个主机上,或者可以由单个主机处理。在一个实施例中,每密钥或每实体异常处理可以用于工作流。对于一个或多个密钥,计算可能会失败,但是随后可以尝试相同的计算并且对于一个或多个其它密钥可能会成功。
第二计算可以产生一个或多个输出。例如,机器学习工作流可以生成经过训练的模型,模拟可以生成关于真实世界行为的预测,或者财务计算可以为客户生成帐单。如1360所示,可以使用储存库管理器来存储一个或多个输出的表示,例如,通过主机使用所提供的凭证将输出添加到存储服务。该表示可以包括捕获一个或多个输出(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。在一个实施例中,可以将第二输出与第一输出进行比较,例如,以确定两个计算产生相同还是不同的输出。在一个实施例中,可以对如两个计算的性能度量的结果进行比较,例如,以确定两个计算中的哪一个具有较好的执行时间或以其它方式更好地利用资源。
图14是绘示了根据一些实施例的用于使用远程储存库进行计算的参数变化的方法的流程图,包括参数变化的并行执行。如1410所示,可以将第一计算分配给第一组一个或多个主机。第一计算可以表示工作流中的步骤。第一计算可以与第一组参数相关联。第一组参数可以包括用于计算的第一组一个或多个输入和第一组程序代码。可以使用远程储存库管理器来存储第一组输入和第一组程序代码。程序代码可以是容器或图像的一部分,例如,Docker容器。容器或图像还可以包括要在虚拟计算实例上运行的操作系统图像。程序代码可以由一个或多个开发者构建并经由开发环境提供给储存库管理器。第一组主机可以包括一个或多个集群、一个或多个虚拟计算实例,或一个或多个其它计算资源。第一计算可以与应当尝试对其进行计算的一组实体(例如,帐户或主密钥)相关联。一个或多个主机可以选自一组在其能力、配置和/或成本方面不同的可用主机。在一个实施例中,可以由协调器基于输入量(例如,实体数量)、计算类型(例如,简单业务逻辑对科学计算)等来选择主机。
如1420所示,可以使用第一组主机来发起第一计算的执行。执行可以使用第一组程序代码和第一组输入。在一个实施例中,可以使用由储存库管理器服务发送到主机的凭证将程序代码的本地副本从存储服务传送到第一组主机。在一个实施例中,输入的本地副本可以使用凭证从存储服务传送到第一组主机、存储在本地高速缓存中,并由计算经由与储存库管理器相关联的本地文件系统来访问。可以为各个主机调度各个密钥。密钥可以分布在多个主机上,或者可以由单个主机处理。在一个实施例中,每密钥或每实体异常处理可以用于工作流。对于一个或多个密钥,计算可能会失败,但是随后可以尝试相同的计算并且对于一个或多个其它密钥可能会成功。相反,使用大数据作业的传统方法,单个密钥的单个故障可能导致整个计算在所有密钥上终止。
该计算可以产生一个或多个输出。例如,机器学习工作流可以生成经过训练的模型,模拟可以生成关于真实世界行为的预测,或者财务计算可以为客户生成帐单。如1430所示,可以使用储存库管理器来存储一个或多个输出的表示,例如,通过主机使用所提供的凭证将输出添加到存储服务。该表示可以包括捕获一个或多个输出(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。
第二计算可以与第一计算同时执行。如1440所示,第二计算可以被分配给第二组一个或多个主机。第二计算也可以表示工作流中的步骤,但可以表示第一计算的变化。第二计算可以与(至少部分地)不同于第一组参数的第二组参数相关联。例如,第二组参数可以包括第二组一个或多个输入而不是第一组一个或多个输入。作为另一实例,第二组参数可以包括第二组程序代码而不是第一组程序代码。第二组程序代码可以表示第一组程序代码的更新构建。可以使用远程储存库管理器来存储用于第二计算的输入组和程序代码组。第二组主机可以包括一个或多个集群、一个或多个虚拟计算实例,或一个或多个其它计算资源。第二组主机可以不包括第一组主机、第一组主机中的一些,或者第一组主机中的全部。第二计算可以与应当尝试对其进行计算的一组实体(例如,帐户或主密钥)相关联;这些实体相对于第一计算可以相同或可以不同。第二组一个或多个主机可以选自一组在其能力、配置和/或成本方面不同的可用主机。在一个实施例中,可以由协调器基于输入量(例如,实体数量)、计算类型(例如,简单业务逻辑对科学计算)等来选择主机。
如1450所示,可以使用第二组主机来发起第二计算的执行。执行可以使用该组程序代码和与第二组参数相关联的该组输入。在一个实施例中,与第一计算相同的输入可以与不同的程序代码一起使用。例如,可以使用第二计算来测试软件的新构建,以确定输出是否与第一构建相同或者比较两个构建的性能。在一个实施例中,不同的输入可以与相同的程序代码一起使用。例如,不同的使用记录可以与相同的定价模型一起使用以生成替代帐单,或者相同的使用记录可以与不同的定价模型一起使用以生成替代帐单。在一个实施例中,可以使用由储存库管理器服务发送到主机的凭证将程序代码的本地副本从存储服务传送到第二组主机。在一个实施例中,输入的本地副本可以使用凭证从存储服务传送到第二组主机、存储在本地高速缓存中,并由计算经由与储存库管理器相关联的本地文件系统来访问。与第一计算一样,可以为各个主机调度各个密钥。密钥可以分布在多个主机上,或者可以由单个主机处理。在一个实施例中,每密钥或每实体异常处理可以用于工作流。对于一个或多个密钥,计算可能会失败,但是随后可以尝试相同的计算并且对于一个或多个其它密钥可能会成功。
第二计算可以产生一个或多个输出。例如,机器学习工作流可以生成经过训练的模型,模拟可以生成关于真实世界行为的预测,或者财务计算可以为客户生成帐单。如1460所示,可以使用储存库管理器来存储一个或多个输出的表示,例如,通过主机使用所提供的凭证将输出添加到存储服务。该表示可以包括捕获一个或多个输出(例如,字段名称、数据类型和/或值)的任何数据对象或数据结构。在一个实施例中,如性能度量的其它结果也可被记录和存档以用于两个计算。
如1470所示,可以将第一计算的结果与第二计算的结果进行比较。在一个实施例中,可以将第二输出与第一输出进行比较,例如,以确定两个计算产生相同还是不同的输出。在一个实施例中,可以对如两个计算的性能度量的结果进行比较,例如,以确定两个计算中的哪一个具有较好的执行时间或以其它方式更好地利用资源。在一个实施例中,可以(至少部分地)基于比较来选择第一组参数或第二组参数。例如,可以选择具有高级运行时的软件构建。作为另一实例,可以选择生成更高或更低帐单的定价模型输入。作为又一实例,机器学习计算或科学计算(例如,模拟)可以与不同的参数变化同时运行,并且可以选择与最优计算相关联的参数组。
说明性计算机系统
在至少一些实施例中,实现本文所描述的一种或多种技术的一部分或全部的计算机系统可以包括计算机系统,该计算机系统包括或被配置成访问一种或多种计算机可读介质。图15A和图15B绘示了此类计算装置1500。在所示实施例中,计算装置1500包括经由输入/输出(I/O)接口1530联接到系统存储器1520的一个或多个处理器1510A至1510N。计算装置1500进一步包括联接到I/O接口1530的网络接口1540。
在各个实施例中,计算装置1500可以是包括一个处理器的单处理器系统或者包括几个处理器1510A至1510N(例如,两个、四个、八个或另一适合数目)的多处理器系统。处理器1510A至1510N可以包括能够执行指令的任何合适的处理器。例如,在各种实施例中,处理器1510A至1510N可以是实施各种指令集架构(ISA)(如x86、PowerPC、SPARC,或MIPS ISA,或任何其它合适的ISA)中的任何指令集架构的处理器。在多处理器系统中,处理器1510A至1510N中的每一个可以共同地,但不是必须地实施相同的ISA。
系统存储器1520可被配置成存储可由处理器1510A至1510N访问的程序指令和数据。在各种实施例中,可使用任何合适的存储器技术(如静态随机存取存储器(SRAM)、同步动态RAM(SDRAM)、非易失性/闪存型存储器或任何其它类型的存储器)实施系统存储器1520。在所示实施例中,实现如上述那些方法、技术和数据的一个或多个期望功能的程序指令和数据被示为作为代码(即,程序指令)1525和数据1526存储在系统存储器1520内。如图15A所示,系统存储器1520存储实现上述储存库管理器服务110的各方面的程序代码和数据。如图15B所示,系统存储器1520存储实现上述协调器700的各个方面的程序代码和数据。
在一个实施例中,I/O接口1530可被配置成协调处理器1510A至1510N、系统存储器1520和装置中的任何外围装置(包括网络接口1540或其它外围接口)之间的I/O业务。在一些实施例中,I/O接口1530可以执行任何必要的协议、定时或其它数据转换,以将来自一个组件(例如,系统存储器1520)的数据信号转换成适于由另一组件(例如,处理器1510A-1510N)使用的格式。在一些实施例中,例如,I/O接口1530可以包括对通过各种类型的外围总线(如外围组件互连(PCI)总线标准或通用串行总线(USB)标准的变体)所附接的装置的支持。在一些实施例中,I/O接口1530的功能可以被分成两个或更多个单独的组件,例如北桥和南桥。此外,在一些实施例中,I/O接口1530(如用于系统存储器1520的接口)的一些或所有功能可以直接并入到处理器1510A至1510N中。
网络接口1540可被配置成允许数据在计算装置1500与附接到一个或多个网络1550的其它装置1560之间交换。在各种实施例中,例如,网络接口1540可以支持通过任何合适的有线或无线通用数据网络(如以太网类型)进行的通信。另外,网络接口1540可以支持经由电信/电话网络(如模拟语音网络或数字光纤通信网络)、经由存储区域网络(如光纤信道SAN)或经由任何其它合适类型的网络和/或协议的通信。
在一些实施例中,系统存储器1520可以是至少一种计算机可读(即,计算机可访问)介质的一个实施例,其被配置成存储如上所述的程序指令和数据,用于实现对应方法和设备的实施例。例如,系统存储器1520可以存储与网络安全性评估器100相关联的程序代码和数据。在一些实施例中,可以在不同类型的计算机可读介质上接收、发送或存储程序指令和/或数据。一般而言,计算机可读介质可以包括通过I/O接口1530联接到计算装置1500的非暂态存储介质或存储器介质,如磁性或光学介质,例如,磁盘或DVD/CD。非暂态计算机可读存储介质还可以包括在计算装置1500的一些实施例中可作为系统存储器1520或另一种类型的存储器被包括的任何易失性或非易失性介质,如RAM(例如,SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等。此外,计算机可读介质可以包括经由如网络和/或无线链路等通信介质传送的如电、电磁或数字信号等传输介质或信号,如可经由网络接口1540来实现。可以使用存储在一个或多个处理器上或跨一个或多个处理器执行的程序指令的一种或多种非暂时性计算机可读存储介质来实现所描述的功能。如图15A和图15B所示的多个计算装置的部分或全部可以用于实现各种实施例中所描述的功能;例如,在各种不同装置和服务器上运行的软件组件可以协作以提供功能。在一些实施例中,所描述的功能的部分可以使用存储装置、网络装置或各种类型的计算机系统来实现。如本文所使用的术语“计算装置”是指至少所有这些类型的装置,并且不限于这些类型的装置。
如附图中所示的和本文所描述的各种方法代表方法的实施例的实例。方法可以以软件、硬件或其组合的方式实施。在方法中的各种方法中,可以改变步骤的顺序,并且可以对各种元素进行添加、重新排序、组合、省略、修改等。可自动地(例如,在没有由用户输入直接提示的情况下)和/或以编程方式(例如,根据程序指令)执行步骤中的各个步骤。
本文中对本发明的描述中所使用的术语仅出于描述特定实施例的目的并且并不旨在对本发明进行限制。如在本发明的说明书和所附权利要求书中所用的,单数形式“一”、“一个”和“所述”旨在也包括复数形式,除非上下文另有明确说明。还应理解的是,本文所用的术语“和/或”是指并且涵盖一个或多个相关联的所列项目的任何和所有可以能的组合。应进一步理解的是,当在本说明书中使用时,术语“包括”、“包括的”、“包含”和/或“包含的”指定了声明的特征、整体、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或其组合。
如本文所使用的,取决于上下文,术语“如果”可以被解释为意味“当……时”或“在……上”或“响应于确定”或“响应于检测”。类似地,取决于上下文,短语“如果是确定的”或“如果[陈述的条件或事件]被检测到”可以被解释为意味“在确定时”或“响应于确定”或“在检测到[所述条件或事件]时”或“响应于检测到[陈述的条件或事件]”。
应当理解的是,尽管本文可以使用术语第一、第二等来描述各种组件,但是这些元件不应受这些术语限制。这些术语仅用于将一个元件与另一元件区分开。例如,在不脱离本发明的范围的情况下,第一接触可以被称为第二接触,并且类似地,第二接触可以被称为第一接触。第一接触和第二接触两者都是接触,但是它们不是同一接触。
本文阐述了许多特定的细节以提供对所要求保护的主题的透彻理解。然而,本领域技术人员将理解,所要求保护的主题可以在没有这些特定的细节的情况下实施。在其它实例中,将不详细描述本领域技术人员已知的方法、装置或系统,使得不混淆所要求保护的主题。对于受益于这个公开内容的本领域技术人员来说显而易见的是,可以进行各种修改和改变。本发明旨在包括所有此类修改和变化,因此,以上描述应被认为是说明性的而不是限制性的。
鉴于以下条款,可以更好地理解前述内容:
条款1.一种系统,其包含:
被配置成实现储存库管理器的一个或多个计算装置,其中所述储存库管理器被配置成:
使用存储服务来存储储存库的一个或多个文件;
向客户端装置处的客户端库发送允许访问所述存储服务中的所述一个或多个文件的凭证,其中所述一个或多个文件是由所述客户端装置使用所述凭证从所述存储服务获得,其中所述一个或多个文件的本地副本存储在所述客户端装置处的高速缓存中并且能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
将所述一个或多个新文件添加到所述储存库,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务。
条款2.根据条款1所述的系统,其中至少部分地基于所述一个或多个新文件与所述一个或多个文件的本地副本在所述高速缓存中的隔离,在所述客户端装置处检测所述一个或多个新文件。
条款3.根据条款1或2中任一项所述的系统,其中所述凭证包含预签名的统一资源定位符(URL)。
条款4.根据条款1至3中任一项所述的系统,其中所述凭证被高速缓存在所述客户端装置处并且由所述客户端装置多次使用以将多个文件上传到所述存储服务。
条款5.一种由一个或多个计算装置执行的计算机实施的方法,其包含:
从存储服务向客户端装置发送由储存库管理器使用所述存储服务维护的储存库的一个或多个文件,其中所述一个或多个文件是由所述客户端装置使用由所述储存库管理器发送到所述客户端装置的凭证从所述存储服务获得,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
在所述存储服务处从所述客户端装置获得所述一个或多个新文件,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
条款6.根据条款5所述的方法,其中至少部分地基于所述一个或多个新文件与所述本地副本在高速缓存中的隔离,在所述客户端装置处检测所述一个或多个新文件。
条款7.根据条款5或6中任一项所述的方法,其中所述一个或多个文件和所述一个或多个新文件经由所述储存库中和所述客户端装置处的高速缓存中的相应内容散列是内容可寻址的。
条款8.根据条款5至7中任一项所述的方法,其中所述凭证包含由令牌服务提供的临时访问令牌。
条款9.根据条款5至8中任一项所述的方法,其中所述凭证包含预签名的统一资源定位符(URL)。
条款10.根据条款5至9中任一项所述的方法,其中所述凭证被高速缓存在所述客户端装置处并且由所述客户端装置多次使用以将多个文件上传到所述存储服务。
条款11.根据条款5至10中任一项所述的方法,其中所述储存库的一个或多个附加文件不被发送到所述客户端装置。
条款12.根据条款5至12中任一项所述的方法,其中所述储存库与命名空间相关联,并且其中使用与所述命名空间相关联的主密钥在所述客户端装置处对所述一个或多个新文件进行加密。
条款13.一种或多种非暂时性计算机可读存储介质,其存储程序指令,所述程序指令在一个或多个处理器上或跨一个或多个处理器执行时执行:
从存储服务向客户端装置发送由储存库管理器使用所述存储服务维护的储存库的一个或多个文件,其中所述一个或多个文件是由所述客户端装置使用由所述储存库管理器发送到所述客户端装置的凭证从所述存储服务获得,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
在所述存储服务处从所述客户端装置获得所述一个或多个新文件,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
条款14.根据条款13所述的一种或多种非暂时性计算机可读存储介质,其中至少部分地基于所述一个或多个新文件与所述本地副本在所述高速缓存中的隔离,在所述客户端装置处区分所述一个或多个新文件。
条款15.根据条款13或14中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述一个或多个文件和所述一个或多个新文件经由所述储存库和所述客户端装置处的所述高速缓存中的相应内容散列是内容可寻址的。
条款16.根据条款13至15中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述凭证包含由令牌服务提供的临时访问令牌。
条款17.根据条款13至16中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述凭证包含预签名的统一资源定位符(URL)。
条款18.根据条款13至17中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述凭证被高速缓存在所述客户端装置处,并且由所述客户端装置多次使用以将多个文件上传到所述存储服务。
条款19.根据条款13至18中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述储存库的一个或多个附加文件不被发送到所述客户端装置。
条款20.根据条款13至19中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述储存库与命名空间相关联,并且其中使用与所述命名空间相关联的主密钥在所述客户端装置处对所述一个或多个新文件进行加密。
条款21.一种系统,其包含:
用于将储存库的一个或多个文件从存储服务发送到客户端装置的装置,其中所述一个或多个文件是由所述客户端装置使用由储存库管理器发送到所述客户端装置的凭证从所述存储服务请求,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
用于在所述存储服务处从所述客户端装置获得所述一个或多个新文件的装置,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
条款22.根据条款21所述的系统,其中至少部分地基于所述一个或多个新文件与所述本地副本在高速缓存中的隔离,在所述客户端装置处检测所述一个或多个新文件。
条款23.根据条款21或22中任一项所述的系统,其中所述一个或多个文件和所述一个或多个新文件经由所述储存库中和所述客户端装置处的高速缓存中的相应内容散列是内容可寻址的。
条款24.根据条款21至23中任一项所述的系统,其中所述凭证包含由令牌服务提供的临时访问令牌。
条款25.根据条款21至24中任一项所述的系统,其中所述凭证包含预签名的统一资源定位符(URL)。
另外,鉴于以下条款,可以更好地理解前述内容:
条款26.一种系统,其包含:
储存库管理器;
多个主机;以及
使用一个或多个计算装置实现的计算协调器,其中所述计算协调器被配置成:
将包含一个或多个步骤的工作流分配给所述多个主机中的一个或多个所选主机;
使用所述储存库管理器记录和存储对所述工作流的一个或多个输入的表示;
使用所述储存库管理器记录和存储可执行以执行所述工作流的程序代码的表示,其中所述一个或多个输入的本地副本从所述储存库管理器获得并且能由所述工作流经由安装在所述一个或多个所选主机处的本地文件系统来访问,其中所述工作流由所述一个或多个所选主机使用所述程序代码和所述一个或多个输入的所述本地副本来执行,其中针对多个密钥发起所述工作流,其中在所述工作流的一个或多个步骤针对所述密钥的第一部分失败之后,所述工作流针对所述密钥的第二部分成功;
使用所述储存库管理器记录和存储所述工作流的一个或多个输出的表示。
条款27.根据条款26所述的系统,其中针对所述密钥在所述一个或多个主机上执行所述工作流,并且其中针对附加的多个密钥在附加的一个或多个主机上执行所述工作流。
条款28.根据条款26或27中任一项所述的方法,其中所述计算协调器被配置成:
检测针对所述一个或多个主机上的所述密钥的所述第一部分的所述工作流的失败;以及
在检测到所述失败之后,使用一个或多个主机发起所述密钥的所述第二部分的所述工作流。
条款29.根据条款26至28中任一项所述的方法,其中所述计算协调器被配置成:
存储所述密钥的第一子集与所述一个或多个主机之间的映射;以及
将与所述密钥的所述第一子集相关联的附加计算分配给所述一个或多个主机,其中所述附加计算使用高速缓存在所述一个或多个主机处的数据。
条款30.一种由一个或多个计算装置执行的计算机实施的方法,其包含:
使用储存库管理器存储对计算的一个或多个输入的表示,其中所述计算被分配给多个主机中的一个或多个主机,并且其中所述一个或多个输入的本地副本存储在所述一个或多个主机上;
使用所述储存库管理器存储可执行以执行所述计算的程序代码的表示;
使用所述程序代码和所述一个或多个输入的所述本地副本在所述一个或多个主机上发起所述计算,其中针对多个密钥发起所述计算,其中所述计算针对所述密钥的第一部分失败,并且其中在所述计算针对所述密钥的所述第一部分中的至少一些失败之后,所述计算针对所述密钥的第二部分成功;以及
使用所述储存库管理器存储所述计算的一个或多个输出的表示。
条款31.根据条款30所述的方法,其进一步包含:
使用从所述储存库复制的所述程序代码和从所述储存库复制的所述一个或多个输入在附加的一个或多个主机上再次执行所述计算。
条款32.根据条款30或31中任一项所述的方法,其中使用所述一个或多个主机对所述多个密钥执行所述计算,并且其中使用附加的一个或多个主机对附加的多个密钥执行所述计算。
条款33.根据条款30至32中任一项所述的方法,其中至少部分地基于所述密钥的数量使用计算协调器来确定所述一个或多个主机的数量。
条款34.根据条款30至33中任一项所述的方法,其进一步包含:
使用计算协调器检测针对所述一个或多个主机上的所述密钥的所述第一部分的所述计算的失败;以及
在检测到所述失败之后,使用所述一个或多个主机发起所述密钥的所述第二部分的所述计算。
条款35.根据条款30至34中任一项所述的方法,其进一步包含:
使用计算协调器存储所述密钥的第一子集与所述一个或多个主机之间的映射;以及
将与所述密钥的所述第一子集相关联的附加计算分配给所述一个或多个主机,其中所述附加计算使用高速缓存在所述一个或多个主机处的数据。
条款36.根据条款30至35中任一项所述的方法,其中所述计算表示工作流中的步骤,其中与所述步骤相关联的所述程序代码使用容器来实现,其中由一个或多个附加主机执行的一个或多个附加计算表示所述工作流中的一个或多个附加步骤,并且其中所述一个或多个附加计算使用一个或多个附加容器来实现。
条款37.根据条款30至36中任一项所述的方法,其中与所述多个密钥相关联的多个计算请求由计算协调器接收并放置在队列中,并且其中由所述计算协调器针对所述多个密钥发起所述计算。
条款38.一种或多种非暂时性计算机可读存储介质,其存储程序指令,所述程序指令在一个或多个处理器上或跨一个或多个处理器执行时执行:
使用储存库管理器存储对计算的一个或多个输入的表示,其中所述计算表示工作流中的至少一个步骤,其中所述计算被分配给多个主机中的一个或多个主机,并且其中所述一个或多个输入的本地副本存储在所述一个或多个主机上;
使用所述储存库管理器存储可执行以执行所述计算的程序代码的表示;
使用所述程序代码和所述一个或多个输入的所述本地副本在所述一个或多个主机上发起所述计算,其中针对多个实体发起所述计算,其中所述计算针对所述实体的第一部分失败,并且其中在所述计算针对所述实体的所述第一部分中的至少一些失败之后,所述计算针对所述实体的第二部分成功;以及
使用所述储存库管理器存储所述计算的一个或多个输出的表示。
条款39.根据条款38所述的一种或多种非暂时性计算机可读存储介质,其中所述程序指令是进一步计算机可执行的以执行:
使用从所述储存库复制的所述程序代码和从所述储存库复制的所述一个或多个输入在附加的一个或多个主机上再次执行所述计算。
条款40.根据条款38或39中任一项所述的一种或多种非暂时性计算机可读存储介质,其中针对所述多个实体在所述一个或多个主机上执行所述计算,并且其中针对第二多个实体在附加的一个或多个主机上执行所述计算。
条款41.根据条款38至40中任一项所述的一种或多种非暂时性计算机可读存储介质,其中至少部分地基于所述实体的数量使用计算协调器来确定所述一个或多个主机的数量。
条款42.根据条款38至41中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述程序指令是进一步计算机可执行的以执行:
使用计算协调器检测针对所述一个或多个主机上的所述实体的所述第一部分的所述计算的失败;以及
在检测到所述失败之后,使用所述一个或多个主机发起所述实体的所述第二部分的所述计算。
条款43.根据条款38至42中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述程序指令是进一步计算机可执行的以执行:
使用计算协调器存储所述实体的第一子集与所述一个或多个主机之间的映射;以及
将与所述实体的所述第一子集相关联的附加计算分配给所述一个或多个主机,其中所述附加计算使用高速缓存在所述一个或多个主机处的数据。
条款44.根据条款38至43中任一项所述的一种或多种非暂时性计算机可读存储介质,其中与所述至少一个步骤相关联的所述程序代码使用容器来实现,其中由一个或多个附加主机执行的一个或多个附加计算表示所述工作流中的一个或多个附加步骤,并且其中所述一个或多个附加计算使用一个或多个附加容器来实现。
条款45.根据条款38至44中任一项所述的一种或多种非暂时性计算机可读存储介质,其中与所述多个实体相关联的多个计算请求由计算协调器接收并放置在队列中,并且其中由所述计算协调器针对所述多个实体发起所述计算。
条款46.一种系统,其包含:
用于存储对计算的一个或多个输入的表示的装置,其中所述计算被分配给多个主机中的一个或多个主机,并且其中所述一个或多个输入的本地副本存储在所述一个或多个主机上;
用于存储可执行以执行所述计算的程序代码的表示的装置;
用于使用所述程序代码和所述一个或多个输入的所述本地副本在所述一个或多个主机上发起所述计算的装置,其中针对多个密钥发起所述计算,其中所述计算针对所述密钥的第一部分失败,并且其中在所述计算针对所述密钥的所述第一部分中的至少一些失败之后,所述计算针对所述密钥的第二部分成功;以及
用于存储所述计算的一个或多个输出的表示的装置。
条款47.根据条款46所述的系统,其进一步包含:
用于使用从所述储存库复制的所述程序代码和从所述储存库复制的所述一个或多个输入来再次执行计算的装置。
条款48.根据条款46或47中任一项所述的系统,其中至少部分地基于所述密钥的数量使用计算协调器来确定所述一个或多个主机的数量。
条款49.根据条款46至48中任一项所述的系统,其进一步包含:
用于检测针对所述一个或多个主机上的所述密钥的所述第一部分的所述计算的失败的装置;以及
用于在检测到所述失败之后发起针对所述密钥的所述第二部分的所述计算的装置。
条款50.根据条款46至49中任一项所述的系统,其进一步包含:
用于存储所述密钥的第一子集与所述一个或多个主机之间的映射的装置;以及
用于将与所述密钥的所述第一子集相关联的附加计算分配给所述一个或多个主机的装置,其中所述附加计算使用高速缓存在所述一个或多个主机处的数据。
此外,鉴于以下条款,可以更好地理解前述内容:
条款51.一种系统,其包含:
储存库管理器;
多个主机;以及
使用一个或多个计算装置实现的计算协调器,其中所述计算协调器被配置成:
将第一计算分配给所述多个主机中的第一组一个或多个主机,其中所述第一计算与包括第一组一个或多个输入和第一组程序代码的第一组参数相关联;
将第二计算分配给所述多个主机中的第二组一个或多个主机,其中所述第二计算与第二组参数相关联,所述第二组参数至少部分地不同于所述第一组一个或多个输入、所述第一组程序代码,或所述第一组一个或多个输入和所述第一组程序代码;
使用所述第一组一个或多个主机并且使用所述第一组参数发起所述第一计算的执行,其中使用由所述储存库管理器提供的一个或多个凭证从存储服务获得所述第一组一个或多个输入的本地副本和所述第一组程序代码的本地副本,并且其中所述第一计算由所述第一组一个或多个主机使用所述第一组程序代码的所述本地副本和所述第一组一个或多个输入的所述本地副本来执行;
使用所述第二组一个或多个主机并且使用所述第二组参数发起所述第二计算的执行;
使用所述储存库管理器存储所述第一计算的一个或多个输出的表示和所述第二计算的一个或多个输出的表示。
条款52.根据条款51中所述的系统,其中所述第二计算由所述第二组一个或多个主机使用所述第一组程序代码的附加本地副本和第二组一个或多个输入的本地副本来执行,或者其中所述第二计算由所述第二组一个或多个主机使用第二组程序代码的本地副本和所述第一组一个或多个输入的附加本地副本来执行。
条款53.根据条款51或52中任一项所述的系统,其中所述第一计算和所述第二计算并行地运行,并且其中所述计算协调器被配置成:
执行所述第一计算的结果与所述第二计算的结果的比较;以及
响应于所述比较选择所述第一组参数或所述第二组参数。
条款54.根据条款51至53中任一项所述的系统,其中所述第二计算的执行在所述第一计算的执行完成之后发起,并且其中所述计算协调器被配置成:
响应于所述第一计算的结果从所述第一组参数改变所述第二组参数。
条款55.一种由一个或多个计算装置执行的计算机实施的方法,其包含:
将第一计算分配给第一组一个或多个主机,其中所述第一计算与包括第一组一个或多个输入和第一组程序代码的第一组参数相关联;
将第二计算分配给第二组一个或多个主机,其中所述第二计算与至少部分不同于所述第一组参数的第二组参数相关联;
使用所述第一组一个或多个主机并且使用所述第一组参数发起所述第一计算的执行,其中使用由储存库管理器提供的一个或多个凭证从存储服务获得所述第一组一个或多个输入的本地副本和所述第一组程序代码的本地副本,并且其中所述第一计算由所述第一组一个或多个主机使用所述第一组程序代码的所述本地副本和所述第一组一个或多个输入的所述本地副本来执行;以及
使用所述第二组一个或多个主机并且使用所述第二组参数发起所述第二计算的执行。
条款56.根据条款55中所述的方法,其中所述第二计算由所述第二组一个或多个主机使用所述第一组程序代码的附加本地副本和第二组一个或多个输入的本地副本来执行,其中所述第一组程序代码的所述附加本地副本和所述第二组一个或多个输入的所述本地副本从所述储存库管理器获得,并且其中所述第二组一个或多个输入的所述本地副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款57.根据条款55或56中任一项所述的方法,其中所述第二计算由所述第二组一个或多个主机使用第二组程序代码的本地副本和所述第一组一个或多个输入的附加本地副本来执行,其中所述第二组程序代码的所述本地副本和所述第一组一个或多个输入的所述附加本地副本从所述储存库管理器获得,并且其中所述第一组一个或多个输入的所述附加本地副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款58.根据条款55至57中任一项所述的方法,其进一步包含:
使用所述储存库管理器存储所述第一计算的一个或多个输出的表示和所述第二计算的一个或多个输出的表示。
条款59.根据条款55至58中任一项所述的方法,其中所述第一计算和所述第二计算并行地运行,并且其中所述方法进一步包含:
执行所述第一计算的结果与所述第二计算的结果的比较;以及
响应于所述比较选择所述第一组参数或所述第二组参数。
条款60.根据条款55至59中任一项所述的方法,其中所述第二计算的执行在所述第一计算的执行完成之后发起,并且其中所述方法进一步包含:
响应于所述第一计算的结果从所述第一组参数改变所述第二组参数。
条款61.根据条款55至60中任一项所述的方法,其中所述第一计算和所述第二计算包括一个或多个模拟。
条款62.根据条款55至61中任一项所述的方法,其中所述第一计算和所述第二计算包括一个或多个机器学习任务。
条款63.一种或多种非暂时性计算机可读存储介质,其存储程序指令,所述程序指令在一个或多个处理器上或跨一个或多个处理器执行时执行:
将第一计算分配给第一组一个或多个主机,其中所述第一计算与包括第一组一个或多个输入和第一组程序代码的第一组参数相关联;
将第二计算分配给第二组一个或多个主机,其中所述第二计算与至少部分不同于所述第一组参数的第二组参数相关联;
使用所述第一组一个或多个主机并且使用所述第一组参数发起所述第一计算的执行,其中从储存库管理器获得所述第一组一个或多个输入的本地副本和所述第一组程序代码的本地副本,其中所述第一计算由所述第一组一个或多个主机使用所述第一组程序代码的所述本地副本和所述第一组一个或多个输入的所述本地副本来执行,其中针对多个密钥发起所述第一计算,并且其中在所述第一计算针对所述密钥的第一部分失败之后,所述第一计算针对所述密钥的第二部分成功;以及
使用所述第二组一个或多个主机并且使用所述第二组参数发起所述第二计算的执行。
条款64.根据条款63所述的一种或多种非暂时性计算机可读存储介质,其中所述第二计算由所述第二组一个或多个主机使用所述第一组程序代码的附加本地副本和第二组一个或多个输入的本地副本来执行,其中从所述储存库管理器获得所述第一组程序代码的所述附加本地副本和所述第二组一个或多个输入的所述本地副本,并且其中所述第二组一个或多个输入的所述本地副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款65.根据条款63或64中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述第二计算由所述第二组一个或多个主机使用第二组程序代码的本地副本和所述第一组一个或多个输入的附加本地副本来执行,其中从所述储存库管理器获得所述第二组程序代码的所述本地副本和所述第一组一个或多个输入的所述附加本地副本,并且其中所述第一组一个或多个输入的所述附加本地副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款66.根据条款63至65中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述程序指令是进一步计算机可执行的以执行:
使用所述储存库管理器存储所述第一计算的一个或多个输出的表示和所述第二计算的一个或多个输出的表示。
条款67.根据条款63至66中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述第一计算和所述第二计算并行地运行,并且其中所述程序指令是进一步计算机可执行的以执行:
执行所述第一计算的结果与所述第二计算的结果的比较;以及
响应于所述比较选择所述第一组参数或所述第二组参数。
条款68.根据条款63至67中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述第二计算的执行在所述第一计算的执行完成之后发起,并且其中所述程序指令是进一步计算机可执行的以执行:
响应于所述第一计算的结果从所述第一组参数改变所述第二组参数。
条款69.根据条款63至68中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述第一计算和所述第二计算包括一个或多个模拟。
条款70.根据条款63至69中任一项所述的一种或多种非暂时性计算机可读存储介质,其中所述第一计算和所述第二计算包括一个或多个机器学习任务。
条款71.一种系统,其包含:
用于将第一计算分配给第一组一个或多个主机的装置,其中所述第一计算与包括第一组一个或多个输入和第一组程序代码的第一组参数相关联;
用于将第二计算分配给第二组一个或多个主机的装置,其中所述第二计算与至少部分不同于所述第一组参数的第二组参数相关联;
用于至少部分地基于所述第一组一个或多个主机并且使用所述第一组参数发起所述第一计算的执行的装置,其中使用由储存库管理器提供的一个或多个凭证从存储服务获得所述第一组一个或多个输入的副本和所述第一组程序代码的副本,并且其中所述第一计算由所述第一组一个或多个主机使用所述第一组程序代码的所述副本和所述第一组一个或多个输入的所述副本来执行;以及
用于至少部分地基于所述第二组一个或多个主机并且使用所述第二组参数发起所述第二计算的执行的装置。
条款72.根据条款71中所述的系统,其中所述第二计算由所述第二组一个或多个主机使用所述第一组程序代码的附加副本和第二组一个或多个输入的副本来执行,其中从储存库管理器获得所述第一组程序代码的所述附加副本和所述第二组一个或多个输入的所述副本,并且其中所述第二组一个或多个输入的所述副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款73.根据条款71或72中任一项所述的系统,其中所述第二计算由所述第二组一个或多个主机使用第二组程序代码的副本和所述第一组一个或多个输入的附加副本来执行,其中从储存库管理器获得所述第二组程序代码的所述副本和所述第一组一个或多个输入的所述附加副本,并且其中所述第一组一个或多个输入的所述附加副本能由所述第二计算经由安装在所述第二组一个或多个主机处的本地文件系统来访问。
条款74.根据条款71至73中任一项所述的系统,其进一步包含:
用于存储所述第一计算的一个或多个输出的表示和所述第二计算的一个或多个输出的表示的装置。
条款75.根据条款71至74中任一项所述的系统,其中所述第一计算和所述第二计算并行地运行,并且其中所述方法进一步包含:
用于执行所述第一计算的结果与所述第二计算的结果的比较的装置;以及
用于响应于所述比较选择所述第一组参数或所述第二组参数的装置。

Claims (15)

1.一种系统,其包含:
一个或多个计算装置,其被配置成:
从存储服务向客户端装置发送由储存库管理器使用所述存储服务维护的储存库的一个或多个文件,其中所述一个或多个文件是由所述客户端装置使用由所述储存库管理器发送到所述客户端装置的凭证从所述存储服务获得,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
在所述存储服务处从所述客户端装置获得所述一个或多个新文件,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
2.根据权利要求1所述的系统,其中至少部分地基于所述一个或多个新文件与所述一个或多个文件的所述本地副本在高速缓存中的隔离,在所述客户端装置处检测所述一个或多个新文件。
3.根据权利要求1所述的系统,其中所述凭证包含预签名的统一资源定位符(URL)。
4.根据权利要求1所述的系统,其中所述凭证被高速缓存在所述客户端装置处并且由所述客户端装置多次使用以将多个文件上传到所述存储服务。
5.一种由一个或多个计算装置执行的计算机实施的方法,其包含:
从存储服务向客户端装置发送由储存库管理器使用所述存储服务维护的储存库的一个或多个文件,其中所述一个或多个文件是由所述客户端装置使用由所述储存库管理器发送到所述客户端装置的凭证从所述存储服务获得,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
在所述存储服务处从所述客户端装置获得所述一个或多个新文件,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
6.根据权利要求5所述的方法,其中至少部分地基于所述一个或多个新文件与所述本地副本在高速缓存中的隔离,在所述客户端装置处检测所述一个或多个新文件。
7.根据权利要求5所述的方法,其中所述一个或多个文件和所述一个或多个新文件经由所述储存库中和所述客户端装置处的高速缓存中的相应内容散列是内容可寻址的。
8.根据权利要求5所述的方法,其中所述凭证包含由令牌服务提供的临时访问令牌。
9.根据权利要求5所述的方法,其中所述凭证包含预签名的统一资源定位符(URL)。
10.根据权利要求5所述的方法,其中所述凭证被高速缓存在所述客户端装置处并且由所述客户端装置多次使用以将多个文件上传到所述存储服务。
11.根据权利要求5所述的方法,其中所述储存库的一个或多个附加文件不被发送到所述客户端装置。
12.根据权利要求5所述的方法,其中所述储存库与命名空间相关联,并且其中使用与所述命名空间相关联的主密钥在所述客户端装置处对所述一个或多个新文件进行加密。
13.一种或多种非暂时性计算机可读存储介质,其存储程序指令,所述程序指令在一个或多个处理器上或跨一个或多个处理器执行时执行:
从存储服务向客户端装置发送由储存库管理器使用所述存储服务维护的储存库的一个或多个文件,其中所述一个或多个文件是由所述客户端装置使用由所述储存库管理器发送到所述客户端装置的凭证从所述存储服务获得,其中所述一个或多个文件的本地副本能经由安装在所述客户端装置处的本地文件系统来访问,并且其中在所述客户端装置处生成与所述储存库相关联的一个或多个新文件;以及
在所述存储服务处从所述客户端装置获得所述一个或多个新文件,其中所述客户端装置使用所述凭证将所述一个或多个新文件添加到所述存储服务,并且其中将所述一个或多个新文件添加到所述储存库。
14.根据权利要求13所述的一种或多种非暂时性计算机可读存储介质,其中至少部分地基于所述一个或多个新文件与所述本地副本在高速缓存中的隔离,在所述客户端装置处区分所述一个或多个新文件。
15.根据权利要求13所述的一种或多种非暂时性计算机可读存储介质,其中所述一个或多个文件和所述一个或多个新文件经由所述储存库和所述客户端装置处的高速缓存中的相应内容散列是内容可寻址的。
CN201980063533.5A 2018-09-28 2019-09-26 远程储存库的客户端侧文件系统 Pending CN112753028A (zh)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US16/147,468 2018-09-28
US16/147,471 2018-09-28
US16/147,474 2018-09-28
US16/147,471 US11379599B2 (en) 2018-09-28 2018-09-28 Client-side filesystem for a remote repository
US16/147,468 US11467878B2 (en) 2018-09-28 2018-09-28 Orchestration of computations using a remote repository
US16/147,474 US10983830B2 (en) 2018-09-28 2018-09-28 Parameter variations for computations using a remote repository
PCT/US2019/053263 WO2020069196A1 (en) 2018-09-28 2019-09-26 Client-side filesystem for a remote repository

Publications (1)

Publication Number Publication Date
CN112753028A true CN112753028A (zh) 2021-05-04

Family

ID=68296644

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980063533.5A Pending CN112753028A (zh) 2018-09-28 2019-09-26 远程储存库的客户端侧文件系统

Country Status (3)

Country Link
EP (1) EP3857396A1 (zh)
CN (1) CN112753028A (zh)
WO (1) WO2020069196A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116192870B (zh) * 2023-04-21 2023-07-11 中国科学技术大学 基于镜像级元数据管理和负载感知的p2p下载镜像方法

Citations (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101159896A (zh) * 2007-09-19 2008-04-09 Ut斯达康通讯有限公司 一种个人移动终端数据包下载方法
CN101183367A (zh) * 2007-01-23 2008-05-21 腾讯科技(深圳)有限公司 一种利用标签管理文件的方法、即时通信客户端及系统
CN101228523A (zh) * 2005-04-25 2008-07-23 网络装置公司 用于高速缓存网络文件系统的系统和方法
CN101408846A (zh) * 2008-11-24 2009-04-15 深圳华为通信技术有限公司 一种杀毒软件升级的方法及相应的终端和系统
CN101452479A (zh) * 2007-12-04 2009-06-10 株式会社理光 文件管理装置、文件管理方法和计算机程序产品
CN101741879A (zh) * 2008-11-19 2010-06-16 华为技术有限公司 一种移动终端地图更新方法、装置及系统
CN101887612A (zh) * 2009-05-15 2010-11-17 迈普通信技术股份有限公司 一种终端应用的实现方法
CN102137281A (zh) * 2011-01-10 2011-07-27 上海聚欣网络科技有限公司 一种用于为播放终端点播视频文件的方法与设备
CN102158851A (zh) * 2011-02-17 2011-08-17 惠州Tcl移动通信有限公司 移动终端网络服务请求参数更新的方法及移动终端
CN102195802A (zh) * 2010-03-18 2011-09-21 中兴通讯股份有限公司 一种终端软件下发方法、服务器和终端
CN102546685A (zh) * 2010-12-08 2012-07-04 爱国者电子科技有限公司 一种远程共享文件的方法
CN102821140A (zh) * 2012-07-17 2012-12-12 北京小米科技有限责任公司 一种信息共享方法和终端
CN103023962A (zh) * 2011-10-27 2013-04-03 微软公司 共享媒体文件的技术
CN103023988A (zh) * 2012-11-27 2013-04-03 北京金山云科技有限公司 文件同步方法、服务器、客户端及终端设备
CN103064927A (zh) * 2012-12-21 2013-04-24 曙光信息产业(北京)有限公司 分布式文件系统的数据访问方法和装置
US20130117182A1 (en) * 2011-11-07 2013-05-09 International Business Machines Corporation Media file abbreviation retrieval
CN104050102A (zh) * 2014-06-26 2014-09-17 北京思特奇信息技术股份有限公司 一种电信系统中的对象存储方法及装置
US9251114B1 (en) * 2012-10-12 2016-02-02 Egnyte, Inc. Systems and methods for facilitating access to private files using a cloud storage system
CN105359491A (zh) * 2013-06-14 2016-02-24 微软技术许可有限责任公司 云环境中的用户认证
CN105378744A (zh) * 2013-05-03 2016-03-02 思杰系统有限公司 在企业系统中的用户和设备认证
US20170012921A1 (en) * 2015-07-08 2017-01-12 Eric Barker System And Methods For Providing A Notification Upon The Occurrence Of A Trigger Event Associated With Playing Media Content Over A Network
CN107077301A (zh) * 2014-11-05 2017-08-18 亚马逊科技公司 用于存储客户端文件系统的存储卷的动态缩放
CN107085546A (zh) * 2016-02-16 2017-08-22 深圳市深信服电子科技有限公司 基于故障域技术的数据管理方法和装置

Patent Citations (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101228523A (zh) * 2005-04-25 2008-07-23 网络装置公司 用于高速缓存网络文件系统的系统和方法
CN101183367A (zh) * 2007-01-23 2008-05-21 腾讯科技(深圳)有限公司 一种利用标签管理文件的方法、即时通信客户端及系统
CN101159896A (zh) * 2007-09-19 2008-04-09 Ut斯达康通讯有限公司 一种个人移动终端数据包下载方法
CN101452479A (zh) * 2007-12-04 2009-06-10 株式会社理光 文件管理装置、文件管理方法和计算机程序产品
CN101741879A (zh) * 2008-11-19 2010-06-16 华为技术有限公司 一种移动终端地图更新方法、装置及系统
CN101408846A (zh) * 2008-11-24 2009-04-15 深圳华为通信技术有限公司 一种杀毒软件升级的方法及相应的终端和系统
CN101887612A (zh) * 2009-05-15 2010-11-17 迈普通信技术股份有限公司 一种终端应用的实现方法
CN102195802A (zh) * 2010-03-18 2011-09-21 中兴通讯股份有限公司 一种终端软件下发方法、服务器和终端
CN102546685A (zh) * 2010-12-08 2012-07-04 爱国者电子科技有限公司 一种远程共享文件的方法
CN102137281A (zh) * 2011-01-10 2011-07-27 上海聚欣网络科技有限公司 一种用于为播放终端点播视频文件的方法与设备
CN102158851A (zh) * 2011-02-17 2011-08-17 惠州Tcl移动通信有限公司 移动终端网络服务请求参数更新的方法及移动终端
CN103023962A (zh) * 2011-10-27 2013-04-03 微软公司 共享媒体文件的技术
US20130117182A1 (en) * 2011-11-07 2013-05-09 International Business Machines Corporation Media file abbreviation retrieval
CN102821140A (zh) * 2012-07-17 2012-12-12 北京小米科技有限责任公司 一种信息共享方法和终端
US9251114B1 (en) * 2012-10-12 2016-02-02 Egnyte, Inc. Systems and methods for facilitating access to private files using a cloud storage system
CN103023988A (zh) * 2012-11-27 2013-04-03 北京金山云科技有限公司 文件同步方法、服务器、客户端及终端设备
CN103064927A (zh) * 2012-12-21 2013-04-24 曙光信息产业(北京)有限公司 分布式文件系统的数据访问方法和装置
CN105378744A (zh) * 2013-05-03 2016-03-02 思杰系统有限公司 在企业系统中的用户和设备认证
CN105359491A (zh) * 2013-06-14 2016-02-24 微软技术许可有限责任公司 云环境中的用户认证
CN104050102A (zh) * 2014-06-26 2014-09-17 北京思特奇信息技术股份有限公司 一种电信系统中的对象存储方法及装置
CN107077301A (zh) * 2014-11-05 2017-08-18 亚马逊科技公司 用于存储客户端文件系统的存储卷的动态缩放
US20170012921A1 (en) * 2015-07-08 2017-01-12 Eric Barker System And Methods For Providing A Notification Upon The Occurrence Of A Trigger Event Associated With Playing Media Content Over A Network
CN107085546A (zh) * 2016-02-16 2017-08-22 深圳市深信服电子科技有限公司 基于故障域技术的数据管理方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
余海燕, 查礼, 李伟: "一种面向服务的网格作业管理机制", 计算机研究与发展, no. 12, 30 December 2003 (2003-12-30), pages 108 - 112 *
刘文良;: "对统一威胁管理模型的研究", 信息安全与技术, no. 07, 10 September 2010 (2010-09-10), pages 57 - 61 *

Also Published As

Publication number Publication date
EP3857396A1 (en) 2021-08-04
WO2020069196A1 (en) 2020-04-02

Similar Documents

Publication Publication Date Title
Murthy et al. Apache Hadoop YARN: moving beyond MapReduce and batch processing with Apache Hadoop 2
US11755764B2 (en) Client-side filesystem for a remote repository
US11449478B2 (en) Blockchain implemented data migration audit trail
Varia Migrating your existing applications to the aws cloud
US10983830B2 (en) Parameter variations for computations using a remote repository
CN114008605A (zh) 大数据应用生命周期管理
US20230115754A1 (en) Orchestration of computations using a remote repository
Ankam Big data analytics
US10956132B1 (en) Unified code and data management for model development
US11042522B2 (en) Resolving versions in an append-only large-scale data store in distributed data management systems
Nicolae BlobSeer: Towards efficient data storage management for large-scale, distributed systems
Jain et al. Modernization of legacy systems: A generalised roadmap
US11586916B2 (en) Automated ML microservice and function generation for cloud native platforms
Goniwada et al. Cloud native architecture and design patterns
CN112753028A (zh) 远程储存库的客户端侧文件系统
Singh et al. Mastering Hadoop 3: Big data processing at scale to unlock unique business insights
Vernik et al. Stocator: Providing high performance and fault tolerance for apache spark over object storage
Vergadia Visualizing Google Cloud: 101 Illustrated References for Cloud Engineers and Architects
Douglas et al. CloudTracker: Using execution provenance to optimize the cost of cloud use
Antony et al. Professional Hadoop
Ismail et al. On-premise AI platform: from DC to edge
Riti et al. Infrastructure as Code
Kapadia et al. OpenStack Object Storage (Swift) Essentials
US20240104074A1 (en) Location-constrained storage and analysis of large data sets
US20240028417A1 (en) Executing federated workflows from edge to core

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