基于Zookeeper的请求协调方法及装置、计算机设备及存储介质与流程

文档序号:18040408发布日期:2019-06-28 23:57阅读:159来源:国知局
基于Zookeeper的请求协调方法及装置、计算机设备及存储介质与流程

本发明属于分布式系统集群技术领域,尤其涉及一种基于zookeeper的请求协调方法、基于zookeeper的请求协调装置、计算机设备以及计算机存储介质。



背景技术:

zookeeper是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于它实现配置管理、名字服务、分布式锁、集群管理、队列管理等功能。

相关技术中的zookeeper技术存在如下缺陷:一方面,zookeeper的领导节点(leader)的选举基于消息传递一致性算法(paxos算法),paxos算法在某个服务节点(server)获取到大多数server支持的情况下才能被推荐为leader,因此,该过程是一个重复递归的过程,使得参与选举的server数量不能太多,同时,server的总数必须是奇数2n+1,且存活的server的数目不得少于n+1,这就限制了zookeeper的扩展性和容错能力。或者仅从n台服务器中只选择m台服务器运行zookeeper服务,来保证当整个集群重启或者zookeeper服务所在的服务器半数以上宕机时zookeeper服务的数据不迁移,但是此情况会有n-m的服务器出于待机状态,导致整个服务器集群的处理能力只有全部的m/n,造成资源浪费。又或者每次都选择编号最小的节点作为leader节点,但是此情况没有考虑节点的负载情况和实现负载均衡。

另一方面,客户端的读写访问有写主和写任意两种模式,在写主模式时,将客户端对数据的修改提交给leader,所有提交到追随者(follower)客户端上的写请求需要从follower转交到leader处理,处理效率不高;在写任意模式时,客户端对数据的修改可以提交给任意server节点,存在数据的一致性及死锁风险。

因此,如何在zookeeper集群新增或者删除服务器节点时能够快速完成leader节点选举,并优化现有zookeeper集群服务提供方式成为亟待解决的问题。



技术实现要素:

本发明实施例提供一种基于zookeeper的请求协调方法、一种基于zookeeper的请求协调装置、一种计算机设备以及一种计算机存储介质,能够弥补zookeeper集群leader选举中对server数量的限制要求,提高了zookeeper集群的横向扩展能力和容错性,同时引入代理节点实现对客户端请求的快速路由,避免了现有客户端写主模式引起的效率低问题或写任意模式导致的数据一致性问题。

一方面,本发明实施例提供一种基于zookeeper的请求协调方法,方法包括:

接收客户端的写请求;将zookeeper集群中的所有服务节点映射至节点环上;通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点;通过代理节点查询路由表,把写请求提交至领导节点进行处理。在上述技术方案中,优选地,将zookeeper集群中的所有服务节点映射至节点环上的步骤,具体包括:为zookeeper集群中的所有服务节点创建临时节点,并计算每个临时节点的绝对路径的哈希值;将每个临时节点的哈希值映射至节点环上,使每个临时节点均对应节点环上的节点。

在上述任一技术方案中,优选地,通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点的步骤,具体包括:通过代理节点按照顺时针方向计算节点环上每两个相邻节点的距离;当距离最小的两个相邻节点为第一个临时节点和最后一个临时节点时,将第一个临时节点作为领导节点;当距离最小的两个相邻节点不为第一个临时节点和最后一个临时节点时,将两节点中哈希值大的临时节点作为领导节点。

在上述任一技术方案中,优选地,还包括:由代理节点保存节点环上的节点信息和路由表的信息。

在上述任一技术方案中,优选地,还包括:当zookeeper集群新增服务节点时,通过代理节点为新增服务节点创建新增临时节点;将新增临时节点映射至节点环上,重新计算领导节点,并更新节点环上的节点信息和路由表信息。

在上述任一技术方案中,优选地,还包括:当zookeeper集群删除任一服务节点时,在节点环上删除任一临时节点,重新计算领导节点,并更新节点环上的节点信息和路由表信息。

在上述任一技术方案中,优选地,还包括:接收客户端的读请求以及读请求的哈希值;通过代理节点将读请求的哈希值映射至节点环上的相应位置;获取与读请求的哈希值顺时针方向相邻的临时节点作为读请求的处理节点,并通过处理节点对读请求进行处理。

另一方面,本发明实施例提供了一种基于zookeeper的请求协调装置,装置包括:

接收模块,用于接收客户端的写请求;以及将zookeeper集群中的所有服务节点映射至节点环上;计算模块,用于通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点;处理模块,用于通过代理节点查询路由表,把写请求提交至领导节点进行处理。

再一方面,本发明实施例提供了一种计算机设备,设备包括:

处理器以及存储有计算机程序指令的存储器;处理器执行计算机程序指令时实现如上述任一技术方案中的基于zookeeper的请求协调方法。

再一方面,本发明实施例提供了一种计算机存储介质,

计算机存储介质上存储有计算机程序指令,计算机程序指令被处理器执行时实现上述任一技术方案中的基于zookeeper的请求协调方法。

本发明实施例的基于zookeeper的请求协调方法、基于zookeeper的请求协调装置、计算机设备以及计算机存储介质,一方面,根据映射至节点环上每两个相邻节点的距离得到领导节点,弥补了现有的zookeeper集群leader选举中对server数量的限制要求,提高了zookeeper集群的横向扩展能力和容错性;另一方面,读请求的处理节点为与读请求的哈希值顺时针方向相邻的临时节点,使得leader节点承担的读请求较少,其余节点通过哈希的方式选择处理读请求,从而均衡所有服务器节点的负载;再一方面,引入代理节点保存节点环上的节点信息和路由表的信息,维护一张服务器节点的路由表,当新增或删除一个服务器节点,代理节点更新节点环上的节点信息和路由表信息,实现客户端请求的快速路由,避免了现有客户端写主模式引起的效率低问题或写任意模式导致的数据一致性问题。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了本发明一个实施例提供的基于zookeeper的请求协调方法的流程示意图;

图2示出了本发明的另一个实施例提供的基于zookeeper的请求协调方法的流程示意图;

图3示出了本发明的一个具体实施例提供的server节点对应的ephemeral目录节点树示意图;

图4示出了本发明的一个具体实施例提供的server节点环示意图;

图5示出了本发明的再一个实施例提供的基于zookeeper的请求协调方法的流程示意图;

图6示出了本发明的又一个实施例提供的基于zookeeper的请求协调方法的流程示意图;

图7示出了本发明的一个具体实施例提供的新增服务器节点示意图;

图8示出了本发明的又一个实施例提供的基于zookeeper的请求协调方法的流程示意图;

图9示出了本发明一个具体实施例提供的客户端请求对应的处理节点示意图;

图10示出了本发明一个实施例提供的基于zookeeper的请求协调装置的结构示意图;

图11示出了本发明一个实施例提供的基于zookeeper的请求协调系统的示意图;

图12示出了本发明一个实施例提供的计算机设备结构示意图;

图13示出了本发明另一个实施例提供的计算机设备结构示意图。

具体实施方式

下面将详细描述本发明的各个方面的特征和示例性实施例,为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本发明进行进一步详细描述。应理解,此处所描述的具体实施例仅被配置为解释本发明,并不被配置为限定本发明。对于本领域技术人员来说,本发明可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本发明的示例来提供对本发明更好的理解。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

为了解决现有技术问题,本发明实施例提供了一种基于zookeeper的请求协调方法、一种基于zookeeper的请求协调装置、一种计算机设备以及一种计算机存储介。下面首先对本发明实施例所提供的基于zookeeper的请求协调方法进行介绍。

图1示出了本发明一个实施例提供的基于zookeeper的请求协调方法的流程示意图。如图1所示,该方法包括:

步骤102,接收客户端的写请求;

步骤104,将zookeeper集群中的所有服务节点映射至节点环上;

步骤106,通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点;

步骤108,通过代理节点查询路由表,把写请求提交至领导节点进行处理。

本发明提供的基于zookeeper的请求协调方法,在接收到客户端的写请求时,将zookeeper集群中的所有服务节点映射至节点环上,每个服务节点就对应节点环上的一个点,代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点,进而通过代理节点查询路由表,把写请求提交至领导节点进行处理。本发明通过计算节点环上每两个相邻节点的距离得到领导节点,弥补了现有的zookeeper集群leader选举中对server数量的限制要求,提高了zookeeper集群的横向扩展能力和容错性;引入代理节点查询路由表,实现对客户端请求的快速路由,避免了现有客户端写主模式引起的效率低问题或写任意模式导致的数据一致性问题。

图2示出了本发明的另一个实施例提供的基于zookeeper的请求协调方法的流程示意图。其中,该方法包括:

步骤202,接收客户端的写请求;

步骤204,为zookeeper集群中的所有服务节点创建临时节点,并计算每个临时节点的绝对路径的哈希值;

步骤206,将每个临时节点的哈希值映射至节点环上,使每个临时节点均对应节点环上的节点;

步骤208,通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点;

步骤210,通过代理节点查询路由表,把写请求提交至领导节点进行处理。

在该实施例中,为每个server节点创建一个唯一的临时(ephemeral)节点,然后计算每个ephemeral对应的绝对路径哈希值,将得到的哈希值映射到节点环上,其中,哈希值可以为32位哈希值、64位哈希值等,实现将zookeeper集群中的所有服务节点映射至节点环上。

具体实施时,对一个具有n个server节点的zookeeper集群,为每个server节点创建一个唯一的ephemeral节点,图3示出了本发明的一个具体实施例提供的server节点对应的ephemeral目录节点树示意图,其中从/name1至/namen的server节点均对应唯一的ephemeral节点(节点1至节点n)。然后对每个ephemeral节点对应的绝对路径计算32位哈希值,将得到的哈希值映射到如图4所示的一个具有232个节点的圆环上,其中,每个server节点就对应圆环上的一个点。

图5示出了本发明的再一个实施例提供的基于zookeeper的请求协调方法的流程示意图。其中,该方法包括:

步骤502,接收客户端的写请求;

步骤504,为zookeeper集群中的所有服务节点创建临时节点,并计算每个临时节点的绝对路径的哈希值;

步骤506,将每个临时节点的哈希值映射至节点环上,使每个临时节点均对应节点环上的节点;

步骤508,通过代理节点按照顺时针方向计算节点环上每两个相邻节点的距离;

步骤510,当距离最小的两个相邻节点为第一个临时节点和最后一个临时节点时,将第一个临时节点作为领导节点;

步骤512,当距离最小的两个相邻节点不为第一个临时节点和最后一个临时节点时,将两节点中哈希值大的临时节点作为领导节点;

步骤514,通过代理节点查询路由表,把写请求提交至领导节点进行处理。

在该实施例中,按照顺时针方向计算节点环上每两个相邻节点的距离,选取距离最小的两个相邻节点,当这两个相邻节点为第一个临时节点和最后一个临时节点时,将第一个临时节点作为leader节点,当不为第一个临时节点和最后一个临时节点时,将两节点中哈希值大的临时节点作为leader节点,实现根据两节点的距离进行leader节点的选取,弥补了现有的zookeeper集群leader节点选举中对server数量的限制要求,提高了zookeeper集群的横向扩展能力和容错性。

具体实施时,按顺时针方向计算圆环上相邻两个节点的距离,取距离最小的两个节点中的哈希值较大的一个节点作为leader节点,如图4所示,其中,第m-1个节点和第m个节点之间的距离最小,则取第m个节点为leader节点。但如果第n个节点和第1个节点的距离最小则取第1个节点为leader节点。

在上述任一实施例中,优选地,由代理节点保存节点环上的节点信息和路由表的信息。

在该实施例中,代理节点保存服务器节点环信息和leader节点信息,并维护一张服务器节点的路由表,在客户端发起请求时,代理节点通过查询路由表,把请求提交至相应节点进行处理,从而实现客户端请求的快速路由。

图6示出了本发明的又一个实施例提供的基于zookeeper的请求协调方法的流程示意图。其中,该方法包括:

步骤602,接收客户端的写请求;

步骤604,为zookeeper集群中的所有服务节点创建临时节点,并计算每个临时节点的绝对路径的哈希值;

步骤606,将每个临时节点的哈希值映射至节点环上,使每个临时节点均对应节点环上的节点;

步骤608,通过代理节点按照顺时针方向计算节点环上每两个相邻节点的距离;当距离最小的两个相邻节点为第一个临时节点和最后一个临时节点时,将第一个临时节点作为领导节点;当距离最小的两个相邻节点不为第一个临时节点和最后一个临时节点时,将两节点中哈希值大的临时节点作为领导节点;

步骤610,通过代理节点查询路由表,把写请求提交至领导节点进行处理;

步骤612,当zookeeper集群新增服务节点时,通过代理节点为新增服务节点创建新增临时节点;

步骤614,将新增临时节点映射至节点环上,重新计算领导节点,并更新节点环上的节点信息和路由表信息;

步骤616,当zookeeper集群删除任一服务节点时,在节点环上删除任一临时节点,重新计算领导节点,并更新节点环上的节点信息和路由表信息。

在该实施例中,一方面,对于任意新增或删除的一个服务器节点,都会映射在节点环的一个节点上,实现在服务器集群横向扩展时能够快速完成leader节点选举,避免了现有zookeeper集群的paxos算法集群越大收敛越慢和服务器节点数量必须为奇数的弊端,另一方面,代理节点实时监控zookeeper集群的ephemeral节点状态,当新增或删除一个服务器节点,则更新节点环上的节点信息和路由表信息,进而实现客户端请求的快速路由。

具体实施时,在新增一个服务器节点时代理节点重新计算zookeeper集群的leader节点,同时更新节点环信息和路由表信息。新增一个节点只会影响新增节点到新增节点延节点环逆时针方向的上一个节点之间的读请求,图7示出了本发明的一个具体实施例提供的新增服务器节点示意图,其中,在m和n节点间新增一个节点k,则只会影响节点m和节点k之间的读请求,该部分读请求由之前的节点n转移到现在的节点k处理。写请求由更新后的leader节点承担。

在删除一个服务器节点时,代理节点重新计算zookeeper集群leader节点,同时更新节点环信息和路由表信息。删除一个节点只会影响删除节点到删除节点延节点环逆时针上一个节点之间的读请求,如图7所示,如删除节点m和节点n之间的节点k,则只会影响节点m和节点k之间的读请求,该部分读请求由之前的节点k转移到现在的节点n处理。写请求由更新后的leader节点承担。

图8示出了本发明的又一个实施例提供的基于zookeeper的请求协调方法的流程示意图。其中,该方法包括:

步骤802,接收客户端的写请求;

步骤804,为zookeeper集群中的所有服务节点创建临时节点,并计算每个临时节点的绝对路径的哈希值;

步骤806,将每个临时节点的哈希值映射至节点环上,使每个临时节点均对应节点环上的节点;

步骤808,通过代理节点按照顺时针方向计算节点环上每两个相邻节点的距离;当距离最小的两个相邻节点为第一个临时节点和最后一个临时节点时,将第一个临时节点作为领导节点;当距离最小的两个相邻节点不为第一个临时节点和最后一个临时节点时,将两节点中哈希值大的临时节点作为领导节点;

步骤810,通过代理节点查询路由表,把写请求提交至领导节点进行处理;

步骤812,当zookeeper集群新增服务节点时,通过代理节点为新增服务节点创建新增临时节点;将新增临时节点映射至节点环上,重新计算领导节点,并更新节点环上的节点信息和路由表信息;当zookeeper集群删除任一服务节点时,在节点环上删除任一临时节点,重新计算领导节点,并更新节点环上的节点信息和路由表信息;

步骤814,接收客户端的读请求以及读请求的哈希值;

步骤816,通过代理节点将读请求的哈希值映射至节点环上的相应位置;

步骤818,获取与读请求的哈希值顺时针方向相邻的临时节点作为读请求的处理节点,并通过处理节点对读请求进行处理。

在该实施例中,在接收到客户端的读请求时,读请求的处理节点为与读请求的哈希值顺时针方向相邻的临时节点,由于选择的leader节点与逆时针方向的上一个节点间的距离最小,映射至leader节点与其逆时针方向的上一个节点间的读请求的哈希值较少,因此,其承担的读请求较少,其余节点通过哈希的方式选择处理读请求,从而均衡所有服务器节点的负载;同时,实现所有服务器均运行zookeeper服务,能够充分利用服务器资源,避免服务器的闲置浪费。

具体实施时,对于客户端的读请求,客户端在发出读请求的同时携带有该读请求对应的32位哈希值,代理节点根据一致性哈希算法将该值映射到节点环上,并取顺时针方向第一个server节点来作为该读请求的处理节点,图9示出了本发明一个具体实施例提供的客户端请求对应的处理节点示意图。如图中示例所示,客户端的读请求1通过哈希算法映射到节点1和节点2之间的节点环上,客户端的读请求1的影射点顺时针方向节点为节点2,因此,节点2作为读请求的处理节点。

图10示出了本发明一个实施例提供的基于zookeeper的请求协调装置100的结构示意图。

其中,基于zookeeper的请求协调装置100包括:

接收模块112,用于接收客户端的写请求;以及将zookeeper集群中的所有服务节点映射至节点环上;

计算模块114,用于通过代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点;

处理模块116,用于通过代理节点查询路由表,把写请求提交至领导节点进行处理。

本发明提供的基于zookeeper的请求协调装置,在接收到客户端的写请求时,将zookeeper集群中的所有服务节点映射至节点环上,每个服务节点就对应节点环上的一个点,代理节点计算节点环上每两个相邻节点的距离,根据距离得到领导节点,进而通过代理节点查询路由表,把写请求提交至领导节点进行处理。本发明通过计算节点环上每两个相邻节点的距离得到领导节点,弥补了现有的zookeeper集群leader选举中对server数量的限制要求,提高了zookeeper集群的横向扩展能力和容错性;引入代理节点查询路由表,实现对客户端请求的快速路由,避免了现有客户端写主模式引起的效率低问题或写任意模式导致的数据一致性问题。

图11示出了本发明一个实施例提供的基于zookeeper的请求协调系统的示意图。其中,该系统包括zookeeper集群、代理节点、多个客户端,由代理节点计算节点环上节点之间的距离得到zookeeper集群中的领导节点,得到领导节点后代理节点查询路由表把客户端的写请求提交至领导节点进行处理。或者代理节点根据一致性哈希算法将该值映射到节点环上并取顺时针方向第一个节点来作为客户端发送的读请求的处理节点。

图12示出了本发明实施例提供的计算机设备120结构示意图。

在计算机设备120可以包括处理器122以及存储有计算机程序指令的存储器124。

具体地,上述处理器122可以包括中央处理器(cpu),或者特定集成电路(applicationspecificintegratedcircuit,asic),或者可以被配置成实施本发明实施例的一个或多个集成电路。

存储器124可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器124可包括硬盘驱动器(harddiskdrive,hdd)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(universalserialbus,usb)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器124可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器124可在综合网关容灾设备的内部或外部。在特定实施例中,存储器124是非易失性固态存储器。在特定实施例中,存储器124包括只读存储器(rom)。在合适的情况下,该rom可以是掩模编程的rom、可编程rom(prom)、可擦除prom(eprom)、电可擦除prom(eeprom)、电可改写rom(earom)或闪存或者两个或更多个以上这些的组合。

处理器122通过读取并执行存储器124中存储的计算机程序指令,以实现上述实施例中的任意一种基于zookeeper的请求协调方法。

在一个示例中,计算机设备还可包括通信接口136和总线138。其中,如图13所示,处理器132、存储器134、通信接口136通过总线138连接并完成相互间的通信。

通信接口136,主要用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。

总线138包括硬件、软件或两者,将在线数据流量计费设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(agp)或其他图形总线、增强工业标准架构(eisa)总线、前端总线(fsb)、超传输(ht)互连、工业标准架构(isa)总线、无限带宽互连、低引脚数(lpc)总线、存储器总线、微信道架构(mca)总线、外围组件互连(pci)总线、pci-express(pci-x)总线、串行高级技术附件(sata)总线、视频电子标准协会局部(vlb)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线138可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。

该计算机设备执行本发明实施例中的基于zookeeper的请求协调方法,从而实现结合图1和图11描述的基于zookeeper的请求协调方法和装置。

另外,结合上述实施例中的基于zookeeper的请求协调方法,本发明实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种基于zookeeper的请求协调方法。

需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。

以上所述的结构框图中所示的功能块可以实现为硬件、软件、固件或者它们的组合。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(asic)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读介质”可以包括能够存储或传输信息的任何介质。机器可读介质的例子包括电子电路、半导体存储器设备、rom、闪存、可擦除rom(erom)、软盘、cd-rom、光盘、硬盘、光纤介质、射频(rf)链路,等等。代码段可以经由诸如因特网、内联网等的计算机网络被下载。

还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。

以上所述,仅为本发明的具体实施方式,所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、模块和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。应理解,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1