应用服务请求方法、装置、计算机设备及存储介质与流程

文档序号:26003924发布日期:2021-07-23 21:21阅读:196来源:国知局
应用服务请求方法、装置、计算机设备及存储介质与流程

本申请涉及数据处理领域,特别涉及一种应用服务请求方法、装置、计算机设备及存储介质。



背景技术:

终端在使用应用程序实现该应用程序中的某一应用功能时,通常将实现应用功能对应的数据信息上传至服务器,当服务器完成对应用功能对应的数据信息的处理后再下发至终端。

相关技术中,服务器可以建立多个ds(dedicatedserver,独立服务器),以实现同时执行多个终端向服务器发送的不同数据处理请求所请求的应用服务。以游戏场景为例,服务器中一般会使用ds处理玩家共同的游戏运行逻辑。一个ds对应一个游戏单局。当有大量单局游戏在运行时,游戏服务器需要启动大量的ds。

然而,上述方案中,当服务器需要启动多个ds时,对服务器的负载要求很高,启动ds容易造成服务器的卡顿。



技术实现要素:

本申请实施例提供了一种应用服务请求方法、装置、计算机设备及存储介质,可以在的同时,减小了创建应用服务对服务器的资源占用,该技术方案如下:

一方面,提供了一种应用服务请求方法,所述方法包括:

接收第一调用请求;所述第一调用请求用于获取所述服务器创建的第一应用服务;

基于所述第一调用请求,获取所述第一应用服务对应的第一父进程;

对所述第一父进程进行复制操作,获得第一子进程;所述第一子进程与所述第一父进程共用所述第一父进程对应的第一物理内存;所述第一物理内存用于存储执行所述第一应用服务所需要的基础数据;所述第一子进程用于执行所述第一应用服务;

将所述第一子进程对应的连接信息发送给至少一个终端,以便所述至少一个终端与所述第一子进程进行连接。

又一方面,提供了一种应用服务请求方法,所述方法包括:

调用请求接收模块,用于接收第一调用请求;所述第一调用请求用于获取所述服务器创建的第一应用服务;

第一父进程获取模块,用于基于所述第一调用请求,获取所述第一应用服务对应的第一父进程;

第一子进程获取模块,用于对所述第一父进程进行复制操作,获得第一子进程;所述第一子进程与所述第一父进程共用所述第一父进程对应的第一物理内存;所述第一物理内存用于存储执行所述第一应用服务所需要的基础数据;所述第一子进程用于执行所述第一应用服务;

连接信息发送模块,用于将所述第一子进程对应的连接信息发送给至少一个终端,以便所述至少一个终端与所述第一子进程进行连接。

在一种可能的实现方式中,所述第一子进程获取模块,包括:

第一子页表获取子模块,用于对所述第一父进程的页表进行复制操作,获得所述第一子页表;所述页表用于指示所述页表对应的进程的物理地址信息;

第一子进程构建子模块,用于基于所述第一子页表,构建所述第一子进程。

在一种可能的实现方式中,所述第一子进程获取模块,还包括:

进程信息复制子模块,用于对所述第一父进程的进程信息进行复制,获得所述第一子进程对应的进程信息;所述进程信息包括代码段、用户栈、内核栈以及虚拟地址空间中的至少一者;

所述第一子进程构建子模块,还用于,

基于所述第一子页表以及所述第一子进程对应的进程信息,构建所述第一子进程。

在一种可能的实现方式中,所述服务器还包括第一管理进程;

所述第一父进程获取模块,还用于,

响应于通过所述第一管理进程接收到所述第一调用请求,获取所述第一应用服务对应的第一父进程;

所述装置还包括:

复制请求发送模块,用于基于所述第一调用请求,通过所述第一管理进程向所述第一父进程发送复制请求;

所述第一子进程获取模块,还用于,

当通过所述第一父进程接收到所述复制请求,对所述第一父进程进行复制操作,获得所述第一子进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述第一父进程获取模块,还用于,

响应于存在处于启动状态的所述第一父进程,获取所述第一应用服务对应的第一父进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述第一父进程获取模块,还用于,

响应于不存在处于启动状态的所述第一父进程,启动所述第一父进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述装置还包括:

父进程状态确定模块,用于响应于通过所述第一管理进程接收到所述第一父进程对应的第一在线信息,将所述第一父进程确定为启动状态;

其中,所述第一在线信息是通过所述第一父进程根据所述第一父进程与所述第一管理进程之间的心跳协议发送的信息。

在一种可能的实现方式中,所述装置还包括:

通信连接建立模块,用于基于所述第一父进程与所述第一管理进程之间的心跳协议,建立所述第一父进程与所述第一管理进程之间的通信连接,以便所述第一父进程向所述第一管理进程发送第一在线信息。

在一种可能的实现方式中,所述装置还包括:

第一读取模块,用于响应于通过所述第一子进程进行第一读取操作,在所述第一物理内存中获取所述第一读取操作对应的第一数据。

在一种可能的实现方式中,所述装置还包括:

第一写入模块,用于响应于通过所述第一子进程进行所述第一写入操作,在第二物理内存中写入所述第一写入操作对应的第二数据,所述第二物理内存是所述第一物理内存之外的内存。

在一种可能的实现方式中,所述方法还包括:

第一父进程销毁模块,用于响应于第一指定时间内第一父进程未执行复制操作,销毁所述第一父进程。

在一种可能的实现方式中,所述第一子进程是游戏场景中,用于运行虚拟场景的独立服务器ds;

所述第一父进程是游戏场景中,用于复制生成所述独立服务器的种子独立服务器seedds。

又一方面,提供了一种计算机设备,所述计算机设备包含处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述的应用服务请求方法。

再一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述的应用服务请求方法。

又一方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的应用服务请求方法。

本申请提供的技术方案可以包括以下有益效果:

在服务器创建第一应用服务时,可以先获取第一应用服务对应的父进程,再根据父进程复制出共享父进程的物理内存的子进程,以实现通过子进程完成终端请求的应用服务。通过上述方案,由于父进程复制出的子进程与父进程共享物理内存,且该第一物理内存中存储有执行第一应用服务所需要的基础数据,因此对第一父进程复制以得到第一子进程的过程中,不需要在内存中重新加载第一子进程的数据,也不需要调用cpu重新计算以获得第一子进程的数据,减小了服务器创建应用服务对应的子进程对服务器造成的负荷,减小了创建应用服务对服务器的资源占用。

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

附图说明

图1是根据一示例性实施例示出的一种应用服务请求系统的结构示意图;

图2是根据一示例性实施例示出的一种应用服务请求方法的流程示意图;

图3是根据一示例性实施例示出的一种应用服务请求方法的流程示意图;

图4是根据一示例性实施例示出的一种游戏场景中的应用服务请求方法的流程图;

图5示出了图4所示实施例涉及的一种独立服务器架构变化示意图;

图6示出了图4所示实施例涉及的一种物理内存共享示意图;

图7示出了图4所示实施例涉及的一种种子独立服务器的运行逻辑示意图;

图8示出了图4所示实施例涉及的一种种子独立服务器的复制逻辑示意图;

图9示出了图4所示实施例涉及的一种种子独立服务器的销毁流程示意图;

图10示出了图4所示实施例涉及的一种内存状态对比结果示意图;

图11示出了图4所示实施例涉及的一种内存占用变化对比结果示意图;

图12示出了图4所示实施例涉及的一种整机cpu使用率变化对比结果示意图;

图13示出了图4所示实施例涉及的一种单cpu使用率变化对比结果示意图;

图14示出了图4所示实施例涉及的负载对比示意图;

图15是根据一示例性实施例示出的一种应用服务请求装置的结构方框图;

图16是根据一示例性实施例示出的一种计算机设备的结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在对本申请所示的各个实施例进行说明之前,首先对本申请涉及到的几个概念进行介绍:

1)ue4(unrealengine4generation,第四代虚幻引擎)

由epicgames开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计,但现在已经被成功地应用于开发潜行类游戏、格斗游戏、角色扮演游戏等多种不同类型的游戏。

2)ds(dedicatedserver,独立服务器)

ds作为ue4游戏的服务端,作用是做出ue4游戏中的各种决定,包含所有的主控状态,处理客户端连接,转移到新的地图以及处理比赛开始/结束时的总体游戏流程等,是ue4多人游戏的一个重要部分。

3)dsa(dedicatedserveragent,独立服务器代理)

dsa是ds的代理服务器,其作用是管理服务器上的ds,作为ds与其他游戏逻辑服务的桥梁。

4)云计算

云计算(cloudcomputing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。

作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为iaas(infrastructureasaservice,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。

按照逻辑功能划分,在iaas(infrastructureasaservice,基础设施即服务)层上可以部署paas(platformasaservice,平台即服务)层,paas层之上再部署saas(softwareasaservice,软件即服务)层,也可以直接将saas部署在iaas上。paas为软件运行的平台,如数据库、web容器等。saas为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,saas和paas相对于iaas是上层。

图1是根据一示例性实施例示出的一种应用服务请求系统的结构示意图。该系统包括:服务器120以及用户终端140。

服务器120是一台服务器,或者包括若干台服务器,或者是一个虚拟化平台,或者是一个云计算服务中心等,本申请不做限制。

其中,服务器120中还包含数据存储模块,其中数据存储模块可以用于存储各个应用服务对应进程的进程信息,该进程信息可以包括代码段以及各个应用服务在正常运行过程中需要调用的数据信息。因此当该服务器120需要实现该应用服务时,可以读取该数据存储模块中存储的该应用服务对应的数据,并根据该数据(例如代码)构建出该应用服务对应的应用服务进程。

用户终端140可以是具有数据处理功能的终端设备,比如,用户终端可以是手机、平板电脑、膝上型便携计算机和台式计算机等等。用户终端140的数量不做限定。

其中,用户终端140中可以安装有客户端,该客户端可以是办公类客户端、即时通信客户端、浏览器客户端、教育客户端等。本申请实施例不限定客户端的软件类型。

用户终端140与服务器120之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。

可选的,该系统还可以包括管理设备(图1未示出),该管理设备与服务器120之间通过通信网络相连。可选的,通信网络是有线网络或无线网络。

可选的,上述的无线网络或有线网络使用标准通信技术和/或协议。网络通常为因特网、但也可以是任何网络,包括但不限于lan(localareanetwork,局域网)、man(metropolitanareanetwork,城域网)、wan(wideareanetwork,广域网)、移动、有线或者无线网络、专用网络或者虚拟专用网络的任何组合。在一些实施例中,使用包括html(hypertextmark-uplanguage,超文本标记语言)、xml(extensiblemarkuplanguage,可扩展标记语言)等的技术和/或格式来代表通过网络交换的数据。此外还可以使用诸如ssl(securesocketlayer,安全套接字层)、tls(transportlayersecurity,传输层安全)、vpn(virtualprivatenetwork,虚拟专用网络)、ipsec(internetprotocolsecurity,网际协议安全)等常规加密技术来加密所有或者一些链路。在另一些实施例中,还可以使用定制和/或专用数据通信技术取代或者补充上述数据通信技术。

图2是根据一示例性实施例示出的一种应用服务请求方法的流程示意图。该方法可以由计算机设备执行,该计算机设备可以是服务器,其中,该用户终端可以是上述图1所示的实施例中的服务器120。如图2所示,该应用服务请求方法可以包括如下步骤:

步骤21,接收第一调用请求;该第一调用请求用于获取该服务器创建的第一应用服务。

可选的,该第一调用请求是第一终端发送至该服务器的。

可选的,该第一终端中可以存储有与该服务器对应的第一应用程序,当该第一终端通过该第一应用程序实现该第一应用程序的第一功能时,可以向该服务器发送第一调用请求,以便获取该服务器创建的第一应用服务。

可选的,当该第一终端运行该第一应用程序时,该第一终端向该第一应用程序对应的服务器发送第一调用请求,以便获取该服务器创建的第一应用服务。

可选的,该第一调用请求是管理设备发送至该服务器的。

例如,当至少一个终端需要向服务器请求获取该服务器创建的第一应用服务时,可以先通过管理设备向该服务器发送第一调用请求,以便该服务器根据该第一调用请求生成第一应用服务,使得至少一个终端可以获取到该第一应用服务。

步骤22,基于该第一调用请求,获取该第一应用服务对应的第一父进程。

可选的,该第一父进程用于复制生成该第一应用服务对应的进程,以便终端与该第一应用服务对应的进程进行连接,以实现调用服务器创建的该第一应用服务。

其中,该第一父进程是该服务器预先启动的;或者,该第一父进程是服务器获取到该第一调用请求后,基于该第一调用请求启动的。

步骤23,对该第一父进程进行复制操作,获得第一子进程。

其中,该第一子进程与该第一父进程共用该第一父进程对应的第一物理内存;该第一物理内存用于存储执行该第一应用服务所需要的基础数据;该第一子进程用于执行该第一应用服务。

可选的,该服务器基于该第一物理内存中存储的基础数据,通过该第一子进程执行该第一应用服务。以该第一应用服务是游戏对局为例,当第一子进程用于执行游戏对局时,该第一物理内存中存储的基础数据,可以包括第一应用服务对应的游戏对局所需要加载的游戏规则、地图资源以及模型数据等,当通过对第一父进程进行复制操作,获得第一子进程时,第一子进程可以通过与第一父进程共享的第一物理内存中存储的执行该第一应用服务所需要的基础数据,实现执行该第一应用服务。

当该第一子进程与该第一父进程共用该第一父进程对应的第一物理内存时,该第一子进程可以是直接基于该第一父进程的第一物理内存建立的,因此服务器使用该第一父进程复制出该第一子进程时,占用的额外的物理内存较少,对比使用服务器的计算资源重新构建第一子进程的方案,通过对该第一父进程进行复制从而得到第一子进程对计算资源的消耗更小,减小了第一子进程在创建时对服务器的负担。

步骤24,将该第一子进程对应的连接信息发送给至少一个终端,以便该至少一个终端与该第一子进程进行连接。

其中,该第一子进程的连接信息可以发送给一个终端,以便该终端通过该第一子进程实现该第一应用服务;或者,该第一子进程的连接信息可以发送给多个终端,服务器通过该第一子进程可以同时对多个终端上传的数据信息进行处理,同时实现多个终端请求的第一应用服务。

综上所述,在本申请实施例所示的方案中,在服务器创建第一应用服务时,可以先获取第一应用服务对应的父进程,再根据父进程复制出共享父进程的物理内存的子进程,以实现通过子进程完成终端请求的应用服务。通过上述方案,由于父进程复制出的子进程与父进程共享物理内存,且该第一物理内存中存储有执行第一应用服务所需要的基础数据,因此对第一父进程复制以得到第一子进程的过程中,不需要在内存中重新加载第一子进程的数据,也不需要调用cpu重新计算以获得第一子进程的数据,减小了服务器创建应用服务对应的子进程对服务器造成的负荷,减小了创建应用服务对服务器的资源占用。

图3是根据一示例性实施例示出的一种应用服务请求方法的流程示意图。该方法可以由计算机设备执行,该计算机设备可以是服务器,其中,该用户终端可以是上述图1所示的实施例中的服务器120。如图3所示,该应用服务请求方法的流程可以包括如下步骤:

步骤301,接收第一调用请求。

可选的,该第一调用请求可以是一个终端发送的调用请求。

例如,当第一终端需要获取服务器创建的第一应用服务时,该第一终端可以向该服务器发送该第一调用请求。

在另一种可能的实现方式中,该第一调用请求可以是多个终端发送的调用请求。

以多人在线游戏场景为例,当多个终端需要建立游戏对局,该多个终端可以分别向该服务器发送该第一对局请求(即第一调用请求),即该第一对局请求可以是指定数量的终端发送的调用请求,此时该第一对局请求用于请求获取该服务器中的游戏对局服务(即第一应用服务)。

步骤302,基于该第一调用请求,获取该第一应用服务对应的第一父进程。

可选的,该服务器中还包括第一管理进程;响应于通过该第一管理进程接收到该第一调用请求,获取该第一应用服务对应的第一父进程。

可选的,该第一管理进程用于管理服务器上的各个应用服务对应的进程。例如,该第一管理进程可以用于启动或销毁该服务器上的各个父进程;该第一管理进程还可以用于复制或销毁该服务器上的各个子进程。

可选的,该第一管理进程还用于实现服务器上的各个应用服务对应的进程,与服务器上其他应用逻辑的交互。

其中,第一父进程复制出的第一子进程是该各个应用服务对应的进程中的任意一种,即服务器通过该第一子进程可以实现与该第一子进程对应的应用服务。

当服务器实现某一个应用服务时,可能需要与除该应用服务对应的进程(以第一子进程为例)之外的其他应用逻辑进程进行信息交互,此时该第一子进程可以通过第一管理进程实现与其他应用逻辑进程的交互,此时第一管理进程可以作为该第一子进程与其他应用之间交互过程的中转点。例如,以游戏场景为例,当服务器中存在独立服务器ds(即第一子进程时),当该ds需要与其他用于实现游戏功能的应用逻辑进程(例如roomsvr(房间服务)进程)进行交互时,可以通过ds对应的dsa(即第一管理进程),实现与roomsvr进程之间的交互。

在一种可能的实现方式中,响应于存在处于启动状态的该第一父进程,获取该第一应用服务对应的第一父进程。

当第一管理进程接收到该第一调用请求,且服务器中存在处于启动状态的第一父进程时,此时服务器可以直接获取该第一应用服务对应的第一父进程。即此时第一父进程处于启动状态,服务器可以直接调用该第一父进程执行相应的操作。

在另一种可能的实现方式中,响应于不存在处于启动状态的该第一父进程,启动该第一父进程。

当第一管理进程接收到该第一调用请求,且服务器中不存在处于启动状态的第一父进程时,此时服务器中无法直接获取该第一应用服务对应的第一父进程,因此服务器可以根据该第一调用请求,启动与该第一应用服务对应的第一父进程,以便服务器后续调用该第一父进程执行相应的操作。

在一种可能的实现方式中,响应于通过该第一管理进程接收到该第一父进程对应的第一在线信息,将该第一父进程确定为启动状态。

其中,该第一在线信息是通过该第一父进程根据该第一父进程与该第一管理进程之间的心跳协议发送的信息。

其中,心跳协议即为heartbeat机制,通常指的是客户端每隔一小段时间向服务器发送一个数据包,通知服务器该客户端仍然在线,并传输一些可能必要的数据信息。

在本申请实施例中,该心跳协议可以是服务器通过该第一父进程每隔指定周期向第一管理进程发送第一在线信息,向该第一管理进程通知该第一父进程仍处于在线状态(即启动状态),以便该第一管理进程需要调用该第一父进程时,可以根据该第一在线信息确定该第一父进程的状态,并获取该第一父进程。例如,当通过该第一管理进程调用该第一父进程时,服务器可以检测该第一管理进程在第一在线时间内是否接收到该第一父进程发送的第一在线信息,当第一在线时间内该第一管理进程接收到该第一父进程发送的第一在线信息,则将该第一父进程确定为启动状态;当在第一在线时间内该第一管理进程未接收到该第一父进程发送的第一在线信息,则第一管理进程确定该服务器中不存在处于启动状态的第一父进程。

在一种可能的实现方式中,基于该第一父进程与该第一管理进程之间的心跳协议,建立该第一父进程与该第一管理进程之间的通信连接,以便该第一父进程向该第一管理进程发送第一在线信息。

当服务器通过该第一管理进程确定该服务器中不存在处于启动状态的第一父进程时,服务器根据该第一调用请求,启动该第一父进程后,第一父进程可以根据该第一父进程与该第一管理进程之间的心跳协议,建立该第一父进与该第一管理进程之间的通信连接,以便该第一父进程向该第一管理进程发送第一在线消息,此时第一管理进程可以每隔第一在线时间接收到该第一父进程发送的第一在线信息,并根据该第一在线信息确定该第一父进程此时的状态。

在一种可能的实现方式中,该第一子进程是游戏场景中,用于运行虚拟场景的独立服务器ds;该第一父进程是游戏场景中,用于复制生成该独立服务器的种子独立服务器seedds。

其中,当服务器接收到第一调用请求后,可以对该seedds进行复制,生成与该seedds对应的各个独立服务器ds,以便服务器通过复制出的各个ds控制各个游戏对局。

该seedds对应的第一物理内存中存储有ds控制游戏对局所需的基础数据(例如游戏数据,运行代码等),服务器通过对seedds进行复制获得的ds,可以实现加载出与第一调用请求对应的游戏对局,并运行该游戏对局中的虚拟场景。

步骤303,对该第一父进程的页表进行复制操作,获得该第一子页表;该页表用于指示该页表对应的进程的物理地址信息。

其中,页表是一种特殊的数据结构,放在系统空间的页表区,用于存放逻辑地址与物理地址之间的对应关系,即页表可以实现的是页表中的各个页号与物理内存块号的地址映射。例如,当需要确定某个逻辑地址对应的物理地址时,可以用页号去检索页表,从页表中得到该页的物理块号,把物理块号装入物理地址寄存器中。同时,将页内地址直接送入物理地址寄存器的块内地址字段中。这样,物理地址寄存器中的内容就是由二者拼接成的实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换,从而确定了需要访问的物理地址。

步骤304,基于该第一子页表,构建该第一子进程。

由于该第一子页表是对该第一父进程的页表进行复制操作得到的,因此该第一子页表中的各个数据与第一父进程中的各个数据相同,因此该第一子页表中逻辑地址与物理地址之间的映射关系,与第一父进程的页表中的逻辑地址与物理地址之间的映射关系一致,因此第一子进程与第一父进程对应的物理地址也应该是一致的,即第一子进程在创建过程中以及应用过程中,也可以直接使用该第一父进程对应的物理地址中存储的数据,从而避免了在第一子进程复制过程中,调用计算资源重新构建第一子进程造成的计算资源的浪费,降低了构建第一子进程对服务器造成的运行负担,也降低了第一子进程在复制后占用的服务器物理内存空间。

在一种可能的实现方式中,对该第一父进程的进程信息进行复制,获得该第一子进程对应的进程信息;该进程信息包括代码段、用户栈、内核栈以及虚拟地址空间中的至少一者;基于该第一子页表以及该第一子进程对应的进程信息,构建该第一子进程。

即对该第一父进程进行复制操作,获得第一子进程的过程中,可以分别对第一父进程的代码段、用户栈、内核栈以及虚拟地址空间中的至少一者进行复制,并根据该第一子页表,以及复制的该进程信息,构建该第一子进程。

在一种可能的实现方式中,对该第一父进程的虚拟地址空间进行复制,获得第一子虚拟地址空间;基于该第一子虚拟地址空间,以及该第一子页表,构建该第一子进程。

当对该第一父进程的虚拟地址空间以及该第一父进程的页表分别进行复制,得到的第一子虚拟地址空间以及该第一子页表,可以用于确定该第一父进程预先确定的物理地址,获取该第一父进程预先确定的物理地址中的各个存储数据。

在一种可能的实现方式中,响应于通过该第一管理进程接收到该第一调用请求,获取该第一应用服务对应的第一父进程;基于该第一调用请求,通过该第一管理进程向该第一父进程发送复制请求;当通过该第一父进程接收到该复制请求,对该第一父进程进行复制操作,获得该第一子进程。

其中该服务器通过该第一管理进程接收到该第一调用请求后,该服务器通过该第一管理进程向该第一父进程发送复制请求后,对该第一父进程进行复制操作。也就是说,该服务器对该第一父进程的复制操作的管理,可以是通过该第一父进程对应的第一管理进程实现的。

以多人在线游戏场景为例,当服务器接收到第一对局请求时,可以基于该第一调用请求,获取该第一对局服务对应的第一对局父进程(即第一父进程);对该第一对局父进程进行复制操作,获得第一对局子进程(即第一子进程);此时第一对局父进程与第一对局子进程通用该第一对局父进程对应的第一物理内存;且该第一物理内存此时存储构建该第一对局请求对应的游戏对局的基础数据;此时服务器可以通过该第一对局子进程,基于该第一物理内存,构建该第一对局请求对应的游戏对局。

以多人在线游戏场景为例,在一种可能的实现方式中,对该第一对局父进程的页表进行复制操作,获得该第一子页表;该页表用于指示该页表对应的进程的物理地址信息;基于该第一子页表,构建该第一对局子进程。

在一种可能的实现方式中,对该第一对局父进程的进程信息进行复制,获得该第一对局子进程对应的进程信息;该进程信息包括代码段、用户栈、内核栈以及虚拟地址空间中的至少一者;基于该第一子页表以及该第一对局子进程对应的进程信息,构建该第一对局子进程。

在多人在线游戏场景时,该服务器可以先对该第一对局父进程的进程信息进行复制,例如第一对局父进程的代码段、用户栈、内核栈以及虚拟地址空间,或者该第一对局父进程中预先渲染的游戏对局的资源信息,该再根据该第一子页表中存储的,虚拟内存地址与物理内存地址的对应关系,复制出第一对局子进程,以便服务器根据该第一对局子进程,实现游戏对局的创建。

在一种可能的实现方式中,响应于通过该第一管理进程接收到该第一调用请求,获取该第一应用服务对应的第一对局父进程;基于该第一调用请求,通过该第一管理进程向该第一对局父进程发送复制请求;当通过该第一对局父进程接收到该复制请求,对该第一对局父进程进行复制操作,获得该第一对局子进程。

即在多人在线游戏场景中,通过第一管理进程可以实现对第一对局父进程复制,以得到第一对局子进程。

在一种可能的实现方式中,响应于存在处于启动状态的该第一对局父进程,获取该第一对局服务对应的第一对局父进程。

在一种可能的实现方式中,响应于不存在处于启动状态的该第一对局父进程,启动该第一对局父进程。

在一种可能的实现方式中,响应于通过该第一管理进程接收到该第一对局父进程对应的第一在线信息,将该第一对局父进程确定为启动状态;其中,该第一在线信息是通过该第一父进程根据该第一对局父进程与该第一管理进程之间的心跳协议发送的信息。

在一种可能的实现方式中,基于该第一对局父进程与该第一管理进程之间的心跳协议,建立该第一对局父进程与该第一管理进程之间的通信连接,以便该第一对局父进程向该第一管理进程发送第一在线信息。

步骤305,将该第一子进程对应的连接信息发送给至少一个终端,以便该至少一个终端与该第一子进程进行连接。

当第一子进程构建完成后,该服务器可以将该第一子进程对应的连接信息发送给至少一个终端,以便该至少一个终端与该第一子进程进行连接,通过该第一子进程实现该至少一个终端的第一应用服务。以该第一应用服务为游戏对局建立为例,此时该第一子进程用于游戏对局,当该第一子进程完成后,该服务器可以将该第一子进程对应的ip(internetprotocol,网际互联协议)地址信息下发至该至少一个终端,此时该至少一个终端可以根据该第一子进程对应的ip地址信息与该第一子进程进行连接,以便该至少一个终端可以根该第一子进程实现游戏对局内的数据交换和处理。

在一种可能的实现方式中,响应于通过该第一子进程进行第一读取操作,在该第一物理内存中获取该第一读取操作对应的第一数据。

当该第一子进程构建完成后,该服务器可以根据该第一子进程进行数据读取操作,且由于该第一子进程的创建过程中,复制了该第一父进程的页表,因此该第一子进程与该第一父进程是共用物理内存的(即第一物理内存),此时该第一子进程可以在该第一物理内存中的基础数据中获取该第一读取操作对应的第一数据。例如,以该第一子进程为游戏对局为例,当该第一子进程创建完成后,该第一子进程可能还需要进行初始化操作,此时该第一子进程可以获取该第一物理内存中的基础数据中,与该第一读取操作对应的第一数据(例如游戏图片,模型数据)等,以实现游戏对局的初始化。

在一种可能的实现方式中,响应于通过该第一子进程进行第一写入操作,在第二物理内存中写入该第一写入操作对应的第二数据,该第二物理内存是该第一物理内存之外的内存。

当该第一子进程构建完成后,该服务器还可以根据该第一子进程进行数据写入操作,且由于该第一子进程的创建过程中,复制了该第一父进程的页表,因此该第一子进程是基于该第一父进程的第一物理内存构建的,但在该第一子进程的运行过程中,可能产生与该第一父进程不同的数据信息,在不对该第一父进程的数据进行干扰,且保证第一子进程运行的灵活性的前提下,可以将该第一子进程产生的数据,写入该第二物理内存。此时该第一子进程既可以使用与该第一父进程共享的第一物理内存,也可以使用该第一子进程对应的第二物理内存,在降低第一子进程复制时对服务器产生的负担的同时,保证了第一子进程运行的灵活性。

在一种可能的实现方式中,接收第一终端发送的第一执行请求;该第一执行请求用于指示该第一子进程执行第一应用服务;该第一终端是与该第一子进程连接的该至少一个终端中的任意一个;基于该第一执行请求,通过该第一子进程进行第一写入操作。

当该第一子进程构建完成,且与该第一终端建立连接后,该服务器可以通过第一子进程,根据该第一终端上传的数据执行该第一应用服务,此时第一子进程可以将该第一应用服务产生的信息返回至该第一终端,也可以将该第一应用服务产生的信息存储至服务器的存储设备中,即此时该服务器可以通过该第一子进程进行第一写入操作,将第一应用服务产生的信息保存至该第一子进程对应的第二物理内存中。

在一种可能的实现方式中,响应于第一指定时间内第一父进程未执行复制操作,销毁该第一父进程。

由于第一父进程在启动状态下会占用较多的内存资源,因此当第一父进程在第一指定时间内未执行复制操作时,则表明该第一父进程在已经处于闲置状态,有较大的可能在短时间内不需要再通过该第一父进程复制产生第一子进程,此时可以将该第一父进程销毁,并当接收到下一个第一调用请求时,再根据该第一调用请求,重新启动该第一父进程。

在一种可能的实现方式中,响应于第一指定时间内第一父进程未执行复制操作,将该第一父进程对应的进程信息从第一物理内存中删除。

当需要将该第一父进程销毁时,可以直接将该第一父进程对应的进程信息从第一物理内存中删除,当需要重新启动该第一父进程时,可以通过存储于服务器的其他存储部件(例如硬盘)中的数据,重新构建并启动该第一父进程。

在一种可能的实现方式中,响应于第一指定时间内第一父进程未执行复制操作,且该服务器中不存在第一子进程时,销毁该第一父进程。

在一种可能的实现方式中,响应于通过该第一对局子进程进行第一读取操作,在该第一物理内存中获取该第一读取操作对应的第一游戏数据。

在多人在线游戏场景中,当服务器在处理游戏对局时,需要对读取第一物理内存的操作时,可以通过第一读取操作,获取该第一读取操作对应的第一游戏数据(例如道具数值等)。

在一种可能的实现方式中,响应于通过该第一对局子进程进行第一写入操作,在第二物理内存中写入该第一写入操作对应的第二数据,该第二物理内存是该第一物理内存之外的内存。

在多人在线游戏场景中,当服务器在处理游戏对局时,可能需要对游戏对局中产生的对局数据进行保存并写入,此时,可以在第二物理内存中写入该第二写入操作对应的第二游戏数据(例如玩家生命值等)。由于每个游戏对局中的产生的游戏数据可能不一致,因此该第二游戏数据可以保存在各个游戏对局共享的第一物理内存之外的第二物理内存,防止各个游戏对局之间的数据产生干扰。

在一种可能的实现方式中,接收第一终端发送的第一执行请求;该第一执行请求用于指示该第一对局子进程执行第一应用服务;该第一终端是与该第一对局子进程连接的该至少一个终端中的任意一个;基于该第一执行请求,通过该第一对局子进程进行该第一写入操作。

其中,该第一对局子进程对应的第一写入操作,可以是接收到第一终端发送的第一执行请求后执行的。

在一种可能的实现方式中,响应于第一指定时间内第一对局父进程未执行复制操作,销毁该第一对局父进程。

由于该服务器中存在第一子进程时,该第一子进程可能仍需要使用该第一父进程的第一物理内存,为了避免对第一子进程运行的影响,可以等待该服务器中不存在该第一子进程时,销毁该第一父进程,从而减小对服务器造成的内存负荷。

除了应用于多人在线游戏场景之外,本申请实施例所示方案还可以应用与web-cgi(web-commongatewayinterface,网页-通用网关接口),此时第一子进程可以是web-cgi中的cgi程序,第一父程序可以用于复制生成各个cgi程序,并且该第一父程序与该第一父程序复制出的各个cgi程序可以共用第一物理内存,且该web-cgi对应的服务器可以执行本申请实施例中涉及的全部或部分步骤,以达成本申请实施例中所涉及到的部分或全部有益效果。由于web-cgi场景中的第一子进程的复制过程、以及第一子进程与终端的接入过程与上述过程相同,此处不再赘述。

当该服务器中存在至少一个第一父进程复制出的第一子进程时,也就是说,在该第一父进程根据第一调用请求复制得到第一子进程之前,该服务器中已经存在第一子进程时,此时通过对该第一父进程的复制还能达到如下的效果:

当服务器中存在至少一个第一父进程复制出的第一子进程时,通过本申请实施例所述的方案,根据第一调用请求,对第一父进程进行复制操作得到新的第一子进程后,此时服务器中存在至少两个第一子进程时,由于该至少两个第一子进程都与第一父进程共享第一物理内存,因此服务器在创建该至少两个第一子进程时,可以直接调用第一物理内存中存储的,用于运行第一应用服务的基础数据,直接构建各个第一子进程,在构建多个相同的第一子进程后,不需要在内存中存储多个子进程各自对应的基础数据,避免了构建相同的第一子进程所造成的内存存储数据冗余的情况发生。

并且,现有的cpu(centralprocessingunit,中央处理器)为了提高cpu的计算能力,大多都采用了多线程的技术,以提升cpu的并行数据处理能力。但在cpu通过多线程并行处理多个进程的过程中,如果多个进程的执行流的数据相关性较小时,可能会导致cpucachemiss的情况发生,例如在cpu同时处理进程1与进程2的情况下,cpu处理进程1,cpucache中存储有进程1对应的数据信息,而cpu中的进程2同时也在运行,当cpu的进程2对应的数据信息需要从主存(即物理内存)写入cpucache时,cpucache中有关进程1的数据可能丢失,此时cpu运行进程1时,且当cpu需要读取cpucache中被进程2对应的数据信息替代掉的进程1对应的数据信息时,会产生cpucachemiss的情况,无法在cpucache中读取相应的数据,从而需要去物理内存中读取数据,造成cpu的执行效率较低。

而通过本申请实施例所述的方案,当服务器中存在通过第一父进程复制得到的多个第一子进程时,由于多个第一子进程均与第一父进程共享第一物理内存,因此当cpu通过超线程同时运行多个第一子进程时,由于各个第一子进程共享第一物理内存,因此各个第一子进程运行时,cpucache与物理内存的对应关系具有较高的相似度,因此各个第一子进程的切换过程中,cpucache的数据替换发生的频率较小,cpucachemiss发生的概率更低,提高了cpu的执行效率,提高了服务器的最大负载。

综上所述,在本申请实施例所示的方案中,在服务器创建第一应用服务时,可以先获取第一应用服务对应的父进程,再根据父进程复制出共享父进程的物理内存的子进程,以实现通过子进程完成终端请求的应用服务。通过上述方案,由于父进程复制出的子进程与父进程共享物理内存,且该第一物理内存中存储有执行第一应用服务所需要的基础数据,因此对第一父进程复制以得到第一子进程的过程中,不需要在内存中重新加载第一子进程的数据,也不需要调用cpu重新计算以获得第一子进程的数据,减小了服务器创建应用服务对应的子进程对服务器造成的负荷,减小了创建应用服务对服务器的资源占用。

在使用虚幻4引擎制作的多人在线游戏,后台服务中一般会使用ds处理玩家共同的游戏玩法逻辑。一个ds对应一个游戏单局。当有大量单局在运行时,游戏后台需要启动大量的ds。因此需要dsa对服务器上的ds进行动态的管理。一个dsa只对本服务器上的ds负责,即一台服务器就有一个dsa。一般情况下,游戏后台服务有许多dsa,还有数十倍的ds。当有一个游戏客户端需要启动游戏单局时,请求会发送到大厅服务,大厅会通知dsa启动一个ds。收到启动请求后,dsa会通过外部命令启动ds的程序文件。ds启动后,首先进入资源加载阶段,把游戏所需要的静态资源加载进内存并生成对应的内存对象。然后通知客户端、等待客户端的接入。客户端会根据大厅返回的信息建立与ds的连接,并开始游戏。游戏结束后,ds会断开与客户端的连接,把游戏的结果发送的给大厅服务保存,最后ds会自动停止。

一个dsa负责管理一台服务器上所有的ds。一般情况下,一台机器需要启动至少三倍核数的ds。以一台32核的服务器为例,这台服务器需要启动96个ds进程以达到服务器承载玩家数量的技术要求。独立启动ds会有以下几个问题:

1.每个ds都需要加载大量资源,然后对其对象化。这个过程会消耗服务器大量的资源,包括cpu资源、内存资源等,导致单个cpu的负载会产生一个毛刺,甚至达到峰值并持续数秒。这种情况会影响其他正在运行的ds,使其获得不到cpu的计算资源,游戏的表现是产生卡顿。

2.每个ds拥有独立的内存资源,由于服务器上的ds数量较多,进程的频繁切换会使cpucache(缓存)的命中率降低,导致cpu单周期执行的指令数减少,cpu的执行效率降低。同时会放大超线程、numa(nonuniformmemoryaccess,用于多处理器的电脑记忆体设计)架构的负面因素,使单个ds的cpu负载升高,游戏的帧率下降。

3.ds在等待用户接入前的启动过程中需要加载地图资源、玩家资源、物品资源等等,整个过程持续数秒到数十秒,加载速度较慢。

图4是根据一示例性实施例示出的一种游戏场景中的应用服务请求方法的流程图。本申请实施例通过fork机制,实现多进程最大化的共用一份物理内存,降低了多进程对服务器的物理内存造成的负荷,降低了由于当cpu超线程运行时产生的cpucache丢失的风险,提高了cpu的运行效率,该方法包括如下步骤。

s401,游戏客户端向大厅服务发送开局请求。

其中,游戏客户端可以加载于该第一终端。当该第一终端运行该游戏客户端时,响应于接收到用户触发的开局控件,该游戏客户端所在的第一终端向该大厅服务发送开局请求信息。

s402,大厅服务向dsa请求ds资源。

当该大厅服务接收到该游戏客户端发送的开局请求后,可以向该dsa(即第一管理设备)发送与该开局请求对应的ds资源请求信息(即第一调用请求),以实现向该dsa请求对应的ds资源。

此时该大厅服务向dsa发送的资源请求信息可以是与根据该游戏客户端向大厅服务发送的开局请求确定的。例如当该用户触发游戏客户端中的第一模式开局控件时,第一终端向该大厅服务发送第一模式对应的开局请求信息,此时大厅服务向dsa发送资源请求信息,以获取第一模式对应的ds资源;或者,当该用户触发游戏客户端中的第二模式开局控件时,第一终端向该大厅服务发送第二模式对应的开局请求信息,此时大厅服务向dsa发送资源请求信息,以获取第二模式对应的ds资源。

s403,dsa向seedds(seeddedicatedserver,种子独立服务器)发送获取ds请求。

当dsa接收到大厅服务发送的ds资源请求信息时,dsa可以根据该ds资源请求信息中指示的ds类型,获取对应的seedds(即第一父进程)。seedds启动后可主动连接dsa也可选择由dsa发起连接到seedds。seedds会定时发送心跳协议到dsa,例如该seedds根据心跳协议设置的定时发送间隔可以为1秒,此时seedds每秒根据心跳协议发送在线信息至dsa,以通知该seedds的处于启动状态(或可用状态)。

s404,seedds接收到该dsa发送的fork(复制)协议,执行fork操作。

seedds一直等待dsa发送的fork协议。当seedds收到fork协议后,则调用forkapi(applicationprogramminginterface,应用程序接口),生成seedds对应的子程序。

s405,seedds将ds信息发送至dsa。

seedds作为第一父进程,将fork的执行的结果返回给dsa,然后继续执行原有逻辑,发送心跳、等待fork协议。

s406,ds与dsa建立链接。

ds会关闭通过seedds连接dsa的组件,并以ds(即第一子进程)的身份重新连接dsa。

s407,dsa将ds的ip和端口返回给大厅服务。

s408,大厅服务将开局响应信息返回至该第一终端。

当大厅服务接收到ds的ip和端口后,将包含ds的ip和端口的开局响应信息返回至第一终端,当该第一终端接收到大厅服务返回的开局响应信息,可以根据该开局响应信息,实现与该第一子进程ds的连接,以便后续该第一子进程可以对第一终端上传的游戏数据进行处理并返回第一终端处理结果。

s409,游戏客户端与ds连接后,开始游戏。

s410,ds根据心跳协议向dsa发送心跳信息。

此时ds可以通过心跳协议向dsa按一定周期发送心跳信息,以告知该dsa,此时ds处于正常运行状态。

s411,dsa与ds同步数据信息。

dsa将数据信息(例如心跳信息的反馈信息)同步发送至ds。

s412,游戏客户端通过第一终端向ds发送用户操作数据。

当游戏开局后,响应于接收到用户触发的操作,将游戏客户端产生的用户操作数据通过第一终端发送给ds。

s413,ds向游戏客户端返回同步数据。

ds对该用户操作数据进行处理并返回至游戏客户端,当游戏对局未满足游戏结束条件时,返回步骤s412。

s414,ds向游戏客户端返回游戏结束信息。

当游戏对局满足结束条件时,ds可以向游戏客户端返回游戏结束信息,以告知该游戏对局已经结束,并断开该ds与游戏客户端的连接。

s415,ds向dsa返回单局游戏结果。

s416,dsa向大厅服务转发单局游戏结果。

本申请实施例在上述流程中,引入了seedds,dsa同时管理seedds和ds。dsa管理多个seedds,seedds会fork出多个ds,这些ds又会被dsa管理。图5示出了本申请实施例涉及的一种独立服务器架构变化示意图。如图5中的501部分所示,在原有的独立服务器架构的管理架构中,通过dsa直接管理ds的创建以及运行等流程;如图5中的502部分所示,则是本申请实施例涉及的独立服务器架构的管理架构,与原有架构不同的是ds并不是dsa通过外部命令拉起,dsa通过外部命令拉起seedds,且dsa通过tcp(transmissioncontrolprotocol,传输控制协议)连接发送协议给seedds,由seeddsfork出多个ds,因此服务器在启动多个相同类型的ds时,只需要预先拉起相同类型的ds对应的seedds,再由seeddsfork出多个ds,且fork进程中涉及到的是对seedds的代码段、用户栈、内核栈、虚拟地址空间、页表的拷贝,通过复制页表,子进程ds的启动是非常轻量且迅速,且子进程完全共享父进程的物理内存。

并且目前云计算蓬勃发展,互联网各种服务均托管在云服务商的cvm中。但多进程服务模型在cvm中运行会有几点限制,一台物理服务器上一般会虚拟出许多的cvm。物理服务器性能强劲,通常会有2个甚至更多的物理cpu。多个物理cpu通过numa架构连接在一起。同时物理cpu的每个物理核还会开启超线程,虚拟出2个逻辑核(可称为vcpu)。

一台拥有多核的cvm可能会构建在多个物理cpu上,形成跨物理cpu的cvm。当大量进程需要进行调度时,不可避免的会出现跨numanode(节点)调度。跨node调度会出导致cachemissing(存储丢失),访问较远的内存块,导致cpu执行效率显著降低。

超线程也是制约多进程模型性能的一个因素。云服务商会将超线程作为一个核(vcpu)售卖给客户,但是当2个超线程共享一个物理核时,其性能会有所下降。一个物理核(core)如果开启超线程会有两个逻辑核(vcpu),则两个逻辑核的执行流会被串行的运行。如果两个执行流的数据相关性小,则两个逻辑cpu的执行效率会降低,严重的情况可能会导致物理core的执行效率小于一个执行流的情况。

图6示出了本申请实施例涉及的一种物理内存共享示意图。如图6所示,父进程601通过fork操作,复制出子进程1与子进程2,并且该在该父进程601复制出子进程1与子进程2时,父进程的线性地址也同样进行复制操作,以实现子进程1、子进程2以及父进程601对应的物理内存相同,因此子进程1、子进程2以及父进程601共用物理内存。当大量子进程需要进程切换时,由同一父进程fork出的各个子进程可以共享cpucache中的数据,减少了cpucachemissing的情况发生,提升cpu每个周期指令执行数量,从而提升cpu的执行效率,降低cpu的负载。

图7示出了本申请实施例涉及的一种种子独立服务器的运行逻辑示意图。

如图7所示,该种子独立服务器的运行逻辑包括:

s701,seedds启动加载资源。

s702,判断seedds是否与dsa建立连接。

当seedds没有与dsa建立连接时,尝试将seedds与dsa进行连接。

s703,当seedds与dsa存在连接时,通过seedds向dsa发送心跳信息,以向dsa通知该seedds处于启动(在线)状态。

s704,判断seedds是否接收到dsa发送的消息。

当该seedds未接收到dsa发送的消息时,返回s702,判断seedds是否与dsa建立连接。

s705,当seedds接收到dsa发送的消息,对该消息进程解包。

当seedds接收到dsa发送的消息不是启动命令消息,则seedds向dsa继续发送心跳信息,再返回s702,判断seedds是否与dsa建立连接。

s706,当seedds接收到dsa发送的消息是启动命令消息,则seedds执行fork操作,生成第一子进程以便运行游戏逻辑。且此时父进程seedds返回至s702,继续判断seedds是否与dsa建立连接。

图8示出了本申请实施例涉及的一种种子独立服务器的复制逻辑示意图。如图8所示,该种子独立服务器的复制逻辑包括以下步骤。

s801,dsa请求ds资源。

s802,dsa检测是否存在与ds资源对应的seedds。

s803a,当不存在与ds资源对应的seedds时,启动seedds,并建立seedds与dsa的连接,返回步骤s802。

s803b,当存在与ds资源对应的seedds时,发送forkds的协议,以便seeddsforkds,并将复制出的ds建立与dsa的连接。

由于seedds加载的资源有限,而且seedds会进行一部分ds数据的预处理工作,例如seedds会指定加载的游戏地图关卡、玩法等,然后进行局内数据的初始化,因此,seedds会根据预加载的资源启动多个。但是预启动多个seedds是可能会提高对服务器的负担。seedds会占用资源,虽然不占用cpu资源,但是会占用内存资源。如果地图种类和玩法都非常多,他们的组合将会是指数级增加。对于一个游戏而言,存在许多运行ds的服务器,并不是每台服务器都会运行所有类型的地图和玩法。

因此本申请还可以采用动态启动seedds的方式,以进一步减小对服务器的资源消耗。

在一种可能的实现方式中,可以将地图加玩法为key(索引),记录对应的seedds。如果该地图加玩法没有对应的seedds立即通过外部命令拉起一个seedds。seedds启动加载资源、并进行初始化。启动完成后,dsa就可以发送fork协议给seedds,请求seeddsfork出执行逻辑的ds。当后续再有这个地图加玩法的请求时,就可以直接发送fork协议给对应的seedds,以便seedds直接fork出对应的ds。

图9示出了本申请实施例涉及的一种种子独立服务器的销毁流程示意图。如图9所示,该种子独立服务器的销毁流程包括如下步骤。

s901,dsa请求ds资源。

s902,dsa记录seedds最后forkds的时间。

s903,遍历seedds判断是否闲置。

在一种可能的实现方式中,当dsa记录的第一seedds最后forkds的时间,与遍历seedds的时间大于第一阈值时,将该第一seedds确定为闲置状态。

s904a,当存在处于闲置状态的seedds,将该seedds销毁。

s904b,当不存在处于闲置状态的seedds,继续等待下一轮的遍历。

动态启动的seedds如果长期没有fork请求,随着时间的增长,seedds的数量会不断的堆积,造成资源的浪费。因此,增加了动态销毁的seedds的特性。会记录最后一个fork请求的时间。根据的配置的时长,如果这段时间没有收到fork请求,则会销毁这个seedds。

在单服务器上dsa管理多ds场景里,本申请实施例中增加seedds,dsa根据游戏逻辑动态启动seedds再fork出执行游戏逻辑的ds。使所有ds可有效的共享最大化的物理内存,提升cpucache的命中率,降低单个dsi的cpu负载,显著降低启动时长。seedds消耗的计算资源极低,并且可根据加载资源的进行分类,进行动态启动,最大化节约内存资源。seedds可fork任意多个ds,并且可根据无fork请求的时长配置关闭的条件,以节省机器资源。

以下是对比直接启动ds和seeddsfork两种方式拉起20个ds场景下的数据信息。图10示出了本申请实施例涉及的一种内存状态对比结果示意图。如图10中1001部分所示,当服务器通过直接启动ds的方式启动多个进程时,每个进程使用的虚拟内存(每个进程virt(虚拟内存,virtualmemoryusage)列所对应的值)为1.7gb(gigabyte,十亿字节),物理内存(每个进程res(residentmemoryusage,常驻内存)列所对应的值)为0.7gb。整机使用的物理内存为13gb(内存行的used所对应的值),基本接近0.7*20。

如图10中1002部分所示,当服务器使用seeddsfork方式启动多个进程时,采用seeddsfork出来的进程名为ds-0000-xxxx。每个进程使用的虚拟内存为1.7gb,物理内存为0.7gb,与直接启动的每个进程使用的资源一致。但是整机使用的物理内存仅为6.6gb。可以看到两种场景下ds进程的虚拟内存virt、常驻内存res相差不大,但是整机的物理内存占用从13gb下降到6.6gb。进程之间共享了大量的内存,节省了机器的内存资源。

图11示出了本申请实施例涉及的一种内存占用变化对比结果示意图。如图11中1101部分所示,当服务器采用直接启动ds的方式启动各个进程时,每个进程使用独立的物理内存,因此随着进程线性的增加,物理内存的使用量线性增长且速度较快。

如图11中1102部分所示,当服务器采用seeddsfork方式启动各个进程时,随着进程线性增加,物理内存也在线性增长,但是增长速度非常缓慢。直接启动的物理内存使用增长快,最后基本将物理内存消耗完。而seeddsfork模式物理内存增长缓慢,启动同样数量的进程,使用的物理内存较直接启动大幅度减少。

图12示出了本申请实施例涉及的一种整机cpu使用率变化对比结果示意图。如图12中1201部分所示,当服务器采用直接启动ds的方式启动各个进程时,每个进程启动后,都需要重新加载资源,将整机cpu使用率拉上一个新台阶,加载完资源后,会有少许回落,但整机cpu使用率仍较明显的不断提升。

如图12中1202部分所示,当服务器采用seeddsfork方式启动ds时,seedds启动后整机cpu使用率接近零。forkds后,有一段动态资源的初始化的过程,会有一个尖峰,随后回落。整机cpu使用量不断缓慢提升。直接启动ds整机的cpu负载不断叠加增长,而seeddsfork增长缓慢。同样的进程数下,seeddsfork整机cpu使用率低于直接启动的方案呢。

图13示出了本申请实施例涉及的一种单cpu使用率变化对比结果示意图。如图13中1301部分所示,当服务器采用直接启动ds的方式启动各个进程时,每个进程启动都会进行静态资源加载,导致单cpu使用率达到100%。直接影响同cpu运行的其他进程。

如图13中1302部分所示,当服务器采用seeddsfork方式启动各个进程时,只有seedds启动会有cpu达到100%的情况。拉起ds只有一个较小的毛刺,对其他ds影响较小。

图14示出了本申请实施例涉及的负载对比示意图。如图14所示,seeddsfork方式启动ds比直接启动ds的整机常驻内存负载减小了50%;seeddsfork方式启动ds比直接启动ds的整机cpu负载减小了20%;seeddsfork方式启动ds比直接启动ds的ds启动时长降低了95%。因此seeddsfork方案通过共享物理内存,降低了整机物理内存的使用量,提高cpucache的命中率,从而提高了cpu的执行效率,降低了整机cpu的负载。

由于现有的服务器通常是基于numa架构将多个物理cpu连接在一起的,同时物理cpu的每个物理核还会开启超线程,虚拟出两个逻辑核,因此一台有用多核的服务器(或云服务器),可能会构建在多个物理cpu上,形成跨物理cpu的云服务器,此时当大量进程需要进行调度时,不可避免的会出现跨numanode调度。跨node调度会出导致cachemissing,访问较远的内存块,导致cpu执行效率显著降低。

而通过本申请实施例所述方案,当服务器通过各个cpu运行多个执行相同应用服务的子进程时,由于多个执行相同应用服务的子进程是通过同一父进程复制所得到的,且多个执行相同应用服务的子进程均与该父进程共享父进程对应的物理内存,因此通过numa架构下的多个cpu执行多个执行相同服务的子进程时,调用的数据的内存地址有更大的可能是相同或者相近的,增大了服务器通过多个vcpu执行的各个执行流的数据相关性,降低了cachemissing发生的可能性,尽可能减小了在numa架构以及超线程的情况下,由于cachemissing对于cpu调用造成的不利影响,提高了cpu的执行效率。

综上所述,在本申请实施例所示的方案中,在服务器需要创建应用服务时,可以先获取服务器需要创建的应用服务对应的父进程,再根据父进程复制出共享父进程的物理内存的子进程,以实现通过子进程完成终端请求的应用服务。通过上述方案,由于父进程复制出的子进程与父进程共享物理内存,因此子进程的复制过程中,不需要在内存中重新加载子进程的数据,减小了服务器创建应用服务对应的子进程对服务器造成的负荷,减小了创建应用服务对服务器的资源占用率。

图15是根据一示例性实施例示出的一种应用服务请求装置的结构方框图。该应用服务请求装置可以实现由图2或图3所示实施例提供的方法中的全部或部分步骤,该应用服务请求装置包括:

调用请求接收模块1501,用于接收第一调用请求;所述第一调用请求用于获取所述服务器创建的第一应用服务;

第一父进程获取模块1502,用于基于所述第一调用请求,获取所述第一应用服务对应的第一父进程;

第一子进程获取模块1503,用于对所述第一父进程进行复制操作,获得第一子进程;所述第一子进程与所述第一父进程共用所述第一父进程对应的第一物理内存;所述第一物理内存用于存储执行所述第一应用服务所需要的基础数据;所述第一子进程用于执行所述第一应用服务;

连接信息发送模块1504,用于将所述第一子进程对应的连接信息发送给至少一个终端,以便所述至少一个终端与所述第一子进程进行连接。

在一种可能的实现方式中,所述第一子进程获取模块1503,包括:

第一子页表获取子模块,用于对所述第一父进程的页表进行复制操作,获得所述第一子页表;所述页表用于指示所述页表对应的进程的物理地址信息;

第一子进程构建子模块,用于基于所述第一子页表,构建所述第一子进程。

在一种可能的实现方式中,所述第一子进程获取模块1503,还包括:

进程信息复制子模块,用于对所述第一父进程的进程信息进行复制,获得所述第一子进程对应的进程信息;所述进程信息包括代码段、用户栈、内核栈以及虚拟地址空间中的至少一者;

所述第一子进程构建子模块,还用于,

基于所述第一子页表以及所述第一子进程对应的进程信息,构建所述第一子进程。

在一种可能的实现方式中,所述服务器还包括第一管理进程;

所述第一父进程获取模块1502,还用于,

响应于通过所述第一管理进程接收到所述第一调用请求,获取所述第一应用服务对应的第一父进程;

所述装置还包括:

复制请求发送模块,用于基于所述第一调用请求,通过所述第一管理进程向所述第一父进程发送复制请求;

所述第一子进程获取模块,还用于,

当通过所述第一父进程接收到所述复制请求,对所述第一父进程进行复制操作,获得所述第一子进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述第一父进程获取模块,还用于,

响应于存在处于启动状态的所述第一父进程,获取所述第一应用服务对应的第一父进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述第一父进程获取模块,还用于,

响应于不存在处于启动状态的所述第一父进程,启动所述第一父进程。

在一种可能的实现方式中,响应于通过所述第一管理进程接收到所述第一调用请求,所述装置还包括:

父进程状态确定模块,用于响应于通过所述第一管理进程接收到所述第一父进程对应的第一在线信息,将所述第一父进程确定为启动状态;

其中,所述第一在线信息是通过所述第一父进程根据所述第一父进程与所述第一管理进程之间的心跳协议发送的信息。

在一种可能的实现方式中,所述装置还包括:

通信连接建立模块,用于基于所述第一父进程与所述第一管理进程之间的心跳协议,建立所述第一父进程与所述第一管理进程之间的通信连接,以便所述第一父进程向所述第一管理进程发送第一在线信息。

在一种可能的实现方式中,所述装置还包括:

第一读取模块,用于响应于通过所述第一子进程进行第一读取操作,在所述第一物理内存中获取所述第一读取操作对应的第一数据。

在一种可能的实现方式中,所述装置还包括:

第一写入模块,用于响应于通过所述第一子进程进行所述第一写入操作,在第二物理内存中写入所述第一写入操作对应的第二数据,所述第二物理内存是所述第一物理内存之外的内存。

在一种可能的实现方式中,所述方法还包括:

第一父进程销毁模块,用于响应于第一指定时间内第一父进程未执行复制操作,销毁所述第一父进程。

在一种可能的实现方式中,所述第一子进程是游戏场景中,用于运行虚拟场景的独立服务器ds;

所述第一父进程是游戏场景中,用于复制生成所述独立服务器的种子独立服务器seedds。

综上所述,在本申请实施例所示的方案中,在服务器创建第一应用服务时,可以先获取第一应用服务对应的父进程,再根据父进程复制出共享父进程的物理内存的子进程,以实现通过子进程完成终端请求的应用服务。通过上述方案,由于父进程复制出的子进程与父进程共享物理内存,且该第一物理内存中存储有执行第一应用服务所需要的基础数据,因此对第一父进程复制以得到第一子进程的过程中,不需要在内存中重新加载第一子进程的数据,也不需要调用cpu重新计算以获得第一子进程的数据,减小了服务器创建应用服务对应的子进程对服务器造成的负荷,减小了创建应用服务对服务器的资源占用。

图16是根据一示例性实施例示出的一种计算机设备的结构示意图。该计算机设备可以实现为服务器。该服务器可以为图1所示的服务器120。所述计算机设备1600包括中央处理单元1601、包括随机存取存储器(randomaccessmemory,ram)1602和只读存储器(read-onlymemory,rom)1603的系统存储器1604,以及连接系统存储器1604和中央处理单元1601的系统总线1605。所述计算机设备1600还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统1606,和用于存储操作系统1613、应用程序1614和其他程序模块1615的大容量存储设备1607。

所述大容量存储设备1607通过连接到系统总线1605的大容量存储控制器(未示出)连接到中央处理单元1601。所述大容量存储设备1607及其相关联的计算机可读介质为计算机设备1600提供非易失性存储。也就是说,所述大容量存储设备1607可以包括诸如硬盘或者光盘只读存储器(compactdiscread-onlymemory,cd-rom)驱动器之类的计算机可读介质(未示出)。

不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、rom、闪存或其他固态存储其技术,cd-rom、或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1604和大容量存储设备1607可以统称为存储器。

计算机设备1600可以通过连接在所述系统总线1605上的网络接口单元1611连接到互联网或者其它网络设备。

所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器1601通过执行该一个或一个以上程序来实现图2、图3以及图4所示的方法的全部或者部分步骤。

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

在示例性实施例中,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各个实施例所示的方法。

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

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

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