掌桥专利:专业的专利平台
掌桥专利
首页

背景技术

用户依靠应用和服务来执行计算任务。分布式计算系统(例如,云计算平台)使用支持网络访问共享的可配置计算和存储资源池的计算架构来托管应用和服务。云计算平台的多租户系统(或多租户基础设施)提供支持客户工作负载和云计算对象(例如,用户账户、应用和服务)的操作环境,这些云计算对象是云计算平台的软件和硬件架构的一部分。例如,租户可以指云计算对象分组(例如,租户数据),该云计算对象分组允许管理员——在组织内的用户账户和组织拥有的应用上——设置策略,以满足其安全和操作策略。

传统上,多租户系统没有配置多方面和集成的解决方案来管理云计算平台中的租户。例如,开发人员通常使用定制工具支持多租户系统,这些定制工具不充分解决有效配置租户数据(例如访问和安全策略)以确保跨租户一致性所需的租户管理操作范围。因此,更全面的多租户系统——具有执行多租户系统操作的替代基础——可以改善云计算平台中多租户系统的计算操作和接口。

发明内容

这里描述的技术的各个方面通常涉及提供执行多租户系统中租户管理的图语言请求的图操作的系统、方法和计算机存储介质,以及其他。图操作是作为数据操作的树执行的操作,其中数据操作基于图语言请求来被执行,该图语言请求基于第一命令库和使用第二命令库的注释来被构建。图语言请求——配置或更新多租户系统中租户的租户数据——使用图操作引擎来执行。图语言请求包括租户列表(即,与对应租户相关联的租户标识符)和数据操作的定义(第一数据操作的第一数据操作参数和第二数据操作的第二数据操作参数)。定义的数据操作在包括多个叶节点和根节点的数据操作节点的树上执行。执行数据操作是基于支持异步返回与更新租户数据相关联的结果数据的图语言操作(例如,构造、转换、聚合、结果数据子集的周期性流式传输和数据操作的排序)。执行定义的数据操作导致在多租户系统中租户数据的结果数据(例如,根节点结果或叶节点结果)配置的生成。结果数据可以被称为结果数据的集合,其与结果数据的非空集合相关联。

通过后台方式,还没有实现用于管理云计算平台中的租户的多方面和集成解决方案,因为在开发有效的租户管理系统方面存在挑战——能够充分解决所需的租户管理操作范围——以配置租户数据(例如访问和安全策略)以确保跨租户的一致性。特别是,支持云计算平台客户计算环境的开发人员通常依赖于定制建立的解决方案——这需要编码、发布和维护定制API——用于处理对多租户系统后端服务的API调用的不同场景。由于与在不同的场景中的定制API相关联的冗长的专门开发、定制API的有限互操作性、定制API时错误的可能性、非用户友好的用户接口、以及缺乏针对重复租户管理操作的一致解决方案,维护定制API可能会在管理租户中呈现一些操作限制。

一种技术方案——针对常规多租户系统操作的限制——提供图操作引擎的图操作以支持租户管理。在操作中,图操作引擎访问图语言请求,该图语言请求包括租户列表(例如,图语言请求中的租户标识符)以及对租户列表执行图语言请求的数据操作的定义。使用多个计算节点中的每一个,定义的数据操作——导致更新租户列表的租户数据——被执行。数据操作被指派给多个计算节点中的对应计算节点。执行数据操作包括执行以下中的至少两项:基于所述定义,使用第一命令库的请求参数和第二命令库的请求参数构造数据操作;将定义的数据操作转换为数据操作节点的树,所述数据操作节点中的每一个接受并返回与所述数据操作相对应的数据;以及使用图语言请求的聚合定义将数据操作的多个结果聚合为整合结果集合。多个节点进一步基于执行数据操作来为图语言请求生成结果的集合,然后存储结果的集合。

此外,图语言请求可以使用应用编程接口(API)服务器、互连环形网络中的多个计算节点、多个数据库来被实现。接收图语言请求并将其传送到多个计算节点的协调器节点的API服务器。协调器节点作为根节点操作,该根节点与——来自多个计算节点的——多个叶节点一起操作,以执行图语言请求。执行图语言请求的数据操作还可以基于对租户分区和结果数据的聚合的图语言支持,该租户分区与经由数据智能API(即,数据API)集合取回的不同工作负载相对应,该结果数据的聚合用于导致图语言请求的数据操作的多个结果的整合。

本方面内容被提供以按照简化的形式介绍下面在具体实施方式中进一步描述的概念的选择。本方面内容不旨在识别所要求保护的主题的关键特征或基本特征,也不旨在用作确定所要求保护的主题范围的辅助。

附图说明

本文所述的技术将在下面参考附图详细描述,其中:

图1A-1C是用于在多租户系统中使用图操作引擎提供图操作的示例性多租户系统环境的框图,该图操作引擎适用于实现本文所述技术的各方面;

图2A和图2B是根据本文描述的技术的方面,用于使用多租户系统中的图操作引擎提供图操作的示例性多租户系统环境;

图3根据本文描述的技术的方面,提供了在多租户系统中使用图操作引擎提供图操作的第一示例性方法;

图4根据本文描述的技术的方面,提供了在多租户系统中使用图操作引擎提供图操作的第二示例性方法;

图5根据本文描述的技术的方面,提供了在多租户系统中使用图操作引擎提供图操作的第三示例性方法;

图6提供了适于用于实现本文所述技术的各方面的示例性分布式计算环境的框图;以及

图7是适于用于实现本文所述技术的各方面的示例性计算环境的框图。

具体实施方式

技术问题、技术方案、技术改进概述

云计算提供基于共享资源的按需计算资源(例如,网络、计算和存储)。云计算平台的客户可以为特定的云计算服务模型(例如,面向服务的体系结构)付费,以换取使用云计算平台的分布式计算资源。云计算平台可以提供支持管理客户的多租户基础设施的不同结构(例如,计算实例)。例如,租户可以指云计算对象分组,该云计算对象分组允许管理员——对组织内的用户账户和组织拥有的应用——设置策略以满足它们的安全性和操作策略。云计算平台可以支持租户管理功能,允许跨资源和租户执行管理操作。特别是,云计算平台的客户通常希望使用管理工具交付被管理的服务,以便客户维持对谁可以访问他们的计算环境、他们可以访问哪些资源以及可以采取哪些行动的控制。理想情况下,租户管理应该大规模提供,具有针对客户的可见性和精确性,和全面统一的平台

传统上,多租户系统没有配置用于管理云计算平台中的租户的多方面和集成解决方案。云计算平台的客户还无法有效地跨他们在多租户基础设施中管理的租户子集(即,计算资源的分组)实现操作。开发者使用定制工具支持多租户系统,这些定制工具不充分解决有效配置租户数据(例如,访问和安全策略)以确保跨租户一致性所需的租户管理操作的范围。特别是,支持云计算平台客户的计算环境的开发人员通常不得不通过为不同场景的定制应用编程接口(API)编码、发布和维护来低效地支持租户,该API需要API调用其多租户基础设施的后端服务。调用附加下游API的传统API基于小的单元片段代码(“专用代码”),这些代码执行与分布式计算系统中租户管理的特定任务相关联的特定操作。专用至多可以在没有统一方法的情况下执行与租户管理相关联的特定操作。

此外,执行每个专用代码以生成单独的结果,然后手动聚合这些结果。即使是同一请求中的微小更改(例如,更改用户账户设置的请求和更改设备设置的请求)也必须手动配置。另外在经由对应的API管理每个专用代码的情况下可能会产生计算开销。此外,专用代码的当前操作环境不考虑API,该API使用与管道相关联的机器集合操作并且排序以用于为租户管理执行操作。特别是,基于专用代码的实施方式通常不面临扩缩使用机器集合的租户管理操作的挑战和执行租户管理操作的时间考虑。因此,更全面的多租户系统——具有执行多租户系统操作的替代基础——可以改进云计算平台中多租户系统的计算操作和接口。

本发明的实施例涉及用于为多租户系统的租户管理提供执行图语言请求的图操作的简单有效的方法、系统和计算机存储介质。图操作是作为数据操作的树执行的操作,其中数据操作基于图语言请求被执行,该图语言请求基于第一命令库和使用第二命令库的注释构建。使用图操作引擎执行——为多租户系统中的租户配置或更新租户数据的——图语言请求。图语言请求包括租户列表和数据操作的定义。定义的数据操作在包括多个叶节点和根节点的数据操作节点的树上执行。执行数据操作是基于支持异步返回与更新租户数据相关联的结果数据的图语言动作(例如,结果数据子集的构造、转换、聚合、周期性流式传输以及数据操作的排序)。执行定义的数据操作导致生成多租户系统中租户数据的结果数据(例如,根节点结果或叶节点结果)配置。

举例来说,客户端将图语言请求传送到应用编程接口(API)服务器。图语言请求包括图语言参数(例如,用于数据操作的定义参数,包括来自第一命令库(例如,超文本传输协议)的命令和来自第二命令库(例如,结构化查询语言)的命令。图语言参数支持执行图语言请求以更新租户数据。图语言参数可以标识租户列表、数据操作的定义和聚合定义。数据操作的定义可执行为数据操作节点的树,每个数据操作节点接受并返回与节点的数据操作相对应的数据。

API服务器从互连计算节点的环形网络中的多个计算节点中选择协调器节点。例如,环形网络可以包括使每个计算节点连接到至少两个其他计算节点的互连环形网络中的多个计算节点。协调器节点解析并分发图语言请求,以导致来自环形网络的多个叶节点中的每个叶节点处对应的数据操作的执行。多个叶节点写入中间结果(即,叶节点结果)并将中间结果传送到数据库引擎。中间结果可以周期性地或增量地从多个叶节点向上朝向根节点流式传输,流式传输中间结果是基于阈值标准(例如,中间结果批次大小或结果计数)的,以用于流式传输中间结果以支持数据操作的并行执行。

多个叶节点进一步向协调器节点响应(例如,传达中间结果)——指示完成它们对应的数据操作。协调器节点生成最终结果(即,根节点结果),并将最终结果传达给数据库引擎。当图语言请求包括聚合定义时,协调器节点使用图语言请求中的聚合定义将数据操作的多个结果聚合成整合结果集。客户端可以向API服务器发出补充数据请求,以使API服务器从与协调器节点或叶节点相关联的数据库引擎取回补充数据(即,图操作引擎实体)。

与图操作的常规实施方式相反,本文讨论的图操作涉及实现使用租户数据配置云计算平台中的租户的图操作。图操作是作为数据操作的树执行的操作,其中数据操作基于图语言请求被执行,该图语言请求基于第一命令库和使用第二命令库的注释被构建。多租户系统可以包括与具有其对应租户数据的云计算环境的客户相关联的多租户基础设施。租户数据可以包括云计算对象分组的租户设置,该云计算对象分组允许管理员——对组织内的用户账户和组织拥有的应用——设置策略以满足其安全和操作策略。租户数据可以具体地存储为——基于对应于计算节点的数据操作——在计算节点处取回的分区数据(例如,分区租户数据),使得分区数据用于执行数据操作。图操作经由驱动操作以执行与数据相关联的任务的图操作引擎——作为软件和/或硬件的一部分或合集——执行。

图语言请求——被传达以更新租户数据——可以是在计算对象或设备之间传送的语句或消息,以执行对数据(例如,分区数据)的操作。例如,图语言请求可以更改与数据相关联的设置——软件程序或硬件设备中的可调整属性。图语言请求提供用于执行被执行以完成图数据上的特定任务的图操作的指令——作为动作(例如,输入、处理、输出、存储和控制)。

图语言请求的图语言包括——与图语言语法相关联的——指令集合,用于对图数据执行数据操作以更新租户数据。例如,计算机实现的方法可以执行导致生成数据操作的结果集合的该指令集合。图语言请求可以包括租户列表、数据操作定义和聚合定义。图语言的图语言参数——来自第一命令库(例如,超文本传输协议)的命令和来自第二命令库(例如,结构化查询语言)的命令——支持执行图语言请求以更新租户数据。图语言(例如,图语言语法)支持不同类型的功能,例如,图语言支持在lambda函数中的包装SQL代码(例如,SQLite),并且图语言还支持执行数据操作,而无需进一步简化或适应原始SQLite句法,并且可操作以不需要返回的数据中的任何复杂结构。

与本文所述实施例的图操作相关联的几个附加技术特征包括对HTTP图语言请求的全面标记支持、处理租户的数据分区和可选的数据聚合查询。例如,图操作可以基于简单的HTTP请求。HTTP数据通信传统上使用包含指向易于访问的资源的超链接的超文本文档进行操作。请求消息可以包括请求行、请求头字段和空行,以及可选的消息体。这样,HTTP请求句法对图操作是有效的。HTTP请求可以具有全面的标记支持,因为多租户系统允许HTTP请求字符串的任何部分被标记。在示例中,HTTP请求的任何部分都可以用查询指示(directive)标记。例如,SQLite lambda——关系数据库管理系统中的匿名函数——可以是查询指示。一旦HTTP请求在服务器上被评估,查询指示将改变或修改HTTP请求返回的响应。在另一个示例中,HTTP请求的任何部分都可以用作为HTTP请求、lambda或其构造的代替令牌进行标记;并在外部请求中被评估和字符串替换,以便进一步的评估和处理可以基于子操作的结果来发生。

图操作允许列出——例如包括与租户对应的租户标识符——独特数据分区集合(即云计算平台中的租户),以评估图语言请求,然后将此信息与其他指标一起用作在后端机器池上分布查询负载的提示。图操作还包括对读取和写入两者的支持。读取和写入可以经受租户分区后在将工作跨机器池散布的后端服务上执行。此外,图操作支持提供可选的聚合查询,该聚合查询——当在服务器上解释时——可以递归地合并针对每个分区评估的结果。

目前,传统的多租户系统在支持用户场景的操作方面效率低下,因为开发人员必须为每个用户场景编码、发布和维护定制的API,这些API需要对后端服务的API调用以及对API结果的基本构造、转换、聚合。有利地,图操作支持接收API调用(例如,HTTP请求)和所需的后处理,然后在服务器上公式化地评估HTTP请求,并且然后返回任何结果。图操作还包括对租户分区和聚合的支持,因为它基于传送各种工作负载来操作。工作负载可以用于活动目录(例如,Azure活动目录“AAD”)和基于云的移动设备管理系统(例如,Intune)。可以执行数据转换以在单独租户分区上执行类似的操作。可以使用单独的活动目录令牌(例如,AAD令牌)交换来执行对每个单独分区的图调用。

下面通过示例描述实施例的附加技术特征。特别地,可以提交图语言请求以执行用于在多租户系统中配置租户的图操作。图语言请求可以包括具有标记句法属性的基于HTTP的图语言参数。标记句法属性支持使用替换数据执行字符串替换。替换数据可以从数据API(例如,具有用于访问与基于云的生产力工具相关联的数据的统一可编程性模型的数据和智能平台的数据API)输出或调整来自数据API的输出。如下所示,图语言请求包括将今年年初之前创建的用户账户添加到所有租户中名为mygroup的组(即,更新租户设置)的命令。

图操作基于图语言执行。图语言可以开发为ANTLR(另一种语言识别工具)语法,它提供了用于读取、处理、执行或转变结构化文本或二进制文件的解析器生成器。语法可用于解析,并可用于建立和遍历解析树。解析接口——经由图语言和语法被支持——接收图操作请求(例如,HTTP图语言请求),并验证和令牌化图操作请求,并将结果解析为树。图语言还提供对由定义的句法(例如,方括号[])划界的代替令牌的支持。

图操作请求使用图执行。图可以从解析的令牌被生成为每个租户的执行图。图可以包括节点,其中每个节点用字符串结果填充其对应的节点缓冲区。每个节点进一步传送下游节点的进度信息。字符串替换可以作为跨产品操作执行,这意味着在节点开始丢弃输入数据之前,需要来自除一个上游节点以外的所有节点的结果集合。图语言可以支持几个操作特性,包括:执行原子操作(例如,NET互锁类)——对于由多个线程共享的变量——被实现以最小化锁定;异步非阻塞功能(例如,异步/等待)被实现以减少线程开销;并实现流式传输以减少存储器消耗。

图语言进一步支持匿名函数(例如,lambda函数或lambda抽象),用于提供未绑定到标识符的函数。匿名函数作为lambda节点提供,该lambda节点执行输入数据并将其加载到数据库管理引擎的存储器内(in-memory)表中(例如,SQLite表(arg0....argN))。lambda节点可以对存储器内表执行用户指定的查询,以产生输出字符串集合。

参考:

函数@id用于从JSON有效负载中提取对象id。例如,可以执行SQLite查询,如下所示:

选择值

从arg0,json_tree(arg0.data)作为arg0

其中arg0.key=′id′

如上所述,数据库管理引擎(例如SQLite)可用于将JSON响应转换为字符串集合。操作地,SQLite操作可以支持灵活的JSON到字符串[]转换。并且,用户指定的查询可以很容易地执行和评估,因为输入数据被传输到可以查询的数据库。此外,经由SQLite引擎使用存储器内连接字符串——无需数据持久性——可以缓解安全问题。SQLite支持用户友好的数据处理功能,并且SQLite语句可以在可访问的接口(例如数据库浏览器接口)中针对API服务器响应被本地测试。可以设想,利用SQLite的实施方式不是限制性的,并且图语言和功能与语言绑定API兼容,语言绑定API提供专门制作的粘合代码以允许图语言使用外部库(例如,C#、JS等)或非图语言原生的操作系统服务。

用于在多租户系统中提供图操作的示例性环境概述

技术方案的各方面可以通过示例的方式描述并且参考图1A、图1B、图1C、图2A和图2B。图1A是示例性技术方案环境的框图,其基于参考图6和图7描述的用于实现技术方案的实施例的示例环境被示出。通常,技术方案环境包括适合于提供可采用本公开的方法的示例多租户系统100的技术方案系统。具体地,图1A示出了根据本公开的实施方式的多租户系统100的高级架构。在未示出的其他引擎、管理器、生成器、选择器或组件(本文统称为“组件”)中,多租户系统的技术方案环境100。

在操作中,图操作引擎访问图语言请求,该图语言请求包括第一租户的第一租户标识符和第二租户的第二租户标识符;以及在第一租户和第二租户上执行图语言请求的数据操作的定义,数据操作的定义包括第一数据操作的第一定义参数和第二数据操作的第二定义参数(例如,图语言请求包括在图语言请求中标识的租户列表和在租户列表上执行图语言请求的数据操作的定义)。使用多个计算节点中的每一个,执行导致更新租户列表的租户数据的定义的数据操作,将一个或多个数据操作指派给多个计算节点的对应计算节点。执行数据操作包括执行以下中的至少两项:使用第一命令库的一个或多个请求参数和第二命令库的一个或多个请求参数构造数据操作;将定义的数据操作转换为每个接受并返回与数据操作相对应的数据的数据操作节点的树;以及使用图语言请求的聚合定义将数据操作的多个结果聚合为整合结果集合。多个节点进一步为图语言请求生成基于执行一个或多个数据操作的结果集合,然后存储该结果集合。

此外,可以使用应用编程接口服务器、互连环形网络中的多个计算节点、多个数据库来实现图语言请求。接收图语言请求并将其传送到多个计算节点的协调器节点的API服务器,协调器节点作为根节点操作,该根节点与——来自多个计算节点的——多个叶节点一起操作以执行图语言请求。执行图语言请求的数据操作还可以基于租户分区和针对经由数据智能API集合取回的不同工作负载的数据的聚合支持。

参考图1A,图1A是用于根据本公开的实施例提供图操作的示例系统(即,多租户系统100)。多租户系统100提供用于使用以下提供图操作引擎服务的组件、指令和操作:HTTP客户端110、API服务器120、数据库引擎130、协调器140A、多个数据库(即,SQL150A、SQL150B、SQL150C和SQL150D)、多个数据API(即,数据API 738A、数据API 738B和数据API738C)。上面标识的每个计算资源可以与图语言请求流经的多租户系统进程或图操作引擎进程相关联。一些计算资源可以互换地执行图操作(即,跨不同的图语言请求交换它们的个体角色)。例如,为一个图语言请求选择的协调器节点可能会成为后续请求的叶节点。多租户系统100提供并执行改进的图操作引擎服务,包括图操作和接口,以在具有本文参考图6和图7描述的组件的技术方案环境中支持技术方案的功能。

数据流可以是双向数据流(即,请求然后响应)或单向数据流(即,请求二没有立即响应)。例如,配置为在HTTP网络信道上发生的双向数据传输以及可以预期在TCP信道上发生的单向数据传输;然而,这里描述的具体实施方式并不意味着是限制的。虽然下面公开的示例描述了执行特定过程的专用计算资源(例如,独特的机器);然而,根据本文描述的实施例,预期了用于执行过程的计算资源和机器的其他变体和组合。外部API(即,数据API:数据API 738A、数据API 738B、数据API 738C)和支持经由进程与外部API之间的数据流访问租户数据(例如,租户分区)的数据库引擎(例如,数据库引擎130)。进程可以在SQL数据库和进程节点之间的数据流中使用存储器内SQL数据库。设想的是,来自数据流的数据可以被配置为不经过网络边界,利用存储器内SQLite数据库,并且对于进程存储器本地可用。

继续参考图1A,在步骤10,客户端(例如,HTTP客户端110)将图语言请求(“请求”)传送到API服务器。客户端110可以基于HTTP(超文本传输协议)进行操作,该HTTP是分布式、协作、超媒体信息系统的应用层协议。使用HTTP,客户端110将图语言请求——例如用户发出的图语言请求——传送到API服务器(例如,API服务器120)。该请求可以包含支持执行图语言请求的图语言请求参数。图语言请求参数可以包括请求将针对其被发出的租户(或客户)列表和指示将针对每个租户执行的数据操作的定义。

在操作上,租户列表可以对应于请求将针对其被发出的数据分区列表。在一个实施方式中,数据API可以用于取回可以使用标识符(例如租户ID)进行分区的数据分区。定义可以是由图语言语法解释的自由格式字符串。在一个示例中,该字符串对应于第一命令库的图语言参数,该图语言参数使用第二命令库的图语言参数进行注释。例如,该字符串类似于HTTP请求,并且可以用描述如何处理由该请求导致的数据的SQL语句注释。图语言允许SQL语句和HTTP请求的递归嵌套,以便一个请求或SQL语句产生的数据可以作为输入提交给后续HTTP请求或SQL语句。

定义字符串可以转换成数据操作节点的树,每个数据操作节点接受并返回字符串值的数组。数据操作节点的树可以通过执行每个节点指定的数据操作从叶节点到根节点进行评估。节点的数据操作可以针对从节点的子接收到的数据执行——操作树的叶层没有这样的输入。数据从子节点传播到父节点,并且只要任何子节点已返回了包括不完整输入数据的数据,就开始节点的执行。数据可以定义在字符串值数组中。这样,树中的每个节点都可以操作以作为字符串值数组的形式接受和返回数据。评估整个操作树的结果可以作为字符串值数组缓冲在树的根节点中。

图语言可以支持可以针对输入执行的不同类型的数据操作。第一数据操作经由与数据API相关联的节点执行。例如,节点针对数据API使用相关URL发出HTTP请求。可以使用用户账户API服务器令牌和计算网络域服务器执行认证。结果被返回并缓冲到字符串值数组中,以便在树中进一步评估。

第二数据操作是数据库查询(例如,SQLite查询)。在操作上,来自子节点的输入被加载到一个或多个数据表(例如,SQLlite数据表)中。可以针对数据表执行SQL语句。可以将节点结果配置为从单个列SELECT语句中取回。存储数据表的数据表可以被配置为可以是短暂的(在节点数据处理后立即消失)或在请求的生命周期内在进程中保持(用于高级数据处理和聚合)。

第三数据操作是终止语句。终止语句支持几种不同的图操作能力。终止语句提供了在单个请求中发出多个语句的能力(即:可以访问语句的字符串[],每个语句具有自己的管线)。如本文所用,流水线,也称为数据流水线,可以指串联连接的数据处理元素集合,其中一个元素的输出是下一个元素的输入。管道的元素通常以并行或时间切片的方式执行。本文描述的实施例考虑了执行终止语句的其他变体和组合。终止语句还允许SQLite中跨语句的变量持久化(例如:读取/写入)。终止语句通过存在/不存在空字符串替换(例如:存在/不存在)支持执行条件逻辑。

参考下面的示例代码,终止语句用于执行在行中的多于一个流水线,并且在第一流水线和第二流水线之间共享数据。在一个示例中,终止语句可以与SQLite lambda语句组合以构造if语句。例如,如果条件为真,则替换空字符串或实际参数;否则,空值停止下一个HTTP请求或lambda被评估。

如上所示,终止语句支持检查存在语句,该语句在//存在情况下执行第一操作集合,在//不存在情况下执行第二操作集合。执行第二操作集合的第一操作集合导致生成结果集合,这些结果可以与附加结果组合在叶节点级别或根节点级别处的结果中。

可以设想,每种数据操作类型之间的数据的隐式排序和流水线化本身可以被认为是数据操作。定义的被执行的数据操作的结果(例如,根节点结果)可以是由数据操作的执行导致的字符串值数组。例如,字符串值数组可以与树用户定义的树相关联,该用户定义的树与图语言请求相关联。图语言支持嵌套操作。支持嵌套操作,以便顺序地评估结果。例如,可以从最内部的表达到最外部评估嵌套操作的结果。图语言进一步支持在运行时评估和替换的代替令牌。例如,图语言请求可以包括在运行时评估和替换的嵌入式代替令牌。

参考图1B和图1C,具有图1B中规定的定义的图语言请求,该请求被构建成使得当被执行时,该请求将用户账户添加到在运行时解算的、名为“mygroup”的计算网络域组。要添加的用户账户列表可以在评估时通过针对数据API的动态查询(即:1/1/2020后在给定租户中创建的用户账户)来计算。

语法可以支持代替令牌的不同句法。例如,每个代替令牌可能出现在方括号中,并被评估为一个或多个结果字符串值。在这种情况下,最内部的令牌(例如,[/beta/groups?$filter=displayName eq′mygroup′”和/[@id([/beta/users?$filter=createdDateTimele 2020-01-01T00:00:00Z])是针对/beta/groups和/beta/users的数据API请求。这些HTTP调用的结果被传输到仅投影HTTP响应中返回的对象的数据API id的SQLite函数(@id),在[@id]令牌中突出显示。一旦[@id]令牌被解算为字符串值,结果值将在最外部的HTTP请求中被替换(即,@odata.id″:″https://graph.microsoft.com/beta/directoryObjects and/members/$ref),该请求基于解算的用户账户和组的数目执行可变次数。通常情况下,字符串评估和代替链会继续进行,直到请求不需要进一步的评估和代替。

在一个实现中,当两个代替令牌出现在同一个字符串中时,以叉乘的方式评估代替令牌。例如,在字符串“[@f([])][@g([])]”中,如果lambda@f返回“a”和“b”,并且lambda@g返回“c”和“d”,则总共四个字符串将由数据操作导致:{“a c”,“a d”,“b c”,“bd”}。这些将被传播到调用器。

图语言支持聚合定义字段(“聚合定义”),用于跨租户整合结果。聚合定义字段的值指示可以如何将来自一个或多个租户(或分区)的单独字符串数组结果整合为单个结果。可以使用与定义字段相同的句法和语法来评估聚合定义字段。聚合定义字段可以包括“特殊”HTTP请求[/result]上的SQLite Lambda操作,该请求表示在一个或多个租户上运行定义值的结果。聚合定义字段的值被用于叶节点和协调器节点进程(即叶进程和协调器进程)两者内的数据操作(或在该数据操作上被执行),而定义的值仅用于叶节点上(或在叶节点上执行)。在一个实现中,聚合定义字段在每个叶进程上被执行一次(在从执行定义中生成所有每个租户数据之后),然后在协调器进程上被执行一次或多次(因为每个叶进程将数据返回给协调器)。

转到图1A,在步骤20,API服务器120选择协调器(即协调器140A)。在操作上,请求由API服务器120接收。API服务器120验证基本句法的请求。API服务器120将请求传送给协调器140A。协调器140A可以从互连的服务器环中随机选择。图操作可以支持发现和选举协调器。

在步骤30,协调器140A实现分发图语言请求的进程。协调器140A解析图语言请求。协调器140A可以跨其指定为叶节点的一个或多个图语言服务器进一步再划分租户列表。在操作上,在一个实施例中,请求被克隆并转发到具有适用于该节点的租户标识符的子集的叶节点(即,叶节点140B、叶节点140C和叶节点140D)。可以启动定时器以限制协调器140A将等待来自每个叶进程的响应的持续时间。图操作可以包括进程发现机制以枚举所有可用的图语言进程。

租户(例如,经由租户标识符)可以使用第一映射操作(即比例映射)和第二映射操作(即成本度量映射)映射到叶节点。使用比例映射,租户跨可用的图节点集合按比例分布(例如:10个租户/2个可用叶节点=每个叶节点5个租户)。使用成本度量映射,租户被分布,使得成本度量跨可用的图节点集合被均等。我们使用的成本度量是进程线程计数的指数加权移动平均。我们目前假设,指派给叶进程的每个租户将会产生线程计数的恒定增加,但是可以实现基于元数据的可变成本模型。

例如,假设我们希望使用2个叶进程为5个租户执行图语言请求。假设该请求将增加每个租户的4个线程的恒定成本,并且当前线程计数值为{Leaf

在步骤40,在叶节点上评估定义和聚合定义。为指派给叶(例如,叶节点140B、叶节点140C和叶节点140D)的每个租户评估图语言请求的定义字段。评估请求定义字段可以包括外部API(例如,数据API 738A、数据API 738B和数据API 738C)和处理传入结果的数据库(例如,存储器内SQLite数据库——SQL 150B、SQL 150C和SQL 150D)之间的互通。在操作上,在将定义评估为结果时,对于每个单独的租户请求,聚合定义如果被指定了,则被应用以到达指派给叶节点的租户的聚合结果。

在步骤50,叶节点(例如,叶节点上的叶进程)将中间结果(即,叶节点结果)写入数据库引擎(例如,数据库引擎130)。每一个在原始图语言请求中指定的数据操作集合,每个叶记录关于在定义评估期间发出的HTTP请求/响应(即:URI、状态代码、响应体)的信息。这些中间结果可以作为在第一命令库中定义的实体(例如,图操作HTTP请求实体)——图操作请求实体——存储在数据库引擎130中。如果由最终用户指定,则也可以记录最终的每租户结果(例如,字符串数组)。例如,最终的每租户结果可以是图操作实体。在步骤60,叶节点(例如,叶节点上的叶进程)响应协调器140A。在定义和聚合定义已在租户子集上在叶进程中被运行之后,从该子集产生的响应被返回到协调器节点140A。

在步骤70,协调器140(例如,协调器进程)运行聚合定义。协调器140将聚合定义应用于从每个叶进程返回的结果。聚合定义可以被重新评估,因为每个叶结果被返回。在步骤80,协调器140(例如,协调器进程)将最终结果写入数据库引擎130。最终结果和处理统计信息(例如:完成时间,错误)一起被写入数据库引擎130并返回到API服务器120。该结果可以被称为图操作实体。在步骤90,HTTP客户端110向API服务器120发出补充数据请求。例如,在一种实现中,API服务器120支持对图操作、图操作结果和图操作请求实体的终端用户查询。取回这些记录的一些常见原因包括错误处置、诊断和审查。在步骤0100,API服务器120从数据库引擎取回补充数据。

图1B和图1C示出了如何对图语言请求进行令牌化和处理。图语言请求(即,0010A)可以与多个令牌(即,0020A、0030A、0040A和0050A)相关联,这些令牌与用于执行与令牌相关联的数据操作的对应节点相关联。在操作中,图请求010表示从客户端接收的图语言请求。图语言请求包括图语言请求参数(例如,HTTP请求和将HTTP请求注释为查询指示的SQLite Query)。例如,HTTP方法POST 020、图请求URL 020、图请求体024、lambda令牌030和lambda令牌032表示从图语言中解析出来的令牌请求。特别是,协调器节点(例如,图1A的协调器节点140A)接收图语言请求(例如,图请求010)并将该图语言请求令牌化。协调器节点还可以向多个叶节点分发图语言请求(例如,图请求040和图请求042)的至少部分以及对应的令牌(例如,HTTP方法GET 050、图请求URL 052、图请求体054、HTTP方法GET 052、图请求URL 058和图请求体059),以支持在对应的租户分区上执行数据操作。

如图1C中所示,图请求节点0040和图请求节点0050执行图语言请求的对应部分,以生成第一节点级别的中间结果集合。Lambda节点0020和lambda节点0030可以使用来自第一节点级别的中间结果集合来执行数据操作的对应部分。设想的是,中间结果集合的子集可以周期性地——从多个叶节点中的一个或多个叶节点——朝向数据操作节点的树中的根节点流式传输。流式传输中间结果的子集是基于中间结果的阈值子集(例如,阈值批次数据大小或计数),该阈值子集可以支持通过节点层级的数据操作的连续并行处理和执行。lambda节点还可以将第二节点级别的中间结果集合传送到图请求节点0010。然后,图请求节点生成结果的根节点集合。结果集合——贯穿使用的——不包括本文讨论的空结果集合。如本文讨论的,如果提供了聚合定义,则根节点使用聚合定义中的指令将结果整合到结果的根节点集合。

转到2A和2B,图2A和2B基于参考图6和图7描述用于实现技术方案的实施例的示例环境被示出,是示例技术方案环境的框图。通常,所述技术方案环境包括适于提供可采用本公开的方法的示例部署系统100的技术方案系统。特别地,图2A示出了根据本公开的实施方式的多租户系统100的高级别架构。在未示出的其他引擎、管理器、生成器、选择器或组件(本文统称为“组件”)中,部署系统100的技术方案环境包括图操作引擎110、图操作引擎客户端120、应用编程接口服务器130、具有协调器节点140A和叶节点140B、140C、140D的环形网络140、具有协调器节点数据库150A、叶节点数据库150B、叶节点数据库150C、叶节点数据库150D、存储在数据库中的图操作引擎实体150E的数据库服务器150、包括图语言语法引擎160的图语言引擎160、数据智能API 170。图2A和2B中的组件对应于参考图1A、1B和1C描述的组件和功能以及对本公开的实施例的附加描述。

在高级别上,参考图2B,图操作引擎客户端20操作以在步骤22将图语言请求传送到图操作引擎10。图操作引擎10操作以在步骤30访问与互连环形网络相关联的根节点,该图语言请求包括在图语言请求中标识的租户标识符以及在租户列表上执行该图语言请求的数据操作的定义。

在步骤40,图操作引擎10基于执行导致更新租户数据的定义的数据操作生成结果集合。执行数据操作可以包括:在步骤42,使用第一命令库的一个或多个请求参数和第二命令库的一个或多个请求参数构造数据操作;在步骤44,将数据操作的定义转换为数据操作节点的树。每个节点可以接受并返回与数据操作相对应的数据;以及在步骤46,使用图语言请求的聚合定义,将数据操作的多个结果聚合为整合结果集合。

图操作引擎10还被配置为,在步骤50,基于执行定义的数据操作,生成和存储结果的叶节点集合(例如,结果的一个或多个叶节点集合),执行数据操作导致更新租户数据,并在步骤52,基于执行数据操作导致更新租户数据,生成和存储结果的根节点集合,并在步骤52,基于执行定义的一个或多个数据操作导致更新租户数据,生成和存储结果的根节点集合。

通过实施方式和轶事示例进一步描述了本发明的实施例的功能性,以证明用于提供作为与图操作引擎一起操作的非常规有序操作组合的图操作的操作,作为多租户系统技术环境中特定问题的解决方案,以改进多租户系统中的计算操作和用户接口导航。有利地,本文所述的实施例改进了用于提供本文所述功能性的计算操作、功能和技术过程。总的来说,这些改进导致了更少的CPU计算、更小的存储器需求以及多租户系统中增加的灵活性。

在多租户系统中基于图操作提供租户管理的示例性方法

参考图3、图4和图5,提供了示出用于在多租户系统中为租户管理提供图操作的方法的流程图。所述方法可以使用本文描述的多租户系统来执行。在实施例中,一个或多个计算机存储介质具有在其上体现的计算机可执行或计算机可用指令,该可执行或计算机可用指令当由一个或多个处理器执行时,可以使该一个或多个处理器执行多租户系统(例如,计算机化系统或计算系统)中的方法(例如,计算机实现的方法)。

转向图3,提供了流程图,该流程图图示了用于在多租户系统中提供租户管理的图操作。在块302中,API服务器访问图语言请求,该图语言请求包括第一租户的第一租户标识符和第二租户的第二租户标识符,以及对第一租户和第二租户执行图语言请求的数据操作的定义。图语言请求还可以包括聚合定义,该聚合定义包括关于如何将数据操作的多个结果整合为整合结果的指令。在块304,选择第一计算节点作为协调器节点,从使多个节点中的每一个连接到多个计算节点中的至少两个计算节点的环形网络中的多个计算节点中选择第一计算节点。在块306,协调器节点访问从API服务器接收的图语言请求。在块308,协调器节点将图语言请求的至少一部分传送到多个计算节点中的每一个。在块310,多个计算节点中的每一个执行定义的该数据操作,执行数据操作导致更新一个或多个租户配置。

执行数据操作可以包括以下:

使用第一命令库的一个或多个请求参数、第二命令库的一个或多个请求参数构造数据操作,第一命令库的一个或多个请求参数使用具有第一数据操作处理指令的第二命令库的一个或多个请求参数被注释;

将定义的数据操作转换为数据操作节点的树;节点被配置为每个节点接受和返回与数据操作相对应的数据;

使用图语言请求的聚合定义,将数据操作的多个结果聚合成整合的结果集合;和

至少周期性地从多个叶节点中的一个或多个叶节点朝向数据操作节点的树中的根节点流式传输中间结果的子集,其中流式传输中间结果的子集是基于中间结果的阈值子集。

在框312,结果的协调器节点集合是基于对一个或多个数据操作进行执行来生成。在框314,结果的协调器节点集合被存储。

转到图4,提供了流程图,其示出了在多租户系统中使用图操作引擎提供图操作的方法400。在块402,图操作引擎访问图语言请求,该图语言请求包括第一租户标识符和第二租户标识符,以及在对第一租户标识符相关联的第一租户和与第二租户相关联的第二租户执行图语言请求的数据操作的定义。在块404,使用多个计算节点中的每一个,执行导致更新第一租户和第二租户的租户数据的定义的数据操作。执行数据操作包括使用第一命令库的一个或多个请求参数、第二命令库的一个或多个请求参数构造数据操作。第一命令库的一个或多个请求参数使用第二命令库的一个或多个请求参数被注释,该第二命令库具有关于如何处理从执行数据操作生成的结果的指令。

第一命令库可以基于超文本传输协议(“HTTP”)并且其中第二命令库基于结构化查询语言(SQL),其中第一命令库的第一请求参数是HTTP请求并且第二命令库的第一请求参数是SQLite语句。HTTP请求用作为修改由HTTP请求返回的响应的查询指示的SQLite语句被注释。在框406,结果的集合基于执行所述一个或多个数据操作被生成。在框408,结果的集合被存储。

转到图5,提供了示出在多租户系统中使用图操作引擎提供图操作的方法500的流程图。在框502,与环形网络相关联的根节点访问图语言请求,该图语言请求包括第一租户标识符和第二租户标识符以及在租户列表上执行图语言请求的数据操作的定义。图语言请求的图语言支持以下中的每一项:

递归地嵌套对应于第一命令库的图语言请求的第一请求参数或对应于第二命令库的图语言请求的第一请求参数,其中图语言请求的递归地嵌套的部分在执行定义的数据操作时,作为输入被提交;被评估并且字符串替换的代替令牌导致一个或多个结果字符串值的生成;第一数据操作作为第二数据操作,其中第一数据操作使用提供数据的一个或多个数据API来执行,该数据是在字符串替换操作中的替换数据,并且第二数据操作使用数据库查询来执行,其中存储在存储器中SQL数据表中的的结果叶节点集合被访问以生成用于数据库查询的结果。

在框504,与环形网络相关联的叶节点访问图语言请求的至少一部分。在框506,叶节点基于执行导致更新租户数据的定义的一个或多个数据操作来生成结果的叶节点集合。在框508,结果的叶节点集合被存储。在框510,根节点基于结果的叶节点集合并基于执行定义的一个或多个数据操作来生成结果的根节点集合。在框512,结果的根节点集合被存储。结果被存储为以下图操作引擎实体中的一个:图操作实体、图操作结果实体和图操作请求实体——并且可作为补充数据取回。

示例分布式计算系统环境

现在参考图6,图6示出了示例分布式计算环境600,其中本公开的实施方式可以被采用。特别地,图6示出了示例云计算平台610的高级别体系结构,该示例云计算平台610可以托管技术方案环境或其部分(例如,数据受托者环境)。应当理解,这里描述的这个和其他布置仅作为示例阐述。例如,如上所述,这里描述的许多元件可以实现为离散或分布式组件或与其他组件并且以任何合适的组合和位置结合。

数据中心可以支持分布式计算环境600,该分布式计算环境600包括云计算平台610、机架620和机架620中的节点630(例如,计算设备、处理单元或刀片)。技术方案环境可以用跨不同数据中心和地理区域运行云服务的云计算平台610来实现。云计算平台610可以实现结构控制器(fabric controller)640组件,用于备置和管理云服务的资源分配、部署、升级和管理。典型地,云计算平台610可以实现结构控制器640组件,用于供应和管理云服务的资源分派、部署、升级和管理。通常,云计算平台610用于以分布式方式存储数据或运行服务应用。数据中心中的云计算基础设施610可以被配置为托管和支持特定服务应用的端点的操作。云计算基础设施610可以是公共云、私有云或专用云。

节点630可以备置有在节点630上运行定义的软件堆栈的主机650(例如,操作系统或运行时环境)。节点630还可以被配置为在云计算平台610内执行专门的功能(例如,计算节点或存储节点)。节点630被分派以运行租户的服务应用的一个或多个部分。租户可以指利用云计算平台610的资源的客户。支持特定租户的云计算平台610的服务应用组件可以被称为多租户基础设施或租用。术语服务应用、应用或服务在本文可互换使用,并且广义地指在数据中心之上运行或访问数据中心内的存储和计算设备位置的任何软件或软件部分。

当多于一个单独的服务应用正由节点630支持时,节点630可以被分区为虚拟机(例如,虚拟机652和虚拟机654)。物理机也可以同时运行单独的服务应用。虚拟机或物理机可以被配置为由云计算平台610中的资源660(例如,硬件资源和软件资源)支持的个性化计算环境。可以设想的是,资源可以被配置用于特定的服务应用。此外,每个服务应用可以被划分为功能部分,使得每个功能部分能够运行在单独的虚拟机上。在云计算平台610上,多个服务器可以用于运行服务应用并在集群中执行数据存储操作。特别是,服务器可以独立执行数据操作,但作为称为集群的单个设备暴露。集群中的每个服务器都可以实现为节点。

客户端设备680可以链接到云计算平台610中的服务应用。客户端设备680可以是任何类型的计算设备,其可以对应于参考图6描述的计算设备600,例如,客户端设备680可以被配置为向云计算平台610发出命令。在实施例中,客户端设备680可以通过虚拟网络协议(IP)和负载平衡器或其他将通信请求直接传送到云计算平台610中指定端点的方式与服务应用进行通信。云计算平台610的组件可以通过网络(未示出)相互通信,该网络可以包括但不限于一个或多个局域网(LAN)和/或广域网(WAN)。

示例分布式计算环境

在简要描述了本发明实施例的概述之后,下面描述了可以实现本发明实施例的示例操作环境,以便为本发明的各个方面提供一般上下文。具体地,首先参考图7,用于实现本发明实施例的示例操作环境被示出并总体上被指定为计算设备700。计算设备700只是合适的计算环境的一个示例,并不旨在暗示对本发明的使用范围或功能的任何限制。计算设备700也不应被解释为具有与所示组件的任何一个或组合有关的任何依赖性或要求。

本发明可以在计算机代码或机器可用指令的一般上下文中描述,包括诸如例如程序模块的计算机可执行指令由计算机或其他机器执行,该计算机或其他机器诸如个人数据助理或其他手持设备。通常,包括例程、程序、对象、组件、数据结构等的程序模块指执行特定任务或实现特定抽象数据类型的代码。本发明可以在各种系统配置中实践,包括手持设备、消费电子产品、通用计算机、更专业的计算设备等。本发明还可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。

参考图7,计算设备700包括总线710,总线710直接或间接地耦合以下设备:存储器712、一个或多个处理器714、一个或多个呈现组件716、输入/输出端口718、输入/输出组件720和说明性电源722。总线710表示可以是一个或多个总线(诸如地址总线、数据总线或其组合)的事物。为了概念上的清晰,图7的各个块以线示出,并且还考虑了所描述的组件和/或组件功能的其他布置。例如,人们可以认为诸如显示设备的呈现组件是I/O组件。此外,处理器具有存储器。我们认识到这是本领域的本质,并重申图7的图仅仅是举例说明可以结合本发明的一个或多个实施例使用的示例计算设备。未在诸如“工作站”、“服务器”、“膝上型计算机”、“手持设备”等的类别之间做出区分,因为所有这些都预期在图7的范围内并且参考"计算设备"。

计算设备700通常包括各种计算机可读介质。计算机可读介质可以是可由计算设备700访问的任何可用介质,并且包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。

计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁存储设备、或可用于存储所需信息且可由计算设备700访问的任何其他介质。计算机存储介质本身不包括信号。

通信介质典型地将计算机可读指令、数据结构、程序模块或其他数据体现在诸如载波或其他传输机制的调制数据信号中,并且包括任何内容交付介质。术语“调制数据信号”是指以对信号中的信息进行编码的方式设置或改变其一个或多个特性的信号。作为示例而非限制,通信介质包括诸如有线网络或直接有线连接的有线介质和诸如声学、RF、红外线和其他无线介质的无线介质。上述任何一种的组合也应包括在计算机可读介质的范围内。

存储器712包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的、不可移动的或其组合。示例性硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等。计算设备700包括从诸如存储器712或I/O组件720的各种实体读取数据的一个或多个处理器。呈现组件716向用户或其他设备呈现数据指示。示例性演示组件包括显示设备、扬声器、打印组件、振动组件等。

I/O端口718允许计算设备700逻辑地耦合到包括I/O组件720的其他设备,其中一些可以是内置的。说明性组件包括麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、打印机、无线设备等。

技术方案的实施例的附加结构和功能特征

已经识别了本文中使用的各种组件,应该理解,在本公开的范围内,可以使用任何数量的组件和布置来实现所需的功能。例如,在图中描绘的实施例中的组件为了概念上的清晰起见以线条示出。这些和其他组件的其他布置也可以被实现。例如,尽管一些组件被描绘为单个组件,但本文描述的许多元素可以被实现为离散或分布式组件或与其他组件结合,并以任何合适的组合和位置。一些元素可以一起被省略。此外,本文描述为由一个或多个实体执行的各种功能可以由硬件、固件和/或软件执行,如下所述。例如,各种功能可以由执行存储在存储器中的指令的处理器来执行。这样,其它布置和元件(例如,机器、接口、功能、顺序和功能的分组)可以除了或代替所示出的那些之外被使用。

下面段落中描述的实施例可以与一个或多个具体描述的替代方案组合。特别地,所要求保护的实施例可以在替代方案中包含对多于一个其他实施例的引用。所要求保护的实施例可以指定所要求保护的主题的进一步限制。

本发明的实施例的主题在此被具体描述以满足法定要求。然而,描述本身并不旨在限制本专利的范围。相反,发明人已经考虑到所要求的主题也可以以其他方式体现,包括不同的步骤或类似于本文档中描述的步骤的组合,结合其他现有或未来的技术。此外,尽管术语“步骤”和/或“块”可以在此处用于表示所采用的方法的不同元素,但除非并且除了明确描述了各个步骤的顺序,否则这些术语不应被解释为暗示在此公开的各个步骤当中或之间的任何特定顺序。

为了本公开的目的,单词“包括”与单词“包含”具有相同的广泛含义,单词“访问”包括“接收”、“引用”或“取回”。此外,单词“通信”与使用本文所述通信介质的基于软件或硬件的总线、接收器或发送器促进的单词“接收”或“传输”具有相同的广泛含义。此外,除非另有说明,否则诸如“一”和“一个”之类的单词包括复数和单数。因此,例如,当存在一个或多个特征时,满足“特征”的约束。此外,术语“或”包括连词、分词和两者(a或b因此包括a或b,以及a和b)。

为了上面详细讨论的目的,参考分布式计算环境描述了本发明的实施例;然而这里描绘的分布式计算环境仅仅是示例性的。组件可以被配置用于执行实施例的新颖方面,其中术语"被配置用于"可以指"被编程为"执行特定任务或使用代码实现特定抽象数据类型。此外,虽然本发明的实施例通常可以指这里描述的技术方案环境和示意图,但应理解,所描述的技术可以扩展到其他实施方式上下文。

本发明的实施例已经描述了与特定实施例相关的实施例,这些实施例在所有方面都旨在是说明性的而不是限制性的。替代实施例将对本发明所属领域的普通技术人员变得明显,而不脱离其范围。

从上述内容可以看出,本发明是一种很好地适应于实现上述所有目标和目的以及明显的和结构固有的其他优点的发明。

应当理解,某些特征和子组合是有用的,并且可以在不参考其他特征或子组合的情况下使用。这是权利要求所预期的,并且在权利要求的范围内。

技术分类

06120116329898