一种集群访问系统、方法及装置与流程

文档序号:14778958发布日期:2018-06-26 09:54阅读:187来源:国知局

本发明涉及计算机技术领域,特别是涉及一种集群访问系统、方法及装置。



背景技术:

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户端与集群相互作用时,集群像是一个独立的服务器,对外提供统一的服务。集群由多个节点构成,节点包括主节点和从节点,对于无中心主节点的集群,集群中的各个主节点的在整个集群中拥有相同的地位,每个主节点都可以负责处理一部分客户端请求。

现有技术中,集群访问系统通常包括:客户端和集群,其中,对于无中心节点的集群,客户端可以与集群中的所有主节点直接通信连接,即客户端可以直接访问集群中的任意一个主节点;例如常见的redis(一种开源的Key-Value(键值)数据库)集群。

通常情况下,客户端可以应用上述方式成功进行集群访问,然而实际应用中,由于实际需求的变化等原因,集群中所包含的主节点可能不能满足实际需求,需要增加主节点以对集群进行扩展。而对集群进行扩展后可能会对客户端访问集群带来影响,一般需要对客户端进行相应的调整以适应集群的扩展,而能够对集群进行访问的客户端通常数量多、分布广,因此客户端的调整影响面广,增加了对集群进行扩展的难度。



技术实现要素:

本发明实施例的目的在于提供一种集群访问系统、方法及装置,以避免集群扩展时对客户端产生的影响。具体技术方案如下:

为达上述目的,第一方面,本发明实施例提供了一种集群访问系统,所述集群访问系统包括:客户端、代理服务器以及集群,所述代理服务器与客户端、集群中的各个主节点通信连接,

所述客户端,用于向所述代理服务器发送用于访问目标集群的目标请求;

所述代理服务器,用于接收所述客户端发送的所述目标请求;从所述目标集群的各个主节点中确定第一主节点;将所述目标请求发送至所述第一主节点;接收所述第一主节点反馈的反馈信息;判断所述反馈信息是否为转向信息;如果是,从所述反馈信息中解析获得节点标识,作为第一标识;将所述目标请求发送给第二主节点;其中,所述第二主节点为所述第一标识对应的主节点;

所述第一主节点,用于接收所述代理服务器发送的所述目标请求,并针对所述目标请求生成反馈信息;将所述反馈信息发送给所述代理服务器;

所述第二主节点,用于接收所述代理服务器发送的所述目标请求,并响应所述目标请求。

优选的,所述目标请求包含有目标键值,

所述代理服务器,具体用于:

计算所述目标键值对应的目标哈希值;查询路由表中是否存在所述目标哈希值;如果是,确定所述路由表中所述目标哈希值对应的主节点为第一主节点;如果否,从所述目标集群的各个主节点中,随机确定一个主节点为第一主节点,其中,所述路由表中存储有哈希值与主节点的标识的对应关系。

优选的,所述代理服务器,还用于:

接收第三主节点反馈的对应于所述目标请求的请求成功信息;生成第二标识与所述目标哈希值的对应关系;将生成的对应关系更新到所述路由表中;其中,所述第三主节点为成功执行所述目标请求对应的请求命令的主节点,所述第二标识为所述第三主节点的标识。

优选的,所述代理服务器,还用于:

在所述接收客户端发送的所述目标请求之后,判断所述目标请求是否安全;

若为是,执行所述从所述目标集群的各个主节点中确定第一主节点的步骤。

优选的,所述代理服务器,具体用于:

确定所述转向信息的类型;若所述转向信息为MOVED信息,直接将所述目标请求发送给第二主节点;若所述转向信息为ASK信息,向第二主节点发送ASKING命令,再将所述目标请求发送给所述第二主节点。

第二方面,本发明实施例提供了一种集群访问方法,应用于代理服务器,所述方法包括:

接收目标客户端发送的用于访问目标集群的目标请求;

从所述目标集群的各个主节点中确定第一主节点;

将所述目标请求发送至所述第一主节点;

接收所述第一主节点反馈的反馈信息;

判断所述反馈信息是否为转向信息;

如果是,从所述反馈信息中解析获得节点标识,作为第一标识;将所述目标请求发送给第二主节点,以使得所述第二主节点响应所述目标请求;其中,所述第二主节点为所述第一标识对应的主节点。

优选的,所述目标请求包含有目标键值,

所述从所述目标集群的各个主节点中确定第一主节点的步骤,包括:

计算所述目标键值对应的目标哈希值,

查询路由表中是否存在所述目标哈希值,其中,所述路由表中存储有哈希值与主节点的标识的对应关系;

如果是,确定所述路由表中所述目标哈希值对应的主节点为第一主节点;

如果否,从所述目标集群的各个主节点中,随机确定一个主节点为第一主节点。

优选的,所述方法还包括:

接收第三主节点反馈的对应于所述目标请求的请求成功信息;其中,所述第三主节点为成功执行所述目标请求对应的请求命令的主节点;

生成第二标识与所述目标哈希值的对应关系,其中,所述第二标识为所述第三主节点的标识;

将生成的对应关系更新到所述路由表中。

优选的,在所述接收目标客户端发送的用于访问目标集群的目标请求的步骤之后,所述方法还包括:

判断所述目标请求是否安全;

若为是,执行所述从所述目标集群的各个主节点中确定第一主节点的步骤。

优选的,所述将所述目标请求发送给第二主节点的步骤,包括:

确定所述转向信息的类型;

若所述转向信息为MOVED信息,直接将所述目标请求发送给第二主节点;

若所述转向信息为ASK信息,向第二主节点发送ASKING命令,再将所述目标请求发送给所述第二主节点。

第三方面,本发明实施例提供了一种集群访问装置,应用于代理服务器,所述装置包括:

第一接收模块,用于接收目标客户端发送的用于访问目标集群的目标请求;

确定模块,用于从所述目标集群的各个主节点中确定第一主节点;

第一发送模块,用于将所述目标请求发送至所述第一主节点;

第二接收模块,用于接收所述第一主节点反馈的反馈信息;

第一判断模块,用于判断所述反馈信息是否为转向信息;

第二发送模块,用于在所述第一判断模块的判断结果为是的情况下,从所述反馈信息中解析获得节点标识,作为第一标识;将所述目标请求发送给第二主节点,以使得所述第二主节点响应所述目标请求;其中,所述第二主节点为所述第一标识对应的主节点。

优选的,所述目标请求包含有目标键值,

所述确定模块,包括:

计算子模块,用于计算所述目标键值对应的目标哈希值,

查询子模块,用于查询路由表中是否存在所述目标哈希值,其中,所述路由表中存储有哈希值与主节点的标识的对应关系;

第一确定子模块,用于在所述路由表中存在所述目标哈希值的情况下,确定所述路由表中所述目标哈希值对应的主节点为第一主节点;

第二确定子模块,用于在所述路由表中不存在所述目标哈希值的情况下,从所述目标集群的各个主节点中,随机确定一个主节点为第一主节点。

优选的,所述装置还包括:

第三接收模块,用于接收第三主节点反馈的对应于所述目标请求的请求成功信息;其中,所述第三主节点为成功执行所述目标请求对应的请求命令的主节点;

生成模块,用于生成第二标识与所述目标哈希值的对应关系,其中,所述第二标识为所述第三主节点的标识;

更新模块,用于将生成的对应关系更新到所述路由表中。

优选的,所述装置还包括:

第二判断模块,用于在所述接收目标客户端发送的用于访问目标集群的目标请求之后,判断所述目标请求是否安全;若为是,触发所述确定模块。

优选的,所述第二发送模块,具体用于:

在所述第一判断模块的判断结果为是的情况下,从所述反馈信息中解析获得节点标识,作为第一标识;确定所述转向信息的类型;若所述转向信息为MOVED信息,直接将所述目标请求发送给第二主节点;若所述转向信息为ASK信息,向第二主节点发送ASKING命令,再将所述目标请求发送给所述第二主节点。

由以上可见,本发明实施例提供的一种集群访问系统、方法及装置,代理服务器首先接收目标客户端发送的用于访问目标集群的目标请求;从目标集群的各个主节点中确定第一主节点;将该目标请求发送至该第一主节点;然后接收该第一主节点反馈的反馈信息;判断该反馈信息是否为转向信息;如果是,从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给该第一标识对应的主节点,以使得该第一标识对应的主节点响应该目标请求。与现有技术相比,本发明实施例提供的方案中,客户端通过代理服务器与集群通信连接,客户端需要访问集群时,只需将请求发送给代理服务器即可,由代理服务器完成与集群的交互,客户端所需要执行的访问操作简单不繁琐,而且集群的扩展对客户端完全没有影响。

附图说明

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

图1为现有技术中的集群访问系统的结构示意图;

图2为本发明实施例提供的一种集群访问系统的结构示意图;

图3为本发明实施例中所述转向信息为MOVED信息时,客户端访问集群的流程示意图;

图4为本发明实施例中所述转向信息为ASK信息时,客户端访问集群的流程示意图;

图5为本发明实施例提供的一种集群访问方法的第一种流程示意图;

图6为本发明实施例提供的一种集群访问方法的第二种流程示意图;

图7为本发明实施例提供的一种集群访问方法的第三种流程示意图;

图8为本发明实施例提供的一种集群访问方法的第四种流程示意图;

图9为本发明实施例提供的一种集群访问装置的第一种结构示意图;

图10为本发明实施例提供的一种集群访问装置的第二种结构示意图;

图11为本发明实施例提供的一种集群访问装置的第三种结构示意图;

图12为本发明实施例提供的一种集群访问装置的第四种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面首先对本发明实施例涉及的技术术语进行简单介绍。

集群:如前所述,集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。集群由多个节点构成,节点包括主节点和从节点。对于无中心主节点的集群,集群中的各个主节点的在整个集群中拥有相同的地位,每个主节点都可以负责处理一部分客户端请求。

以redis集群为例,客户端访问集群的请求命令中一定包含有一个键(key)值,可以通过哈希算法获得该键值对应的哈希值,另外,redis集群的键空间被分割为16384个哈希槽(slot),此处的16384个哈希槽分别对应哈希值0~16383,集群中主节点对应的请求,即表示:请求对应的哈希值为为主节点所对应的哈希值范围内。

应该说明的是,上述无中心主节点的集群为了保证数据的高可用性,在集群中可以配置有主从模式,即:上述一个主节点对应至少一个从节点,主节点向集群的客户端提供数据存取服务,从节点则是从主节点拉取数据备份,当该主节点宕机后,就会从该主节点对应的从节点中选举一个从节点来作为新的主节点,从而保证集群不会挂掉,即保证此情况下整个集群仍然可以正常工作。

应该强调的是,本发明实施例中的集群中,主节点的数量不限,可以是一个,亦可以是两个或两个以上。

下面从与现有技术对比的角度对本发明进行简单介绍。

图1为现有技术中的集群访问系统的结构示意图。

如图1所示,客户端直接与集群中的各个主节点通信连接,即客户端可以直接访问集群中的任意一个主节点,该集群包括主节点1、主节点2、…、主节点N。客户端向集群发送请求时,首先会确定该请求对应的主节点,然后再向该主节点发送该请求。

例如,对于redis集群,每个客户端中可以配置有一个路由表,路由表中记录有每个哈希值与主节点的标识的对应关系,现集群包括主节点a、b和c,客户端的路由表中记录:哈希值0~5000对应主节点a的标识,哈希值5001~10000对应主节点b的标识,哈希值10001~16383对应的主节点c的标识,应该说明,路由表中记录的哈希值与主节点的标识的对应关系,实际体现的是上述哈希槽与主节点的对应关系。

当客户端需要发送某一请求时,首先会通过哈希算法计算该请求中携带的键(key)值所对应的哈希值,然后从上述路由表中找出该哈希值所对应的主节点,然后将该请求发送给该主节点。

然而,如果在集群中增加了主节点,存在一部分主节点所对应的哈希值发生变化,则此时可以调整客户端的路由表中哈希值与主节点的标识的对应关系。由于能够对集群进行访问的客户端通常数量多、分布广,因此客户端的调整影响面广,增加了对集群进行扩展的难度。

如上例,集群包括主节点a、b和c,哈希值0~5000对应主节点a的标识,哈希值5001~10000对应主节点b的标识,哈希值10001~16383对应的主节点c的标识,现在集群中加入一个新的主节点d,加入主节点d后,哈希值0~14000所分别对应的主节点的标识不变,而哈希值14001~16383对应的主节点的标识变为主节点d的标识。为此,任意一个客户端若要更新本地路由表中的对应关系,需要重启客户端以完成更新路由表的操作。

此处存在一个特例,在现行的redis 3.0版本之前,redis集群中主节点的数量一个,即redis为单数据节点,客户端仅需要通信连接唯一的主节点即可。为了突破单数据节点的容量限制以及性能限制,redis 3.0版本之后的redis对集群进行横向扩容,即增加了集群中主节点的数目,为此,客户端的访问方式可以变为:根据各主节点反馈的路由信息,来选择请求对应的主节点。在实际使用中,即表现为需要更改每个客户端的访问逻辑,即更改客户端的代码。

本发明实施例提供的方案中,在集群访问系统中配置了代理服务器,如图2所示,目标集群包含第一主节点、第二主节点、主节点1、主节点2、…、主节点M,客户端通过代理服务器与目标集群中的各个主节点通信连接,代理服务器转发客户端的请求的路由逻辑包括:

代理服务器首先接收目标客户端发送的用于访问目标集群的目标请求;从目标集群的各个主节点中确定第一主节点;将该目标请求发送至该第一主节点;然后接收该第一主节点反馈的反馈信息;判断该反馈信息是否为转向信息;如果是,从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给该第一标识对应的主节点,以使得该第一标识对应的主节点响应该目标请求。

可以理解,本发明实施例中,客户端直接将目标请求发送给代理服务器,集群中增加主节点时,仅会对代理服务器的请求转发逻辑产生影响,对客户端并无影响。

以上述特例为例,在现行的redis 3.0版本之前,redis为单数据节点,客户端仅需要与代理服务器通信连接,代理服务器再与唯一的主节点通信连接即可。增加集群中主节点的数目前,客户端的访问逻辑是将请求发送给代理服务器,增加集群中主节点的数目后,客户端的访问逻辑依然是将请求发送给代理服务器,由代理服务器向目标集群转发该请求,所以客户端不需要做任何修改就可以实现集群由单数据节点至多数据节点的平滑迁移。

由以上可见,与现有技术相比,本发明实施例提供的方案中,客户端通过代理服务器与集群通信连接,客户端需要访问集群时,只需将请求发送给代理服务器即可,由代理服务器完成与集群的交互,客户端所需要执行的访问操作简单不繁琐,而且集群的扩展对客户端完全没有影响。

下面通过具体实施例来对本发明实施例进行详细介绍。

如图2所示,本发明实施例提供了一种集群访问系统,该集群访问系统包括:客户端、代理服务器以及集群,所述代理服务器与客户端、集群中的各个主节点通信连接。本发明实施例中所述的集群即为上述无中心主节点的集群,如redis集群。

所述客户端,用于向所述代理服务器发送用于访问目标集群的目标请求。

与现有技术不同的是,本发明实施例中,客户端发送的目标请求指向代理服务器,而不是直接发送给目标集群中的主节点。另外,应该说明的是,在实际的应用中,集群对应的客户端的数量是不限的,可以是成千上万的,本发明实施例中,为了清楚起见,以一个客户端访问集群的方式来说明整个集群访问系统。

所述代理服务器,用于接收所述客户端发送的所述目标请求;从所述目标集群的各个主节点中确定第一主节点;将所述目标请求发送至所述第一主节点;接收所述第一主节点反馈的反馈信息;判断所述反馈信息是否为转向信息;如果是,从所述反馈信息中解析获得节点标识,作为第一标识;将所述目标请求发送给第二主节点;其中,所述第二主节点为所述第一标识对应的主节点。

所述第一主节点,用于接收所述代理服务器发送的所述目标请求,并针对所述目标请求生成反馈信息;将所述反馈信息发送给所述代理服务器。

所述第二主节点,用于接收所述代理服务器发送的所述目标请求,并响应所述目标请求。

应该说明的是,代理服务器可以从该目标集群的各个主节点中随机确定一个主节点,作为第一主节点,例如,当前的目标集群中包含有主节点a、b、c、d和e,代理服务器在接收到目标请求后,随机确定主节点a为第一主节点。

可以理解的是,如果第一主节点当前恰好为负责处理该目标请求的主节点,则第一主节点向代理服务器反馈的反馈信息应该为请求成功信息,则整个集群访问过程结束。所以,在实际的应用过程中,应尽可能保证代理服务器确定的第一主节点即为负责处理该目标请求的正确主节点。

但是,代理服务器随机确定第一主节点时,随机确定的主节点为该目标请求对应的正确主节点的概率极低,例如,目标集群包含有20个主节点,则随机确定的主节点为该目标请求对应的主节点的概率仅为5%。

所以,具体的,为了尽可能快地找到该目标请求所对应的主节点,本发明实施例中,还可以在代理服务器中配置路由表,该路由表中记录有哈希值与主节点的标识的对应关系。应该说明的是,此情况下,所述目标请求包含有目标键值,所述代理服务器,可以具体用于:

计算所述目标键值对应的目标哈希值;查询路由表中是否存在所述目标哈希值;如果是,确定所述路由表中所述目标哈希值对应的主节点为第一主节点;如果否,从所述目标集群的各个主节点中,随机确定一个主节点为第一主节点,其中,所述路由表中存储有哈希值与主节点的标识的对应关系。

应该说明,客户端发送的目标请求中都会包含有键(key)值。另外,本领域技术人员公知的是,哈希值的计算公式可以是:

HASH_SLOT=CRC16(key)mod 16384;

式中,HASH_SLOT表示哈希值,CRC16()表示现有的CRC16算法,具体的算法过程本发明实施例不做详细介绍,key表示该目标键值,mod表示取模运算。可以理解,计算所得到的哈希值必然为0~16383中的任意一个整数,哈希值0~16383分别对应哈希槽1~16384。

例如,目标集群包括有主节点a、b、c、d、e和f,路由表中记录:

哈希值0~2730对应主节点a的标识,哈希值2731~5460对应主节点b的标识,哈希值5461~8190对应主节点c的标识,哈希值8191~10920对应主节点d的标识,哈希值10921~13650对应主节点e的标识,哈希值13700~16383对应主节点f的标识。

假设代理服务器从当前接收到的目标请求中,解析出目标键值X,然后通过上述公式计算目标键值X对应的哈希值,即:

CRC16(X)mod 16384=5113mod 16384=5113;

由于该路由表中记录:哈希值5113对应的主节点的标识指向主节点b,所以此时确定主节点b为第一主节点。

假设代理服务器从当前接收到的目标请求中,解析出目标键值Y,然后通过上述公式计算目标键值Y对应的哈希值,即:

CRC16(Y)mod 16384=30066mod 16384=13682;

由于该路由表中未记录哈希值13682所对应的主节点的标识,所以此时代理服务器可以从主节点a、b、c、d、e和f中随机确定一个主节点,作为第一主节点,如随机确定主节点c为第一主节点。

当然,在本发明实施例中,代理服务器还可以通过其它技术手段加速找到该目标请求所对应的正确主节点,并不限于通过在代理服务器中配置的路由表,加速找到该目标请求所对应的正确主节点。

当上述确定的第一主节点并不是负责处理该目标请求的主节点时,该第一主节点会向代理服务器发送转向信息,又称之为转向错误信息,转向信息中会包含有该目标请求对应的哈希值,以及负责处理该哈希值的主节点的标识,例如,主节点所使用的IP(Internet Protocol,网络之间互连的协议)地址和TCP(Transmission Control Protocol,传输控制协议)端口号。

本领域技术人员公知的是,集群中的各个主节点共享各个主节点的关联信息,该关联信息包括:各个主节点所使用的IP地址和TCP端口号,各个主节点所分别负责处理的哈希槽。所以当某一主节点x并非为负责处理该目标请求的主节点时,该主节点x在接收到目标请求后,会首先计算该目标请求中携带的目标键值对应的哈希值,然后根据上述关联信息确定负责处理该哈希值的主节点;最后,该主节点x会向代理服务器返回转向信息,该转向信息包含有负责处理该哈希值的主节点的标识以及计算获得的哈希值。

所以在本发明实施例中,第一主节点发送的转向信息中,该转向信息中包含的标识所对应的主节点即为第二主节点。

例如,第一主节点反馈的转向信息包括:标识127.0.0.1:8001,该标识对应的节点为主节点x,则代理服务器将该主节点x确定为第二主节点,然后代理服务器将目标请求发送给主节点x。

应该强调的是,集群中各个主节点所分别负责处理的哈希槽可能会发生变化,例如,当集群中的主节点增加时,16384个哈希槽中有一部分哈希槽会重新分配,所以上述路由表中的对应关系需要及时更新,故,本发明实施例中,所述代理服务器还可以用于:

接收第三主节点反馈的对应于所述目标请求的请求成功信息;生成第二标识与所述目标哈希值的对应关系;将生成的对应关系更新到所述路由表中;其中,所述第三主节点为成功执行所述目标请求对应的请求命令的主节点,所述第二标识为所述第三主节点的标识。

可以理解的是,该第三主节点可以是上述第一主节点,也可以是上述第二主节点,只要是接收到目标请求后,针对该目标请求反馈请求成功信息的主节点即可以确定为第三主节点。

当代理服务器接收到请求成功信息时,代理服务器就会生成反馈该请求成功信息的主节点的标识,即上述第二标识,与目标哈希值的对应关系。显然的,如果路由表中已经存在生成的对应关系,则不需要替换该对应关系;但是,当路由表中不存在该生成的对应关系时,如果该路由表中记录有该目标哈希值,则替换路由表中目标哈希值对应的标识为该第二标识,如果该路由表中未记录有该目标哈希值,则在路由表中增加一个目标哈希值与该第二标识的对应关系。

在此情况下,代理服务器中的路由表的更新可以看作是一个自学习的过程,代理服务器根据实际应用过程中的成功访问信息来自动更新路由表。

例如,第三主节点的标识为127.0.0.1:8002,目标哈希值为1500,则生成哈希值1500与标识127.0.0.1:8002的对应关系。如果路由表中记录有哈希值1500与标识127.0.0.1:8002的对应关系,则代理服务器对路由表不做任何操作;但是如果该路由表中记录该哈希值1500对应的标识不是标识127.0.0.1:8002,则替换该路由表中该哈希值1500对应的标识为标识127.0.0.1:8002;如果该路由表中为记录有关于哈希值1500的对应关系,则在该路由表中增加:哈希值1500与标识127.0.0.1:8002的对应关系。

应该注意的是,在现有技术中,由于客户端与集群中的节点是直接通信连接的,所以客户端可以直接向集群中的主节点发送非法命令请求,从而攻击集群,对集群造成伤害。例如,普通用户通过客户端直接发送操纵配置集群的指令以及其它的一些特权指令。

在本发明实施例中,为了能够排除上述非法命令请求,在上述任一实施例的基础上,所述代理服务器,还可以用于:

在所述接收客户端发送的所述目标请求之后,判断所述目标请求是否安全;若为是,执行所述从所述目标集群的各个主节点中确定第一主节点的步骤。

在本发明实施例中,判断目标请求是否安全的具体方法可以是多样的,例如,可以通过设置防火墙,判断该目标请求是否安全;更简单的,可以由代理服务器判断接收到的目标请求是否是具有所允许的请求格式,以redis集群为例,客户端发送的向redis集群中存储数据的请求,此类请求所对应的格式可以为“set…”,如果当前接收到的请求的格式为“assaset…”,则可以判定该目标请求不安全。

可以理解,代理服务器配置了一个安全检测机制,即在接收到客户端发送的目标请求后,只有确定了该目标请求安全后,才会将该目标请求发往集群,保证了集群的安全性,而且,仅需要在代理服务器中配置该安全检测机制,安全检测机制的占用的资源少。

应该说明是的,转向信息可以包括MOVED信息和ASK信息,不同种类的转向信息,对于代理服务器的访问逻辑是不同的,在上述任一实施例的基础上,所述代理服务器,可以具体用于:

确定所述转向信息的类型;若所述转向信息为MOVED信息,直接将所述目标请求发送给第二主节点;若所述转向信息为ASK信息,向第二主节点发送ASKING命令,再将所述目标请求发送给所述第二主节点。

应该说明的是,确定转向信息的类型所采用的方法属于现有技术,所以代理服务器可以通过现有技术确定转向信息的类型;另外,MOVED信息与ASK信息为现有技术中的概念,二者的不同之处可参照现有技术,本发明实施例在此不再详细介绍。本领域技术人员公知的是,在向主节点发送ASK信息前,应该先向该主节点发送ASKING命令。

图3为本发明实施例中所述转向信息为MOVED信息时,客户端访问集群的流程示意图。

图3中,“set a2 1”为客户端301发送的请求,“-moved 127.0.0.1:7002”表示一MOVED信息,该MOVED信息携带有该请求所对应的主节点的标识,即图中“127.0.0.1:7002”。图中主节点右侧的文字“127.0.0.1:7000”、“127.0.0.1:7001”、“127.0.0.1:7002”、“127.0.0.1:7003”、“127.0.0.1:7004”和“127.0.0.1:7005”分别表示对应的各个主节点303的标识

如图3所示,客户端301首先将请求“set a2 1”发送给代理服务器302,然后,代理服务器将标识为“127.0.0.1:7001”的主节点确定为第一主节点,并将请求“set a2 1”发送给该第一主节点。然后该第一主节点计算出键值“a2”对应的哈希值,发现该哈希值对应的哈希槽由标识为“127.0.0.1:7002”的主节点处理,然后,该第一主节点向代理服务器发送MOVED信息。

代理服务器接收到该转向信息后,确定转向信息为MOVED信息,解析获得该MOVED信息中携带的主节点的标识,确定标识为“127.0.0.1:7002”的主节点为第二主节点,然后将请求“set a2 1”发送给该第二主节点。第二主节点接收到该请求后,执行该请求,按照该请求对应的请求命令将“a2”置为“1”存储起来,并向代理服务器反馈请求成功信息“OK”。最后,代理服务器在接收到请求成功信息“OK”后,将该请求成功信息发送给客户端。

图4为本发明实施例中所述转向信息为ASK信息时,客户端访问集群的流程示意图。

图4中,“set a2 1”为客户端301发送的请求,“-ask 127.0.0.1:7002”表示一ASK信息,该ASK信息携带有该请求所对应的主节点的标识,即图中“127.0.0.1:7002”。另外,图中主节点右侧的文字“127.0.0.1:7000”、“127.0.0.1:7001”、“127.0.0.1:7002”、“127.0.0.1:7003”、“127.0.0.1:7004”和“127.0.0.1:7005”分别表示对应的各个主节点303的标识。

如图4所示,客户端301首先将请求“set a2 1”发送给代理服务器302,然后,代理服务器302将标识为“127.0.0.1:7000”的主节点303确定为第一主节点,并将请求“set a2 1”发送给该第一主节点。然后该第一主节点计算出键值“a2”对应的哈希值,发现该哈希值对应的哈希槽由标识为“127.0.0.1:7002”的主节点处理,然后,该第一主节点向代理服务器发送ASK信息。

代理服务器接收到该转向信息后,确定该转向信息为ASK信息,解析获得该ASK信息中携带的主节点标识,确定标识为“127.0.0.1:7002”的主节点为第二主节点,代理服务器先向该第二主节点发送一个ASKING命令“asking”,然后代理服务器再将请求“set a2 1”发送给该第二主节点。第二主节点接收到该请求后,执行该请求,按照该请求对应的请求命令将“a2”置为“1”存储起来,并向代理服务器反馈请求成功信息“OK”。最后,代理服务器在接收到请求成功信息“OK”后,将该请求成功信息发送给客户端。

由以上可见,本实施例提供的方案中,代理服务器首先接收目标客户端发送的用于访问目标集群的目标请求;从目标集群的各个主节点中确定第一主节点;将该目标请求发送至该第一主节点;然后接收该第一主节点反馈的反馈信息;判断该反馈信息是否为转向信息;如果是,从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给该第一标识对应的主节点,以使得该第一标识对应的主节点响应该目标请求。与现有技术相比,本实施例提供的方案中,客户端通过代理服务器与集群通信连接,客户端需要访问集群时,只需将请求发送给代理服务器即可,由代理服务器完成与集群的交互,客户端所需要执行的访问操作简单不繁琐,而且集群的扩展对客户端完全没有影响。

另外,应该说明的是,集群访问系统中加入了代理服务器后,通过实验发现:代理服务器的加入,并不影响整个集群访问系统的性能。

可以理解,前述实施例中代理服务器确定的第一主节点和第二主节点,仅是为了方便说明具体操作而给定的名称,在实际应用中,根据实际的目标请求,集群中的任何一个主节点都可能被确定为第一主节点,也可能被确定为第二主节点。

类似的,前述实施例中第一标识、第二标识是为了方便说明具体操作而给定的名称,其仅表示两个不同的标识而已。在实际应用中,针对不同的请求,同一个标识,既可能为第一标识,也可能为上述第二标识。

本申请其他实施例中,也存在与前述类似的为了方便说明具体操作而给定名称的限定,其都是为了表述方便,并不是实质限定某个设备或网络仅具有什么功能。这里不再一一罗列。

下面通过一具体实例来对本发明实施例进行简单介绍。

以redis集群为例,客户端通过代理服务器与redis集群中的各个主节点通信连接,且该代理服务器中配置有路由表,路由表中存储有哈希值与主节点的标识的对应关系。

某一客户端向代理服务器发送了一个请求X,该请求X中携带有键值y,代理服务器接收到该请求X后,解析出键值y,然后通过哈希算法计算出该键值y对应的哈希值z。然后代理服务器查询路由表,发现该哈希值z对应的主节点的标识为标识m,则代理服务器将请求X发送给对应标识m的主节点。

对应标识m的主节点反馈请求成功信息,则完成集群访问。当然,代理服务器还会将接收到的请求成功信息发送给客户端。

对应于上述系统实施例,本发明实施例还提供了一种集群访问方法,应用于代理服务器,如图5所示,该方法包括:

S101:接收目标客户端发送的用于访问目标集群的目标请求;

S102:从目标集群的各个主节点中确定第一主节点;

S103:将该目标请求发送至该第一主节点;

S104:接收该第一主节点反馈的反馈信息;

S105:判断该反馈信息是否为转向信息;

在该反馈信息为转向信息的情况下,执行步骤S106:从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给第二主节点,以使得该第二主节点响应该目标请求;其中,该第二主节点为该第一标识对应的主节点。

本发明实施例中,该目标请求包含有目标键值,对应于上述系统实施例,并基于图5所示的方法实施例的基础上,如图6所示,上述从目标集群的各个主节点中确定第一主节点(S102)的步骤,可以包括:

S1021:计算目标键值对应的目标哈希值,

S1022:查询路由表中是否存在该目标哈希值,其中,该路由表中存储有哈希值与主节点的标识的对应关系;

在步骤S1022的查询结果为是的情况下,执行步骤S1023:确定该路由表中目标哈希值对应的主节点为第一主节点;

在步骤S1022的查询结果为否的情况下,执行步骤S1024:从目标集群的各个主节点中,随机确定一个主节点为第一主节点。

对应于上述系统实施例,并基于图6所示的方法实施例的基础上,如图7所示,上述方法还可以包括:

S107:接收第三主节点反馈的对应于该目标请求的请求成功信息;其中,该第三主节点为成功执行该目标请求对应的请求命令的主节点;

S108:生成第二标识与该目标哈希值的对应关系,其中,该第二标识为第三主节点的标识;

S109:将生成的对应关系更新到上述路由表中。

对应于上述系统实施例,在图5~7任一所示的方法实施例的基础上,如图8所示,上述接收目标客户端发送的用于访问目标集群的目标请求(S101)的步骤之后,该方法还可以包括:

S1010:判断该目标请求是否安全;

若为是,执行上述从目标集群的各个主节点中确定第一主节点(S102)的步骤。

对应于上述系统实施例,在图5~7任一所示的方法实施例的基础上,上述将该目标请求发送给第二主节点的步骤,包括:

确定上述转向信息的类型;

若该转向信息为MOVED信息,直接将该目标请求发送给第二主节点;

若该转向信息为ASK信息,向第二主节点发送ASKING命令,再将该目标请求发送给该第二主节点。

由以上可见,本实施例提供的方案中,代理服务器首先接收目标客户端发送的用于访问目标集群的目标请求;从目标集群的各个主节点中确定第一主节点;将该目标请求发送至该第一主节点;然后接收该第一主节点反馈的反馈信息;判断该反馈信息是否为转向信息;如果是,从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给该第一标识对应的主节点,以使得该第一标识对应的主节点响应该目标请求。与现有技术相比,本实施例提供的方案中,客户端通过代理服务器与集群通信连接,客户端需要访问集群时,只需将请求发送给代理服务器即可,由代理服务器完成与集群的交互,客户端所需要执行的访问操作简单不繁琐,而且集群的扩展对客户端完全没有影响。

相应于图5所示方法实施例,本发明实施例提供的一种集群访问装置,应用于代理服务器,如图9所示,所述装置包括:

第一接收模块110,用于接收目标客户端发送的用于访问目标集群的目标请求;

确定模块120,用于从所述目标集群的各个主节点中确定第一主节点;

第一发送模块130,用于将所述目标请求发送至所述第一主节点;

第二接收模块140,用于接收所述第一主节点反馈的反馈信息;

第一判断模块150,用于判断所述反馈信息是否为转向信息;

第二发送模块160,用于在所述第一判断模块150的判断结果为是的情况下,从所述反馈信息中解析获得节点标识,作为第一标识;将所述目标请求发送给第二主节点,以使得所述第二主节点响应所述目标请求;其中,所述第二主节点为所述第一标识对应的主节点。

本发明实施例中,所述目标请求包含有目标键值,相应于图6所示方法实施例,在图9所示的装置实施例的基础上,如图10所示,所述确定模块120,可以包括:

计算子模块1201,用于计算所述目标键值对应的目标哈希值,

查询子模块1202,用于查询路由表中是否存在所述目标哈希值,其中,所述路由表中存储有哈希值与主节点的标识的对应关系;

第一确定子模块1203,用于在所述路由表中存在所述目标哈希值的情况下,确定所述路由表中所述目标哈希值对应的主节点为第一主节点;

第二确定子模块1204,用于在所述路由表中不存在所述目标哈希值的情况下,从所述目标集群的各个主节点中,随机确定一个主节点为第一主节点。

相应于图7所示方法实施例,在图10所示的装置实施例的基础上,如图11所示,所述装置还可以包括:

第三接收模块170,用于接收第三主节点反馈的对应于所述目标请求的请求成功信息;其中,所述第三主节点为成功执行所述目标请求对应的请求命令的主节点;

生成模块180,用于生成第二标识与所述目标哈希值的对应关系,其中,所述第二标识为所述第三主节点的标识;

更新模块190,用于将生成的对应关系更新到所述路由表中。

相应于图8所示方法实施例,在图9~11任一所示的装置实施例的基础上,具体的,如图12所示,所述装置还可以包括:

第二判断模块1100,用于在所述接收目标客户端发送的用于访问目标集群的目标请求之后,判断所述目标请求是否安全;若为是,触发所述确定模块120。

相应于方法实施例,在图9~11任一所示的装置实施例的基础上,具体的,所述第二发送模块160,可以具体用于:

在所述第一判断模块150的判断结果为是的情况下,从所述反馈信息中解析获得节点标识,作为第一标识;确定所述转向信息的类型;若所述转向信息为MOVED信息,直接将所述目标请求发送给第二主节点;若所述转向信息为ASK信息,向第二主节点发送ASKING命令,再将所述目标请求发送给所述第二主节点。

由以上可见,本实施例提供的方案中,代理服务器首先接收目标客户端发送的用于访问目标集群的目标请求;从目标集群的各个主节点中确定第一主节点;将该目标请求发送至该第一主节点;然后接收该第一主节点反馈的反馈信息;判断该反馈信息是否为转向信息;如果是,从该反馈信息中解析获得节点标识,作为第一标识;将该目标请求发送给该第一标识对应的主节点,以使得该第一标识对应的主节点响应该目标请求。与现有技术相比,本实施例提供的方案中,客户端通过代理服务器与集群通信连接,客户端需要访问集群时,只需将请求发送给代理服务器即可,由代理服务器完成与集群的交互,客户端所需要执行的访问操作简单不繁琐,而且集群的扩展对客户端完全没有影响。

对于方法和装置实施例而言,由于其基本相似于集群访问系统对应的系统实施例,所以描述的比较简单,相关之处参见系统实施例的部分说明即可。

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

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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