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

针对计算环境的配置改变控制的制作方法

2022-04-07 04:43:31 来源:中国专利 TAG:

针对计算环境的配置改变控制


背景技术:

1.管理大量计算资产或服务大量用户、或提供诸如软件、数据和模型的配置项的组织面临更新(替换)配置项的推出(roll-out)速度与更新的配置项包含漏洞或其他有问题的缺陷的风险之间的折中。如果替代品性能不佳,则通常需要限制暴露。例如,如果新配置项将给个体用户带来严重问题,那么立即暴露所有用户可能导致某些场景的大规模停供(outage)。因此,需要在推出速度与风险管理之间进行平衡。这出现在多种环境中,包括本地安装的软件、数据集和机器学习(ml)模型,以及软件即服务(saas)和平台即服务(paas)布置。


技术实现要素:

2.下面参考下面列出的附图详细描述所公开的示例。提供以下发明内容以说明本文公开的一些示例。然而,这不意味着将所有示例限制为任何特定配置或操作的序列。
3.本文公开的一些方面针对一种用于管理配置改变的解决方案,包括:接收用于在暴露组中替换第一配置项的第二配置项;接收暴露状态,其中暴露状态指示暴露树,暴露树包括第一配置项分支和第二配置项分支;针对暴露组,至少基于暴露状态确定:暴露组的第一部分以继续第一配置项,以及暴露组的第二部分以接收第二配置项;根据暴露状态,将第二配置项部署到暴露组的第二部分;至少基于第一触发事件,从中央编排器接收更新的暴露状态;以及根据更新的暴露状态部署第二配置项。在一些示例中,暴露树是分层二叉树。示例性配置项包括软件应用版本。
附图说明
4.下面参考下面列出的附图详细描述所公开的示例:
5.图1图示了有利地对被管理节点(例如,计算资产)采用配置改变控制的布置;
6.图2图示了暴露组的示例性集合;
7.图3图示了由图1的布置对图2的代表性组执行的流量移动操作的示例性阶段;
8.图4图示了在如由图1的布置执行的配置项推出的各个阶段的示例性暴露树;
9.图5图示了在如由图1的布置执行的配置项推出的各个阶段的示例性分层暴露树;
10.图6也图示了在如由图1的布置执行的配置项推出的各个阶段的示例性分层暴露树;
11.图7a和图7b示出了示例性文件中的伪代码,用于管理如由图1的布置执行的配置改变;
12.图8图示了在图1的布置内执行的示例性消息传递序列;
13.图9是流程图,其图示了在如由图1的布置执行的配置改变控制中涉及的示例性操作;
14.图10是另一个流程图,其图示了在如由图1的布置执行的配置改变控制中涉及的示例性操作;以及
15.图11是适于实现本文公开的各种示例中的一些示例的示例计算环境的框图。
16.贯穿附图,对应的附图标记指示对应的部分。
具体实施方式
17.将参考附图对各个示例进行详细描述。贯穿附图,在可能的情况下,相同的附图标记将用于指代相同或相似的部件。贯穿本公开,仅出于说明性目的,提供了与具体示例和实施方式有关的参考,但是除非相反指出,否则并不旨在限制所有示例。
18.公开了用于在管理多种环境中的配置改变时平衡推出速度与风险管理的解决方案,多种环境诸如是本地安装的软件、数据集和机器学习(ml)和人工智能(al)模型(统称为ml模型),以及软件即服务(saas)和平台即服务(paas)布置。本公开的方面包括:接收第二配置项,以在暴露组中替换第一配置项;接收暴露状态,其中暴露状态指示暴露树,暴露树包括第一配置项分支和第二配置项分支;针对暴露组,至少基于暴露状态确定:暴露组的第一部分以继续第一配置项,以及暴露组的第二部分以接收第二配置项;根据暴露状态,将第二配置项部署到暴露组的第二部分;至少基于第一触发事件,从中央编排器接收更新的暴露状态;以及根据更新的暴露状态部署第二配置项。在一些示例中,暴露树是分层二叉树。
19.本公开的各方面以非常规方式操作,以通过在阶段的序列中逐渐将改变(配置改变、代码更新等)暴露给暴露组,来改进配置改变控制,其中暴露被抽象为具有不同分支的树,分支部署(或维持)第一配置项或最终将完全替换第一配置项的第二(替换)配置项。即,推出在暴露组内产生逐渐暴露,以最小化由第二(替换)配置项引入的风险。在一些示例中,各个租户可以定制其托管节点(例如,用户的计算资产)看到的推出速度。因此,在较新的软件应用版本将替换先前版本的示例性场景中,暴露组内的一些节点继续利用先前版本,而越来越多百分比的节点接收较新版本。在一些示例中,当在先前版本或较新版本中发现需要快速修复工程(qfe)的漏洞时,qfe版本也被分布在相关分支的第二分层中,直到qfe版本替换了该分支中具有漏洞的版本。
20.本公开的各方面可以被推广到用于被管理节点(诸如被管理计算资产)的各种大规模操作的其他配置管理任务。除了软件之外,还可以根据本文的公开来管理其他配置项,包括数据集、数据格式化和排列、文档、ml模型、硬件、存储装置和其他管理资产。本公开的方面限制了改变的影响范围,以便智能地管理风险。在替换配置项的部署增加之间的烘烤时间允许将漏洞报告返回给开发方,以便可以在推出期间修复漏洞。
21.图1图示了有利地对被管理节点(例如,计算资产,例如被管理节点150a-150d和其他节点)采用配置改变控制的布置100。在一些示例中,被管理节点150a-150d表示物理资产。在一些示例中,被管理节点150a-150d表示无形资产,诸如用户帐户、用户会话或用户组(例如,因此配置特定于用户、会话或组,并且独立于正被操作的特定物理计算设备)。在一些示例中,被管理节点150a-150d表示saas环境中的用户、用户组和/或会话,而不是物理硬件设备。布置100包括服务于租户环境120和另一个租户环境120a的逐渐暴露服务102。另一个逐渐暴露服务102a处理(服务)租户环境120b和120c。逐渐暴露服务102和102a类似地操作,租户环境120-120c(其管理未示出的其他被管理节点)也是如此。在一些示例中,针对逐渐暴露服务102描述的操作由图11的计算设备1100(单独或作为云资源1128(也是图9)的一部分)执行。在一些示例中,针对租户环境120描述的操作由计算设备1100(单独或作为云资
源1128的一部分)执行。在一些示例中,被管理节点150a-150d均包括计算设备1100。在一些示例中,租户环境120-120c轮询本地(或以其他方式分配)逐渐暴露服务,诸如逐渐暴露服务102和102a中的一个逐渐暴露服务。应当理解,在不同版本的布置100中可以使用不同数目和布置的逐渐暴露服务和租户环境。
22.开发方110在分发节点112内生成配置项,被示为v1(113)、v1’(114)(v1首要)、v2(115)和v2’(116)(v2首要)。在一些示例中,配置项均包括软件应用版本。在一些示例中,配置项包括数据集、ml模型和/或对其管理配置的其他项。在图1的所示示例中,配置项v2被调度来替换配置项v1。在一些示例中,分发节点112不是单独的节点(例如,云资源1128),而是位于开发方110、逐渐暴露服务102和租户环境120中的一个或多个内。
23.逐渐暴露服务102包括中央编排器104,中央编排器104向租户环境120提供当前暴露状态140。至少基于触发事件,诸如来自定时器106的信号或来自开发方110的新配置项在分发节点112内可用的消息,中央编排器104更新暴露状态140。暴露状态(例如,暴露状态140)指示第一配置项分支和第二配置项分支。在一些示例中,暴露状态140指示包括分支的二叉树,分支指示:包括配置项和空占位符的第一集合;或包括第一配置项分支权重和第二配置项分支权重的第二集合。关于暴露状态的附加细节关于图3至图6被提供。
24.租户环境120内的租户编排器124轮询逐渐暴露服务102(例如,逐渐暴露服务102内的中央编排器104),以获取当前暴露状态,并且接收暴露状态140用于替换先前暴露状态140z。因此,暴露状态140是相对于暴露状态140z的更新暴露状态。在稍后的时间,较新的暴露状态将成为相对于暴露状态140的更新暴露状态。在一些示例中,响应于触发事件,诸如来自定时器126的信号或新配置项在分发节点112内可用的消息,租户编排器124轮询中央编排器104。在一些示例中,租户编排器124内的逐渐暴露客户端(ge客户端)122管理与逐渐暴露服务102的通信,例如与中央编排器104的通信。在一些示例中,ge客户端122是在多个不同计算设备上运行的分布式组件。在一些示例中,ge客户端122的多个实例基于从逐渐暴露服务102获取的最新暴露状态140进行操作,并且在具有最新状态的情况下,每个ge客户端122能够“离线”运行(例如,在与逐渐暴露服务102的通信事件之间),以根据需要进行本地确定和分支分配。因此,即使逐渐暴露服务102变得不可用,ge客户端122的实例仍可操作而不会降级,除了失去及时更新到更近的暴露状态的能力。
25.租户环境120的一些示例还包括本地数据存储库128,其存储配置项v1、v1’、v2和v2’的本地副本,以用于部署到被管理节点150a-150d。在一些示例中,部署包括软件应用包的安装,该安装涉及在被管理节点150a-150d上的多个步骤和处理。在一些示例中,部署是更简单的程序,诸如分发。在一些示例中,租户环境120内的租户编排器124通知被管理节点(例如,被管理节点150a-150d之一)哪个版本已被分配(参见图8),并且被管理节点从分发节点112获得分配的配置项(例如,v1、v1’、v2和v2’之一)。在一些示例中,部署是更简单的程序,诸如在计算设备(例如,被管理节点150a-150d之一)内的存储器中存储基于当前暴露组的当前暴露状态140的计算配置值。一旦在存储器中,计算配置值就可以被相同机器上运行的其他软件片段使用,以影响其行为。这种用法的一个示例是“特征标志”或“特征控制位”(fcb),它们被用作saas应用的功能的控制指示,并且可以被动态地打开或关闭,如通过逐渐暴露服务102协调的。
26.当被管理节点150a-150d之一关于配置动作(例如,请求安装分配的软件版本)与
租户编排器124通信时,使用组定义130和节点数据132,租户编排器124能够唯一地标识特定的被管理节点(例如,被管理节点150a)。在一些示例中,节点数据132是具有持久性的物理文件。然而,在一些示例中,节点数据132是短暂的并且仅针对例如在一些计算设备上处理的传入http请求的持续时间存在。在这种示例中,节点数据132从传入http请求的内容被动态提取并且此后不再存在。在一些示例中,租户环境120管理多个暴露组。简要转向图2,暴露组的示例性集合200被图示。这些暴露组表示被管理节点的集合,并且包括超集组1(202)和组1内的各个组:组2(204)、组3(206)、组4(208)和组5(210)。不同的组可以表示位于不同地理区域内的节点、分配给不同用户类别(例如,管理人员、运营、销售和工程)的计算资产,或一些其他分组标准。本文描述的推出步骤可以被全局应用于组1(其包括组2至组5),或者在组2至组5中的每个组内以不同的速率被独立应用。
27.分配逻辑134至少基于与被管理节点150a-150d中的每个被管理节点相关联的数据,来执行将第一或第二配置项实际分配给被管理节点150a-150d中的每个被管理节点。节点数据132包括特定于被管理节点150a-150d之一的信息的标识,诸如处理器序列号或分配的名称或标识号。因为暴露状态140的一些实例包括分支权重,该分支权重指示被管理节点(由租户环境120管理)的哪个部分将接收相对于第二配置项的第一配置项分支权重,所以分支权重可以被用作百分比。将各种被管理节点分配给一个或其他分支的一种解决方案是,将确定性数学哈希函数应用于来自特定被管理节点(例如,被管理节点150a)的节点数据132的数据,并且将哈希值与阈值进行比较。对与暴露组的每个成员相关联的数据(例如,来自节点数据132的数据)执行确定性操作(例如,哈希值)来生成成员值。在一些示例中,可以随暴露状态而改变的附加数据与关联于暴露组的每个成员的数据组合,使得分配是伪随机的(例如,看似随机,但基于确定性过程)。在一些示例中,成员值被缩放(或阈值被缩放),以便阈值落在可能成员值的范围内的该范围内的一个位置处,使得可能成员值的均匀概率分布产生近似等于相应分支权重的分配百分比。
28.作为更具体的示例,分支权重对于每个分支是50%。与被管理节点150a相关联的数据与推出启动的时间戳(或一些其他适当的数据)组合,并且该组合被哈希。哈希函数产生字节的集合,并且第一字节范围从00到十六进制ff(对应十进制值256)。因为范围是0-256,所以阈值被设置为128(即256的50%)。如果哈希值的第一字节小于128(十进制值),则被管理节点被分配第一配置项。然而,如果哈希值的第一字节是128(十进制值)或更高,则被管理节点被分配第二配置项。对于不同的分支权重,可以设置不同的阈值。在一些示例中,已知成员值的范围不统一,因此阈值基于更复杂的公式来被设置。只要成员值的期望概率分布已知,就可以确定阈值。一些示例使用不同的分配过程。在一些示例中,分配过程所需的逻辑(诸如哈希函数和阈值设置操作)在分配逻辑134内。
29.在一些示例中,部署组件136根据来自分配逻辑134的分配来部署配置项,分配逻辑134又根据暴露状态140被分配。在一些示例中,被管理节点150a-150d从租户编排器124接收它们的分配,并且自己处理部署。在一些示例中,分配具有单调的性质,这意味着随着暴露百分比增加(例如从零到100),节点分配只能从v1到v2或始终保持在v2,并且不会向后。类似地,随着暴露百分比减小(例如从100回滚到0),节点分配可以从v2改变到v1或始终保持在v1,但不是相反。
30.在推出期间,可能会出现需要校正的问题。例如,可能在配置项v1或v2中发现漏
洞。为了有助于所需的校正措施,收集的数据138存储与配置项v1和v2在推出期间的性能有关的数据。在一些示例中,收集的数据138被转发到逐渐暴露服务102,以由度量分析组件142处理来产生度量数据144。漏洞报告146和度量数据144被转发到开发方110,以确定诸如qfe、热修复、补丁或回滚的校正动作是否有保证。其他可能的校正动作包括:快进(ff)和中断。如果配置项v1中存在问题但配置项v2中不存在问题,则ff校正动作通过加快配置项v2的推出来解决问题,以便节点/用户更快地中断使用配置项v1。在一些场景中,ff校正动作比qfe或补丁更快地解决任何问题。中断被用来防止附加节点/用户接收配置项v2,同时开发方分析情况并且确定最佳动作方针。
31.如果报告配置项v1有问题,则qfe是配置项v1’,而如果报告配置项v2有问题,则qfe是配置项v2’。配置项v1’和/或配置项v2’与配置项v1和v2同时的部署关于图5和图6被描述。各种触发事件用于更新暴露状态,包括由开发方110进行的新发布或推出、达到定时器事件的烘烤时间(对于定时器106和126之一)或满足某个标准的度量数据144。
32.图3图示了由布置100对诸如图2的组2的代表性组执行的流量移动操作300的示例性阶段302和304。在阶段302处,逐渐暴露服务102已经提供了第一暴露状态140a,第一暴露状态140a对于第一配置项v1具有100的第一配置项分支权重,并且对于第二配置项v2具有0(零)的第二配置项分支权重。被管理节点的动态开放集合310将在请求到达时被配置。在一些示例中,传入请求不是分支分配的唯一触发器。在一些示例中,http请求或其他推送模型充当触发器。一些示例在拉取模型实施方式中使用拉取请求(例如,从文件读取条目并且单独处理每个条目)作为触发器。
33.在一些示例中,集合310的范围不是提前知道的,并且集合310随着新用户开始使用服务或新会话被产生而实时增长。在一些示例中,集合310不作为可标识数据集被存储在存储器中,而只是表示已进行分配或将要进行分配的被管理节点的概念集合——即使没有枚举或记录分配。在一些示例中,如果一些被管理节点不活动,则集合310不包括整个暴露组。因为在阶段302的分支加权是{v1(100),v2(0)},所以所有(100%)被管理节点被分配v1。暴露树322不分叉。对于阶段304,状态改变(状态转变)出现,其将v2提升到20(20%),这在更新的暴露状态140b中被反映。对于更新的暴露状态140b,在阶段304,分支加权是{v1(80),v2(20)}。因此,集合310的80%(第一部分)保持配置项v1,并且20%(第二部分)被分配配置项v2,如分叉暴露树324中所示。分叉暴露树324是二叉树,因为它具有两个分支:v1和v2。在一些示例中,动态开放集合310的范围(或界限)以及该部分事先不知道,而是在被管理节点需要分配时(例如,当产生新用户会话时)是动态的。即,对配置项v1或配置项v2的分配是动态的,因为传入请求使集合310增长。因此,例如,100个请求的第一集合到达,集合310是100,其中分支v1具有80并且分支v2具有20。随着时间推移,附加请求到达,使集合310增长,并且因此部分(分支v1和v2)动态增长。
34.每个暴露组(例如,图2的组2至组5)与暴露流水线相关联,暴露流水线由阶段(例如,阶段302和阶段304)组成。阶段可以取决于其他阶段或同时运行。阶段(或暴露阶段)是执行的单元,并且在一些示例中,由多个步骤组成。阶段是流水线中的执行实体的逻辑单元,步骤连续运行以完成阶段。在执行期间,流水线可以通过各个阶段。示例性阶段包括:
35.a)未开始:当流水线的实例被创建但尚未开始执行时,该状态出现。
36.b)运行:该状态指示流水线当前正在运行(正在执行)。
37.c)取消:该状态指示流水线已被取消,并且不能恢复。
38.d)停止:该状态指示流水线已停止,并且流水线中没有任何阶段正被执行。
39.e)错误:该状态指示流水线处于错误状态,并且需要调查。
40.f)完成:该状态指示流水线的完成。
41.中央编排器104通过启动流水线的实例来提供针对推出的节奏和控制,并且执行由流水线模板指示的逐渐推出策略。在一些示例中,中央编排器104通过创建如由流水线模板指示的阶段的依赖图来开始推出。然后,中央编排器104分析给定阶段中的步骤,并且在给定阶段内顺序地执行该些步骤。如果向中央编排器104提供附加第二层(子阶段)的请求,则如果第二层指示第一层(父阶段)依赖于第二层的完成,则编排器104中断第一层,直到第二层完成其执行为止。在下面结合图6描述该场景。中央编排器104确保流水线的另一个实例不排队,除非流水线已被设置为允许并发执行。在并行流水线执行的情况下,中央编排器104确保流水线的各个步骤的执行保持顺序。中央编排器104提供流水线中各个阶段的状态改变(状态转换)以及流水线的整体状态。
42.图4图示了在如由布置100执行的配置项推出的各个阶段402-412的流水线400中的示例性暴露树。在阶段402,初始暴露状态140c指示分支加权{v1(100),null},其是配置项v1和空占位符。这给出了非分叉暴露树422。状态改变出现,将流水线400带到阶段404,其中暴露状态140d指示分支加权{v1(100),v2(0)}。这是100的第一配置项分支权重和0(零)的第二配置项分支权重,并且仍然指示非分叉暴露树422。在阶段402和404中,所有(100%)被管理节点正在接收(或保持)配置项v1。
43.另一个状态改变出现,将流水线400带到阶段406,其中暴露状态140e指示分支加权{v1(80),v2(20)}。这对于配置项v2是提升,指示第一配置项分支权重为80,并且第二配置项分支权重为20。这指示分叉暴露树426,其中80%的被管理节点(第一部分)接收(或保持)配置项v1,并且配置项v2正被部署到其余的20%(第二部分)。对于阶段408,另一个状态改变将配置项v2提升到50,从而暴露状态140f指示分支加权{v1(50),v2(50)}。这产生暴露树428,其中配置项v2被部署到一半的被管理节点。在一些示例中,伪随机分配过程使用保持成员值的数据,以便为了稳定推出,如果节点在较早阶段已被分配配置项v2,它将继续保持配置项v2。
44.对于阶段410,另一个状态改变将配置项v2提升到100,使得暴露状态140g指示分支加权{v1(0),v2(100)}。这产生非分叉暴露树430,其中配置项v2被部署到在租户环境120的管理下的所有被管理节点。注意,其他租户环境(例如,图1的租户环境120b和102c)可以具有更快或更慢的推出,并且因此一些可能仍在使用配置项v1。最终状态改变将流水线400带到阶段412,其中暴露状态140h指示分支加权{v2(100),null}。流水线400现已完成。此时,配置项v2已经完全替换了配置项v1,现在保持以待在流水线400的重复中被未来的配置项替换。
45.图5图示了在用于配置项推出的流水线500的各个阶段的示例性分层暴露树。在流水线500中,存在用于配置项v1的qfe,该qfe产生更新的配置项v1’,并且产生分层暴露树。在阶段502,暴露状态140j指示分支加权{v1(50),v2(50)}。这给出二叉暴露树522。树522的v1分支是针对第二分层的管理节点的集合520。暴露状态540a指示分支加权{v1(100),v1’(0)},因此最初,第二分层是非分叉树5222。暴露状态540a是配置项分支暴露状态。第二分
层出现状态改变,将流水线500带到阶段504。第一层仍处于暴露状态140j,但第二层现在具有暴露状态540b,暴露状态540b指示分支加权{v1(50),v1’(50)}。暴露状态540b也是配置项分支暴露状态。这产生分叉树5242,其中集合520的一半(暴露组的一部分)保持配置项v1,而集合520的另一半(暴露组的另一部分)接收更新配置项v1’的部署。这是分层二叉树的一个示例,因为在第一层处的树522是二叉的,并且在第二层处的树5242(从树522的一侧分叉)也是二叉的。在阶段504,集合310的一半接收配置项v2,四分之一(一半的一半)保持配置项v1,四分之一接收更新的配置项v1’。
46.在所示示例中,接下来出现两个状态改变,每个分层一个,将流水线500带到阶段506。暴露状态140j被暴露状态140k代替,暴露状态140k指示分支加权{v1(25),v2(75)},这产生分叉树526。集合520现在只具有集合310的四分之一,从一半下降(它在阶段504具有一半)。暴露状态540b被暴露状态540c代替,暴露状态540c指示分支加权{v1(0),v1’(100)},这产生非分叉树5262。在阶段506,集合310的四分之三接收配置项v2,并且集合310的四分之一(现在是集合520的全部)接收更新的配置项v1’。
47.对于阶段508,另一个状态改变利用暴露状态140m代替暴露状态140k,暴露状态140m指示分支加权{v1’(25),v2(75)}。实际结果与阶段506相同,其中集合310的四分之三接收配置项v2,并且集合310的四分之一接收更新的配置项v1’。主要区别是名义上的。在阶段508,流水线500已经折叠为具有分叉树528的仅单个层。另一个状态改变将流水线500带到阶段510,其中暴露状态140n指示分支权重{v1’(0),v2(100)}。这产生非分叉树530,其中集合310的全部接收配置项v2。最终图示的阶段512由到暴露状态140p的状态改变导致,暴露状态140p指示分支加权{v2(100),null}。此时,配置项v2已经替换了配置项v1和临时部署的更新配置项v1’。
48.对于流水线500,对更新的配置项v1’启动qfe推出不会中断配置项v2的推出。这是因为,如果配置项v2中没有标识出漏洞,则配置项v2的逐渐暴露应当继续正常进行。
49.图6也图示了在如由布置100执行的配置项推出的各个阶段的示例性分层暴露树。在流水线600中,存在针对配置项v2的qfe,该qfe产生更新的配置项v2’,并且还产生分层暴露树。与流水线500相比,对于流水线600,启动配置项v2’的qfe推出确实会中断配置项v2的推出。这是因为,如果在配置项v2中标识了漏洞,则配置项v2的逐渐暴露应当中断以遏制问题,直到解决方案(qfe更新的配置项v2’)变得可用。因此,在一些示例中,配置项v2的部署被中断,直到更新的配置项v2’被接收为止,然后恢复第二配置项v2的部署。
50.在阶段602,暴露状态140q指示分支加权{v1(50),v2(50)}。这给出二叉暴露树622。树622的v2分支是针对第二分层的被管理节点的集合620。暴露状态640a指示分支权重{v2(100),v2’(0)},因此最初,第二分层是非分叉树6222。暴露状态640a是配置项分支暴露状态。第二分层出现状态改变,将流水线600带到阶段604。第一层仍处于暴露状态140q,但第二层现在具有指示分支加权{v2(50),v2’(50)}的暴露状态640b。这产生分叉树6242,其中集合620的一半接收配置项v2,而集合620的另一半接收更新配置项v2’的部署。这是分层二叉树的另一个示例,因为在第一层处的树622是二叉的,并且在第二层处的树6242(从树622的一侧分叉)也是二叉的。在阶段604,集合310的一半保持配置项v1,四分之一(一半的一半,集合310的一部分)接收配置项v2,四分之一(另一部分)接收更新的配置项v2’。
51.在所示示例中,接下来仅出现一个状态改变,将流水线600带到阶段606。第一层中
断,并且因此保持在暴露状态140k。暴露状态640b被暴露状态640c替换,暴露状态640c指示分支加权{v2(0),v2’(100)},这产生非分叉树6262。暴露状态640b也是配置项分支暴露状态。在阶段606,集合310的一半(一部分)保持配置项v1,集合310的一半(现在包括集合620的全部的另一部分)接收更新的配置项v2’。配置项v2现在完全被替代,并且不再被部署。
52.对于阶段608,另一个状态改变利用暴露状态140s代替暴露状态140q,暴露状态140s指示分支加权{v1(50),v2’(50)}。实际结果与阶段606相同,集合310的一半接收更新的配置项v2’,并且集合310的一半接收配置项v1。主要区别是名义上的。在阶段608,流水线600已经折叠为具有分叉树628的仅单个层。另一个状态改变将流水线600带到阶段610,其中暴露状态140t指示分支权重{v1(0),v2’(100)}。这产生非分叉树630,其中集合310的全部接收更新的配置项v2’。最终图示的阶段612由到暴露状态140u的状态改变导致,暴露状态140u指示分支加权{v2’(100),null}。此时,更新的配置项v2’已经替换了配置项v1和临时部署的配置项v2。
53.重新回到图1,布置100提供了用于管理配置改变控制的解决方案。在操作中,布置100的方面接收第二配置项v2,以在暴露组中替换第一配置项v1;从中央编排器104接收暴露状态140,其中暴露状态140指示包括第一配置项分支和第二配置项分支的暴露树;针对暴露组,至少基于暴露状态140确定:暴露组的第一部分以继续第一配置项v1,以及暴露组的第二部分以接收第二配置项v2;根据暴露状态,将第二配置项v2部署到暴露组的第二部分;至少基于第一触发事件,从中央编排器104接收更新的暴露状态(例如,暴露状态140a);以及根据更新的暴露状态来部署第二配置项v2。
54.在一些示例中,第一配置项和第二配置项均包括软件应用版本。在一些示例中,操作包括:在中央编排器104处提供暴露状态140(或后续的暴露状态);以及至少基于第二触发事件,在中央编排器104更新暴露状态。在一些示例中,暴露状态指示包括分支的二叉树,该些分支指示:包括配置项和空占位符的第一集合;或包括第一配置项分支权重和第二配置项分支权重的第二集合。在一些示例中,确定暴露组的第一部分和暴露组的第二部分包括:至少基于第一配置项分支权重或第二配置项分支权重确定阈值;对与暴露组的每个成员相关联的数据执行确定性操作来生成成员值;针对暴露组的至少一个成员,将阈值与成员值进行比较;以及至少基于该比较,将暴露组的至少一个成员分配给暴露组的第一部分或暴露组的第二部分。
55.在一些示例中,操作包括:通过进一步对第一配置项分支或第二配置项分支进行分支,来生成分层暴露树。在一些示例中,进一步对第一配置项分支进行分支包括:接收更新的第一配置项v1’,用于替换第一配置项v1;接收第一配置项分支暴露状态,其中第一配置项分支暴露状态指示暴露树分支,该暴露树分支包括原始第一配置项分支和更新的第一配置项分支;至少基于暴露状态确定:暴露组的第三部分以继续第一配置项v1,以及暴露组的第四部分以接收更新的第一配置项v1’;以及根据第一配置项分支暴露状态和暴露状态,将更新的第一配置项v1’部署到暴露组的第四部分。
56.在一些示例中,进一步对第二配置项分支进行分支包括:接收更新的第二配置项v2’,用于替换第二配置项v2;接收第二配置项分支暴露状态,其中第二配置项分支暴露状态指示暴露树分支,该暴露树分支包括原始第二配置项分支和更新的第二配置项分支;至少基于暴露状态确定:暴露组的第五部分以继续第二配置项v2,以及暴露组的第六部分以
接收更新的第二配置项v2’;根据第二配置项分支暴露状态和暴露状态,将第二配置项v2部署到暴露组的第五部分;以及根据第二配置项分支暴露状态和暴露状态,将更新的第二配置项v2’部署到暴露组的第六部分。在一些示例中,操作包括:至少基于第三触发事件,中断第二配置项v2的部署;以及至少基于接收到更新的第二配置项v2’,恢复第二配置项v2的部署。
57.图7a和图7b示出了示例性javascript对象表示法(json)配置文件700的伪代码,用于管理如由布置100执行的配置改变。图7a和图7b应当被视为连续列表,其中图7b的部分700b紧跟在图7a的部分700a之后。在所示示例中,文件700定义了流水线,用于将名为“testapplication”的配置项部署到两个地理区域:western_us(美国西部)和eastern_us(美国东部)中的名为“group2”的暴露组。逐渐暴露类型是斜坡百分比,与图5和图6一致。存在三种不同的分支加权:{0,100};{50,50}和{100,0}。在一些示例中,使用了大量不同的分支加权,例如:{0,100};{25,75};{50,50};{75,25}和{100,0};或{0,100};{20,80};{40,60};{60,40};{80,20}和{100,0}。
58.暴露枢轴可以由租户定义,并且在所示示例中,它被设置为环境id。当轮询中央编排器104时,租户编排器提供其暴露枢轴以标识其对当前暴露状态的请求。这是因为逐渐暴露服务102可以服务于多个租户环境(例如,租户环境120和102a)和多个分层(例如,暴露状态140k和540c)。文件700的其他方面指示每个状态的等待时间是一小时(3600秒),并且性能数据被收集(例如,收集的数据138)以进行分析并产生度量数据144。
59.图8图示了在布置100内执行的示例性消息传递序列800。开发方110向中央编排器104发送消息802以启动流水线(例如,开始新的推出)。中央编排器104利用到租户编排器124的消息804开始新流水线的协调。中央编排器104和租户编排器124建立定时器,以用于触发状态改变和轮询状态改变。开发方110还开始向中央编排器104发送一系列流水线状态消息806a-806f,以向中央编排器104指示推出是否正常进行、是否中断流水线以进行qfe,或者qfe配置项是否可用以及是否将被添加到流水线中。
60.租户编排器124利用消息808a-808e开始轮询中央编排器104以获得状态改变,并且从中央编排器104接收当前暴露状态。被管理节点150a向租户编排器124发送配置动作消息810a,请求配置管理操作,诸如部署新配置项或验证被管理节点150a处的现有配置项是当前分配的配置项。租户编排器124在过程812a中确定要分配给被管理节点150a的配置项,并且发送消息814a以向被管理节点150a通知所分配的配置项。在一些场景中,消息814a将新配置项分配给被管理节点150a。被管理节点150b向租户编排器124发送配置动作消息810b,请求配置管理操作。租户编排器124在过程812b中确定要分配给被管理节点150b的配置项,并且发送消息814b以向被管理节点150b通知所分配的配置项。
61.当暴露状态指示流水线完成时,租户编排器124向开发方110发送消息810并且向租户编排器124发送消息812,指示流水线已完成。开发方110然后中断一系列流水线状态消息,并且租户编排器124中断针对状态改变轮询中央编排器104。
62.图9是流程图900,其图示了如由布置100执行的配置改变控制中涉及的示例性操作。在一些示例中,针对流程图900描述的操作由图11的计算设备1100执行。流程图900开始于操作902,其中开发方生成第二配置项用于替换暴露组中的第一配置项。该推出作为触发事件。操作904包括:接收第二配置项,以在暴露组中替换第一配置项。在一些示例中,第一
配置项和第二配置项均包括软件应用版本。操作906包括在中央编排器处提供暴露状态,其中暴露状态指示包括第一配置项分支和第二配置项分支的二叉暴露树。在一些示例中,分支指示:包括配置项和空占位符的第一集合,或者包括第一配置项分支权重和第二配置项分支权重的第二集合。
63.操作906关于例如定时器事件的触发事件重复。当在来自操作926的度量数据上触发时,操作906也重复。在后续传递中,操作906包括:至少基于第一触发事件,在中央编排器处更新暴露状态。流程图在多个点处返回到操作906,诸如判决操作930的一个选项,以及在操作932和950完成时。流程图900还在操作906达到流水线的完成状态时结束。然而,如果尚未达到完成,则流程图900进行到操作908。
64.操作908包括从中央编排器接收暴露状态。操作908还关于触发事件重复,例如第二定时器事件或一些其他事件。在后续传递中,操作908包括:至少基于第二触发事件,从中央编排器接收更新的暴露状态。操作910包括:针对暴露组,至少基于暴露状态确定:暴露组的第一部分以继续第一配置项,以及暴露组的第二部分以接收第二配置项。在一些示例中,操作910包括操作912-918。在操作912中从暴露状态确定分支权重。操作914包括:至少基于第一配置项分支权重或第二配置项分支权重来确定阈值。操作916包括:对与暴露组的每个成员相关联的数据执行确定性操作来生成成员值,并且操作918包括:针对暴露组的至少一个成员,将阈值与成员值进行比较。操作920包括:至少基于该比较,将暴露组的至少一个成员分配给暴露组的第一部分或暴露组的第二部分。然后,操作922包括:根据暴露状态,将第二配置项部署到暴露组的第二部分。在后续传递中,操作922包括根据更新的暴露状态部署第二配置项。
65.指示推出稳定性的性能数据在操作924中被收集,并且由诸如逐渐暴露服务或另一个节点的分析节点接收。在操作926中,对收集的数据执行度量分析。度量数据可以显示足够的稳定性以进行到下一个暴露状态。如果是,则流程图900返回到操作906,在操作906中,在度量数据上触发暴露状态改变。然而,如果存在任何性能问题,诸如漏洞,则在操作928中接收漏洞报告。判决操作930确定是否需要qfe。如果否,则流程图900返回操作906。存在两种qfe可能性:第一配置项需要qfe,和/或第二配置项需要qfe。
66.如果第一配置项需要qfe,则操作932包括通过进一步对第一配置项分支进行分支来生成分层暴露树。在一些示例中,操作932包括操作934-942。操作934包括接收用于替换第一配置项的更新的第一配置项。操作936包括接收第一配置项分支暴露状态。在一些示例中,第一配置项分支暴露状态指示包括原始第一配置项分支和更新的第一配置项分支的暴露树分支。在操作938中确定分配,与操作910中类似,但是针对第二分层。例如,操作938包括至少基于暴露状态确定:暴露组的第三部分以继续第一配置项,以及暴露组的第四部分以接收更新的第一配置项。操作940包括:根据第一配置项分支暴露状态,将更新的第一配置项部署到暴露组的第四部分。第二层流水线的状态被耗尽,使得第二层流水线在操作942中完成。流程图900然后返回到操作906。
67.如果第二配置项需要qfe,则操作950包括通过进一步对第二配置项分支进行分支来生成分层暴露树。在一些示例中,操作950包括操作952-966。操作952包括:至少基于第三触发事件,中断第二配置项的部署。在一些示例中,第三触发事件是在操作928中接收到的漏洞报告。操作954包括接收用于替换第二配置项的更新的第二配置项,并且操作956包括:
至少基于接收到更新的第二配置项,恢复第二配置项的部署。
68.操作958包括接收第二配置项分支暴露状态。在一些示例中,第二配置项分支暴露状态指示包括原始第二配置项分支和更新的第二配置项分支的暴露树分支。在操作960中确定分配,与操作910中类似,但是针对第二分层。例如,操作960包括至少基于暴露状态确定:暴露组的第五部分以继续第二配置项,以及暴露组的第六部分以接收更新的第二配置项。操作962包括:根据第二配置项分支暴露状态,将第二配置项部署到暴露组的第五部分。操作964包括:根据第二配置项分支暴露状态将更新的第二配置项部署到暴露组的第六部分。第二层流水线的状态被耗尽,使得第二层流水线在操作966中完成。流程图900然后返回到操作906。
69.图10是流程图1000,其图示了如由布置100执行的配置改变控制中涉及的示例性操作。在一些示例中,针对流程图1000描述的操作由图11的计算设备1100执行。流程图1000开始于操作1002,操作1002包括接收第二配置项,以在暴露组中替换第一配置项。操作1004包括从中央编排器接收暴露状态,其中暴露状态指示包括第一配置项分支和第二配置项分支的暴露树。操作1006包括:针对暴露组,至少基于暴露状态确定:暴露组的第一部分以继续第一配置项,以及暴露组的第二部分以接收第二配置项。
70.操作1008包括:根据暴露状态,将第二配置项部署到暴露组的第二部分。操作1010包括:至少基于第一触发事件,从中央编排器接收更新的暴露状态。操作1012包括:根据更新的暴露状态,部署第二配置项。
71.附加示例
72.本文公开的一些方面和示例针对一种用于管理配置改变的系统,包括:处理器;以及存储指令的计算机可读介质,指令在由处理器执行时可操作,以:接收第二配置项,以在暴露组中替换第一配置项;从中央编排器接收暴露状态,其中暴露状态指示暴露树,暴露树包括第一配置项分支和第二配置项分支;针对暴露组,至少基于暴露状态确定:暴露组的第一部分,以继续第一配置项,以及暴露组的第二部分,以接收第二配置项;根据暴露状态,将第二配置项部署到暴露组的第二部分;至少基于第一触发事件,从中央编排器接收更新的暴露状态;以及根据更新的暴露状态,部署第二配置项。
73.本文公开的附加方面和示例针对一种配置改变控制的方法,包括:接收第二配置项,以在暴露组中替换第一配置项;从中央编排器接收暴露状态,其中暴露状态指示暴露树,暴露树包括第一配置项分支和第二配置项分支;针对暴露组,至少基于暴露状态确定:暴露组的第一部分,以继续第一配置项,以及暴露组的第二部分,以接收第二配置项;根据暴露状态,将第二配置项部署到暴露组的第二部分;至少基于第一触发事件,从中央编排器接收更新的暴露状态;以及根据更新的暴露状态,部署第二配置项。
74.本文公开的附加方面和示例针对一个或多个计算机存储设备,其上存储有用于配置改变控制的计算机可执行指令,该指令在由计算机执行时使计算机执行操作,操作包括:接收第二配置项,以在暴露组中替换第一配置项,其中第一配置项和第二配置项均包括软件应用版本;在中央编排器处提供暴露状态,其中暴露状态指示二叉暴露树,二叉暴露树包括第一配置项分支和第二配置项分支,分支指示:第一集合,包括配置项和空占位符,或第二集合,包括第一配置项分支权重和第二配置项分支权重;从中央编排器接收暴露状态;针对暴露组,至少基于暴露状态确定:暴露组的第一部分,以继续第一配置项,以及暴露组的
第二部分,以接收第二配置项,其中确定暴露组的第一部分和暴露组的第二部分包括:至少基于第一配置项分支权重或第二配置项分支权重,确定阈值;对与暴露组的每个成员相关联的数据执行确定性操作,以生成成员值;针对暴露组的至少一个成员,将阈值与成员值进行比较;以及至少基于该比较,将暴露组的至少一个成员分配给暴露组的第一部分或暴露组的第二部分;根据暴露状态,将第二配置项部署到暴露组的第二部分;至少基于第一触发事件,在中央编排器处更新暴露状态;至少基于第二触发事件,从中央编排器接收更新的暴露状态;以及根据更新的暴露状态,部署第二配置项。
75.作为本文描述的其他示例的备选或补充,示例包括以下的任何组合:
[0076]-第一配置项和第二配置项均包括软件应用版本;
[0077]-在中央编排器处提供暴露状态;
[0078]-至少基于第二触发事件,在中央编排器处更新暴露状态;
[0079]-暴露状态指示包括分支的二叉树,该分支指示:第一集合,包括配置项和空占位符;或第二集合,包括第一配置项分支权重和第二配置项分支权重;
[0080]-确定暴露组的第一部分和暴露组的第二部分包括:至少基于第一配置项分支权重或第二配置项分支权重,确定阈值;对与暴露组的每个成员相关联的数据执行确定性操作,以生成成员值;针对暴露组的至少一个成员,将阈值与成员值进行比较;以及至少基于该比较,将暴露组的至少一个成员分配给暴露组的第一部分或暴露组的第二部分;
[0081]-至少基于第一配置项分支权重或第二配置项分支权重,来确定阈值;
[0082]-对与暴露组的每个成员相关联的数据执行确定性操作,以生成成员值;
[0083]-针对暴露组的至少一个成员,将阈值与成员值进行比较;
[0084]-至少基于比较,将暴露组的至少一个成员分配给暴露组的第一部分或暴露组的第二部分;
[0085]-通过进一步对第一配置项分支或第二配置项分支进行分支,来生成分层暴露树;
[0086]-进一步对第一配置项分支进行分支包括:接收用于替换第一配置项的更新的第一配置项;接收第一配置项分支暴露状态,其中第一配置项分支暴露状态指示暴露树分支,暴露树分支包括原始第一配置项分支和更新的第一配置项分支;至少基于暴露状态,确定:暴露组的第三部分,以继续第一配置项,以及暴露组的第四部分,以接收更新的第一配置项;以及根据第一配置项分支暴露状态和暴露状态,将更新的第一配置项部署到暴露组的第四部分。
[0087]-接收用于替换第一配置项的更新的第一配置项;
[0088]-接收第一配置项分支暴露状态,其中第一配置项分支暴露状态指示暴露树分支,暴露树分支包括原始第一配置项分支和更新的第一配置项分支;
[0089]-至少基于暴露状态,确定:暴露组的第三部分,以继续第一配置项,以及暴露组的第四部分,以接收更新的第一配置项;
[0090]-根据第一配置项分支暴露状态和暴露状态,将更新的第一配置项部署到暴露组的第四部分;
[0091]-进一步对第二配置项分支进行分支包括:接收用于替换第二配置项的更新的第二配置项;接收第二配置项分支暴露状态,其中第二配置项分支暴露状态指示暴露树分支,暴露树分支包括原始第二配置项分支和更新的第二配置项分支;至少基于暴露状态,确定:
暴露组的第五部分,以继续第二配置项,以及暴露组的第六部分,以接收更新的第二配置项;根据第二配置项分支暴露状态和暴露状态,将第二配置项部署到暴露组的第五部分;以及根据第二配置项分支暴露状态和暴露状态,将更新的第二配置项部署到暴露组的第六部分;
[0092]-接收用于替换第二配置项的更新的第二配置项;
[0093]-接收第二配置项分支暴露状态,其中第二配置项分支暴露状态指示暴露树分支,暴露树分支包括原始第二配置项分支和更新的第二配置项分支;
[0094]-至少基于暴露状态,确定:
[0095]-暴露组的第五部分,以继续第二配置项,以及
[0096]-暴露组的第六部分,以接收更新的第二配置项;
[0097]-根据第二配置项分支暴露状态和暴露状态,将第二配置项部署到暴露组的第五部分;以及
[0098]-根据第二配置项分支暴露状态和暴露状态,将更新的第二配置项部署到暴露组的第六部分;
[0099]-至少基于第三触发事件,中断第二配置项的部署;
[0100]-至少基于接收到更新的第二配置项,恢复第二配置项的部署。
[0101]
虽然已经根据各种示例及其相关联操作对本公开的方面进行了描述,但是本领域技术人员应当理解,来自任何数目的不同示例的操作的组合也在本公开的各方面的范围内。
[0102]
示例操作环境
[0103]
图11是用于实现本文公开的方面的示例计算设备1100的框图,并且被一般地指定为计算设备1100。计算设备1100只是适当计算环境的一个示例,并且不旨在暗示对本文公开的示例的用途或功能的范围的任何限制。计算设备1100也不应当被解释为对所说明的任何一个组件/模块或组件/模块的组合具有任何依赖性或要求。可以在计算机代码或机器可用指令的一般上下文中描述本文公开的示例,包括由计算机或其他机器(诸如个人数据助理或其他手持设备)执行的计算机可执行指令,诸如程序组件。通常,程序组件(包括例程、程序、对象、组件、数据结构等)是指执行特定任务或实现特定抽象数据类型的代码。所公开的示例可以在各种系统配置中被实践,包括个人计算机、膝上型计算机、智能手机、移动平板、手持设备、消费电子、专业计算设备等。当任务由通过通信网络链接的远程处理设备执行时,所公开的示例也可以在分布式计算环境中被实践。
[0104]
计算设备1100包括直接或间接耦合以下设备的总线1110:计算机存储存储器1112、一个或多个处理器1114、一个或多个呈现组件1116、i/o端口1118、i/o组件1120、功率供应1122和网络组件1124。虽然计算设备1100被描绘为看似单一的设备,但是多个计算设备1100可以一起工作并且共享所描绘的设备资源。例如,存储器1112可以跨多个设备分布,并且(多个)处理器1114可以与不同的设备一起被容纳。
[0105]
总线1110表示什么可以是一个或多个总线(诸如,地址总线、数据总线或其组合)。虽然为了清楚起见,利用线示出了图11的各个块,描绘各种组件可以利用备选的表示来完成。例如,在一些示例中,诸如显示设备的呈现组件是i/o组件,并且处理器的一些示例具有它们自己的存储器。在诸如“工作站”、“服务器”、“膝上型计算机”、“手持设备”等类别之间
不做区分,因为所有这些都被预期在图11以及本文对“计算设备”的引用的范围内。存储器1112可以采用下面引用的计算机存储介质的形式,并且可操作地为计算设备1100提供计算机可读指令、数据结构、程序模块和其他数据的存储。在一些示例中,存储器1112存储以下中的一个或多个:操作系统、通用应用平台或其他程序模块和程序数据。因此,存储器1112能够存储和访问数据1112a和指令1112b,指令1112b可由处理器1114执行并且被配置成实施本文公开的各种操作的指令。
[0106]
在一些示例中,存储器1112包括易失性和/或非易失性存储器、可移动或不可移动存储器、虚拟环境中的数据盘或其组合的形式的计算机存储介质。存储器1112可以包括与计算设备1100相关联或可由计算设备1100访问的任何数量的存储器。存储器1112可以在计算设备1100内部(如图11中所示)、在计算设备1100外部(未示出),或者两者(未示出)。存储器1112的示例包括但不限于随机存取存储器(ram);只读存储器(rom);电子可擦可编程只读存储器(eeprom);闪存或其他存储器技术;cd-rom、数字多功能盘(dvd)或其他光学或全息媒体;盒式磁带、磁带、磁盘存储或其他磁性存储设备;接线到模拟计算设备的存储器;或用于对所需信息进行编码并且由计算设备1100访问的任何其他介质。附加地或备选地,存储器1112可以跨多个计算设备1100分布,例如,在多个设备1100上实施指令处理的虚拟化环境中。出于本公开的目的,“计算机存储介质”、“计算机存储存储器”、“存储器”和“存储器设备”是计算机存储存储器1112的同义术语,并且这些术语均不包括载波或传播信令。
[0107]
(多个)处理器1114可以包括从各种实体(诸如存储器1112或i/o组件1120)读取数据的任何数量的处理单元。具体地,(多个)处理器1114被编程为执行计算机可执行指令以实现本公开的方面。指令可以由处理器、由计算设备1100内的多个处理器或由客户端计算设备1100外部的处理器执行。在一些示例中,(多个)处理器1114被编程为执行指令,诸如在下面讨论的流程图中说明和在附图中描绘的那些指令。此外,在一些示例中,(多个)处理器1114表示用于执行本文描述的操作的模拟技术的实现。例如,操作可以由模拟客户端计算设备1100和/或数字客户端计算设备1100执行。(多个)呈现组件1116向用户或其他设备呈现数据指示。示例性呈现组件包括显示设备、扬声器、打印组件、振动组件等。本领域技术人员将理解和意识到,可以以多种方式呈现计算机数据,诸如在图形用户界面(gui)中视觉呈现、通过扬声器可听地呈现、在计算设备1100之间无线地呈现、跨有线连接呈现或以其他方式呈现。i/o端口1118允许计算设备1100逻辑地耦合到包括i/o组件1120的其他设备,其他设备中一些可以是内置的。示例i/o组件1120包括,例如但不限于,麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、打印机、无线设备等。
[0108]
计算设备1100可以使用到一个或多个远程计算机的逻辑连接,经由网络组件1124在联网环境中操作。在一些示例中,网络组件1124包括网络接口卡和/或用于操作网络接口卡的计算机可执行指令(例如,驱动器)。计算设备1100与其他设备之间的通信可以通过任何有线连接或无线连接使用任何协议或机构进行。在一些示例中,网络组件1124可操作以在无线使用短程通信技术(例如,近场通信(nfc)、蓝牙
tm
品牌通信等)或其组合的设备之间使用传送协议通过公共、私有或混合(公共和私有)传输数据。网络组件1124通过无线通信链路1126和/或有线通信链路1126a跨网络1130与云资源1128通信。通信链路1126和1126a的各种不同示例包括无线连接、有线连接和/或专用链路,并且在一些示例中,至少一部分通过因特网路由。
[0109]
尽管结合示例计算设备1100进行了描述,但是本公开的示例能够使用许多其他通用或专用计算系统环境、配置或设备来实现。可能适合与本公开的各方面一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于智能电话、移动平板、移动计算设备、个人计算机、服务器计算机、手持式设备或膝上型计算机设备、多处理器系统、游戏控制台、基于微处理器的系统、机顶盒、可编程消费者电子产品、移动电话、可穿戴式或配件形状因子(例如,手表、眼镜、耳机,或听筒)中的移动计算和/或通信设备、网络pc、小型计算机、大型计算机、包括上述系统或设备中的任一系统或设备的分布式计算环境、虚拟现实(vr)设备、增强现实(ar)设备、混合显示(mr)设备、全息设备等。这种系统或设备可以经由手势输入、接近输入(诸如通过悬停)和/或经由话音输入以任何方式接受来自用户(包括来自诸如键盘或指向设备的输入设备)的输入。
[0110]
本公开的示例可以在诸如由一个或多个计算机或其他设备以软件、固件、硬件或其组合执行的程序模块的计算机可执行指令的一般背景中进行描述。计算机可执行指令可以被组织成一个或多个计算机可执行组件或模块。通常,程序模块包括但不限于执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件和数据结构。本公开的方面可以利用任何数目和组织的这种组件或模块来实现。例如,本公开的方面不限于图中所示和本文描述的特定计算机可执行指令或特定组件或模块。本公开的其他示例可以包括功能性比本文所示和描述的功能性多或少的不同的计算机可执行指令或组件。在涉及通用计算机的示例中,当被配置成执行本文描述的指令时,本公开的方面将通用计算机转换为专用计算设备。
[0111]
作为示例而非限制,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以任何方法或技术实现的易失性存储器和非易失性存储器、可移动存储器和不可移动存储器,用于存储诸如计算机可读指令、数据结构、程序模块等的信息。计算机存储介质是有形介质,并且与通信介质互斥。计算机存储介质以硬件实现,并且把载波和传播信号排除在外。出于本公开的目的,计算机存储介质本身不是信号。示例性计算机存储介质包括硬盘、闪存驱动器、固态存储器、相变随机存取存储器(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦可编程只读存储器(eeprom)、闪存或其他存储器技术、压缩盘只读存储器(cd-rom)、数字通用磁盘(dvd)或其他光学存储、盒式磁带、磁带、磁盘存储设备或其他磁性存储设备,或能够用来存储信息以供计算设备访问的任何其他非传输介质。相比之下,通信介质通常在诸如载波或其他传输机制的经调制数据信号中体现计算机可读指令、数据结构、程序模块等,并且包括任何信息递送介质。
[0112]
本文所示和描述的本公开的示例中的操作的执行(execution)或执行(performance)的顺序不是必需的,并且在各种示例中可以以不同的顺序方式被执行。例如,预期了,在另一个操作之前、同时或之后执行(executing)或执行(performing)特定操作在本公开的各方面的范围内。当介绍本公开的各方面或其示例的元素时,冠词“一”、“一个”、“该”和“所述”旨在表示存在元素中的一个或多个元素。术语“包含”、“包括”和“具有”旨在是包括性的,并且意指可以存在除了所列元素之外的附加元素。术语“示例性”旨在意指“...的示例”。短语“以下中的一个或多个:a、b和c”意指“a中的至少一个和/或b中的至少一个和/或c中的至少一个”。
[0113]
已经详细描述了本公开的各方面,将明显的是,在不脱离如所附权利要求中限定的本公开的各方面的范围的情况下,修改和变化是可能的。由于在不脱离本公开的各方面的范围的情况下,可以对上述构造、产品和方法进行各种改变,所以意图在于,被包含在以上描述中以及在附图中示出的所有内容应当被解释为说明性而不是以限制性意义解释。
再多了解一些

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

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

相关文献