发明内容
本公开实施例至少提供一种请求处理方法以及装置。
第一方面,本公开实施例提供了一种请求处理方法,包括:
接收客户端的请求信息;
基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集;所述目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;
从所述目标服务器子集中选择服务器节点,并将所述请求信息发送给选择的服务器节点。
一种可选的实施方式中,根据以下步骤确定各个所述服务器子集:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、所述服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将所述服务器集群划分为各个所述服务器子集。
一种可选的实施方式中,所述基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、所述服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将所述服务器集群划分为各个所述服务器子集,包括:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别,以及每个虚拟房间类别下的客户端数量占比;不同虚拟房间类别对应不同的客户端数量范围;
基于每个虚拟房间类别下的客户端数量占比,将所述服务器集群划分为至少两个服务器集合;
针对每个服务器集合,基于该服务器集合对应的虚拟房间类别,以及每个服务器节点对应的负载量阈值,确定该服务器集合下每个服务器子集对应的服务器节点数量;
按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包含的各个服务器子集。
一种可选的实施方式中,所述基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集,包括:
基于所述客户端对应的虚拟房间标识,获取所述客户端对应的虚拟房间内的客户端数量;
根据所述客户端数量所属的客户端数量范围,确定所述请求信息对应的目标服务器集合;
根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集。
一种可选的实施方式中,根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集,包括:
基于所述虚拟房间标识,以及所述目标服务器集合中服务器子集的数量,为所述请求信息选择目标服务器子集。
一种可选的实施方式中,基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集之前,还包括:
确定所述客户端对应的虚拟房间内的客户端数量小于或等于设定阈值。
一种可选的实施方式中,所述方法还包括:
若确定所述客户端对应的虚拟房间内的客户端数量大于所述设定阈值,从所述服务器集群中随机选择服务器节点,或者按照轮询选择的方式从所述服务器集群中选择服务器节点;
将所述请求信息发送给选择的服务器节点。
第二方面,本公开实施例还提供一种请求处理装置,包括:
接收模块,用于接收客户端的请求信息;
确定模块,用于基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集;所述目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;
发送模块,用于从所述目标服务器子集中选择服务器节点,并将所述请求信息发送给选择的服务器节点。
一种可选的实施方式中,所述装置,还包括:
服务器子集确定模块,用于基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、所述服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将所述服务器集群划分为各个所述服务器子集。
一种可选的实施方式中,所述服务器子集确定模块,用于:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别,以及每个虚拟房间类别下的客户端数量占比;不同虚拟房间类别对应不同的客户端数量范围;
基于每个虚拟房间类别下的客户端数量占比,将所述服务器集群划分为至少两个服务器集合;
针对每个服务器集合,基于该服务器集合对应的虚拟房间类别,以及每个服务器节点对应的负载量阈值,确定该服务器集合下每个服务器子集对应的服务器节点数量;
按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包含的各个服务器子集。
一种可选的实施方式中,所述确定模块,在基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集时,用于:
基于所述客户端对应的虚拟房间标识,获取所述客户端对应的虚拟房间内的客户端数量;
根据所述客户端数量所属的客户端数量范围,确定所述请求信息对应的目标服务器集合;
根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集。
一种可选的实施方式中,所述确定模块,在根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集时,用于:
基于所述虚拟房间标识,以及所述目标服务器集合中服务器子集的数量,为所述请求信息选择目标服务器子集。
一种可选实施方式中,所述装置,还包括:
数量确定模块,用于确定所述客户端对应的虚拟房间内的客户端数量小于或等于设定阈值。
一种可选的实施方式中,所述装置,还包括:
服务器节点选择模块,用于若确定所述客户端对应的虚拟房间内的客户端数量大于所述设定阈值,从所述服务器集群中随机选择服务器节点,或者按照轮询选择的方式从所述服务器集群中选择服务器节点;
请求信息发送模块,用于将所述请求信息发送给选择的服务器节点。
第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中请求处理方法的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中请求处理方法的步骤。
本公开实施例提供的请求处理方法,通过基于客户端对应的虚拟房间标识,确定与虚拟房间标识对应的目标服务器子集,目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;从目标服务器子集中选择服务器节点,并将请求信息发送给选择的服务器节点,也即将加入同一虚拟房间的客户端的请求信息发送至一个目标服务器子集中进行处理,由于同一虚拟房间的多个客户端的请求被集中发送给了少数的几个服务器节点,该目标服务器子集中的服务器节点在缓存一次虚拟房间对应的消息数据后,可以基于缓存的消息数据,响应加入虚拟房间的其它多个客户端的请求,从而增加了缓存数据的命中率,在实现服务器节点负载均衡的同时,提高了请求处理的效率。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
服务器集群的负载均衡方法可以为:通过随机的方式为请求信息对应的客户端匹配服务器节点,即随机从服务器集群中选择一服务器节点,将接收到的客户端的请求信息发送给选择的服务器节点,实现服务器集群的负载均衡。或者,服务器集群的负载均衡方法还可以为:通过轮流分配的方式为请求信息对应的客户端匹配服务器节点,比如,若服务器集群中包括三个服务器节点,即服务器节点一、服务器节点二、服务器节点三,则可以在接收到客户端一发送的请求信息后,为客户端一匹配服务器节点一,将客户端一发送的请求信息发送给服务器节点一,再接收到客户端二发送的请求信息后,为客户端二匹配服务器节点二,将客户端二发送的请求信息发送给服务器节点二,依次类推,实现服务器集群的负载均衡。
一般的,直播场景中可以包括多个直播间(即虚拟房间),且不同直播间对应的客户端的数量不同,且直播间对应客户端的数量会随之时间的不同发生变动,即部分直播间对应的客户端的数量较小,部分直播间对应的客户端的数量较多,示例性的,部分直播间对应的客户端的数量可能小于100个,部分直播间对应的客户端的数量可能大于1000个,部分直播间对应的客户端的数量可能在100个至1000个之间等。
因此,将上述负载均衡方法应用于直播场景中时,可以使得直播间内的客户端对应的服务器节点较分散,比如,在第一时刻时,直播间A内的客户端的数量小于服务器集群中的服务器节点的数量时,可以使得加入该直播间A的每个客户端分别对应一个服务器节点,造成加入直播间A的每个客户端对应的服务器节点在接收到请求消息后,均需要从外部存储装置中获取一次消息数据(该消息数据可以为请求消息对应的响应消息),并将该消息数据缓存,由于每个服务器均需要获取并缓存该消息数据,这种情况下,使得该虚拟房间对应的缓存数据的命中率较低,进而降低了请求处理的效率。
为了解决上述问题,本公开提供了一种请求处理方法,可以减缓服务器节点资源的浪费,且提高了请求处理的效率。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
为便于对本公开实施例进行理解,首先对本公开实施例所公开的一种请求处理方法进行详细介绍。
实施例一
参见图1所示,为本公开实施例提供的一种请求处理方法的流程图,该方法可以应用于反向代理服务器中,所述方法包括步骤S101~S103,其中:
S101,接收客户端的请求信息。
这里,客户端可以为任一具有中央处理器的任一设备,比如,客户端可以为手机、电脑、平板、智能穿戴设备等。其中,客户端生成请求消息,并将请求消息发送给反向代理服务器,反向代理服务器接收客户端的请求消息。
S102,基于客户端对应的虚拟房间标识,确定与虚拟房间标识对应的目标服务器子集;目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点。
示例性的,在直播场景中,虚拟房间可以为直播间,虚拟房间标识可以为直播间对应的房间号,虚拟房间标识可以为直播平台基于设置的规则生成的,其中,每个虚拟房间对应一个虚拟房间标识,不同的虚拟房间对应的虚拟房间标识不同。
本公开实施例中,可以将服务器集群中的服务器节点进行划分,得到服务器集群对应的多个服务器子集,每个服务器子集中包括一个或者多个服务器节点。
在具体实施时,可以根据以下步骤确定各个服务器子集:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将服务器集群划分为各个服务器子集。
本公开实施例中,预设历史时间段可以根据实际需要进行确定,比如,可以为3个月、6个月、1年、2年等。在预设历史时间段内生成的每个虚拟房间内的客户端数量,比如,预设历史时间段可以为2018年1月1日至2018年12月31日,统计这一预设历史时间段内生成的每个虚拟房间内的客户端数量。每个服务器节点对应的负载量阈值可以为每个服务器节点能够负载的客户端的最大数量,其中,可以根据每个服务器节点对应的每秒查询率(Queries-per-second,QPS)确定服务器节点的负载量阈值。
示例性的,可以根据在预设历史时间段内生成的每个虚拟房间内的客户端数量、服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,确定服务器集群对应的服务器子集的数量,按照确定的服务器子集的数量,将服务器集群划分为各个服务器子集。比如,若确定的服务器子集的数量为10,则可以将服务器集群划分为10个服务器子集,每个服务器子集中包括的服务器节点的数量可以相同。
在具体实施时,确定各个服务器子集的方式可以参见图2所示。具体的,基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将服务器集群划分为各个服务器子集,可以包括:
S201,基于在预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别,以及每个虚拟房间类别下的客户端数量占比;不同虚拟房间类别对应不同的客户端数量范围;
S202,基于每个虚拟房间类别下的客户端数量占比,将服务器集群划分为至少两个服务器集合;
S203,针对每个服务器集合,基于该服务器集合对应的虚拟房间类别,以及每个服务器节点对应的负载量阈值,确定该服务器集合下每个服务器子集对应的服务器节点数量;
S204,按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包含的各个服务器子集。
对S201进行说明,不同虚拟房间类别对应不同的客户端数量范围,比如,若确定的多个虚拟房间类别可以包括第一虚拟房间类别、第二虚拟房间类别、第三虚拟房间类别,第一虚拟房间类别对应的客户端数量范围可以为0-100(不包括数量0,以及包括数量100),第二虚拟房间类别对应的客户端数量范围可以为100-1000(不包括数量100,以及包括数量1000),第三虚拟房间类别对应的客户端数量范围可以为1000以上(不包括数量1000)。其中,虚拟房间类别的数量以及每个虚拟房间类别对应的客户端数量范围可以根据实际情况进行确定。比如,虚拟房间类别的数量还可以为2个、5个等。比如,上述示例中,第一虚拟房间类别对应的客户端数量范围还可以为0-500(不包括数量0,以及包括数量500),第二虚拟房间类别对应的客户端数量范围还可以为500-1500(不包括数量500,以及包括数量1500),第三虚拟房间类别对应的客户端数量范围还可以为1500以上(不包括数量1500)。
示例性的,可以基于预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别。并可以根据预设历史时间段内生成的每个虚拟房间内的客户端数量,确定预设历史时间段内对应的客户端的总数;再根据每个虚拟房间类别下虚拟房间的数量以及每个虚拟房间类别下每个虚拟房间内客户端的数量,确定该虚拟房间类别下对应的客户端的数量;进而基于预设历史时间段内客户端的总数以及每个虚拟房间类别下对应的客户端的数量,确定每个虚拟房间类别下的客户端数量占比。
对S202进行说明,可以根据每个虚拟房间类别下的客户端数量占比,确定服务器集群对应的集合数量,基于确定的集合数量,将服务器集群划分为至少两个服务器集合。
比如,若多个虚拟房间类别包括第一虚拟房间类别(客户端数量范围为0-100)、第二虚拟房间类别(客户端数量范围为100-1000)、第三虚拟房间类别(客户端数量范围为1000以上),统计得到第一虚拟房间类别下客户端数量占比可以为31.47%,第二虚拟房间类别下客户端数量占比可以为31.57%,第三虚拟房间类别下客户端数量占比可以为36.96%。考虑到第三虚拟房间类别对应的客户端数量的最小值为1001,为了更好的为第三虚拟房间类别下的虚拟房间进行服务,需要为第三虚拟房间类别下的每个虚拟房间设置大量的服务器节点,基于此,对服务器集群划分时,可以不为该第三虚拟房间类别设置服务器集合。故可以基于每个虚拟房间类别下的客户端数量占比,将服务器集群划分为两个服务器集合,即第一虚拟房间类别对应一服务器集合、第二虚拟房间类别对应一服务器集合。
其中,每个服务器集合中包括的服务器节点的数量可以根据对应的虚拟房间类别下的客户端数量占比、以及服务器节点的总数进行确定。比如,若服务器集合包括第一服务器集合、第二服务器集合,第一服务器集合对应的虚拟房间类别下的客户端数量占比为20%,第二服务器集合对应的虚拟房间类别下的客户端数量占比为30%,服务器节点的总数为100,则可以确定第一服务器集合中包括的服务器节点的数量为40,第二服务器集合中包括的服务器节点的数量为60。其中,上述确定服务器集合中包括的服务器节点的数量的过程仅为示例性说明,本公开实施例对此不进行具体限定。比如,还可以根据历史先验知识,确定每个服务器集合中包括的服务器节点的数量。或者,还可以根据服务器集合对应的虚拟房间类别下的客户端数量占比、服务器集合对应的客户端数量范围、每个服务器节点对应的负载量阈值、以及服务器节点的总数,确定每个服务器集合中包括的服务器节点的数量。
对S203进行说明,针对每个服务器集合,可以确定该服务器集合对应的虚拟房间类别,进而可以得到该虚拟房间类别对应的客户端数量范围,再结合每个服务器节点对应的负载量阈值,可以确定每个服务器子集对应的服务器节点数量。
示例性的,还可以基于服务器集合对应的虚拟房间类别、以及历史先验知识,确定每个服务器集合对应的服务器子集中服务器节点数量。
对S204进行说明,按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包括的各个服务器子集,比如,若服务器集合A中包括40个服务器节点,每个服务器子集对应的服务器节点数量为2,则可以将服务器集合A划分为20个服务器子集,每个服务器子集中包括2个服务器节点。
在具体实施时,还可以在确定每个服务器集合包含的各个服务器子集之后,为每个服务器节点设置对应的标识信息。示例性的,若服务器集合A中包括20个服务器子集,每个服务器子集中包括2个服务器节点,即服务器集合A中包括服务器子集01、服务器子集02、…、服务器子集20(01、02、20为服务器子集的编号),每个服务器子集中包括服务器节点1、以及服务器节点2(1、2为服务器节点的编号),则服务器节点的标识信息可以为011、012、021、022、…、201、202等(服务器节点的标识信息包括服务器节点的编号以及服务器节点对应的服务器子集的编号),其中,标识信息为011的服务器节点可以为服务器集合A中的服务器子集01中的服务器节点1,标识信息为012的服务器节点可以为服务器集合A中的服务器子集01中的服务器节点2,标识信息为202的服务器节点可以为服务器集合A中的服务器子集20中的服务器节点2。
一种可选实施方式中,参见图3所示,基于客户端对应的虚拟房间标识,确定与虚拟房间标识对应的目标服务器子集,包括:
S301,基于客户端对应的虚拟房间标识,获取客户端对应的虚拟房间内的客户端数量;
S302,根据客户端数量所属的客户端数量范围,确定请求信息对应的目标服务器集合;
S303,根据虚拟房间标识,从目标服务器集合中选择一个服务器子集作为目标服务器子集。
本公开实施例中,可以基于客户端对应的虚拟房间标识,确定该虚拟房间标识对应的虚拟房间的客户端的数量,再根据客户端数量所属的客户端数量范围,确定请求信息对应的目标服务器集合。比如,若服务器集合包括服务器集合A和服务器集合B,服务器集合A对应的客户端数量范围为0-100,服务器集合B对应的客户端数量范围为100-1000,则在客户端A对应的虚拟房间内的客户端的数量为98时,则客户端A对应服务器集合A;在客户端A对应的虚拟房间内的客户端的数量为500时,则客户端A对应服务器集合B。
在具体实施时,还可以根据虚拟房间标识从目标服务器集合中选择一个服务器子集作为目标服务器子集。比如,可以随机从目标服务器集合中选择一个服务器子集,作为请求信息对应的目标服务器子集;或者,可以按照轮询的方式从目标服务器集合中选择一个服务器子集,作为请求信息对应的目标服务器子集。
例如,在客户端A对应的虚拟房间内的客户端的数量为500时,可以从服务器集合B中随机选择一个服务器子集作为目标服务器子集;或者,也可以按照轮询的方式从服务器集合B中为客户端A生成的请求信息确定目标服务器子集,比如,在上一次接收到客户端B的请求消息后(客户端B对应的虚拟房间内的客户端的数量可以为600),将服务器集合B中的服务器子集01,作为客户端B生成的请求信息的目标服务器子集,则本次接收到客户端A的请求消息后,可以将服务器集合B中服务器子集02,作为客户端A生成的请求信息的目标服务器子集。
示例性的,根据虚拟房间标识,从目标服务器集合中选择一个服务器子集作为目标服务器子集,可以包括:
基于虚拟房间标识,以及目标服务器集合中服务器子集的数量,为请求信息选择目标服务器子集。
本公开实施例中,可以基于虚拟房间标识以及目标服务器集合中服务器子集的数量,为请求信息选择目标服务器子集。比如,可以通过对虚拟房间标识与目标服务器集合中服务器子集的数量进行取模操作,得到请求信息对应的服务器子集的编号,基于服务器子集的编号,确定请求信息对应的目标服务器子集。或者,还可以通过哈希算法对虚拟房间标识进行处理,对哈希算法处理后的虚拟房间标识进行取模操作,得到请求信息对应的服务器子集的编号,基于服务器子集的编号,确定请求信息对应的目标服务器子集。
为了实现服务器节点的负载均衡,本公开实施例中,可以在基于虚拟房间标识,以及目标服务器集合中服务器子集的数量,为虚拟房间选择目标服务器子集时,尽可能的使每个服务器子集对应的虚拟房间的数量的差别较小,避免出现部分服务器子集对应的虚拟房间的数量较大,部分服务器子集对应的虚拟房间的数量较小的情况。
S103,从目标服务器子集中选择服务器节点,并将请求信息发送给选择的服务器节点。
本公开实施例中,可以根据客户端对应的设备标识信息DeviceID,从目标服务器子集中选择一个服务器节点,作为请求信息对应的服务器节点,并将请求信息发送给选择的服务器节点。比如,可以将DeviceID与目标服务器子集中包含的服务器节点的数量进行取模计算,得到目标服务器子集中包括的服务器节点的编号,进而可以基于目标服务器子集的编号以及服务器节点的编号,确定服务器节点的标识信息,并将标识信息对应的服务器节点确定为请求信息对应的服务器节点。或者,可以基于哈希算法将DeviceID进行处理,并将哈希算法处理后的DeviceID与目标服务器子集中包含的服务器节点的数量进行取模计算,得到目标服务器子集中包括的服务器节点的编号,进而可以基于目标服务器子集的编号以及服务器节点的编号,确定服务器节点的标识信息。
或者,还可以随机从目标服务器子集中选择一个服务器节点,并将请求信息发送给选择的服务器节点。或者,还可以按照轮询的方式从目标服务器子集中选择一个服务器节点,并将请求信息发送给选择的服务器节点。
为了实现服务器节点的负载均衡,本公开实施例中,可以在为请求信息对应的客户端从目标服务器子集中选择服务器节点时,可以尽可能的使目标服务器子集中的每个服务器节点对应的客户端的数量的差别较小,避免在目标服务器子集中出现部分服务器节点对应的客户端的数量较大,部分服务器节点对应的客户端的数量较小的情况。
这里,若服务器节点的缓存信息中包括该请求信息对应的响应信息时,则可以直接将响应信息通过反向代理服务器转发给对应的客户端;若服务器节点的缓存信息中未包括该请求信息对应的响应信息时,则服务器节点可以从相连的外部存储装置获取请求信息对应的响应信息,并将响应信息通过反向代理服务器转发给对应的客户端。
一种可选实施方式中,基于客户端对应的虚拟房间标识,确定与虚拟房间标识对应的目标服务器子集之前,还包括:
确定客户端对应的虚拟房间内的客户端数量小于或等于设定阈值。
这里,还可以判断客户端对应的虚拟房间内的客户端数量,若客户端数量小于或等于设定的阈值,则为客户端确定对应的目标服务器子集。
若客户端数量大于设定的阈值时,则该请求处理方法还可以包括:
若确定客户端对应的虚拟房间内的客户端数量大于设定阈值,从服务器集群中随机选择服务器节点,或者按照轮询选择的方式从服务器集群中选择服务器节点;
将请求信息发送给选择的服务器节点。
这里,在客户端对应的虚拟房间内的客户端数量大于设定的阈值时,则可以按照随机的方式或者轮询选择的方式从服务器集群中选择一个服务器节点,并将请求信息发送给选择的服务器节点。
示例性的,可以为服务器集群中的每个服务器节点设置标识号,比如,若服务器集群中包括N个服务器节点,则服务器集群中可以包括服务器节点1、服务器节点2、…、服务器节点N,其中,1、2、…、N为服务器节点的标识号,N为正整数;再可以将客户端对应的DeviceID与N进行取模计算,得到该请求信息对应的服务器节点的标识号,进而基于该标识号,确定了请求信息对应的服务器节点。或者,可以基于哈希算法将客户端对应的DeviceID进行处理,并将哈希算法处理后的DeviceID与N进行取模计算,得到该请求信息对应的服务器节点的标识号,进而基于该标识号,确定了请求信息对应的服务器节点。
上述方法中,通过基于客户端对应的虚拟房间标识,确定与虚拟房间标识对应的目标服务器子集,目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;从目标服务器子集中选择服务器节点,并将请求信息发送给选择的服务器节点,也即将加入同一虚拟房间的客户端的请求信息发送至一个目标服务器子集中进行处理,由于同一虚拟房间的多个客户端的请求被集中发送给了少数的几个服务器节点,该目标服务器子集中的服务器节点在缓存一次虚拟房间对应的消息数据后,可以基于缓存的消息数据,响应加入虚拟房间的其它多个客户端的请求,从而增加了缓存数据的命中率,在实现服务器节点负载均衡的同时,提高了请求处理的效率。
实施例二
参见图4所示,为本公开实施例提供的一种请求处理装置的结构示意图,该装置包括接收模块401、确定模块402、发送模块403、服务器子集确定模块404、数量确定模块405、服务器节点选择模块406、请求信息发送模块407,其中:
接收模块401,用于接收客户端的请求信息;
确定模块402,用于基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集;所述目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;
发送模块403,用于从所述目标服务器子集中选择服务器节点,并将所述请求信息发送给选择的服务器节点。
一种可选的实施方式中,所述装置,还包括:
服务器子集确定模块404,用于基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、所述服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将所述服务器集群划分为各个所述服务器子集。
一种可选的实施方式中,所述服务器子集确定模块404,用于:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别,以及每个虚拟房间类别下的客户端数量占比;不同虚拟房间类别对应不同的客户端数量范围;
基于每个虚拟房间类别下的客户端数量占比,将所述服务器集群划分为至少两个服务器集合;
针对每个服务器集合,基于该服务器集合对应的虚拟房间类别,以及每个服务器节点对应的负载量阈值,确定该服务器集合下每个服务器子集对应的服务器节点数量;
按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包含的各个服务器子集。
一种可选的实施方式中,所述确定模块402,在基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集时,用于:
基于所述客户端对应的虚拟房间标识,获取所述客户端对应的虚拟房间内的客户端数量;
根据所述客户端数量所属的客户端数量范围,确定所述请求信息对应的目标服务器集合;
根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集。
一种可选的实施方式中,所述确定模块402,在根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集时,用于:
基于所述虚拟房间标识,以及所述目标服务器集合中服务器子集的数量,为所述请求信息选择目标服务器子集。
一种可选实施方式中,所述装置,还包括:
数量确定模块405,用于确定所述客户端对应的虚拟房间内的客户端数量小于或等于设定阈值。
一种可选的实施方式中,所述装置,还包括:
服务器节点选择模块406,用于若确定所述客户端对应的虚拟房间内的客户端数量大于所述设定阈值,从所述服务器集群中随机选择一个服务器节点,或者按照轮询选择的方式从所述服务器集群中选择一个服务器节点;
请求信息发送模块407,用于将所述请求信息发送给选择的服务器节点。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与请求处理方法对应的请求处理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述请求处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
实施例三
基于同一技术构思,本申请实施例还提供了一种电子设备。参照图5所示,为本申请实施例提供的电子设备500的结构示意图,包括处理器501、存储器502、和总线503。其中,存储器502用于存储执行指令,包括内存5021和外部存储器5022;这里的内存5021也称内存储器,用于暂时存放处理器501中的运算数据,以及与硬盘等外部存储器5022交换的数据,处理器501通过内存5021与外部存储器5022进行数据交换,当电子设备500运行时,处理器501与存储器502之间通过总线503通信,使得处理器501在执行以下指令:
接收客户端的请求信息;
基于所述客户端对应的虚拟房间标识,确定与所述虚拟房间标识对应的目标服务器子集;所述目标服务器子集为服务器集群对应的多个服务器子集中的一个服务器子集,每个服务器子集中包括服务器节点;
从所述目标服务器子集中选择服务器节点,并将所述请求信息发送给选择的服务器节点。
一种可能的实施方式中,处理器501执行的指令中,还包括
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量、所述服务器集群中包括的服务器节点的数量、以及每个服务器节点对应的负载量阈值,将所述服务器集群划分为各个所述服务器子集。
一种可能的实施方式中,处理器501执行的指令中,还包括:
基于在预设历史时间段内生成的每个虚拟房间内的客户端数量,确定多个虚拟房间类别,以及每个虚拟房间类别下的客户端数量占比;不同虚拟房间类别对应不同的客户端数量范围;
基于每个虚拟房间类别下的客户端数量占比,将所述服务器集群划分为至少两个服务器集合;
针对每个服务器集合,基于该服务器集合对应的虚拟房间类别,以及每个服务器节点对应的负载量阈值,确定该服务器集合下每个服务器子集对应的服务器节点数量;
按照确定的每个服务器子集对应的服务器节点数量,确定该服务器集合包含的各个服务器子集。
一种可能的实施方式中,处理器501执行的指令中,还包括:
基于所述客户端对应的虚拟房间标识,获取所述客户端对应的虚拟房间内的客户端数量;
根据所述客户端数量所属的客户端数量范围,确定所述请求信息对应的目标服务器集合;
根据所述虚拟房间标识,从所述目标服务器集合中选择一个服务器子集作为所述目标服务器子集。
一种可能的实施方式中,处理器501执行的指令中,还包括:
基于所述虚拟房间标识,以及所述目标服务器集合中服务器子集的数量,为所述请求信息选择目标服务器子集。
一种可能的实施方式中,处理器501执行的指令中,还包括:
确定所述客户端对应的虚拟房间内的客户端数量小于或等于设定阈值。
一种可能的实施方式中,处理器501执行的指令中,还包括:
若确定所述客户端对应的虚拟房间内的客户端数量大于所述设定阈值,从所述服务器集群中随机选择服务器节点,或者按照轮询选择的方式从所述服务器集群中选择服务器节点;
将所述请求信息发送给选择的服务器节点。
实施例四
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的请求处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的请求处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的请求处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
本公开实施例还提供一种计算机程序,该计算机程序被处理器执行时实现前述实施例的任意一种方法。该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。