分布式系统中的元数据路由的制作方法

文档序号:26956387发布日期:2021-10-16 04:08阅读:111来源:国知局
分布式系统中的元数据路由的制作方法

1.本发明涉及数据存储的技术领域。


背景技术:

2.多分区数据库可以通过在多个计算设备(也称为“节点”)之间划分元数据服务来提供可扩展性(scalability)。例如,可以通过在多个节点上复制元数据来提供元数据的高度可用性和容错性。然而,寻求访问元数据的客户端可能难以确定哪个节点负责客户端试图定位的元数据。在一些情况下,这可能会导致发现要访问的正确节点的过多的网络请求,这可能导致网络拥堵、限制系统可扩展性、影响系统重新配置的灵活性等。


技术实现要素:

3.一些实现方式包括能够与多个元数据节点通信的第一计算设备,每个元数据节点基于对元数据数据库进行分区以将元数据数据库分布在多个元数据节点上来维护元数据数据库的一部分。在一些示例中,第一计算设备可以从第二计算设备接收指示元数据数据库的分区的分区映射信息。第一计算设备可以至少基于关键字信息来确定向元数据数据库发送请求。第一计算设备可以基于分区映射信息确定多个元数据节点中的第一元数据节点,该第一元数据节点被指示为维护元数据数据库的与关键字信息相对应的分区。第一计算设备可以基于分区映射信息向第一元数据节点发送执行数据库操作的请求。
附图说明
4.参照附图阐述详细描述。在附图中,附图标记的最左边的一个或多个数字表示该附图标记首次出现的图。在不同图中使用相同的附图标记表示相似或相同的项目或特征。
5.图1示出根据一些实现方式的能够存储数据和元数据的系统的示例架构。
6.图2是示出根据一些实现方式的系统的示例逻辑配置的框图。
7.图3是示出根据一些实现方式的元数据节点分区的示例配置的框图。
8.图4是示出根据一些实现方式的示例数据结构的框图。
9.图5是示出根据一些实现方式的多个元数据节点的示例配置的框图。
10.图6是示出根据一些实现方式的用于分区映射的示例数据结构的框图。
11.图7是示出根据一些实现方式的元数据节点的示例配置的框图。
12.图8是示出根据一些实现方式的系统的示例配置的框图。
13.图9是示出根据一些实现方式的关键字

空间

树(key

space

tree)数据结构的示例配置的框图。
14.图10是示出根据一些实现方式的用于路由元数据请求的示例处理的流程图。
15.图11示出可以用于实现本文描述的系统的至少一些功能的服务计算设备的选择示例组件。
具体实施方式
16.本文的一些实现方式涉及用于分布式计算机系统的技术和布置,其中分区信息不存储在系统中的单个组件或表中或不由其控制。在一些示例中,随着分区上线,可以向客户端应用程序提供诸如关键字空间和连接信息之类的分区信息。此外,客户端应用程序可以具有用于定位要联系的正确节点的多种后退机制,从而防止任何单点故障。另外,让客户端应用程序参与分区信息可以实现数据请求的最佳路由。
17.本文的一些示例包括能够路由对高度可用的可扩展分布式元数据数据库的请求的系统。这里的元数据数据库可以通过在单独的元数据节点上维护元数据的高度一致的副本来提供高度可用性。此外,元数据数据库通过对元数据分区并将元数据分布到不同的元数据节点上来提供可扩展性。每个分区可以有用作分区领导者的单个元数据节点。分区领导者可以负责服务于该特定分区的所有请求。此外,这里的方案优化了客户端应用程序为给定的请求找到分区领导者的能力。
18.如上所述,本文的示例通过在多个元数据节点上的分布式配置中存储元数据的高度一致的副本来使元数据高度可用。在一些情况下,分布式元数据数据库的一致性是使用筏共识(raft consensus)算法来维护的。在筏算法中,一个节点可以被选举为领导者,并可以负责服务于所有的读取和写入操作。其他节点是追随者节点,它们接收所有事务的副本以使它们能够更新自己的元数据数据库信息。如果领导者节点发生故障,其中一个追随者节点可以被选举为领导者,并可以接管服务于读取和写入事务。这里的元数据系统的客户端节点能够发现哪个节点是筏领导者并将请求引导至该节点。如果分区的领导者应改变,则客户端自动被路由到新领导者。
19.在一些示例中,每个客户端可以维护分区信息的近缓存(near cache)。此外,该系统可以包括分布式缓存,该分布式缓存可以向客户端发布对分布式缓存的更新。此外,这里的节点可以向客户端提供指示数据所在位置的提示。另外,为了保持效率,与系统中节点的总数相比,分布式缓存的数量可能是小数量。另一方面,在一些示例中,近缓存可以被包括在系统中的每个客户端上以提高客户端的性能。
20.举个例子,假设系统从用户设备接收检索数据的用户请求。在这种情况下,用户请求可能首先被路由到近缓存。在稳定状态条件期间,客户端通常可以在近缓存中获得关于哪个节点能够服务于用户请求的正确答案。在这种情况下,客户端可以通过能够与正确节点进行直接通信来实现最佳效率。例如,当某个节点负责服务于数据的分区时,该节点可以向分布式缓存通知该节点所管理的数据的新路由信息。分布式缓存然后可以将此信息发布到客户端以存储在相应的近缓存中。
21.在一些情况下,接收用户请求的客户端的近缓存可能具有陈旧的映射。因此,当用户请求被路由到在陈旧的近缓存中指定的节点时,客户端可能会接收到来自该节点的失败响应。失败响应可以触发发现处理,并且还可以包括关于接下来要检查哪个节点以响应用户请求的提示。如果失败持续尝试的阈值次数,那么客户端可能会后退到单独地查询每个节点。由轮询所有节点产生的性能可能非常差,但允许客户端在最坏情况的情景下确定正确节点并满足用户请求。因此,这里的实现方式提供了具有分布式元数据数据库的系统,该系统可动态扩展和收缩,例如通过使分区能够随着数据增长或收缩而动态地增加和移除。该系统可以包括对系统元数据进行缓存的一组分层缓存,并使用反应性缓存更新机制来实
现在实现分布在多个物理和/或逻辑节点上的大型地理分布式数据库时的效率。
22.出于讨论的目的,在与用于使用分布式元数据数据库来管理数据的存储的云存储系统通信的一个或多个服务计算设备的环境中描述了一些示例实现方式。然而,这里的实现方式不限于所提供的特定示例,并且可以扩展到其他类型的计算系统架构、其他类型的存储环境、其他类型的用户配置、其他类型的数据等,根据本文的公开内容,这对于本领域技术人员来说是清楚的。
23.图1示出根据一些实现方式的能够存储数据和元数据的系统100的示例架构。系统100包括多个服务计算设备102,它们能够与至少一个网络存储系统104通信或以其他方式耦合,例如通过一个或多个网络106。此外,服务计算设备102能够通过一个或多个网络106与一个或多个用户计算设备108和一个或多个管理员设备110通信,管理员设备110可以是各种类型的计算设备中的任何一种,如下面另外讨论的那样。
24.在一些示例中,服务计算设备102可以包括可以以任何数量的方式实施的一个或多个服务器。例如,服务计算设备102的程序、其他功能组件以及至少一部分数据存储可以在至少一个服务器上实现,例如以服务器集群、服务器农场(server farm)、数据中心、云托管计算服务等等实现,但是可以附加地或替代地使用其他计算机架构。下面关于图11讨论服务计算设备102的额外细节。
25.服务计算设备102可以被配置为向用户112提供存储和数据管理服务。作为若干非限制性示例,用户112可以包括执行用于商业、企业、组织、政府实体、学术实体等的功能的用户,并且其在一些示例中可以包括非常大量数据的存储。然而,本文的实现方式不限于本文描述的系统100和其他系统和布置的任何特定用途或应用。
26.在一些示例中,一个或多个网络存储系统104可以被称为“云存储器”或“基于云的存储器”,并且在一些情况下,可以实现与在服务计算设备102处可用的本地存储相比每兆字节/千兆字节更低成本的存储方案。此外,在一些示例中,一个或多个网络存储系统104可以包括本领域已知的可商购的云存储器,而在其他示例中,一个或多个网络存储系统104可以包括只能由与服务计算设备102相关联的实体访问的私人或企业存储系统或其组合。
27.一个或多个网络106可以包括任何合适的网络,包括:广域网,例如因特网;局域网(lan),例如内联网;无线网络,例如,蜂窝网络、本地无线网络(例如,wi

fi)和/或短距离无线通信(例如,);有线网络,包括光纤通道、光纤、以太网或任何其他这样的网络、直接有线连接或其任意组合。因此,一个或多个网络106可以包括有线和/或无线通信技术。用于这种通信的组件可以至少部分取决于网络的类型、所选的环境或两者。用于通过这样的网络进行通信的协议是众所周知的,因此这里将不详细讨论。因此,服务计算设备102、一个或多个网络存储系统104、用户设备108以及管理设备110能够通过使用有线或无线连接及其组合的一个或多个网络106进行通信。
28.另外,服务计算设备102能够通过一个或多个网络107彼此通信。在一些情况下,一个或多个网络107可以是lan、专用网络等,而在其他情况下,一个或多个网络107可以包括上面讨论的网络106中的任何一种。
29.每个用户设备108可以是任何合适类型的计算设备,例如台式机、膝上型电脑、平板计算设备、移动设备、智能电话、可穿戴设备、终端和/或能够通过网络发送数据的任何其他类型的计算设备。用户112可以例如通过相应的用户账户、用户登录凭证等与用户设备
108相关联。此外,用户设备108能够通过一个或多个网络106、通过单独的网络或通过任何其他合适类型的通信连接与一个或多个服务计算设备102通信。许多其他变化对于受益于本文的公开内容的本领域技术人员来说将是清楚的。
30.此外,每个用户设备108可以包括用户应用程序114的相应实例,该用户应用程序114可以在用户设备108上执行,例如用于与可在一个或多个服务计算设备102上执行的用户网络应用程序116通信,例如用于通过数据请求118等发送用户数据以用于存储在一个或多个网络存储系统104上和/或从一个或多个网络存储系统104接收存储的数据。在一些情况下,应用程序114可以包括浏览器或可以通过浏览器进行操作,而在其他情况下,应用程序114可以包括具有通过一个或多个网络106实现与用户网络应用程序116通信的通信功能的任何其他类型的应用程序。
31.在系统100中,用户112可以将数据存储到它们各自的用户设备108与之通信的一个或多个服务计算设备102并从该一个或多个服务计算设备102接收数据。因此,服务计算设备102可以为用户112和相应的用户设备108提供本地存储。在稳定状态操作期间,可能存在与服务计算设备102定期通信的用户108。
32.另外,管理员设备110可以是任何合适类型的计算设备,例如台式机、膝上型电脑、平板计算设备、移动设备、智能电话、可穿戴设备、终端和/或能够通过网络发送数据的任何其他类型的计算设备。管理员120可以与管理员设备110相关联,例如通过相应的管理员帐户、管理员登录凭证等。此外,管理员设备110能够通过一个或多个网络106、通过单独的网络或通过任何其他合适类型的通信连接与一个或多个服务计算设备102通信。
33.此外,每个管理员设备110可以包括管理员应用程序122的相应实例,该管理员应用程序122可以在管理员设备110上执行,例如用于与可在一个或多个服务计算设备102上执行的管理网络应用程序124通信,例如用于发送管理指令以管理系统100,以及用于发送管理数据以用于存储到一个或多个网络存储系统104上和/或从一个或多个网络存储系统104接收存储的管理数据,例如通过管理请求126等。在一些情况下,管理员应用程序122可以包括浏览器或可以通过浏览器进行操作,而在其他情况下,管理员应用程序122可以包括具有通过一个或多个网络106实现与管理网络应用程序124通信的通信功能的任何其他类型的应用程序。
34.服务计算设备102可以执行存储程序130,其可以向一个或多个网络存储系统104提供网关,例如用于将要存储的数据发送到一个或多个网络存储系统104以及用于从一个或多个网络存储系统104检索请求的数据。另外,存储程序142可以管理由系统100存储的数据,例如用于管理数据保留期、数据保护级别、数据复制等。
35.服务计算设备102还可以包括元数据数据库(db)132,其可以被划分为多个元数据db部分134(1)

134(n)并且可以分布在多个服务计算设备102上。例如,元数据db 132可以用于管理存储在一个或多个网络存储系统104处的对象数据136。元数据db 132可以包括关于对象数据136的许多元数据,例如关于各个对象的信息、如何访问各个对象、对象的存储保护级别、存储保留期、对象所有者信息、对象大小、对象类型等等。此外,db管理程序138可以管理和维护元数据db 132,例如用于随着新对象的存储、旧对象的删除、对象的迁移等而更新元数据db 132。
36.另外,服务计算设备102可以包括分布式缓存144,其可以跟踪元数据db部分134的
位置,例如用于跟踪元数据db部分被存储在其上的特定服务计算设备、每个部分包括在哪个分区等等。在一些情况下,db管理程序138可以随着元数据db 132被更新、迁移到不同的服务计算设备102等而更新分布式缓存。
37.分布式缓存144中的信息可用于更新近缓存146,近缓存146可在服务计算设备146中的、可执行提供客户端服务的应用程序(例如,用户网络应用程序116和管理网络应用程序124)的某些服务计算设备上进行维护。例如,可以基于对分布式缓存144的更新而定期地更新近缓存。因此,举个例子,当用户网络应用程序116从用户设备108接收到数据请求118时,用户网络应用程序可以访问近缓存146以确定与哪个服务计算设备102进行通信以访问期望的元数据db部分134来执行数据请求118。因此,通过使用近缓存146,用户网络应用程序能够减少用于从元数据db 132获得所需信息以执行数据请求的查询次数。下面讨论分布式缓存144和近缓存146的额外细节。
38.另外,服务计算设备可以包括异步管理程序148,可以执行该异步管理程序以执行对元数据db 132和/或对象数据136的更新。在一些情况下,异步管理程序148可以是存储程序130的模块,而在其他情况下,异步管理程序148可以是单独的程序。异步管理程序148可以维护要在系统100中异步执行的数据存储和管理动作的更新队列或其他数据结构。例如,异步管理程序148不是必须执行某些存储操作并完成操作后向用户进行回报,而是可以将所需的操作持续保存到可以被配置为保证操作将被执行的队列,然后可以无延迟地响应用户,否则对于某些类型的操作可能包括延迟。然后,异步管理程序148可以异步执行作为后台操作等的更新队列中的操作。
39.在一些情况下,服务计算设备102可以在站点150处被布置成一个或多个组、集群、系统等。在一些情况下,多个站点150可以在地理上彼此分散,例如用于提供数据复制、灾难恢复保护等。此外,在一些情况下,多个不同站点150处的服务计算设备102可以被配置用于彼此安全地通信,例如用于提供多个站点150的联合。
40.在一些示例中(未在图1中示出),一些服务计算设备102可以成对地布置,其中第一服务计算设备102可以耦合至第二服务计算设备102,使得它们一起形成用于向多个用户设备108提供存储和数据管理服务的计算节点。例如,第一服务计算设备102可以充当主要计算设备,而第二服务计算设备102可以充当辅助计算设备,例如用于备份、故障转移等。此外,如下面另外讨论的那样,在一些情况下,多个服务计算设备102可以被配置成筏配置以管理分区数据,例如在多个计算设备处提供元数据db的冗余。许多其他配置对于受益于本文的公开内容的本领域技术人员而言将是清楚的。
41.图2是示出根据一些实现方式的系统200的示例逻辑配置的框图。在一些示例中,系统200可以对应于上面讨论的系统100或各种其他可能的计算系统架构中的任何一种,这对于受益于本文的公开内容的本领域技术人员而言将是清楚的。系统200可以实现分布式对象存储并且可以包括使用网络应用程序作为用户和管理员的前端。在一些情况下,系统200可以将对象存储在网络存储器上的可以由用户创建的桶(bucket)中。系统200可以使用分布在本地部署的(on

premises)系统和云系统上的资源来实现数据的复杂管理和存储。在系统200中,可通过对存储在地理区域上的存储数据进行逻辑分区来提供可扩展性。如下面另外讨论的那样,系统200包括用于确定期望元数据的位置的有效处理,例如用于响应用户或系统请求。
42.此外,系统200可以提供分布式对象存储,其采用高度可用的可扩展和分布式元数据db 132来跟踪由系统200例如在一个或多个网络存储系统104处存储的对象或其他数据的元数据。系统200包括分层缓存以实现对元数据db 132的各个元数据节点202的访问以有效地读取和写入存储在元数据db 132中的元数据。在该示例中,元数据db 132包括元数据节点202(1)、202(2)、202(3)、
……
,其中每个元数据节点可以包括维护元数据db部分134的一个或多个服务计算设备102,如上面关于图1所讨论的那样。
43.系统200还包括分别向用户和管理员提供管理和数据访问服务和管理服务的用户网络应用程序116、管理网络应用程序124。例如,用户网络应用程序116可以包括客户端模块204并且管理网络应用程序124可以包括客户端模块206,它们中的每一个都被配置为与系统200中的其他节点交互。例如,客户端模块204、206可以与元数据节点202交互以检索元数据,可以与分布式缓存节点交互以接收缓存信息从而分别更新相关联的近缓存146(1)或146(2),并且可以与存储程序136交互,例如用于基于检索到的元数据来检索数据210。
44.系统200还可以包括异步管理程序148,其还可以包括客户端模块212,当异步管理程序148正在执行各种异步服务,例如处理、维护和响应系统中的数据和元数据时,该客户端模块212能够与元数据节点202、分布式缓存节点208和/或存储程序136进行通信。在一些情况下,客户端212能够有效地基于访问相关联的近缓存146(3)而连接至元数据数据库132并且从元数据数据库132进行读取/向元数据数据库132进行写入。
45.另外,在一些情况下,分布式缓存节点208可以包括登记的监听器214。如下另外讨论的那样,每个近缓存146(1)、146(2)和146(3)都可以具有向分布式缓存节点208登记的登记的监听器214。当对分布式缓存144进行更新时,相关联的登记的监听器214可以向相应的近缓存146发送关于更新的信息。因此,登记的监听器使近缓存146能够保持最新,从而减少客户端模块204、206、212对元数据节点的不正确调用的数量。
46.图3是示出根据一些实现方式的元数据节点分区300的示例配置的框图。这里的元数据节点202可以被配置成多个分区300,每个分区300被配置为根据筏共识算法进行操作,以提供由元数据节点202管理的元数据db部分134的冗余备份。例如,筏算法确保每个元数据节点202同意对元数据db部分134的相同改变。筏组(raft group)经由选举的领导者达成共识,例如,筏组中的元数据节点202可以是领导者也可以是追随者。领导者可以负责将对元数据db部分134的改变复制到追随者节点。领导者可以通过发送心跳消息而定期通知追随者其存在。如果领导者在阈值时间内没有发送心跳消息,追随者可以从追随者中选举出一个新的领导者。因此,在该示例以及下面讨论的示例中,每个分区300具有被称为“分区领导者”的单个领导者元数据节点202,其负责服务于该特定分区的所有请求。因此,本文的实现方式所解决的一个问题是最优地确定来自客户端的给定请求被发送到的正确分区领导者。
47.在所示的示例中,元数据节点202(1)是分区300的分区领导者,而元数据节点202(2)和202(3)是追随者。作为领导者,元数据节点202(1)接收创建记录的客户端请求302。作为响应,元数据节点202(1)在由元数据节点202(1)管理的元数据db部分134中创建新记录304。另外,基于筏算法,元数据节点202(2)将新记录304复制到追随者元数据节点202(2)和202(3)。这些元数据节点202(2)和202(3)中的每一个将新记录304添加到它管理的元数据db部分134。
48.此外,在该示例中,值得注意的是“领导者”和“追随者”的区别是关于分区的,而不是关于元数据节点202本身。例如,该示例中的“领导者”元数据节点202(1)是该分区的领导者,但是对于元数据节点202(1)可能也管理的一个或多个其他分区,元数据节点202(1)也可以是追随者或领导者。
49.因此,图3的配置通过在多个元数据节点202上制作元数据的高度一致的副本来提供高度可用的元数据。此处的分布式元数据db使用所建立的筏协议来实现这一点,在筏协议中,一个或多个追随者节点接收所有事物的副本。如果领导者节点出现故障,其中一个追随者节点可以被选举为领导者节点并接管服务于读取和写入的事务。如下面另外讨论的那样,元数据db的客户端通常能够发现哪个节点是筏领导者,并基于参考相关联的近缓存而向该节点做出其请求。如果分区领导者应改变,则更新分布式缓存和近缓存,以使客户端可以被路由到新领导者。
50.图4是示出根据一些实现方式的示例数据结构400的框图。在该示例中,数据结构400包括描述多个分区(例如,第一分区402、第二分区404和第三分区406)的关键字

值对。数据结构400包括关键字408和对应的值410。
51.这里的元数据db中的元数据的分区(有时也称为分片(sharding))允许通过在系统中的不同元数据节点上划分元数据区域的责任来扩展元数据db。在该示例中,元数据db的分区是通过将每个元数据表的关键字

空间(即,所有可能的关键字的集合408)划分为与分区相关联的关键字

空间

范围来实现的。使每个分区都具有分区标识符和管理db分区的节点所负责的一组关键字

空间

范围。
52.在所示的示例中,第一分区402包括关键字a到e;第二分区404包括关键字e到o;第三分区406包括关键字o到z。因此,由每组元数据节点管理的元数据db部分可以对应于使用上述技术确定的相应分区。此外,可以基于每个分区402

406中数据量的变化定期地调整分区,例如用于平衡每个元数据节点管理的数据量。
53.图5是示出据一些实现方式的多个元数据节点202的示例配置500的框图。在该示例中,为元数据节点202(1)

202(4)的子集上的三个分区502、504和506中的每一个形成筏组。该筏组的领导者是分区领导者,并负责服务于向该分区的其他成员的所有请求。每个元数据节点202可以是多个筏组中的成员,并因此是多个分区中的成员。任何元数据节点202都可以成为它所管理的任何分区的领导者。在该示例中,元数据节点202(1)管理作为追随者的第一分区502、作为追随者的第二分区504和作为追随者的第三分区506。元数据节点202(2)管理作为领导者的第一分区502和作为追随者的第二分区504。元数据节点202(3)管理作为领导者的第二分区504和作为追随者的第三分区506。元数据节点202(4)管理作为追随者的第一分区和作为领导者的第三分区506。
54.元数据系统的客户端能够发现哪个节点是给定的元数据db访问请求的分区领导者,例如通过参考近缓存(未在图5中示出)。如果分区领导者应改变,则客户端可以被路由到新领导者,例如基于提供给近缓存的更新信息,或通过其他技术,如下面另外讨论的那样。
55.在某些情况下,分区也可以被分割和合并。分割分区意味着将由单个分区服务的关键字

空间

范围划分为两个或更多个新分区。当分区中包含的元数据的量增大并且希望将元数据分布在更多数量的元数据节点上时,可能会发生分割分区。另一方面,分区的合并
可以包括将多个分区的元数据一起合并到单个分区中。合并到单个分区中的元数据可以具有连续的关键字

空间

范围以简化合并后续的分区访问。当一组分区已经缩小到使得在单个分区中提供对应的元数据更有效的程度时,可以发生合并分区。
56.图6是示出根据一些实现方式的用于分区映射的示例数据结构600的框图。在该示例中,数据结构600包括分区id 602、对应于分区id的关键字

空间

范围604、分区的领导者的领导者id 606以及作为分区成员的节点的节点id 608。如上所述,对于给定的请求,客户端可以确定该请求属于哪个分区。为此,客户端可以将用于请求的关键字映射到一个关键字

空间

范围604。然后,客户端可以确定哪个分区负责包含该关键字的关键字

空间

范围604。如果关键字

空间

范围和/或分区发生改变,则可能需要更新数据结构以使客户端能够找到所需信息,例如在新分区、合并分区等的情况下。
57.为了在系统组件之间传递分区信息,这里的系统可以使用数据结构600中所示的分区映射条目。分区映射条目描述了客户端将请求路由到分区领导者的足够信息。例如,分区映射条目使关键字

空间

范围与作为每个关键字

空间

范围的分区领导者的节点的系统唯一标识符相关。
58.图7是示出根据一些实现方式的元数据节点202的示例配置的框图。这里的元数据节点202是实际的数据库节点。元数据节点202可以服务于元数据请求,将元数据存储在诸如磁盘等的永久存储器上,并且可以参与筏组以提供元数据的一致的高度可用性和持久性。每个元数据节点202可以是多个单独的筏组的一部分,其中每个筏组代表不同的分区。元数据节点202可以被选举为它们是其中的成员的任何筏组的领导者,并且此时被选举出的领导者将服务于对该分区的请求。
59.在所示的示例中,元数据节点202包括元数据应用程序编程接口(api)服务器程序702。另外,该元数据节点202管理作为领导者的第一分区704、作为领导者的第二分区706和作为追随者的第三分区708。元数据节点202可以经由元数据api服务器程序接收对第一分区704中的关键字的客户端请求710。作为响应,元数据api服务器程序可以访问第一分区704以从相关联的元数据数据库部分中获得所请求的信息,并且可以将所请求的信息返回给发送请求710的客户端。
60.每个元数据节点202可以维护分区映射条目与筏组之间的分区映射712。当元数据节点202接收到来自客户端的请求时,可以咨询分区映射712以确定该请求属于哪个筏组。如果元数据节点没有针对特定请求的映射,则可以向发出请求的客户端返回错误。否则,请求被转发到正确的筏组。如果元数据节点202是该筏组的领导者,则由元数据节点服务于该请求。否则,例如在元数据节点是该筏组的追随者的情况下,向发出请求的客户端返回错误,该错误包含筏组的领导者的连接信息。因此,在返回的错误消息中向发出请求的客户端提供关于要将请求重新引导到哪个元数据节点的提示。
61.在分区成员资格事件期间,例如如果元数据节点被选举为领导者或者如果作为领导者,筏组成员资格发生改变(例如,在元数据节点增加或移除的情况下),元数据节点202可以向两个位置提交新分区映射条目。首先,元数据节点202可以更新分区映射条目到筏组的内部映射712,从而使元数据节点202能够服务于对该分区的请求。其次,元数据节点202可以更新分区映射条目的分布式缓存,使得系统的客户端可以看到新的路由信息。为了防止分布式缓存丢失信息的故障,元数据节点202可以定期将其分区映射条目重传到缓存。
62.图8是示出根据一些实现方式的系统800的示例配置的框图。在一些示例中,系统800可以对应于上面讨论的系统100和/或系统200,以及其他系统架构。系统800具有三个主要组件,即客户端802和804、分布式缓存144以及元数据节点202(1)

202(4)。
63.分布式缓存144可以在分布式缓存节点208上进行维护,并且可以用于存储分区映射条目并将分区映射条目分发给客户端802、804(其可以对应于上面讨论的客户端模块204、206、212或可以在本文的系统中操作的其他客户端应用程序中的任何一个)。在一些示例中,分布式缓存144可以是短暂的和/或仅在内存中。分布式缓存144包含关于分区成员资格事件的从元数据节点202提交的分区映射条目的集合。在该示例中示出了第一条目806、第二条目808和第三条目810。
64.如上面关于图2所讨论的那样,客户端802、804以及未在图8中示出的其他客户端可以登记监听器214,当分布式缓存144发生改变时,监听器214用于更新对应的一个或多个近缓存。例如,当分区映射条目被提交到分布式缓存144时,分布式缓存节点将打开与具有登记的监听器214的每个客户端的连接,并向客户端发送该更新。在完全失败的情况下,可以利用最新条目例如在不同节点上重建分布式缓存144,这些最新条目可以在元数据节点202重新发送它们的当前分区映射条目时被接收。
65.客户端802和804可以接收例如来自用户的请求,并且可以向元数据数据库发送对应的请求,可以接收响应,并且可以将该响应返回给发出请求的用户。当客户端启动时,客户端可以首先连接至分布式缓存144并读取所有现有的分区映射条目。客户端可以将此信息存储为近缓存146。另外,客户端可以登记监听器214以接收所有新的分区映射条目。
66.在所示的示例中,元数据节点202(1)

202(4)维护三个分区,即第一分区812、第二分区814和第三分区816。第一分区812的领导者在元数据节点202(1)上,第二分区814的领导者在元数据节点202(3)上,第三分区的领导者在元数据节点202(2)上。因此,如分区领导者和条目之间的实心黑色箭头所示,只有分区组的领导者可以更新分布式缓存144处的对应条目。此外,如虚线箭头所示,对条目806

810的更新可以被传播到客户端802和804以更新近缓存146。
67.因此,只有某些元数据被存储在分布式缓存144中,例如包括分区映射的系统元数据。与系统中节点的总数相比,分布式多站点计算系统中的分布式缓存144的数量可能是小数量。另一方面,近缓存146可能存在于系统中具有客户端功能的每个节点上,但在某些情况下可能具有陈旧数据。用户请求通常可以首先被路由到近缓存146,这可能导致陈旧的搜索数据到分区的映射。如果路由的请求从它被引导到的节点接收到失败响应,这可能会触发发送客户端中的发现处理。例如,发现处理可能涉及咨询一个分布式缓存144,这也可能导致客户端的近缓存的更新。使用分区信息的近缓存和共享的分布式缓存和可以使典型的客户端请求仅需要一次网络跳跃。每当分区成员资格改变时,分布式缓存144可以通过来自元数据节点202的通知而被更新,而近缓存146则可以基于登记的监听器214而被更新。以此方式,在集中的分布式缓存144处的任何更新之后,所有客户端近缓存都可以随所有分区的变化而保持最新。分布式缓存144可以为了高度可用而是分布式的。
68.在近缓存146陈旧并且分布式缓存144不可用的情况下,客户端可以求助于轮询每个单独的元数据节点202以完成请求。与轮询所有节点202相关联的系统性能可能很差,但仍然允许客户端发现请求并缓存结果本身。用于发现的示例算法可以包括针对服务于期望
的元数据关键字的分区来检查客户端近缓存。如果发生缓存缺失(cache miss),客户端可以检查服务于元数据关键字的分布式缓存144分区。如果发生缓存缺失或连接失败,服务计算设备可以尝试对每个元数据节点执行请求,直到找到正确节点。
69.图9是示出根据一些实现方式的关键字

空间

树数据结构900的示例配置的框图。对于接收到的每个分区映射条目,客户端可以更新两个数据结构。第一数据结构(未在图9中示出)可以是分区id到分区映射条目的简单映射。第二数据结构是维护关键字

空间id到关键字

空间树的映射的关键字

空间

树数据结构900。关键字

空间树可以包括从关键字

空间范围的下边界到用于该关键字

空间范围的分区id的基于树的映射。因此,可以在有效的对数时间内搜索关键字

空间树数据结构900以找到任何给定关键字的正确分区id。
70.在图9的示例中,关键字

空间树数据结构900指示四个分区的上边界关键字,例如a、c、h、n和r,即具有关键字a

c的第一分区902、具有关键字c

h的第二分区904、具有关键字h

n的第三分区906和具有关键字n

z的第四分区。注意,如图4所示,在这些示例中,上限字母不包括在内。在这个示例中,假设关键字是“j”,那么,如912所示,客户端可以基于j小于n、j大于c、j大于h、h是j的最低关键字来定位正确的分区,因此,j在第三分区,如914所示。
71.当请求来自用户时,客户端可以使用为该请求类型提供的映射功能来确定用户请求的关键字

空间。一旦确定了关键字

空间,就可以从关联的关键字

空间

树数据结构中找到分区id。然后可以使用分区id来查找该分区的分区映射条目,该分区映射条目标识该分区的筏组中的元数据节点。然后,客户端可以向在分区映射条目中被标识为领导者的节点发送第一请求。在此处系统的典型稳定状态下,客户端拥有的分区映射将是最新的,并且请求将被发送到正确的分区领导者元数据节点。如果客户端联系的元数据节点不再是该分区的分区领导者,则客户端可以确定是否在响应的情况下提供了提示,例如,该提示指示另一个节点现在是筏组的分区领导者,如上面关于图7所述。如果是这样,客户端将向提示中指示的节点发送请求。如果没有提示,客户端可以继续首先检查具有在同一筏组中的指示的所有节点。如果筏组中的任何其他元数据节点提供关于哪个节点是领导者的提示,那么客户端将优先检查被提示的节点。如果客户端排除了所有筏组节点,则客户端可以继续轮询系统中的所有元数据节点。在最坏的情况下,没有元数据节点是分区的领导者,并且客户端将返回错误消息,该错误消息可能会被传播给用户和/或管理员。
72.图10是示出根据一些实现方式的用于路由元数据请求的示例处理的流程图。该处理在逻辑流程图中被示为框的集合,其表示一系列操作,其中一些或全部操作可以以硬件、软件或其组合来实现。在软件的情况下,框可以表示存储在一个或多个计算机可读介质上的计算机可执行指令,当由一个或多个处理器执行时,该计算机可执行指令对处理器进行编程以执行所述的操作。通常,计算机可执行指令包括执行特定功能或实现特定数据类型的例程、程序、对象、组件、数据结构等。描述框的顺序不应被解释为限制。可以以任何顺序和/或并行地组合许多描述的框以实现处理或替代处理,并且并非所有框都需要执行。出于讨论的目的,参照在本文的示例中描述的环境、框架和系统来描述处理,但是该处理可以在各种各样的其他环境、框架和系统中实现。在图10中,处理1000可以至少部分地由一个或多个服务计算设备102执行。
73.在1002处,可以将元数据数据库分为多个分区并且将这些分区分布在多个元数据节点上。
74.在1004处,可以将多个分区的分区映射信息存储在分布式缓存节点处。
75.在1006处,客户端计算设备可以从分布式缓存节点接收分区映射信息并且可以将分区映射信息存储在本地计算机可读介质上。
76.在1008处,客户端计算设备可以响应于分布式缓存节点处的分区映射信息的改变,在分布式缓存节点处登记在客户端计算设备处接收对分区映射信息的更新的请求。
77.在1010处,客户端计算设备可以响应于分布式缓存节点处的分区映射信息的改变而接收对分区映射信息的更新。
78.在1012处,客户端计算设备可以基于接收到的更新来更新存储在客户端计算设备处的分区映射信息。
79.在1014处,客户端计算设备可以确定针对第一元数据对元数据数据库执行数据库操作,其中第一元数据与关键字信息相关联。
80.在1016处,客户端计算设备可以访问分区映射信息以确定多个元数据节点中的第一元数据节点,该第一元数据节点维护元数据数据库的与关键字信息相对应的分区。
81.在1018处,客户端计算设备可以基于分区映射信息向第一元数据节点发送对第一元数据执行数据库操作的请求。
82.本文描述的示例处理仅仅是出于讨论目的而提供的处理的示例。根据本文的公开内容,许多其他变化对于本领域技术人员将是清楚的。此外,尽管本文的公开内容阐述了用于执行处理的合适的框架、架构和环境的多个示例,但是本文的实现方式不限于所示出和讨论的特定示例。此外,本公开提供了在附图中描述和示出的各种示例实现方式。但是,本公开不限于本文描述和示出的实现方式,而是可以扩展到对于本领域技术人员来说已知或将会变得已知的其他实现方式。
83.图11图示了服务计算设备102的选择示例组件,其可以用于实现本文描述的系统的至少一些功能。服务计算设备102可以包括可以以多种方式实施的一个或多个服务器或其他类型的计算设备。例如,在服务器的情况下,程序、其他功能组件和数据可以在单个服务器、服务器集群、服务器农场或数据中心、云托管计算服务等上实现,但是可以附加地或替代地使用其他计算机架构。多个服务计算设备102可以设置在一起或分开设置,并且例如被组织为虚拟服务器、服务器组和/或服务器农场。所描述的功能可以由单个实体或企业的服务器提供,或者可以由多个不同实体或企业的服务器和/或服务提供。
84.在所示的示例中,服务计算设备102包括一个或多个处理器1102、一个或多个计算机可读介质1104以及一个或多个通信接口1106,或者可以与一个或多个处理器1102、一个或多个计算机可读介质1104以及一个或多个通信接口1106相关联。每个处理器1102可以是单个处理单元或多个处理单元,并且可以包括单个或多个计算单元或多个处理核。一个或多个处理器1102可以被实施为一个或多个中央处理单元、微处理器、微计算机、微控制器、数字信号处理器、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。举个例子,一个或多个处理器1102可以包括一个或多个硬件处理器和/或任何适当类型的逻辑电路,这些硬件处理器和/或逻辑电路被特别编程或配置为执行本文所述的算法和处理。一个或多个处理器1102可以被配置为获取并执行存储在计算机可读介质1104中的计算机可读指令,该计算机可读指令可以对一个或多个处理器1102进行编程以执行本文所述的功能。
85.计算机可读介质1104可以包括通过用于诸如计算机可读指令、数据结构、程序模
块或其他数据之类的任何类型的信息存储技术实现的易失性和非易失性内存和/或可移除和不可移除介质。例如,计算机可读介质1104可以包括但不限于ram、rom、eeprom、闪存或其他内存技术、光学存储器、固态存储器、磁带、磁盘存储器、raid存储系统、存储器阵列、网络附加存储器、存储区域网络、云存储器或可用于存储所需信息并可由计算设备访问的任何其他介质。根据一个或多个服务计算设备102的配置,计算机可读介质1104可以是有形的非瞬态介质,从而在提及时,该非瞬态计算机可读介质不包括诸如能量、载波信号、电磁波和/或信号本身的介质。在一些情况下,计算机可读介质1104可以与服务计算设备102位于相同的位置,而在其他示例中,计算机可读介质1104可以部分远离服务计算设备102。例如,在一些情况下,计算机可读介质1104可以包括上面关于图1讨论的网络存储器120中的一部分存储器。
86.计算机可读介质1104可用于存储可由一个或多个处理器1102执行的任意数量的功能组件。在许多实现方式中,这些功能组件包括可由一个或多个处理器1102执行的指令或程序,当被执行时,这些指令或程序特别地对一个或多个处理器1102进行编程以执行本文归于服务计算设备102的动作。存储在计算机可读介质112中的功能组件可以包括用户网络应用程序116、管理网络应用程序124、存储程序130、数据库管理程序138、异步管理程序148和元数据api服务器程序702,其中每一个都可以包括一个或多个计算机程序、应用程序、可执行代码或其一部分。此外,尽管这些程序在该示例中被一起示出,但是在使用期间,这些程序中的一些或全部可以在单独的服务计算设备102上执行。
87.另外,计算机可读介质1104可以存储用于执行本文描述的功能和服务的数据、数据结构和其他信息。例如,计算机可读介质1104可以存储元数据数据库132、分布式缓存144和一个或多个近缓存146。此外,虽然这些数据结构在该示例中被一起示出,但是在使用期间,这些数据结构中的一些或全部可以存储在单独的服务计算设备102上。服务计算设备102还可包括或维护其他功能组件和数据(可以包括程序、驱动器等)以及由功能组件使用或生成的数据。此外,服务计算设备102可以包括许多其他逻辑、程序和物理组件,其中上述那些仅仅是与本文讨论相关的示例。
88.一个或多个通信接口1106可以包括用于例如通过一个或多个网络106实现与各种其他设备通信的一个或多个软件和硬件组件。例如,一个或多个通信接口1106可以通过lan、互联网、电缆网络、蜂窝网络、无线网络(例如,wi

fi)和有线网络(例如,光纤通道、光纤、以太网)、直接连接以及本文其他地方另外列举的诸如等近距离通信中的一个或多个来实现通信。
89.可以在存储在计算机可读介质上并由本文的一个或多个处理器执行的计算机可执行指令(例如,计算机程序)的一般情况下考虑本文所述的各种指令、处理和技术。通常,术语“程序”和“应用程序”可以互换使用,并且可以包括用于执行特定任务或实现特定抽象数据类型的指令、例程、模块、对象、组件、数据结构、可执行代码等。这些程序、应用程序等可以作为本机代码执行,或者可以例如在虚拟机或其他即时编译执行环境中下载并执行。通常,程序和应用程序的功能可以在各种实现方式中根据需要进行组合或分布。这些程序、应用程序和技术的实现方式可以存储在计算机存储介质上,或通过某种形式的通信介质传输。
90.尽管已经以结构特征和/或方法动作专用的语言描述了主题,但是应该理解,所附
权利要求书中定义的主题不必限于所描述的特定特征或动作。相反,特定的特征和动作是作为实现权利要求的示例形式而被公开。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1