对象分配方法、装置、服务器及存储介质与流程

文档序号:25721405发布日期:2021-07-02 21:05阅读:109来源:国知局
对象分配方法、装置、服务器及存储介质与流程

本公开涉及任务分发技术领域,尤其涉及一种对象分配方法、装置、服务器及存储介质。



背景技术:

随着分布式架构和集群模式在应对复杂互联网环境的优势凸显,由同一服务器集群下的多个服务器协调执行同一模块是一种常见的架构模式,比如将待处理对象均匀的分配给服务器集群中的各个服务器处理。

相关技术中,目前的对象分配方法,一般是在待处理对象下发时,针对服务器集群中的每个服务器,都计算一个哈希值,再由哈希值最大的服务器来处理这个待处理对象;但是,在待处理对象较多的情况下,若针对每个待处理对象,都需要经过上述计算,过程会比较繁琐,导致对象处理效率较低。



技术实现要素:

本公开提供一种对象分配方法、装置、服务器及存储介质,以至少解决相关技术中对象处理效率较低的问题。本公开的技术方案如下:

根据本公开实施例的第一方面,提供一种对象分配方法,包括:

获取待处理对象的对象标识;

根据所述待处理对象的对象标识和预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素;所述预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,所述预设数组用于表征所述同一个服务器集群中的每一个服务器的分工信息;所述待处理对象在所述预设数组中所匹配的元素,根据所述对象标识在所述预设数组中所匹配的元素下标确定;

获取所述待处理对象在所述预设数组中所匹配的元素关联的服务器标识;

确定所述服务器标识匹配的服务器,作为所述待处理对象的处理服务器。

在一示例性实施例中,所述根据所述待处理对象的对象标识和预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素,包括:

根据所述待处理对象的对象标识,确定所述待处理对象的哈希值;

根据所述待处理对象的哈希值以及预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素下标;

根据所述待处理对象在所述预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,确定所述待处理对象在所述预设数组中所匹配的元素。

在一示例性实施例中,所述根据所述待处理对象的哈希值以及预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素下标,包括:

将所述待处理对象的哈希值与所述预设数组中的元素个数进行相除,得到余数,作为所述待处理对象在所述预设数组中所匹配的元素下标。

在一示例性实施例中,在获取待处理对象的对象标识之前,还包括:

获取所述预设数组中包括的各个元素的元素下标,以及所述服务器集群中包括的各个服务器的服务器标识;

分别从各个所述服务器标识中,确定各个所述元素下标关联的服务器标识,对应作为所述预设数组中各个所述元素关联的服务器标识。

在一示例性实施例中,所述方法还包括:

若所述服务器集群中的服务器发生变化,则重新从所述服务器集群中包括的各个服务器对应的服务器标识中,确定各个所述元素下标关联的服务器标识,对应作为所述预设数组中各个所述元素关联的服务器标识。

在一示例性实施例中,所述分别从各个所述服务器标识中,确定各个所述元素下标关联的服务器标识,包括:

获取每个元素下标下各个所述服务器标识的哈希值;

分别从每个元素下标下的各个所述服务器标识中,筛选出所述哈希值最大的服务器标识,作为每个元素下标关联的服务器标识。

在一示例性实施例中,所述获取每个元素下标下各个所述服务器标识的哈希值,包括:

分别将每个元素下标与各个所述服务器标识进行拼接处理,得到每个元素下标下各个所述服务器标识的拼接标识;

分别对每个元素下标下各个所述服务器标识的拼接标识进行哈希计算,得到每个元素下标下各个所述服务器标识的哈希值。

根据本公开实施例的第二方面,提供一种对象分配装置,包括:

对象标识获取单元,被配置为执行获取待处理对象的对象标识;

元素确定单元,被配置为执行根据所述待处理对象的对象标识和预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素;所述预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,所述预设数组用于表征所述同一个服务器集群中的每一个服务器的分工信息;所述待处理对象在所述预设数组中所匹配的元素,根据所述对象标识在所述预设数组中所匹配的元素下标确定;

服务器标识获取单元,被配置为执行获取所述待处理对象在所述预设数组中所匹配的元素关联的服务器标识;

服务器确定单元,被配置为执行确定所述服务器标识匹配的服务器,作为所述待处理对象的处理服务器。

在一示例性实施例中,所述元素确定单元,还被配置为执行根据所述待处理对象的对象标识,确定所述待处理对象的哈希值;根据所述待处理对象的哈希值以及预设数组中的元素个数,确定所述待处理对象在所述预设数组中所匹配的元素下标;根据所述待处理对象在所述预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,确定所述待处理对象在所述预设数组中所匹配的元素。

在一示例性实施例中,所述元素确定单元,还被配置为执行将所述待处理对象的哈希值与所述预设数组中的元素个数进行相除,得到余数,作为所述待处理对象在所述预设数组中所匹配的元素下标。

在一示例性实施例中,所述装置还包括服务器标识确定单元,被配置为执行获取所述预设数组中包括的各个元素的元素下标,以及所述服务器集群中包括的各个服务器的服务器标识;分别从各个所述服务器标识中,确定各个所述元素下标关联的服务器标识,对应作为所述预设数组中各个所述元素关联的服务器标识。

在一示例性实施例中,所述装置还包括服务器标识更新单元,被配置为执行若所述服务器集群中的服务器发生变化,则重新从所述服务器集群中包括的各个服务器对应的服务器标识中,确定各个所述元素下标关联的服务器标识,对应作为所述预设数组中各个所述元素关联的服务器标识。

在一示例性实施例中,所述服务器标识确定单元,还被配置为执行获取每个元素下标下各个所述服务器标识的哈希值;分别从每个元素下标下的各个所述服务器标识中,筛选出所述哈希值最大的服务器标识,作为每个元素下标关联的服务器标识。

在一示例性实施例中,所述服务器标识确定单元,还被配置为执行分别将每个元素下标与各个所述服务器标识进行拼接处理,得到每个元素下标下各个所述服务器标识的拼接标识;分别对每个元素下标下各个所述服务器标识的拼接标识进行哈希计算,得到每个元素下标下各个所述服务器标识的哈希值。

根据本公开实施例的第三方面,提供一种服务器,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如第一方面的任一项实施例中所述的对象分配方法。

根据本公开实施例的第四方面,提供一种存储介质,包括:当所述存储介质中的指令由服务器的处理器执行时,使得所述服务器能够执行第一方面的任一项实施例中所述的对象分配方法。

根据本公开实施例的第五方面,提供一种计算机程序产品,所述程序产品包括计算机程序,所述计算机程序存储在可读存储介质中,设备的至少一个处理器从所述可读存储介质读取并执行所述计算机程序,使得设备执行第一方面的任一项实施例中所述的对象分配方法。

本公开的实施例提供的技术方案至少带来以下有益效果:

通过获取待处理对象的对象标识;然后根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素;预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,预设数组用于表征同一个服务器集群中的每一个服务器的分工信息;待处理对象在预设数组中所匹配的元素,根据对象标识在预设数组中所匹配的元素下标确定;最后获取待处理对象在预设数组中所匹配的元素关联的服务器标识,并确定服务器标识匹配的服务器,作为待处理对象的处理服务器;这样,实现了根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象的处理服务器的目的,无需针对每个待处理对象,都对服务器集群中的每个服务器计算一个哈希值,从而简化了为待处理对象确定服务器的过程,进而提高了对象处理效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。

图1是根据一示例性实施例示出的一种对象分配方法的应用环境图。

图2是根据一示例性实施例示出的一种对象分配方法的流程图。

图3是根据一示例性实施例示出的确定待处理对象在预设数组中所匹配的元素的步骤的流程图。

图4是根据一示例性实施例示出的另一种对象分配方法的流程图。

图5是根据一示例性实施例示出的一种对象分配装置的框图。

图6是根据一示例性实施例示出的一种服务器的内部结构图。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

本公开所提供的对象分配方法,可以应用于如图1所示的应用环境中。参照图1,该应用环境图包括对象分配服务器110,对象分配服务器110可以用独立的服务器或者是多个服务器组成的服务器集群来实现。图1中以对象分配服务器110是独立的服务器为例进行说明,参考图1,服务器110获取待处理对象的对象标识;根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素;预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,预设数组用于表征同一个服务器集群中的每一个服务器的分工信息;待处理对象在预设数组中所匹配的元素,根据对象标识在预设数组中所匹配的元素下标确定;获取待处理对象在预设数组中所匹配的元素关联的服务器标识;确定服务器标识匹配的服务器,作为待处理对象的处理服务器。需要说明的是,本申请主要应用于并发量高,待处理对象数量多的场景中。

图2是根据一示例性实施例示出的一种对象分配方法的流程图,如图2所示,对象分配方法用于对象分配服务器中,包括以下步骤:

在步骤s210中,获取待处理对象的对象标识。

其中,待处理对象是指需要处理的请求;对象标识是指待处理对象的唯一标识信息,比如对象名称、对象编号等。

具体地,在接收到待处理对象之后,对象分配服务器基于预设的对象标识获取指令,对待处理对象进行解析,得到待处理对象的对象标识。

在步骤s220中,根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素;预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识。

其中,预设数组是指用于通过元素关联服务器标识的数组,一般尺寸较大。预设数组中的元素个数是指预设数组中包括的元素的总个数,比如预设数组中包括100个元素,则元素个数为100。预设数组中的每个元素均关联一个服务器标识,预设数组用于表征同一个服务器集群中的每一个服务器的分工信息。

其中,待处理对象在预设数组中所匹配的元素是指待处理对象在预设数组中所对应的元素,说明待处理对象由该元素关联的服务器标识所对应的服务器处理。服务器标识是指服务器的唯一标识信息,比如服务器名称、服务器号等。待处理对象在预设数组中所匹配的元素,根据待处理对象的对象标识在预设数组中所匹配的元素下标确定。

需要说明的是,预设数组的作用是将服务器集群中的服务器对应的服务器标识较为均匀地填入预设数组中的每个元素,即每个元素对应关联一个服务器标识;这样的话,待处理对象对应预设数组中的哪个元素,就由该元素对应关联的服务器标识所属的服务器处理。一般来说,预设数组中包括的元素个数远大于服务器集群中的服务器个数,因此预设数组中会有多个元素存储相同的服务器标识。

具体地,对象分配服务器根据哈希算法(比如murmur3算法、cityhash算法等),基于待处理对象的对象标识,计算待处理对象的哈希值;将待处理对象的哈希值与预设数组中的元素个数进行相除,得到一个余数,作为待处理对象在预设数组中所匹配的元素下标;确定预设数组中与该元素下标匹配的元素,作为待处理对象在预设数组中所匹配的元素。这样,通过确定待处理对象在预设数组中所匹配的元素,有利于后续获取该元素关联的服务器标识,进而确定服务器标识匹配的服务器,作为待处理对象的处理服务器,无需针对服务器集群中的每个服务器都计算一个哈希值,再由哈希值最大的服务器来处理这个待处理对象,从而简化了为待处理对象确定服务器的过程,进而提高了对象分配效率。

在步骤s230中,获取待处理对象在预设数组中所匹配的元素关联的服务器标识。

在步骤s240中,确定服务器标识匹配的服务器,作为待处理对象的处理服务器。

具体地,对象分配服务器读取待处理对象在预设数组中所匹配的元素关联的服务器标识;查询服务器标识与服务器的匹配关系,确定该服务器标识匹配的服务器,作为待处理对象的处理服务器。

进一步地,对象分配服务器将待处理对象发送至处理服务器,通过处理服务器对待处理对象进行处理,得到对应的处理结果。

上述对象分配方法中,通过获取待处理对象的对象标识;然后根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素;预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,预设数组用于表征同一个服务器集群中的每一个服务器的分工信息;待处理对象在预设数组中所匹配的元素,根据对象标识在预设数组中所匹配的元素下标确定;最后获取待处理对象在预设数组中所匹配的元素关联的服务器标识,并确定服务器标识匹配的服务器,作为待处理对象的处理服务器;这样,实现了根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象的处理服务器的目的,无需针对每个待处理对象,都对服务器集群中的每个服务器计算一个哈希值,从而简化了为待处理对象确定服务器的过程,进而提高了对象处理效率。

在一示例性实施例中,如图3所示,在步骤s220中,根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素,具体可以通过以下步骤实现:

在步骤s310中,根据待处理对象的对象标识,确定待处理对象的哈希值。

举例说明,对象分配服务器根据murmur3算法,基于待处理对象的对象标识,计算得到待处理对象的哈希值。

在步骤s320中,根据待处理对象的哈希值以及预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素下标。

其中,元素下标是指元素的唯一标识信息,比如元素序号、元素编号等;举例说明,假如元素对应的元素序号为10,那么该元素的元素下标为10;假如元素对应的元素序号为25,那么该元素的元素下标为25。

在步骤s330中,根据待处理对象在预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,确定待处理对象在预设数组中所匹配的元素。

其中,元素下标与元素的匹配关系,是指元素下标与元素存在一一对应的关系,假如待处理对象在预设数组中所匹配的元素下标为10,那么待处理对象在预设数组中所匹配的元素,是指预设数组中的第10个元素。

具体地,对象分配服务器从本地数据库中获取元素下标与元素的匹配关系,根据待处理对象在预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,得到该元素下标所匹配的元素,作为待处理对象在预设数组中所匹配的元素。

本公开实施例提供的技术方案,通过待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素,有利于后续获取该元素关联的服务器标识,进而确定服务器标识匹配的服务器,作为待处理对象的处理服务器,无需针对服务器集群中的每个服务器都计算一个哈希值,再由哈希值最大的服务器来处理这个待处理对象,从而简化了为待处理对象确定服务器的过程,进而提高了对象分配效率。

在一示例性实施例中,在步骤s320中,根据待处理对象的哈希值以及预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素下标,包括:将待处理对象的哈希值与预设数组中的元素个数进行相除,得到余数,作为待处理对象在预设数组中所匹配的元素下标。

举例说明,假设待处理对象的哈希值为100,预设数组中的元素个数为33,将待处理对象的哈希值100与预设数组中的元素个数33进行相除,得到的余数为1,那么待处理对象在预设数组中所匹配的元素下标为1。

再举例说明,假设待处理对象的哈希值为50,预设数组中的元素个数为30,将待处理对象的哈希值50与预设数组中的元素个数30进行相除,得到的余数为20,那么待处理对象在预设数组中所匹配的元素下标为20。

本公开实施例提供的技术方案,通过将待处理对象的哈希值与预设数组中的元素个数进行相除所得到余数,作为待处理对象在预设数组中所匹配的元素下标,有利于后续根据待处理对象在预设数组中所匹配的元素下标,确定待处理对象在预设数组中所匹配的元素,进而确定待处理对象的处理服务器,从而简化了为待处理对象分配服务器的过程,进而提高了对象分配效率。

在一示例性实施例中,在步骤s210中,在获取待处理对象的对象标识之前,还包括:获取预设数组中包括的各个元素的元素下标,以及服务器集群中包括的各个服务器的服务器标识;分别从各个服务器标识中,确定各个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

具体地,对象分配服务器根据标识获取指令,获取预设数组中包括的各个元素的元素下标,以及服务器集群中包括的各个服务器的服务器标识;分别从各个服务器标识中,确定每个元素下标关联的一个服务器标识,并将每个元素下标关联的一个服务器标识,对应作为该元素下标匹配的元素所关联的服务器标识。

举例说明,假设有5个元素,分别是元素1、元素2、元素3、元素4、元素5,对应元素下标1、元素下标2、元素下标3、元素下标4、元素下标5,服务器集群中包括3个服务器,对应的服务器标识分别是服务器标识a、服务器标识b、服务器标识c;通过计算得知,元素下标1关联服务器标识a、元素下标2关联服务器标识b、元素下标3关联服务器标识c、元素下标4关联服务器标识a、元素下标5关联服务器标识b,那么元素1、元素2、元素3、元素4、元素5对应关联服务器标识a、服务器标识b、服务器标识c、服务器标识a、服务器标识b。

本公开实施例提供的技术方案,通过确定预设数组中各个元素关联的服务器标识,有利于为每个元素指定一个服务器,便于后续根据待处理对象在预设数组中所匹配的元素以及预设数组中各个元素关联的服务器标识,确定待处理对象的处理服务器,无需针对服务器集群中的每个服务器都计算一个哈希值,再由哈希值最大的服务器来处理这个待处理对象,从而简化了为待处理对象确定服务器的过程,提高了对象分配效率,进而提高了对象处理效率。

在一示例性实施例中,本公开提供的对象分配方法,还包括:若服务器集群中的服务器发生变化,则重新从服务器集群中包括的各个服务器对应的服务器标识中,确定各个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

举例说明,当服务器集群中的服务器发生变化时,需要重新确定预设数组中每个元素关联的服务器标识,即重置数组;这个时候,可以通过对象分配服务器,再次利用哈希算法,从服务器集群包括的各个服务器的服务器标识中,重新确定各个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

本公开实施例提供的技术方案,当服务器集群中的服务器发生变化时,重新确定预设数组中各个元素关联的服务器标识,保证了预设数组中各个元素关联的服务器标识的时效性和准确性,避免服务器集群中的服务器发生变化而没有及时更新元素关联的服务器标识,导致无法确定待处理对象的处理服务器的缺陷。

在一示例性实施例中,分别从各个服务器标识中,确定各个元素下标关联的服务器标识,包括:获取每个元素下标下各个服务器标识的哈希值;分别从每个元素下标下的各个服务器标识中,筛选出哈希值最大的服务器标识,作为每个元素下标关联的服务器标识。

举例说明,假设服务器集群中包括服务器标识a、服务器标识b、服务器标识c,当元素下标为1时,服务器标识a、服务器标识b、服务器标识c对应的哈希值分别为4、5、6,说明服务器标识c对应的哈希值最大,则元素下标为1时所关联的服务器标识为c。

再举例说明,假设元素下标为2时,服务器标识a、服务器标识b、服务器标识c对应的哈希值分别为6、4、2,说明服务器标识a对应的哈希值最大,则元素下标为2时所关联的服务器标识为a。

本公开实施例提供的技术方案,通过确定每个元素下标关联的服务器标识,有利于确定每个元素关联的服务器标识,便于在接收到待处理对象时,直接根据待处理对象在预设数组中所匹配的元素,确定待处理对象的处理服务器,无需针对服务器集群中的每个服务器都计算一个哈希值,再由哈希值最大的服务器来处理这个待处理对象,从而减少了计算量,进而提高了对象处理效率。

在一示例性实施例中,获取每个元素下标下各个服务器标识的哈希值,包括:分别将每个元素下标与各个服务器标识进行拼接处理,得到每个元素下标下各个服务器标识的拼接标识;分别对每个元素下标下各个服务器标识的拼接标识进行哈希计算,得到每个元素下标下各个服务器标识的哈希值。

举例说明,对象分配服务器按照预设顺序,分别将每个元素下标与各个服务器标识对应的字符串进行拼接处理,得到每个元素下标下各个服务器标识的拼接字符串,作为每个元素下标下各个服务器标识的拼接标识;根据murmur3算法,分别对每个元素下标下各个服务器标识的拼接标识进行哈希计算,可以得到每个元素下标下各个服务器标识的哈希值。

本公开实施例提供的技术方案,通过计算每个元素下标下各个服务器标识的哈希值,有利于后续分别从每个元素下标下的各个服务器标识中,筛选出哈希值最大的服务器标识,作为每个元素下标关联的服务器标识,进而确定预设数组中各个元素关联的服务器标识。

图4是根据一示例性实施例示出的另一种对象分配方法的流程图,如图4所示,对象分配方法用于对象分配服务器中,包括以下步骤:

在步骤s410中,获取预设数组中包括的各个元素的元素下标,以及服务器集群中包括的各个服务器的服务器标识。

在步骤s420中,分别将每个元素下标与各个服务器标识进行拼接处理,得到每个元素下标下各个服务器标识的拼接标识。

在步骤s430中,分别对每个元素下标下各个服务器标识的拼接标识进行哈希计算,得到每个元素下标下各个服务器标识的哈希值。

在步骤s440中,分别从每个元素下标下的各个服务器标识中,筛选出哈希值最大的服务器标识,作为每个元素下标关联的服务器标识;将每个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

在步骤s450中,获取待处理对象的对象标识,根据待处理对象的对象标识,确定待处理对象的哈希值。

在步骤s460中,将待处理对象的哈希值与预设数组中的元素个数进行相除,得到余数,作为待处理对象在预设数组中所匹配的元素下标。

在步骤s470中,根据待处理对象在预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,确定待处理对象在预设数组中所匹配的元素。

在步骤s480中,根据预设数组中各个元素关联的服务器标识,获取待处理对象在预设数组中所匹配的元素关联的服务器标识;确定服务器标识匹配的服务器,作为待处理对象的处理服务器。

上述对象分配方法,实现了根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象的处理服务器的目的,无需针对每个待处理对象,都对服务器集群中的每个服务器计算一个哈希值,从而简化了为待处理对象确定服务器的过程,进而提高了对象处理效率。

为了更清晰阐明本申请实施例提供的对象分配方法,以下以一个具体的实施例对该分对象分配方法进行具体说明。在一个实施例中,本申请还提供了一种基于hrw算法做负载均衡时减少哈希计算的优化实现方法,具体包括以下内容:

假设服务器集群中有n个服务器,针对某一待处理对象,各个服务器需要具备独立判断待处理对象需要由哪个服务器处理。

建立一个尺寸较大的一维空数组;例如,建立一个尺寸为10000的空数组;这个数组可以理解为服务器的分工表,每一个数组元素,可以理解为一个桶(bucket);接着通过哈希算法,将n个服务器标识尽量均匀地填入构建的数组中,即将10000个桶分配给7个服务器负责,数组元素的值就是桶的服务器标识;后续根据哈希算法决定待处理对象落入哪个桶中,再根据桶的服务器标识,决定待处理对象由哪个服务器进行处理。

在程序初始化的时候,针对每个桶,我们将分别计算n个服务器在该桶的得分情况。基于桶的下标(桶对应的数组元素在数组内的排序)和服务器标识的字符串拼接构建murmur3哈希算法的key,利用murmur3算法为得到的key计算一个哈希值,这个哈希值会作为该服务器在该桶的分数;因此对于每个桶而言,都对应有n个服务器的分数,然后从n个分数中,选择最高分数对应的服务器标识,作为该桶对应的服务器标识,这样就可以为每个桶指定一个服务器。将选定的服务器标识作为桶的负责人,存储到桶对应的数组元素的相应位置上。这一步的主要作用是为每个桶指定一个服务器,将n个服务器的服务器标识较为均匀地填入数组,后续只需确定待处理对象分配到具体哪个桶上,则由该桶对应的服务器负责处理该待处理对象。一般来说,数组的尺寸远大于n,因此会有多个元素指定相同的服务器标识。

接下来,对于每一个待处理对象,我们根据待处理对象的key,再次利用murmur3算法计算一个哈希值,将哈希值除以数组大小(数组大小就是数组中包括的元素个数),得到的余数就是数组元素下标,以此决定待处理对象归属哪个桶,并由该桶对应的服务器来负责处理该待处理对象。

当服务器集群内的服务器发生变动时,重置数组,再次利用哈希算法计算数组每个元素对应的服务器标识。

需要说明的是,在程序初始化的时候指定一个一维数组,基于hrw哈希算法思想决定每个数组元素对应的服务器。具体来说,初始化时假设有n个服务器,m个元素,就要计算n×m个哈希值。而在后续将待处理对象分配到服务器上时,每个待处理对象只需要计算一次哈希值,就可以确定待处理对象由哪个服务器负责处理。假设我们一共有w个待处理对象。该方案下总的计算量为n×m+w。因为n和m都是固定常数值,所以在w极大的情况下,计算量仍能维持在一个较低的水平上。因此,在服务端长期稳定运行的场景下,避免了大量哈希值的计算,从而优化了对象处理效率。

本公开实施例提供的技术方案,可以达到以下技术效果:1、对于每个待处理对象,哈希计算次数由n次降为1次,使得在有大量待处理对象的场景下,减少哈希计算次数,优化了cpu(centralprocessingunit,中央处理器)利用,从而提升了系统可扩展性;2、在未来服务器集群扩容时,哈希计算量也不会随着服务器集群的扩容线性增长。

应该理解的是,虽然图2-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

图5是根据一示例性实施例示出的一种对象分配装置的框图。参照图5,该装置包括对象标识获取单元510,元素确定单元520,服务器标识获取单元530和服务器确定单元540。

对象标识获取单元510,被配置为执行获取待处理对象的对象标识。

元素确定单元520,被配置为执行根据待处理对象的对象标识和预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素;预设数组中包括多个元素,每个元素用于关联同一个服务器集群中的一个服务器的服务器标识,预设数组用于表征同一个服务器集群中的每一个服务器的分工信息;待处理对象在预设数组中所匹配的元素,根据对象标识在预设数组中所匹配的元素下标确定。

服务器标识获取单元530,被配置为执行获取待处理对象在预设数组中所匹配的元素关联的服务器标识。

服务器确定单元540,被配置为执行确定服务器标识匹配的服务器,作为待处理对象的处理服务器。

在一示例性实施例中,元素确定单元520,还被配置为执行根据待处理对象的对象标识,确定待处理对象的哈希值;根据待处理对象的哈希值以及预设数组中的元素个数,确定待处理对象在预设数组中所匹配的元素下标;根据待处理对象在预设数组中所匹配的元素下标,查询元素下标与元素的匹配关系,确定待处理对象在预设数组中所匹配的元素。

在一示例性实施例中,元素确定单元520,还被配置为执行将待处理对象的哈希值与预设数组中的元素个数进行相除,得到余数,作为待处理对象在预设数组中所匹配的元素下标。

在一示例性实施例中,本公开提供的对象分配装置还包括服务器标识确定单元,被配置为执行获取预设数组中包括的各个元素的元素下标,以及服务器集群中包括的各个服务器的服务器标识;分别从各个服务器标识中,确定各个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

在一示例性实施例中,本公开提供的对象分配装置还包括服务器标识更新单元,被配置为执行若服务器集群中的服务器发生变化,则重新从服务器集群中包括的各个服务器对应的服务器标识中,确定各个元素下标关联的服务器标识,对应作为预设数组中各个元素关联的服务器标识。

在一示例性实施例中,服务器标识确定单元,还被配置为执行获取每个元素下标下各个服务器标识的哈希值;分别从每个元素下标下的各个服务器标识中,筛选出哈希值最大的服务器标识,作为每个元素下标关联的服务器标识。

在一示例性实施例中,服务器标识确定单元,还被配置为执行分别将每个元素下标与各个服务器标识进行拼接处理,得到每个元素下标下各个服务器标识的拼接标识;分别对每个元素下标下各个服务器标识的拼接标识进行哈希计算,得到每个元素下标下各个服务器标识的哈希值。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图6是根据一示例性实施例示出的一种用于执行上述对象分配方法的设备600的框图。例如,设备600可以为一服务器。参照图6,设备600包括处理组件620,其进一步包括一个或多个处理器,以及由存储器622所代表的存储器资源,用于存储可由处理组件620的执行的指令,例如应用程序。存储器622中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件620被配置为执行指令,以执行上述对象分配方法。

设备600还可以包括一个电源组件624被配置为执行设备600的电源管理,一个有线或无线网络接口626被配置为将设备600连接到网络,和一个输入输出(i/o)接口628。设备600可以操作基于存储在存储器622的操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm或类似。

在示例性实施例中,还提供了一种包括指令的存储介质,例如包括指令的存储器622,上述指令可由设备600的处理器执行以完成上述方法。存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供一种计算机程序产品,所述程序产品包括计算机程序,所述计算机程序存储在可读存储介质中,设备的至少一个处理器从所述可读存储介质读取并执行所述计算机程序,使得设备执行本公开的任一项实施例中所述的对象分配方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

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