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

无状态应用中以接近恒定的时间浏览和随机访问大型层次结构的能力

文献发布时间:2023-06-19 10:00:31


无状态应用中以接近恒定的时间浏览和随机访问大型层次结构的能力

技术领域

本公开涉及用于浏览分层数据的各种技术。具体地,本公开涉及高效地改善用于显示来自非常大的节点层次结构的随机选择的节点小子集(subnet)的响应时间。

背景技术

存在用于浏览由远程机器维护的数据的若干方法。当浏览远程数据的小集合时,浏览器可能能够在浏览开始时下载并高速缓存整个数据集,使得在浏览会话期间无需进一步的数据检索。然而,对于具有在百万数量级的条目的数据集,整个数据集可能太大而无法容纳在本地高速缓存中。即使数据集能够容纳在本地高速缓存中,在仅数据集的一小部分被访问时检索整个数据集可能也是效率低下的。仅当用户向下滚动时才加载数据的常见方法不允许在不首先加载所有先前节点的情况下显示层次结构的任何区域。

获取和高速缓存管理策略可用于访问已从远程存储的数据集中检索到的本地存储的数据。在一个示例中,浏览器提供用于浏览“线性”数据的滚动界面。如本文中所使用的“线性数据”是指具有相对顺序(诸如时间顺序、字母顺序或数字顺序)的数据项。相对顺序指示哪些数据项紧挨其他数据项。根据该相对顺序来显示数据列表。

本部分中描述的方法是可被实行的方法,但不一定是先前已被设想或实行的方法。因此,除非另有说明,否则不应假设本部分中所述的任何方法仅仅因它们被包括在本部分中而作为现有技术。

附图说明

在附图的图中,通过示例而非限制的方式示出了实施例。应当注意,在本公开中对“一(an)”或“一个(one)”实施例的引用不一定是对相同的实施例的引用,并且它们意味着至少一个。在图中:

图1A是示出了根据一个或多个实施例的系统组件的框图;

图1B更详细地示出了根据一个或多个实施例的节点的层次结构122;

图1C示出了根据一个或多个实施例的与图1B所示的数据的分层树中的节点对应的节点的本地高速缓存;

图2是示出了根据一个或多个实施例的检索和显示目标节点的流程图;以及

图3显示了示出根据一个或多个实施例的计算机系统的框图。

可以添加、移除、修改或组合框图中的组件和流程图中的操作。相对于一个组件/操作描述的功能可以替代地由另一组件/操作来实现。因此,本文中示出和/或描述的具体组件/操作不应被解释为限制任何权利要求的范围。

具体实施方式

在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供透彻的理解。可以在没有这些具体细节的情况下实践一个或多个实施例。一个实施例中描述的特征可以与不同的实施例中描述的特征结合。在一些示例中,参考框图形式描述了公知的结构和设备,以避免不必要地模糊本发明。

1、一般概述

大型分层数据集合可以由数千个甚至数百万个节点可视地表示。显示与分层数据对应的视觉表示(例如,节点)的系统可以从包括分层数据的数据存储库中远程实现。一个或多个实施例旨在即使分层数据被远程存储,也在没有任何显著的滞后时间的情况下呈现与分层数据的子集对应的所请求的节点,如同分层数据被本地存储一样。

系统获取要显示的节点,而不是获取表示分层数据整体的所有节点。作为示例,界面显示视觉表示的一部分,并允许用户向该视觉表示的特定的未显示部分滚动。基于滚动,特定的未显示部分与现在要显示的节点对应。作为另一示例,界面允许用户(即,通过随机访问)识别在显示器中未示出并且不在当前显示的数据的合理滚动距离之内的层次结构中的单个节点。收到用户指定的节点后,指定的节点以及与指定节点有关的节点将被显示。

在检测到使得当前未显示的节点要被显示的用户输入之后,并且响应于检测到使得当前未显示的节点要被显示的用户输入,系统获取与特定的未显示部分对应的节点,而不获取对应于分层数据整体的节点。与获取对应于分层数据整体的视觉表示的所有节点相比,识别和获取要显示的节点子集要快。从用户的角度来看,获取和显示节点子集的速度可以充分相似于响应于用户请求而显示本地存储的节点的速度。

除了获取要显示的节点之外,一个或多个实施例还预获取与要显示的节点集合有关和/或相邻的附加节点。

尽管初始用户输入不会导致显示附加节点,但是进一步的用户输入(例如,从特定节点的初始显示和与特定节点一起显示的节点集合滚动)可能导致显示附加相邻节点。在不获取整个节点集合的情况下获取附加的相邻节点是高效的,同时允许在请求时快速表示附加的相邻节点。

本说明书中描述的和/或权利要求中记载的一些实施例可能不包括在本一般概述部分中。

2、用于浏览分层数据的体系结构

树形浏览器可以允许用户浏览分层数据。在其中来自层次结构的节点以有序序列显示在显示窗口中的实施例中,通过以特定搜索顺序遍历层次结构来确定有序序列。例如,在实施例中,可以通过从层次结构中的特定节点A开始遵循这些规则来生成有序序列:

(a)从空序列开始,并从层次结构中的特定节点(诸如节点A)处开始。

(b)将特定节点添加到序列中。

(c)如果特定节点具有一个或多个子节点,并且特定节点处于展开状态,则:

(d)按子节点的顺序对特定节点的每个子节点执行步骤(b)和(c)。(这是一种递归算法,其中在执行步骤b和c时子节点成为特定节点)。

这些规则产生的顺序导致层次结构的线性化,这类似于向用户显示许多文件系统内容的方式,首先是包含文件夹或目录,然后是包括文件和其他目录的目录中的内容列表。

有序序列中的节点可能会受到节点的展开状态的影响。当父节点被展开时,该父节点的子节点在节点的有序序列中出现,并且当父节点被折叠时,子节点不出现。

除了滚动表示节点的层次结构(树)的数据的有序列表之外,树形浏览器还可以允许用户展开或折叠树的节点。当用户展开显示器中的节点时,通过将子节点插入显示器中示出的有序列表来改变显示。在显示的列表中间插入节点可能会将出现在列表底部的节点推离显示器的底部。相对于屏幕上的其他节点,向用户显示的节点的位置可以基于层次结构中节点的展开而改变。因此,要显示的节点的集合取决于与特定节点有关的节点的展开状态。

分层数据浏览器可以从包括分层结构的子树中所有节点的远程机器获取数据,然后仅显示用户请求的节点。即,可以获取完全展开的子树。

图1A是示出了根据一个或多个实施例的系统组件的框图。组件可以被省略、修改、重新布置、组合或以其他方式修改。

节点的层次结构122表示浏览的层次结构数据的非常大的数据集。根据请求,层次结构中的节点被发送到托管浏览数据的用户的本地机器142。层次结构包含节点但不一定包含附加状态信息以跟踪潜在的多个浏览机器正在浏览或高速缓存哪些数据。

远程机器112管理节点的层次结构122。对节点的请求由远程节点112接收,以从节点的层次结构122获取数据,并将数据发送到请求机器,诸如本地机器142。对于正在被请求的数据,远程机器112可以是无状态的。即,远程机器112不维护过去请求的记录。对远程机器112的数据请求是幂等的(idempotent)。

显示屏幕130是通信地耦合到本地机器142的显示设备的屏幕。显示区域132是显示屏幕130的区域中的显示窗口,分层树节点的数据项的有序列表在该显示区域中被显示并浏览。根据可以在显示窗口中同时显示的数据行数,数据项的有序列表包括一定数量的数据项。

显示区域134是屏幕的分开的部分,它可以显示在显示区域132中显示的节点的元数据。可以在显示区域B中显示的元数据的示例包括所选节点的层次结构中的祖先节点的有序列表。可以在显示区域B中显示的其他信息包括所选节点的属性,诸如值和类型、创建时间、所有者等。搜索界面可以在显示区域134中显示。

本地机器142托管用户用来浏览节点的层次结构122中的数据的浏览器。用户查看显示区域132中的节点,并且可以通过滚动到节点的有序列表中的其他节点来导航。当新节点被滚动到显示窗口中时,本地机器可以请求远程机器112将要被显示的节点发送到本地机器142,以便节点可以在显示区域132中显示。当用于查看的目标节点不在距离显示区域132所示的节点的方便滚动距离内时,用户可以与显示区域134交互以指定该节点。例如,显示区域134可以包含书签节点列表、最近查看的节点或可以在其中指定目标节点的名称的搜索栏。响应于用户请求查看特定目标节点,本地机器142可以确定要在目标节点旁边显示哪些节点,并且可以根据需要从远程机器112获取这些附加节点。

部分分层数据的高速缓存144是本地机器142的本地高速缓存,并由本地机器142管理。当节点从远程机器中被获取时,本地机器142在节点的层次结构122中存储节点的子集的副本。对于本地高速缓存中的每个请求的节点,高速缓存可以包括祖先、兄弟、后代或策略中指定的其他类型的有关节点的副本。作为示例,对于本地高速缓存中的每个请求的节点,高速缓存可以包括请求的节点的所有祖先,但是高速缓存可以不必包括请求的节点的所有兄弟节点。在另一个示例中,对于本地高速缓存中的每个请求的节点,高速缓存可以包括请求的节点的最多达向上n级的祖先节点和所有兄弟节点。除了在高速缓存中复制的节点中的数据之外,高速缓存的节点还可以包括跟踪浏览器中数据的浏览状态的附加元数据。该元数据可能不是存储主分层数据集的远程机器已知的。例如,每个内部节点(即,具有至少一个子节点的节点)可以具有相关联的展开状态指示符。展开状态指示是否要显示内部节点的子节点。在实施例中,部分分层数据的高速缓存144还可存储展开状态是展开的节点的列表。此展开的节点的列表可以与高速缓存的节点分离,并且即使当列表中的节点可能从高速缓存中被逐出时,该列表也可以保留在高速缓存中。在实施例中,展开的节点列表可以仅包括在浏览会话期间已被高速缓存至少一次并且其展开状态是展开的那些节点。在浏览会话期间尚未被高速缓存的节点和具有折叠状态的节点可能不在列表中。可替代地,展开的节点的列表还可以被限制为仅包括具有展开状态的已经由高速缓存逐出的节点。在这样的实施例中,当从高速缓存中逐出展开的节点时,可以向展开的节点的列表添加节点。当先前已从高速缓存中被逐出的节点被重新获取并被输入高速缓存时,如果该节点出现在具有展开状态的节点的列表中,则其展开状态可以被设置为展开的。在实施例中,当节点被存储在高速缓存中时,该节点可以从展开的节点的列表中被移除,因为该节点的展开状态被存储在该高速缓存的节点本身内。

在根据上述线性化规则对层次结构的节点进行排序的实施例中,特定展开的内部节点的子节点可以在特定内部节点的兄弟节点之前出现在节点的有序列表中。然而,如果特定节点的展开状态为“折叠的”,则兄弟节点可能会紧接在特定节点之后出现而没有介于中间的子节点。

节点的层次结构122中的一些节点在高速缓存中可能没有对应的副本。占位符可用于表示一组连续的有序节点,以指示主层次结构包括未在高速缓存中表示的节点。当遍历高速缓存的层次结构以寻找将按有序序列显示的节点时,遇到占位符可能导致本地机器请求缺失的节点的副本,并将获取的节点输入到高速缓存中。

图1B更详细地示出了根据一个或多个实施例的节点的层次结构122。在示出的示例中,选择层次结构中的节点的标签,以便于识别节点。所示示例不应被解释为限制任何权利要求的范围。当使用每个节点的祖先的标签作为前缀时,每个节点具有唯一的标识。例如,节点中的数字是兄弟节点的顺序的指示。因此,具有“1”的节点是第一兄弟节点,具有“2”的节点是第二兄弟节点。节点中的字母指示层次结构中的级别。因此,节点1B是节点1A的后代。节点1A是层次结构的根,并具有以{1B,2B,...,9999B}为顺序的9999个子节点。图中的省略号指示层次结构中存在的节点,但由于缺乏空间,表示已从图中被省略。例如,节点1B具有子节点4C、5C、6C等,但是图中未示出子节点4C、5C、6C等。节点1B、2B和9999B也各自具有9999个子节点。此层次结构具有非常大数量的节点。

图1C示出了根据一个或多个实施例的与图1B所示的数据的分层树中的节点的子集相对应的节点的本地高速缓存。带标签的节点指示图1B的层次结构中对应节点的副本,并且带粗边框的矩形表示占位符。占位符识别一组一个或多个兄弟节点,这些节点在兄弟节点的有序列表中是连续的并且未被高速缓存。例如,整个子树2B未被存储在高速缓存中。高速缓存中还缺失:

·节点1B的子节点:{81C至898C}和{1000C至9999C},以及

·10B的子节点:{1C至19C}和{31C至9999C}

图2是示出了根据一个或多个实施例的检索和显示目标节点的数据项的流程图。在操作210中,在显示区域132中显示作为节点的层次结构122的一部分的节点的有序序列。显示窗口可以呈现一定数量的行的数据项。在实施例中,在操作210被执行之前,本地机器在启动时可以预获取层次结构的一些部分以在显示区域132中显示。

在操作220中,用户可以请求查看层次结构中未在显示窗口中示出并因此不能被从显示区域132中选择的特定节点。当感兴趣的节点不在显示窗口中所示的节点的合理滚动距离内时,用户可以选择使用显示区域134来选择用于在显示区域132中显示的节点的选项。换句话说,感兴趣的目标节点可以位于层次结构中与所显示的节点相距很远的子树中。可以通过与显示区域134交互以选择书签节点、最近查看的节点,或者在搜索栏中输入节点名称以直接导航到目标节点而无需滚动来指定目标节点。

在操作230中,本地机器可以在本地高速缓存中搜索目标节点。如果目标节点没有被存储在本地高速缓存中,则在操作240中,本地机器可以请求来自远程机器112的目标节点的副本,并将目标节点的副本存储在高速缓存中。另外,可以获取尚未在高速缓存中的目标节点的祖先,并将这些祖先放置在高速缓存中。

高速缓存的节点的层次结构用于响应于用户请求来确定在操作250中在显示区域132中要显示的数据项。要显示的数据项可以包括节点的有序序列。在实施例中,目标节点的数据项可以被大致放置在显示窗口的中心。要与目标节点一起显示的节点的数据项的数量可以基于显示配置。显示配置可以包括例如显示窗口的大小、显示窗口的分辨率、节点的每个图示的大小、节点之间的空间量。要显示的节点中的一些节点可能在高速缓存中缺失,替代地由高速缓存中的占位符表示。在下面的题为“识别要显示的节点”的部分中,将进一步详细讨论标识要显示的数据项。

在操作260中,可以从远程机器112获取被确定为需要显示但是从高速缓存中缺失的节点。当从远程机器接收到节点时,可以将节点添加到高速缓存并移除或修改占位符以指示缺失节点的较小集合。

在操作270中,包括目标节点的要显示的节点在显示区域132中显示。例如,参考图1C,如果选择节点899C用于显示,则可能需要关于由占位符表示的节点的信息。例如,节点898C从高速缓存中缺失。必须从远程机器获取节点898C。因此,当来自要显示的节点的有序序列中的节点从高速缓存中缺失时,可能必须重复操作230至260,直到有序序列中的节点数充满显示窗口为止。

3、用户界面考虑事项

浏览器可以支持用户请求单个操作以展开或折叠(a)单独节点或(b)所有节点的能力。

输入高速缓存的节点的展开状态可以被设置为默认值。在实施例中,默认展开状态是未展开的(not expanded)(在本文中也被称为折叠的(collapsed))。用户可以通过在显示窗口中选择(例如,点击)节点来请求节点的展开。当用户选择要展开的单独节点时,该节点的展开状态指示符值可以被设置为展开的(expanded),并且所选节点的子节点可以被添加到显示的节点列表中。展开状态指示符可以保持为展开的,直到用户请求折叠节点为止。

选择通过搜索界面或不包括从显示窗口内进行选择的其他方式随机访问的节点可能导致所选节点的所有祖先的展开状态指示符的值被设置为展开的状态。所显示的节点的列表对用户而言看起来像用户手动展开所有祖先节点并滚动到所选节点一样。

在实施例中,用户可以请求展开所有节点,这将层次结构中所有节点的展开状态改变为展开的。在展开层次结构中的所有节点后,对于所有节点,不仅是在做出请求时正在显示或被高速缓存的节点,浏览状态可以被改变。在实施例中,全局展开状态指示符可以指示是否所有节点都要被显示为展开的。如果全局展开状态指示符指示展开模式,则每个节点都被显示为好像其状态是展开的一样,而不考虑节点的单独的展开状态标识符值的值。

在实施例中,用户可以请求向下展开,这可以将以所选节点为根的子树中的所有节点的展开状态改变为展开的。在实施例中,子树展开指示符可以被存储在高速缓存中,该子树展开指示符识别作为要被展开的子树的根的节点。为了确定要显示的节点是否应该被展开,系统可以查阅子树展开指示符以确定该节点是否在由子树展开指示符识别的任何节点的子树中。

类似地,用户可以请求折叠所有节点,这可能导致所有节点变为折叠的。展开状态指示符可以被设置为折叠的,并且单独的展开节点的列表可以被清空。在实施例中,子树展开指示符可以被删除。

4、识别要显示的节点

在实施例中,系统基于请求的节点来识别要显示的节点。要显示的节点表示节点的分层树的要显示的特定部分。如本文被称为节点的分层树的一部分可以包括节点的分层树中的任何连续或不连续的节点的集合。

通常,所请求的节点与直接或间接与所请求的节点有关的节点一起显示。作为示例,响应于对特定节点的请求,该特定节点可以在显示器的中央示出。系统可以被默认配置为显示所请求节点的多达五个祖先、所请求节点的两个兄弟并且不显示后代。可以通过从节点的分层树中的所请求的节点遍历多达五个级别来确定五个祖先节点。可以基于所请求的节点在兄弟的有序序列中的位置来确定两个兄弟。兄弟的有序序列中的所请求的节点之后的两个节点可以被识别为要显示的兄弟。最初不显示后代意味着系统被配置为最初以折叠的状态显示所请求的节点。替代配置可以以展开的状态显示所请求的节点。作为示例,所请求的节点的后代的有序序列中的前x个后代可以被包括在所请求的节点的初始显示中。

在实施例中,当特定显示的节点被展开时,系统识别要显示的节点。响应于展开特定节点的请求,系统确定要显示的后代节点的数量。作为示例,系统可以被配置为最初显示前四个后代节点而不显示展开的节点的其他后代节点。用户可以向下滚动后代节点的列表来触发其他后代节点的显示。

在实施例中,节点的分层树的每个节点可以显示在显示器的分开的水平线上。用户可以向下滚动到先前未显示的、节点的有序列表中的较早节点,或者可以向上滚动以查看先前未显示的、有序列表中的较晚节点。响应于检测到滚动,系统可以识别要被添加到显示器的一个或多个节点以及由于节点不再适合显示器而要从显示器移除的一个或多个节点。

如上所述,基于与显示窗口相关联的配置,要显示的节点限于特定数量的节点。作为示例,可以在窗口中显示的节点数量可以是窗口的大小和/或分辨率、表示窗口内的每个节点的图标的大小、节点标识符的字体大小以及节点之间的间距的函数。系统可以确定例如可以与所请求的节点一起显示十个节点。基于优先级和/或策略,系统可以选择与所请求的节点有关的节点中的十个节点作为要显示的节点。

在实施例中,考虑到层次结构中内部节点的展开状态,本文描述的方法高效地创建节点的有序列表以填充具有有序列表中的特定节点的显示窗口。尽管可以选择显示窗口内的任何位置,但是可以将特定节点放置在显示窗口的中心。创建要显示的节点的有序列表的基本方法将是基于每个节点的展开状态将整个层次结构表达为有序列表。可以按预定义顺序搜索整个层次结构,将未展开的内部节点视为就像内部节点是叶子节点一样。换句话说,当作为子树的根的节点不被展开时,子树不被搜索(并且子树根的子节点不被包括在列表中)。特定节点可以位于列表有序列表中,并且可以选择列表中特定节点之前的多个节点以及列表中特定节点之后的多个节点进行显示。当特定节点要出现在显示窗口的中央时,特定节点之前和之后的节点数可以大约是显示窗口中最大行数的一半。然而,在数百万个节点的层次结构中,为整个层次结构创建有序列表可能过于耗时,尤其是如果用户已经选择“展开所有”节点的话。

创建有序列表的更高效的方法是,首先搜索层次结构中最接近特定节点的子树,然后仅根据需要才将搜索扩展到其他亲戚以填充显示列表。在实施例中,可以按照与期望的数据项顺序对应的顺序搜索层次结构,以从特定节点的直接父节点开始显示。如之前所述,由于要显示特定节点,因此可以展开父节点。如果特定节点有足够的兄弟节点来充满有序列表,则无需其他搜索。如果通过探索直接父节点创建的有序列表中的节点数未充满显示列表,则可以对祖父节点执行搜索,依此类推,直到有序列表包括足够数量的节点以充满显示窗口为止。

在实施例中,可以创建两个分离的有序列表:在特定节点之前显示的一个列表和在特定节点之后显示的一个列表。每个列表可以通过搜索不同的子树来形成。例如,如果特定节点是一组有序兄弟节点中的最后一个,则在特定节点之后显示的节点列表可能来自搜索不同的(姨妈/叔叔)子树,而不是来自探索特定节点的父节点。

5、使用占位符工作

如上所述,可以使用本地高速缓存中的层次结构的一部分来执行创建有序列表。在搜索和排序子树的节点时,可能会遇到占位符,该占位符指示存在但不在高速缓存中的子节点的连续集合。为了完成搜索,由占位符表示的节点的至少一部分可以从远程机器被获取、被添加到高速缓存中,并且可以在搜索继续之前移除或更改占位符。在实施例中,可以获取由占位符表示的所有节点,并且可以将占位符完全移除。在实施例中,可以获取占位符表示的节点的一部分,其中所获取的节点数量不超过:(a)预获取限制,或者(b)可以显示的有序列表中的节点数。占位符可以被更新以表示尚未被获取的节点。

在实施例中,如果用户通过在搜索界面中输入所选节点的标识符来选择要显示的节点,则所选节点可能驻留在尚未被高速缓存和/或展开的子树中。因此,当随机访问所选节点时,可以将每个祖先节点的展开状态设置为展开的。最近展开但尚未在高速缓存中表示的子节点可以被获取并且被高速缓存,或者可以由占位符表示,直到确定需要显示这些子节点为止。

当高速缓存空间不足时,可以根据高速缓存管理策略来选择高速缓存中的节点用于逐出,并且被选择用于逐出的节点可以由高速缓存的层次结构中的占位符来替换。

6、从远程机器获取节点

当至少一个节点需要从远程机器检索时,要获取的节点数可能取决于若干因素。要检索的最小节点数是充满显示列表所需的节点数。该最小数量的节点是如上面在题为“识别要显示的节点”的第4部分中所述的要显示的节点。如果一组连续节点缺失,则可以在相同请求中获取该组连续节点中的所有节点。然而,如果需要一组节点来充满显示列表,并且这些节点在有序列表中不是连续的,则本地机器可以请求多个连续的节点,这些连续的节点包括需要获取的至少一个节点。要获取的连续节点数可以被确定为可以在显示窗口中同时显示的节点数的函数。出于显示目的,有序序列中所需的节点数不超过可以在显示窗口中同时显示的节点数。获取一些已经被高速缓存的连续节点可能比发送对公共子树内的非连续占位符的单独请求更高效。

另外,可以基于性能考虑来确定要获取的节点的数量。为了减少到远程机器的获取请求的数量,可以响应于每个获取请求而发送比所需更多的节点。尽管要显示的节点可以是层次结构的节点的有序列表内的节点的连续集合,但是可以预获取要显示的节点的连续集合旁边的附加节点。如果得到的显示窗口中的节点列表被滚动,则预获取的节点可能已经在高速缓存中。当检索附加节点不会对性能产生不利影响时,可以执行预获取。该数量可以通过实验确定并配置到系统中。可替代地,该数量可以基于当前负载,并且可以随着时间动态变化。

7、计算机网络和云网络

在一个或多个实施例中,计算机网络提供一组节点之间的连接性。节点可以是在彼此本地和/或彼此远离。节点由一组链路连接。链路的示例包括同轴线缆、非屏蔽双绞线、铜线缆、光纤和虚拟链路。

节点的子集实现计算机网络。这样的节点的示例包括交换机、路由器、防火墙和网络地址转换器(NAT)。节点的另一子集使用计算机网络。这样的节点(也被称为“主机”)可以执行客户端进程和/或服务器进程。客户端进程做出对计算服务(诸如,特定应用程序的执行和/或特定数量的数据的存储)的请求。服务器进程通过执行请求的服务和/或返回对应的数据来响应。

计算机网络可以是物理网络,包括通过物理链路连接的物理节点。物理节点是任何数字设备。物理节点可以是专用功能的硬件设备,诸如硬件交换机、硬件路由器、硬件防火墙和硬件NAT。附加地或可替代地,物理节点可以是被配置为执行各种虚拟机和/或执行相应功能的应用程序的通用机器。物理链路是连接两个或更多个物理节点的物理介质。链路的示例包括同轴线缆、非屏蔽双绞线、铜缆和光纤。

计算机网络可以是覆盖网络。覆盖网络是在另一个网络(诸如物理网络)之上实现的逻辑网络。覆盖网络中的每个节点对应于底层网络中的相应节点。因此,覆盖网络中的每个节点与覆盖地址(用于寻址覆盖节点)和底层地址(用于寻址实现覆盖节点的底层节点)两者相关联。覆盖节点可以是数字设备和/或软件进程(诸如虚拟机、应用程序实例或线程)。连接覆盖节点的链路被实现为穿过底层网络的隧道。隧道任一端处的覆盖节点将它们之间的底层多跳路径视为单个逻辑链路。通过封装和解封装执行隧道传输。

在实施例中,客户端可以在计算机网络本地和/或远离计算机网络。客户端可以通过其他计算机网络(诸如专用网络或因特网)访问该计算机网络。客户端可以使用诸如超文本传输协议(HTTP)之类的通信协议将请求传送到该计算机网络。请求通过诸如客户端接口(诸如网络浏览器)、程序接口或应用程序编程接口(API)之类的接口来传送。

在实施例中,计算机网络提供客户端和网络资源之间的连接性。网络资源包括被配置为执行服务器进程的硬件和/或软件。网络资源的示例包括处理器、数据存储装置、虚拟机、容器和/或软件应用程序。网络资源在多个客户端之间共享。客户端彼此独立地从计算机网络请求计算服务。网络资源按需动态地被指派给请求和/或客户端。指派给每个请求和/或客户端的网络资源可以基于例如(a)特定客户端请求的计算服务,(b)特定租户请求的聚合计算服务和/或(c)计算机网络请求的聚合计算服务来放大或缩小。这样的计算机网络可以被称为“云网络”。

在实施例中,服务提供商向一个或多个最终用户提供云网络。云网络可以实现各种服务模型,包括但不限于软件即服务(SaaS)、平台即服务(PaaS)和基础设施即服务(IaaS)。在SaaS中,服务提供商为最终用户提供使用在网络资源上执行的服务提供商的应用程序的能力。在PaaS中,服务提供商为最终用户提供将自定义应用程序部署到网络资源上的能力。可以使用服务提供商支持的编程语言、库、服务和工具来创建自定义应用程序。在IaaS中,服务提供商为最终用户提供了供应处理、存储、网络以及网络资源所提供的其他基本计算资源的能力。包括操作系统的任何任意应用程序都可以被部署在网络资源上。

在实施例中,各种部署模型可以由计算机网络实现,包括但不限于私有云、公共云和混合云。在私有云中,供应网络资源以用于由一个或多个实体(本文中使用的术语“实体”是指公司、组织、个人或其他实体)的特定组排他使用。网络资源可以在特定实体组的场所本地和/或远离该特定实体组的场所。在公共云中,为彼此独立的多个实体(也被称为“租户”或“客户”)供应云资源。计算机网络及其网络资源由对应于不同租户的客户端访问。这样的计算机网络可以被称为“多租户计算机网络”。多个租户可以在不同时间和/或同时使用同一特定网络资源。网络资源可以在租户的场所本地和/或远离租户的场所。在混合云中,计算机网络包括私有云和公共云。私有云和公共云之间的接口允许数据和应用程序的可移植性。可以通过接口交换存储在私有云处的数据和存储在公共云处的数据。在私有云处实现的应用程序和在公共云处实现的应用程序可能彼此依赖。可以通过接口执行来自私有云处的应用程序对公共云处的应用程序的调用(反之亦然)。

在实施例中,多租户计算机网络的租户彼此独立。例如,一个租户的业务或操作可以与另一租户的业务或操作分离。不同的租户可能对计算机网络要求不同的网络需求。网络需求的示例包括处理速度、数据存储量、安全性需求、性能需求、吞吐量需求、延迟需求、弹性需求、服务质量(QoS)需求、租户隔离和/或一致性。同一计算机网络可能需要实现不同租户要求的不同网络需求。

在一个或多个实施例中,在多租户计算机网络中,实现租户隔离以确保不同租户的应用程序和/或数据不彼此共享。可以使用各种租户隔离方法。

在实施例中,每个租户与租户ID相关联。使用租户ID标记多租户计算机网络的每个网络资源。仅当租户和特定网络资源与相同租户ID相关联时,租户才被允许访问特定网络资源。

在实施例中,每个租户与租户ID相关联。使用租户ID标记由计算机网络实现的每个应用程序。附加地或可替代地,使用租户ID标记由计算机网络存储的每个数据结构和/或数据集。仅当租户和特定应用程序、数据结构和/或数据集与同一租户ID相关联时,租户才被允许访问特定应用程序、数据结构和/或数据集。

作为示例,可以使用租户ID标记由多租户计算机网络实现的每个数据库。只有与对应的租户ID相关联的租户才可以访问特定数据库的数据。作为另一个示例,可以使用租户ID标记由多租户计算机网络实现的数据库中的每个条目。只有与对应的租户ID相关联的租户才可以访问特定条目的数据。但是,数据库可以由多个租户共享。

在实施例中,订阅列表指示哪些租户有权访问哪些应用程序。对于每个应用程序,存储有权访问该应用程序的租户的租户ID列表。仅当租户的租户ID被包括在与特定应用程序对应的订阅列表中时,租户才被允许访问特定应用程序。

在实施例中,对应于不同租户的网络资源(诸如数字设备、虚拟机、应用程序实例和线程)被隔离到由多租户计算机网络维护的租户专用的覆盖网络。作为示例,来自租户覆盖网络中的任何源设备的分组可以仅被发送到相同租户覆盖网络内的其他设备。封装隧道用于禁止从租户覆盖网络上的源设备到其他租户覆盖网络中的设备的任何传输。具体地,从源设备接收的分组被封装在外部分组内。外部分组从(与租户覆盖网络中的源设备进行通信的)第一封装隧道端点被发送到(与租户覆盖网络中的目的地设备进行通信的)第二封装隧道端点。第二封装隧道端点对外部分组进行解封装以获得由源设备发送的原始分组。原始分组从第二封装隧道端点被发送到相同特定覆盖网络中的目的地设备。

8、硬件概述

根据实施例,本文描述的技术由一个或多个专用计算设备实现。专用计算设备可以被硬连线以执行这些技术,或者可以包括被永久性编程以执行这些技术的数字电子设备,诸如一个或多个专用集成电路(ASIC)、现场可编程门阵列(FPGA)或网络处理单元(NPU),或者可以包括被编程为根据固件、存储器、其他存储装置或组合中的程序指令来执行这些技术的一个或多个通用硬件处理器。这样的专用计算设备还可以将自定义硬连线逻辑、ASIC、FPGA或NPU与自定义编程结合起来以实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、网络设备或结合了硬连线和/或程序逻辑以实现技术的任何其他设备。

例如,图3是示出了可以在其上实现本发明的实施例的计算机系统300的框图。计算机系统300包括总线302或用于传达信息的其他通信机制,以及与总线302耦合以用于处理信息的硬件处理器304。硬件处理器304可以是例如通用微处理器。

计算机系统300还包括主存储器306,诸如随机存取存储器(RAM)或其他动态存储设备,主存储器306耦合到总线302以用于存储信息和要由处理器304执行的指令。主存储器306还可用于在执行要由处理器304执行的指令期间存储临时变量或其他中间信息。当被存储在处理器304可访问的非暂时性存储介质中时,这样的指令使得计算机系统300成为被自定义以执行指令中指定的操作的专用机器。

计算机系统300还包括耦合到总线302的只读存储器(ROM)308或其他静态存储设备,用于存储用于处理器304的静态信息和指令。诸如磁盘或光盘之类的存储设备310被提供,并被耦合到总线302以存储信息和指令。

计算机系统300可以经由总线302耦合到显示器312(诸如阴极射线管(CRT)),以向计算机用户显示信息。包括字母数字键和其他键的输入设备314被耦合到总线302,用于将信息和命令选择传达给处理器304。另一种类型的用户输入设备是光标控件316,诸如鼠标、轨迹球或光标方向键,用于将方向信息和命令选择传达给处理器304并用于控制显示器312上的光标移动。此输入设备通常具有允许设备指定平面中的位置的、在两个轴(第一轴(例如x)和第二轴(例如y))上的两个自由度。

计算机系统300可以使用与计算机系统结合使计算机系统300成为专用机器或将计算机系统300编程为专用机器的自定义硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术。根据一个实施例,本文的技术由计算机系统300响应于处理器304执行包含在主存储器306中的一个或多个指令的一个或多个序列来执行。这样的指令可以从另一存储介质(诸如存储设备310)被读入主存储器306。执行包含在主存储器306中的指令序列使处理器304执行本文所述的处理步骤。在替代实施例中,硬连线电路可以代替软件指令使用或与软件指令结合使用。

如本文所用,术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非暂时性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备310。易失性介质包括动态存储器,诸如主存储器306。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔的图案的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或盒式磁带,内容可寻址存储器(CAM)和三态内容可寻址存储器(TCAM)。

存储介质与传输介质不同,但可以与传输介质结合使用。传输介质参与存储介质之间的信息传输。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线302的导线。传输介质还可以采用声波或光波的形式,诸如在无线电波和红外数据通信期间生成的声波或光波。

将一个或多个指令的一个或多个序列携带到处理器304用于执行可以涉及各种形式的介质。例如,指令最初可以携带在远程计算机的磁盘或固态驱动器上。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统300本地的调制解调器可以在电话线上接收数据,并使用红外发射器将数据转换为红外信号。红外检测器可以接收红外信号中携带的数据,并且适当的电路可以将数据放置在总线302上。总线302将数据携带到主存储器306,处理器304从主存储器306检索并执行指令。由主存储器306接收的指令可以可选地在由处理器304执行之前或之后存储在存储设备310上。

计算机系统300还包括耦合到总线302的通信接口318。通信接口318向连接到本地网络322的网络链路320提供双向数据通信耦合。例如,通信接口318可以是集成服务数字网络(ISDN)卡、线缆调制解调器、卫星调制解调器或用于提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口318可以是提供到兼容LAN的数据通信连接的局域网(LAN)卡。也可以实现无线链路。在任何这样的实现中,通信接口318发送和接收携带表示各种类型的信息的数字数据流的电、电磁或光信号。

网络链路320通常通过一个或多个网络向其他数据设备提供数据通信。例如,网络链路320可以通过本地网络322提供到主机计算机324或由因特网服务提供商(ISP)326操作的数据设备的连接。ISP 326又通过现在通常被称为“因特网”328的全球分组数据通信网络来提供数据通信服务。本地网络322和因特网328两者都使用携带数字数据流的电、电磁或光信号。携带去往和来自计算机系统300的数字数据的通过各种网络的信号以及在网络链路320上并且通过通信接口318的信号是传输介质的示例形式。

计算机系统300可以通过(一个或多个)网络、网络链路320和通信接口318发送消息并接收数据,包括程序代码。在因特网示例中,服务器330可以通过因特网328、ISP 326、本地网络322和通信接口318发送针对应用程序的请求代码。

接收到的代码可以在它被接收时由处理器304执行,和/或存储在存储设备310或其他非易失性存储装置中,以用于以后执行。

实施例涉及具有一个或多个设备的系统,该一个或多个设备包括硬件处理器并且被配置为执行本文所述和/或以下权利要求中的任一项所述的任何操作。

在实施例中,一种非暂时性计算机可读存储介质包括指令,当由一个或多个硬件处理器执行时,该指令使得本文所述和/或权利要求中任何一项所述的任何操作被执行。

根据一个或多个实施例,可以使用本文描述的特征和功能的任何组合。在前述说明书中,已经参照可能随实现而变化的许多具体细节描述了实施例。因此,说明书和附图应被认为是说明性的而不是限制性的。本发明范围的唯一且排他的指示物以及申请人旨在作为本发明范围的内容是以权利要求发布的具体形式从本申请中发布的权利要求集合的字面和等效范围,包括任何后续补正。

相关技术
  • 无状态应用中以接近恒定的时间浏览和随机访问大型层次结构的能力
  • 用于处理基于浏览器的应用中的安全问题的多域访问代理
技术分类

06120112381676