一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

确定进程负载的方法、装置和电子设备与流程

2022-04-27 04:23:54 来源:中国专利 TAG:


1.本发明涉及游戏技术领域,尤其是涉及一种确定进程负载的方法、装置和电子设备。


背景技术:

2.多人在线战术竞技游戏通常会有较大的用户基数,一般采用分布式多服务器构架提供服务。为了均衡分布式多服务器构架中每个服务器承载的压力,需要统计每个服务器承载的负载。相关技术中,通常采用较为单一或者统一的方式统计服务器负载,比如通过cpu(central processing unit,中央处理器)采样的方式或者统计服务器网络连接数的方式确定服务器负载。但是,多人在线战术竞技游戏的服务器具有并发量大、用户连接集中、系统状态复杂、且负载变化较快等特点,上述方式无法精准的统计游戏服务器的负载,容易导致服务器之间所承载的负载不均衡,影响服务器的稳定性。


技术实现要素:

3.有鉴于此,本发明的目的在于提供一种确定进程负载的方法、装置和电子设备,使确定的进程负载更加符合实际的游戏运行,丰富进程负载的维度,提高进程负载的准确性,进而提高服务器的稳定性。
4.第一方面,本发明实施例提供了一种确定进程负载的方法,该方法应用于游戏服务器,游戏服务器中运行有多个游戏进程;方法包括:获取每个游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;根据负载信息,确定当前周期游戏进程的预测负载。
5.进一步的,获取每个游戏进程的负载信息的步骤,包括:通过预设的采样方式获取当前周期游戏进程的采样负载;其中,采样负载为游戏进程cpu负载的采样值;通过向前预测的方式,确定当前周期即将加入游戏进程的第一游戏场次;根据游戏进程中各个游戏的游戏状态,将处于非游戏状态的游戏的数量确定为第二游戏场次,将处于游戏状态的游戏的数量确定为第三游戏场次。
6.进一步的,通过向前预测的方式,确定当前周期即将加入游戏进程的第一游戏场次的步骤,包括:获取当前周期游戏进程中新加入的当前游戏场次,以及历史周期游戏进程中加入的历史游戏场次;其中,初始时刻游戏进程中的游戏场次为预设数值;根据当前游戏场次,历史游戏场次以及预设的权重系数,确定当前周期即将加入游戏进程的第一游戏场次。
7.进一步的,根据当前游戏场次,历史游戏场次以及预设的权重系数,确定当前周期即将加入游戏进程的第一游戏场次的步骤,包括:通过下述一次指数平滑模型,确定第一游戏场次:戏场次:其中,c(t)表示当前周期即将加入游戏进程的第一游戏场次;s(t-i)表示在历史t-i周期游戏进程中加入的历史游戏场
次,其中t表示当前周期;s0表示所述预设数值;α为预设的权重系数。
8.进一步的,根据负载信息,确定当前周期游戏进程的预测负载的步骤,包括:根据采样负载、第二游戏场次和第三游戏场次,计算游戏进程的第一补偿负载;根据采样负载、第一游戏场次和第三游戏场次,计算游戏进程的第二补偿负载;基于采样负载、第一补偿负载和第二补偿负载,计算当前周期游戏进程的预测负载。
9.进一步的,基于采样负载、第一补偿负载和第二补偿负载,计算当前周期游戏进程的预测负载的步骤,包括:具体通过下述预测模型,计算游戏进程的预测负载:其中,t(cpu)表示当前周期游戏进程的预测负载;y(t)表示当前周期游戏进程的采样负载;c(t)表示当前周期即将加入游戏进程的第一游戏场次;n(t)表示当前周期游戏进程中处于非游戏状态的第二游戏场次;b(t)表示当前周期游戏进程中处于游戏状态的第三游戏场次;为第一补偿负载;为第二补偿负载;a、b、c为预测模型的模型参数。
10.进一步的,获取每个游戏进程的负载信息的步骤之后,方法还包括:根据采样负载和第三游戏场次,计算当前周期游戏进程的单场游戏负载。
11.进一步的,根据采样负载和第三游戏场次,计算当前周期游戏进程的单场游戏负载的步骤,包括:根据预设的历史周期内每一周期游戏进程的采样负载和第三游戏场次,计算历史周期内每一周期游戏进程的单场游戏负载;计算历史周期内每一周期游戏进程的单场游戏负载的平均值,得到当前周期游戏进程的单场游戏负载。
12.进一步的,根据负载信息,确定当前周期游戏进程的预测负载的步骤之后,方法包括:根据预测负载,计算当前周期游戏进程的权重;将权重和单场游戏负载发送至匹配服务器,以通过匹配服务器中的匹配进程根据权重和单场游戏负载,对接收到的进程匹配请求中的游戏场次分配对应的游戏进程。
13.第二方面,本发明实施例提供了一种确定进程负载的装置,装置设置于游戏服务器,游戏服务器中运行有多个游戏进程;装置包括:获取模块,用于获取每个游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;确定模块,用于根据负载信息,确定当前周期游戏进程的预测负载。
14.第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现第一方面任一项的确定进程负载的方法。
15.第四方面,本发明实施例提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现第一方面任一项的确定进程负载的方法。
16.本发明实施例带来了以下有益效果:
17.本发明提供了一种确定进程负载的方法、装置和电子设备,包括:通过游戏服务器中运行的游戏进程获取该游戏进程的负载信息;其中的负载信息包括:采样负载,即将加入
游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;根据负载信息,确定当前周期游戏进程的预测负载。该方式中,考虑了游戏进程中每个游戏场次当前的状态,以及即将加入游戏进程的游戏场次,为游戏进程预留出即将加入游戏进程和处于非游戏状态的游戏场次在游戏状态所占用的负载,使得最终确定的进程负载更加符合实际游戏的运行状态,丰富了进程负载的维度,提高了进程负载的准确性,进而提高了服务器的稳定性。
18.本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
19.为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
20.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1为本发明实施例提供的一种确定进程负载的方法的流程图;
22.图2为本发明实施例提供的一种游戏进程中状态变化的示意图;
23.图3为本发明实施例提供的一种具体的游戏服务器的示意图;
24.图4为本发明实施例提供的一种确定进程负载的装置的结构示意图;
25.图5为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
26.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
27.目前随着网络游戏的发展,moba(multiplayer online battle arena,多人在线战术竞技游戏)类网络游戏逐渐拥有较大的用户基数,moba类游戏通常采用分布式多服务器架构提供服务。为了均衡分布式多服务器构架中每个服务器承载的压力,确保服务器的稳定性,需要统计每个服务器承载的负载。相关技术中,通常采用单一的硬件指标或者统一的方式统计服务器负载,比如通过cpu采样的方式或者统计服务器网络连接数的方式确定服务器负载。但是,与传统网络服务不同的是,多人在线战术竞技游戏的服务器具有并发量大、用户连接集中、系统状态复杂、且负载变化快等特点,因此上述方式无法精准的统计游戏服务器的负载,或预测服务器负载的变化,可能会导致服务器之间所承载的负载不均衡,影响服务器的稳定性。基于此,本发明实施例提供的一种确定进程负载的方法、装置和电子设备,该技术可以应用于游戏服务器,尤其可以应用于具有确定服务器或者进程负载功能的设备。
28.为便于对本实施例进行理解,首先对本发明实施例所公开的一种确定游戏进程的方法进行详细介绍,该方法应用于游戏服务器,该游戏服务器中运行有多个游戏进程;其中的游戏具体可以是战斗相关的游戏,游戏进程中包括至少一个战斗场次;如图1所示,该方法包括如下步骤:
29.步骤s102,获取每个游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;
30.上述游戏可以是与战斗相关的游戏,游戏进程可以是与战斗相关的战斗进程,游戏进程中通常包括多场游戏或战斗;上述采样负载通常是指游戏进程所占用的cpu负载,上述第一游戏场次包括即将加入游戏进程的游戏的数量;上述第二游戏场次包括游戏进程中处于非游戏状态的游戏的数量;其中,非游戏状态通常包括暂停状态和准备状态;上述第三游戏场次包括游戏进程中处于正在游戏状态的游戏的数量。
31.通常网络游戏中拥有多种游戏状态,比如,准备状态、暂停状态、游戏状态,其中不同的状态消耗的cpu负载不同,且状态之间具有一定转换关系,如图2所示的一种游戏进程中状态变化的示意图,其中处于游戏状态(对应图中的battle)的游戏场次需要不停的同步玩家位置以及操作,因此处于游戏状态的游戏场次所占用的cpu负载较高,而处于准备状态(对应图中的wait)和暂停状态(对应图中的pause)的游戏场次由于玩家不需要进行移动和操作,因此消耗的cpu负载相对较少。但是,由于处于准备状态和暂停状态的游戏场次很有可能被随机切换到游戏状态,因此为了保证游戏进程中各个游戏场次能够稳定运行,游戏进程需要为这些第二游戏场次的游戏预留出足够的负载空间,以随时承载第二游戏场的游戏切换状态带来的负载变化。即可以将处于准备状态和暂停状态的游戏场次当作游戏状态的游戏场次去计算。
32.另外,由于确定采样负载的采样过程通常具有周期性,对于低负载的游戏进程,在采样间隔中通常会有较多的游戏场次分配到该游戏进程,从而导致该游戏进程的cpu负载波动较大,为了避免该问题,可以预测每个游戏进程中即将到来的游戏场次,比如,5秒内可能会分配到当前游戏进程的游戏场次,然后将该部分游戏场次所消耗的cpu负载预先确定到该游戏进程所占用的负载中。
33.实际实现时,游戏进程分别通过不同的方式确定本游戏进程的不同负载信息,比如,可以通过采样的方式获取当前周期游戏进程的采样负载,其中的采样负载是指当前周期游戏进程实际消耗的cpu负载,也可以理解为处于游戏状态的游戏场次所消耗的cpu负载。还如,可以通过状态识别的方式,识别本游戏进程中处于不同状态的游戏场次,从而得到上述第二游戏场次、以及第三游戏场次。再如,可以通过预测的方式,或者通过历史时间内本游戏进程加入的游戏场次,确定即将加入本游戏进程的游戏场次,即上述第一游戏场次。其中的游戏场次包括游戏场次的数量,还可以包括具体的游戏信息。
34.骤s104,根据负载信息,确定当前周期游戏进程的预测负载。
35.上述预测负载通常包括上述采样负载,还包括上述第一游戏场次和第二游戏场次所占用的cpu负载。上述第一游戏场次所占用的cpu负载可以根据采样负载、第三游戏场次和第一游戏场次计算得到;上述第二游戏场次所占用的cpu负载可以根据采样负载、第三游戏场次和第二游戏场次计算得到。具体的,可以直接将采样负载、第一游戏场次所占用的
cpu负载、以及第二游戏场次所占用的cpu负载,相加得到当前周期游戏进程的预测负载。还可以通过加权的方式,赋予每个负载不同的权重,计算上述预测负载。
36.上述游戏服务器中还运行有一个中心进程,实际实现时,游戏进程需要周期性的获取负载信息,然后游戏进程将获取的负载信息发送至中心进程,中心进程根据负载信息确定当前周期游戏进程的预测负载。上述采样周期(也可以成为周期)可以根据实际需要进行设置,比如5秒等。另外,由于游戏进程以服务器为单元被组织起来,并且跨服通信的代价比较大,因此通过每个进程计算本进程的预测负载的方式,避免可集中式负载计算方案。
37.本发明实施例提供了一种确定进程负载的方法,包括:通过游戏服务器中运行的游戏服务器获取该游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;根据负载信息,确定当前周期游戏进程的预测负载。该方式中,考虑了游戏进程中每个游戏场次当前的状态,以及即将加入游戏进程的游戏场次,为游戏进程预留出即将加入游戏进程和处于非游戏状态的游戏场次在游戏状态所占用的负载,使得最终确定的进程负载更加符合实际游戏的运行状态,丰富了进程负载的维度,提高了进程负载的准确性,进而提高了服务器的稳定性。
38.由于上述负载信息包括采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次,下面描述如何获取不同的负载信息;具体包括:
39.(1)通过预设的采样方式获取当前周期游戏进程的采样负载;其中,采样负载为游戏进程cpu负载的采样值;
40.上述预设的采样方式可以是每隔预设时间采样游戏进程的cpu负载,其中的预设时间可以是1到10秒,也可以称为采样间隔,即上述采样周期,采样间隔时间越短越接近真实情况,但是额外的消耗的服务器性能越高,因此可以根据实际的需要设置采样间隔。实际上,上述采样负载为不同状态的游戏场次所占用的cpu负载,一般情况下处于准备状态和暂停状态的游戏场次占用的cpu负载可以忽略不计,因此上述采样负载可以认为是当前周期游戏进程中处于游戏状态的游戏场次所占用的cpu负载。
41.(2)通过向前预测的方式,确定当前周期即将加入游戏进程的第一游戏场次;
42.通常可以获取游戏进程在历史时间段,比如前一个采样周期(即获取采样负载时设置的采样周期),或者前几个采样周期内,游戏进程中历史加入的游戏场次,如果是初始状态,则可以直接根据实际需要设置初始时刻游戏进程中新加入的游戏场次。如果是获取的前一个采样周期内游戏进程中新加入的游戏场次,则可以直接将获取到的游戏场次确定为上述第一游戏场次。如果是获取的前几个采样周期内游戏进程中新加入的游戏场次,则可以计算这几个游戏场次的平均值,将计算得到的平均值确定为上述第一游戏场次;还可以通过加权的方式计算这几个游戏场次,得到上述第一游戏场次。
43.一种可能的实施方式:获取当前周期游戏进程中新加入的当前游戏场次,以及历史周期游戏进程中加入的历史游戏场次;其中,初始时刻游戏进程中的游戏场次为预设数值;根据当前游戏场次,历史游戏场次以及预设的权重系数,确定当前周期即将加入游戏进程的第一游戏场次。
44.上述预设数值为一个较大的数值。具体的,游戏进程会时刻检测每个采样周期内
新加入的游戏场次,因此可以获取游戏进程检测到的当前采样周期内游戏进程中新加入的游戏场次。或者,游戏进程还可以时刻采样每个周期内新加入的游戏场次;同时还可以是获取历史周期内游戏进程中加入的历史游戏场次。需要说明的是,如果是初始时刻,则可以直接获取预设数值,该预设数值可以根据实际需要进行设置,通常为了避免确定的负载较小,导致匹配进程会将较多的游戏场次分配至该游戏进程,因此上述预设数值一般会设置一个较大的数值。
45.上述历史周期包括初始时刻到当前时刻的所有周期,因此历史游戏场次包括多个,可以根据历史游戏场次、当前游戏场次及预设权重系数不断迭代计算当前周期即将加入游戏进程的第一游戏场次。通常可以为当前游戏场次和每个历史游戏场次分别赋予对应的权重,该权重系数通常在0到1之间,比如,历史权重只有一个,可以为当前游戏场次赋予0.5的权重,为历史游戏场次赋予0.5的权重,这样就可以较为平均的考虑到当前采样周期和历史采样周期中新加入的游戏场次,这样预测得到的第一游戏场次会更加符合该游戏进程,预测会更加准确。另外,通过设置一个较大的预设数值,可以控制新加入的游戏进程的负载由一个较大的数值逐渐下降到真实值。
46.具体的可以通过下述一次指数平滑模型,确定第一游戏场次:
47.c(t)=αs(t) (1-α)c(t-1);
48.其中,c(t)表示当前周期即将加入游戏进程的第一游戏场次;s(t)表示在当前周期游戏进程中新加入的当前游戏场次;c(t-1)表示前一周期即将加入游戏进程的游戏场次;α为预设的权重系数;0<α<1。
49.其中c(t-1)也是通过上述公式计算得到的,可以理解为c(t-1)是由s(0)、s(1)..s(t-2)不断加权累加的结果,s(0)为上述预设数值。其中α为平滑系数,且0<α<1,如果对上述一次指数平滑模型进行扩展可以得到:
[0050][0051]
其中,c(t)表示当前周期即将加入游戏进程的第一游戏场次;s(t-i)表示在历史t-i周期游戏进程中加入的历史游戏场次,其中t表示当前周期;s0表示预设数值;α为预设的权重系数。
[0052]
其中i表示前i个采样周期,t表示游戏有游戏服务器运行的时长;但是,由于0<α<1,当t

∞时,(1-α)
t

0,因此上述公式可以简化为:
[0053][0054]
由于各时间序列系数由近及远按照指数规律变化,因此上述第一游戏场次c(t)受采样周期的影响,也随时间指数变化,具有与历史游戏场次平滑的效果。可以理解的是,时间越长,最早获取的历史游戏场次的系数越小,对第一游戏场次的影响也就越小,进而可以实现控制新加入的游戏进程的负载由一个较大的数值逐渐下降到真实值。
[0055]
通常在游戏进程初始时刻,即游戏服务器刚开始运行,或者进程扩容时,新扩张上来的游戏进程如果按照当前采样的方式获取cpu负载,得到的负载较低,可能会发生大量游戏场次分配至该游戏进程,导致该进程cpu负载骤升的情况。通过上述一次指数平滑模型,通过设置初始数值,可以控制该游戏进程新加入的第一游戏场次,由较高的数值逐渐降低
到真实值,同时通过控制第一游戏场戏可以控制该游戏进程确定的预测负载能够由一个较大的负载数值,随着时间逐渐降低到真实负载值。
[0056]
(3)根据游戏进程中各个游戏的游戏状态,将处于非游戏状态的游戏的数量确定为第二游戏场次,将处于游戏状态的游戏的数量确定为第三游戏场次。
[0057]
由于游戏进程中各个游戏场次会有不同的游戏状态,可以先识别各个游戏的状态,其中包括准备状态、暂停状态和游戏状态,然后确定准备状态和暂停状态的游戏的数量,以及游戏状态的游戏的数量,最后将确定的处于准备状态和暂停状态的游戏的数量确定为第二游戏场次,将处于游戏状态的游戏的数量确定为第三游戏场次。
[0058]
上述方式中,不仅获取负载,还区分了游戏进程中游戏的各个状态,通过识别状态的方式获取不同状态的游戏场次,还考虑到在采样周期内可能会有新的游戏加入游戏进程,通过预测的方式获取游戏进程当前周期即将到来的游戏场次,能够为游戏进程提前预留好可能会发生的负载占用的空间,之后确定的进程负载会更加符合当前的运行状态,提高了服务器的稳定性。
[0059]
下面描述根据负载信息,确定当前周期游戏进程的预测负载的具体实现步骤,具体包括:
[0060]
根据采样负载、第二游戏场次和第三游戏场次,计算游戏进程的第一补偿负载;根据采样负载、第一游戏场次和第三游戏场次,计算游戏进程的第二补偿负载;基于采样负载、第一补偿负载和第二补偿负载,计算当前周期游戏进程的预测负载。
[0061]
由于上述采样负载可以表示处于游戏状态的游戏场次所占用的cpu负载,因此可以通过采样负载除以第三游戏场次,可以得到每个游戏场次在游戏状态下所占用的cpu负载,然后通过每个游戏场次所占用的cpu负载乘以第二游戏场次,可以得到处于准备状态和暂停状态的游戏场次切换为游戏状态时所占用的cpu负载,即上述第一补偿负载。同样的,每个游戏场次所占用的cpu负载乘以第一游戏场次,可以得到即将到来的游戏场次如果处于游戏状态时所占用的cpu负载,即上述第二补偿负载。
[0062]
最后可以直接将采样负载、第一补偿负载和第二补偿负载进行相加,计算得到当前周期游戏进程的预测负载。还可以为分别为采样负载、第一补偿负载和第二补偿负载赋予权重,该权重可以是0-1之间的数值,得到上述预测负载。其中权重越接近1,计算得到的预测负载越保守。上述方式通过游戏进程能够直接获取到的负载信息,计算游戏进程可能会占用的补偿负载,通过采样负载和补偿负载计算得到的预测负载能够为游戏进程预留足够的负载空间,以防止游戏进程内部状态变化引起的负载增加,以及可能会加入的游戏引起的负载增加的问题,使得预测负载更加符合当前运行的状态。
[0063]
具体的,可以通过下述预测模型,计算游戏进程的预测负载:
[0064][0065]
其中,t(cpu)表示当前周期游戏进程的预测负载;y(t)表示当前周期游戏进程的采样负载;c(t)表示当前周期即将加入游戏进程的第一游戏场次;n(t)表示当前周期游戏进程中处于非游戏状态的第二游戏场次;b(t)表示当前周期游戏进程中处于游戏状态的第三游戏场次;为第一补偿负载;为第二补偿负载;a、b、c为预测模型的模型
参数。需要说明的是,上述表示每个游戏场次在游戏状态下所占用的cpu负载。
[0066]
另外,上述方法还包括:根据采样负载和第三游戏场次,计算当前周期游戏进程的单场游戏负载。具体可以通过上述采样负载y(t)以及第三游戏场次b(t)计算上述单场游戏负载,即需要说明的是,该pb(t)为当前周期游戏进程的单场游戏负载;通常不同周期计算得到的单场游戏负载可能不同。
[0067]
一种可能的实施方式:根据预设的历史周期内每一周期游戏进程的采样负载和第三游戏场次,计算历史周期内每一周期游戏进程的单场游戏负载;计算历史周期内每一周期游戏进程的单场游戏负载的平均值,得到当前周期游戏进程的单场游戏负载。
[0068]
上述预设的历史周期,可以根据实际需要进行设置,比如前20秒的时间,或者前4个采样周期等。在实际的游戏中,单场游戏所占用的cpu负载存在波动,为排除时间和游戏人数变化对pb(t)的影响,可基于统计学方法,对pb(t)求一段时间内的平均值,本实施例采用下述滑动窗口平均的方式对其进行预测:
[0069][0070]
其中m表示周期数;上述方式计算得到的单场游戏负载考虑了历史时间段的单场游戏负载,预测的结果更加真实,更加符合实际的游戏的运行状态。
[0071]
上述方法还包括:根据预测负载,计算当前周期游戏进程的权重;将权重和单场游戏负载发送至匹配服务器,以通过匹配服务器中的匹配进程根据权重和单场游戏负载,对接收到的进程匹配请求中的游戏场次分配对应的游戏进程。
[0072]
计算得到上述预测负载后,为了匹配服务器中的匹配进程能够更好的根据预测负载,为接收到的进程匹配请求中的游戏场次分配对应的游戏进程,还可以通过游戏服务器中运行的中心进程计算当前周期游戏进程的权重:w=1-t(cpu);其中对于单核cpu,假设每个进程最高cpu为100%,0≤t(cpu)≤100%)。游戏服务器中的中心进程计算得到每个游戏进程的权重和单场游戏负载后,将每个游戏进程的权重和单场游戏负载发送至对应的匹配服务器,匹配服务器中包括多个匹配进程,每个匹配进程都会收到各个游戏进程的权重和单场游戏负载。匹配进程会根据每个游戏进程的权重大小,将超过预设权重,比如10%或5%的游戏进程确定为待分配的游戏进程,然后将接收到的进程匹配请求中的游戏场次随机分配给待分配的游戏进程中的一个游戏进程,其中的随机分配通常可以根据权重大小进行随机分配,即权重越大的待分配进程被分配的概率越大。另外,上述预设权重通常会设置为较小的数值,甚至可以设置为0。
[0073]
传统的分布式多服架构负载游戏服务器负载均衡方案往往基于集中式的排序或负载,去均衡每个游戏进程的负载,而跨服通信频率低且代价大,导致采样周期长。本发实施例通过统一的权重,可实现去中心化,各游戏进程可通过中心进程分别独立计算每个游戏进程的权重并实现高频同步。
[0074]
另外,为了避免匹配进程连续将多个游戏场次分配至同一个游戏进程,可以在匹配进程将进程匹配请求中的游戏场次分配给对应的游戏进程后,根据单场游戏负载降低该游戏进程的权重。可以直接在接收到的游戏进程的权重的基础上减去单场游戏负载,还可
以根据当前的匹配进程的数量,待分配的游戏进程的数量、所有游戏进程的数量以及单场游戏负载,计算游戏进程将要降低的权重数。如果所有的待分配的游戏进程的权重均降为0则可以通过纯随机选进程的方式为新的游戏场次分配游戏进程。
[0075]
具体的,需要降低的权重可以表示为:δw=f*pb(cpu);其中cb为当前可被随机直接选中的待分配的进程数量,tb为总的游戏进程的数量,m为同一周期共同工作的匹配进程的数量。其中,每个匹配进程都会缓存所有游戏进程的权重以及单场游戏负载。可以理解,当同一周期共同工作的匹配进程的数量较多,待分配的游戏进程的数量较少时,f就会较大,此时δw也会变大,这样的话,在匹配进程分配一次游戏场次后,分配的游戏进程的权重就会降低的快一些,这样就不会有过多的游戏场次分配到该游戏进程,避免了由于游戏进程权重较大,导致匹配进程将大量的游戏场次分配至该游戏进程导致负载骤升的问题,能够达到更好的负载均衡能力。
[0076]
本实施例通过将采样负载与游戏场次结合计算每个进程能容纳新游戏场次的权重,使得新游戏场次能够更大可能的被分配至压力更低的进程,提高了服务器的稳定性。
[0077]
具体的,可以参见图3所示的具体的游戏服务器的示意图,通常多人在线战术竞技游戏为分布式多服务器构架,该构架包括多个战斗服(对应前述的游戏服务器)承载游戏战斗逻辑的服务器,如图中的战斗服1、战斗服2。还包括多个匹配服(对应前述的匹配服务器)承载匹配单局战斗所需玩家逻辑的服务器。每个战斗服中运行有多个战斗进程(对应前述的游戏进程)以及一个中心进程,同样的每个匹配服中运行有多个匹配进程以及一个中心进程,每个战斗服与匹配服之间通过中心进程通信,战斗服中每个战斗进程与中心进程通信,匹配服中每个匹配进程与中心进程通信。
[0078]
本实施例基于多战斗服,多匹配服的分布式系统,其中每个战斗进程与本战斗服上的中心进程建立连接,中心进程与匹配进程建立连接。在匹配进程上,本实施例选择基于加权随机的选服算法,选服步骤大致包含:
[0079]
step1.各战斗进程定时采样战斗进程上的cpu使用情况y(t),t-1到t时刻观察新到来的战斗场次s(t),t时刻准备中和暂停的战斗场次n(t),以及当前正在战斗中的战斗场次b(t)。
[0080]
step2.各战斗进程基于式计算pb(t),并基于式计算pb(t),并基于式对pb(t)做滑动窗口平均从而预测一段时间内的平均值pb(cpu),基于式c(t)=αs(t) (1-α)c(t-1);计算c(t),并将y(t)、c(t)、n(t)和pb(cpu)同步到当前战斗服中心进程。
[0081]
step3.战斗服中心进程根据收集到的信息计算每个战斗进程cpu总负载t(cpu);然后根据式w=1-t(cpu)计算出每个战斗进程的权重。
[0082]
step4.战斗服中心进程将当前所有战斗进程权重信息以及pb(cpu)下发到匹配服。
[0083]
step5.匹配进程拉取并缓存所有战斗进程权重信息和pb(cpu),在新战斗到来时通过加权随机进行选服,每一次选中后,将该战斗进程的本地权重减去δw,若所有可选战
斗进程的权重均降为0则回退到纯随机选服。
[0084]
对应上述的方法实施例,本发明实施例还提供了一种确定进程负载的装置,如图4所示,该装置设置于游戏服务器,该游戏服务器中运行有多个游戏进程;如图4所示,该装置包括:
[0085]
获取模块41,用于获取每个游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;
[0086]
确定模块42,用于根据负载信息,确定当前周期游戏进程的预测负载。
[0087]
本发明实施例提供了一种确定进程负载的装置,包括:通过游戏服务器中运行的游戏服务器获取该游戏进程的负载信息;负载信息包括:采样负载,即将加入游戏进程的第一游戏场次,处于非游戏状态的第二游戏场次,以及处于游戏状态的第三游戏场次;根据负载信息,确定当前周期游戏进程的预测负载。该方式中,考虑了游戏进程中每个游戏场次当前的状态,以及即将加入游戏进程的游戏场次,为游戏进程预留出即将加入游戏进程和处于非游戏状态的游戏场次在游戏状态所占用的负载,使得最终确定的进程负载更加符合实际游戏的运行状态,丰富了进程负载的维度,提高了进程负载的准确性,进而提高了服务器的稳定性。
[0088]
进一步的,上述获取模块还用于:通过预设的采样方式获取当前周期游戏进程的采样负载;其中,采样负载为游戏进程cpu负载的采样值;通过向前预测的方式,确定当前周期即将加入游戏进程的第一游戏场次;根据游戏进程中各个游戏的游戏状态,将处于非游戏状态的游戏的数量确定为第二游戏场次,将处于游戏状态的游戏的数量确定为第三游戏场次。
[0089]
进一步的,上述获取模块还用于:获取当前周期游戏进程中新加入的当前游戏场次,以及历史周期游戏进程中加入的历史游戏场次;其中,初始周期游戏进程中的游戏场次为预设数值;根据当前游戏场次,历史游戏场次以及预设的权重系数,确定当前周期即将加入游戏进程的第一游戏场次。
[0090]
进一步的,上述获取模块还用于:通过下述一次指数平滑模型,确定第一游戏场次:其中,c(t)表示当前周期即将加入游戏进程的第一游戏场次;s(t-i)表示在历史t-i周期游戏进程中加入的历史游戏场次,其中t表示当前周期;s0表示预设数值;α为预设的权重系数。
[0091]
进一步的,上述确定模块还用于:根据采样负载、第二游戏场次和第三游戏场次,计算游戏进程的第一补偿负载;根据采样负载、第一游戏场次和第三游戏场次,计算游戏进程的第二补偿负载;基于采样负载、第一补偿负载和第二补偿负载,计算当前周期游戏进程的预测负载。
[0092]
进一步的,上述确定模块还用于:具体通过下述预测模型,计算游戏进程的预测负载:其中,t(cpu)表示当前周期游戏进程的预测负载;y(t)表示当前周期游戏进程的采样负载;c(t)表示当前周期即将加入游戏进程的第一游戏场次;n(t)表示当前周期游戏进程中处于非游戏状态的第二游戏场次;b
(t)表示当前周期游戏进程中处于游戏状态的第三游戏场次;为第一补偿负载;为第二补偿负载;a、b、c为预测模型的模型参数。
[0093]
进一步的,上述装置还包括单场游戏负载计算模块,用于:根据采样负载和第三游戏场次,计算当前周期游戏进程的单场游戏负载。
[0094]
进一步的,单场游戏负载计算模块还用于:根据预设的历史周期内每一周期游戏进程的采样负载和第三游戏场次,计算历史周期内每一周期游戏进程的单场游戏负载;计算历史周期内每一周期游戏进程的单场游戏负载的平均值,得到当前周期游戏进程的单场游戏负载。
[0095]
进一步的,上述装置还包括权重计算模块,用于:根据预测负载,计算当前周期游戏进程的权重;将权重和单场游戏负载发送至匹配服务器,以通过匹配服务器中的匹配进程根据权重和单场游戏负载,对接收到的进程匹配请求中的游戏场次分配对应的游戏进程。
[0096]
本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述确定进程负载的方法。该电子设备可以是服务器,也可以是终端设备。
[0097]
参见图5所示,该电子设备包括处理器100和存储器101,该存储器101存储有能够被处理器100执行的机器可执行指令,该处理器100执行机器可执行指令以实现上述确定进程负载的方法。
[0098]
进一步地,图5所示的电子设备还包括总线102和通信接口103,处理器100、通信接口103和存储器101通过总线102连接。
[0099]
其中,存储器101可能包含高速随机存取存储器(ram,random access memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是isa总线、pci总线或eisa总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0100]
处理器100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器100可以是通用处理器,包括中央处理器(central processing unit,简称cpu)、网络处理器(network processor,简称np)等;还可以是数字信号处理器(digital signal processor,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储
器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器101,处理器100读取存储器101中的信息,结合其硬件完成前述实施例的方法的步骤。
[0101]
本实施例还提供一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述确定进程负载的方法。
[0102]
本发明实施例提供的确定进程负载的装置,与上述实施例提供的确定负载的方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。
[0103]
本发明实施例所提供的确定进程负载的方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
[0104]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0105]
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0106]
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0107]
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0108]
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献