发明内容
本公开实施例至少提供一种应用启动方法、装置、计算机设备和存储介质。
第一方面,本公开实施例提供了一种应用启动方法,包括:
基于至少一种预设应用在启动时所需要的运行环境,创建容器镜像;
利用所述容器镜像启动用于接收应用启动请求的网页服务器web server;所述web server包括用于加载应用代码的第一接口和用于初始化应用的第二接口;
基于所述容器镜像启动多个待分配容器,并在启动过程中为每个所述待分配容器分别添加启动完成的所述web server。
在一种可能的实施方式中,在所述多个待分配容器启动完成后,还包括:
在接收到针对所述至少一种预设应用中的目标应用的外部启动请求之后,从所述多个待分配容器中确定所述外部启动请求对应的目标容器,并基于所述外部启动请求确定针对所述目标容器的应用启动请求;
将所述应用启动请求发送至所述目标容器对应的web server;
利用所述目标容器对应的web server中的第一接口和第二接口,启动所述目标应用。
在一种可能的实施方式中,所述利用所述目标容器对应的web server中的第一接口和第二接口,启动所述目标应用,包括:
基于所述应用启动请求,确定所述目标应用对应的目标代码的代码位置;
调用所述目标容器对应的所述第一接口,从所述代码位置处加载所述目标代码;
在确定所述目标代码加载完成的情况下,利用所述第二接口基于加载的所述目标代码,启动所述目标应用。
在一种可能的实施方式中,所述利用所述第二接口基于加载的所述目标代码,启动所述目标应用,包括:
利用所述应用启动请求,调用所述第二接口;
利用所述第二接口执行加载的所述目标代码,在加载的所述目标代码执行完成的情况下,确定所述目标应用启动成功。
在一种可能的实施方式中,在启动所述目标应用之后,还包括:
接收针对所述目标应用的应用访问请求,利用所述目标容器对应的web server,将所述应用访问请求转发给所述目标应用,以使所述目标应用对所述应用访问请求进行响应。
在一种可能的实施方式中,所述基于所述外部启动请求确定针对所述目标容器的应用启动请求,包括:
对所述外部启动请求进行解析,得到所述外部启动请求中携带的目标应用对应的目标代码的代码位置以及HTTP请求头信息,并生成包括所述HTTP请求头信息和所述代码位置的应用启动请求。
在一种可能的实施方式中,在启动所述目标应用之后,还包括:
在确定所述目标应用使用完毕之后,对所述目标容器进行容器资源释放,以将所述目标容器对应的状态恢复至分配给所述目标应用之前的状态。
第二方面,本公开实施例还提供一种应用启动装置,包括:
创建模块,用于基于至少一种预设应用在启动时所需要的运行环境,创建容器镜像;
第一启动模块,用于利用所述容器镜像启动用于接收应用启动请求的网页服务器web server;所述web server包括用于加载应用代码的第一接口和用于初始化应用的第二接口;
第二启动模块,用于基于所述容器镜像启动多个待分配容器,并在启动过程中为每个所述待分配容器分别添加启动完成的所述web server。
在一种可能的实施方式中,所述装置还包括:
第三启动模块,用于在所述多个待分配容器启动完成后,在接收到针对所述至少一种预设应用中的目标应用的外部启动请求之后,从所述多个待分配容器中确定所述外部启动请求对应的目标容器,并基于所述外部启动请求确定针对所述目标容器的应用启动请求;
将所述应用启动请求发送至所述目标容器对应的web server;
利用所述目标容器对应的web server中的第一接口和第二接口,启动所述目标应用。
在一种可能的实施方式中,所述第三启动模块,用于基于所述应用启动请求,确定所述目标应用对应的目标代码的代码位置;
调用所述目标容器对应的所述第一接口,从所述代码位置处加载所述目标代码;
在确定所述目标代码加载完成的情况下,利用所述第二接口基于加载的所述目标代码,启动所述目标应用。
在一种可能的实施方式中,所述第三启动模块,用于利用所述应用启动请求,调用所述第二接口;
利用所述第二接口执行加载的所述目标代码,在加载的所述目标代码执行完成的情况下,确定所述目标应用启动成功。
在一种可能的实施方式中,所述装置还包括:
转发模块,用于在启动所述目标应用之后,接收针对所述目标应用的应用访问请求,利用所述目标容器对应的web server,将所述应用访问请求转发给所述目标应用,以使所述目标应用对所述应用访问请求进行响应。
在一种可能的实施方式中,所述第三启动模块,用于对所述外部启动请求进行解析,得到所述外部启动请求中携带的目标应用对应的目标代码的代码位置以及HTTP请求头信息,并生成包括所述HTTP请求头信息和所述代码位置的应用启动请求。
在一种可能的实施方式中,所述装置还包括:
释放模块,用于在启动所述目标应用之后,在确定所述目标应用使用完毕之后,对所述目标容器进行容器资源释放,以将所述目标容器对应的状态恢复至分配给所述目标应用之前的状态。
第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述应用启动装置、计算机设备、及计算机可读存储介质的效果描述参见上述应用启动方法的说明,这里不再赘述。
本公开实施例提供的应用启动方法、装置、计算机设备和存储介质,基于至少一种预设应用在启动时所需要的运行环境,可以创建出能够用于启动任一种预设应用的容器镜像。基于打开的web server,保证了可以接收到针对任一种预设应用的应用启动请求。在容器镜像适用于启动任一种预设应用的情况下,通过容器镜像启动多个待分配容器,不仅可以得到预先启动完成的多个待分配容器,还可以保证每个启动完成的待分配容器能够适用于启动任一种预设应用;并通过为每个待分配容器分别添加启动完成的web server,保证了启动完成的每个待分配容器都可以利用对应的web server获取应用启动请求。在接收到启动应用的请求之后,可以直接从多个待分配容器分配目标容器以启动应用,相比于现有技术在接收到启动应用的请求之后,先启动容器再利用容器启动应用而言,省略了启动目标容器的过程,提高了应用启动的速度,降低了用户的等待时间,保证了用户的使用体验。并且,即使在应用使用流量突变的情况下,同时接收到多个启动应用的请求,也可以保证存在足够数量的待分配容器以供使用,进而能够满足每一个请求对应的预设应用的启动需求,既保证了应用启动的效率,还实现了对流量突变的合理应对。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
经研究发现,在一些特定的时间节点,某一应用对应的使用需求可能较大,使用应用的人数相对较多,应用使用流量突变,同时可能存在多个针对该应用的使用请求,此时就需要启动多个容器来满足每个用户的使用需求,利用现有的启动方式在docker容器中启动应用,无法保证可以同步启动多个容器,也即无法合理的应对应用使用流量突变的问题,从而无法合理地满足每个用户的使用需求,难以保证用户的使用体验;并且,用户还需要花费等待容器启动的时间,进一步降低了用户的使用体验。
基于上述研究,本公开提供了一种应用启动方法、装置、计算机设备和存储介质,基于至少一种预设应用在启动时所需要的运行环境,可以创建出能够用于启动任一种预设应用的容器镜像。基于打开的web server,保证了可以接收到针对任一种预设应用的应用启动请求。在容器镜像适用于启动任一种预设应用的情况下,通过容器镜像启动多个待分配容器,不仅可以得到预先启动完成的多个待分配容器,还可以保证每个启动完成的待分配容器能够适用于启动任一种预设应用;并通过为每个待分配容器分别添加启动完成的web server,保证了启动完成的每个待分配容器都可以利用对应的web server获取应用启动请求。在接收到启动应用的请求之后,可以直接从多个待分配容器分配目标容器以启动应用,相比于现有技术在接收到启动应用的请求之后,先启动容器再利用容器启动应用而言,省略了启动目标容器的过程,提高了应用启动的速度,降低了用户的等待时间,保证了用户的使用体验。并且,即使在应用使用流量突变的情况下,同时接收到多个启动应用的请求,也可以保证存在足够数量的待分配容器以供使用,进而能够满足每一个请求对应的预设应用的启动需求,既保证了应用启动的效率,还实现了对流量突变的合理应对。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
需要说明的是,本公开实施例中所提到的特定名词包括:
容器镜像:具体可以理解为一种操作系统,用于为应用提供运行环境;
容器:容器是镜像的一个运行实例,除包括操作系统之外,还带有额外的可写层,可用于启动应用;
HTTP:Hyper Text Transfer Protocol,超文本传输协议,是一个简单的请求-响应协议。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种应用启动方法进行详细介绍,本公开实施例所提供的应用启动方法的执行主体一般为具有一定计算能力的计算机设备,在一些可能的实现方式中,该应用启动方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面对本公开实施例提供的应用启动方法加以下详细说明。
如图1所示,为本公开实施例提供的一种应用启动方法的流程图,可以包括以下步骤:
S101:基于至少一种预设应用在启动时所需要的运行环境,创建容器镜像。
这里,容器镜像中涵盖了各种应用运行所需的运行环境、运行组件等信息,可以适用于启动任一种预设应用。预设应用可以为各种预先开发好的任一种node.js应用。其中,node.js是一个基于Chrome V8引擎的JavaScript运行时环境。不同的预设应用对应的运行环境和运行组件可以不同,不同的预设应用对应的容器镜像也可以不同。而本公开实施例中首先可以确定一个适用于任一种预设应用运行和启动的容器镜像,具体的,该容器镜像中可以包括应用运行所需的全部运行环境和全部运行组件。
具体实施时,针对至少一个预设应用中的每个预设应用,可以先确定该预设应用运行所需的运行环境、运行组件等信息,然后基于每个预设应用所需的运行环境和运行组件,确定对应于容器镜像的各种运行环境和各个运行组件。基于确定的对应于容器镜像的各种运行环境和各个运行组件,创建容器镜像。
S102:利用容器镜像启动用于接收应用启动请求的网页服务器web server;webserver包括用于加载应用代码的第一接口和用于初始化应用的第二接口。
这里,应用启动请求可以为启动任一个预设应用的请求。web server即为网页服务器,用于接收针对任一个预设应用的应用启动请求。web server包括的第一接口具体可以为load接口,该接口能够从预设应用对应的代码存储的位置处加载预设应用的应用代码,也即能够加载预设应用;web server包括的第二接口具体可以为initialize接口,该接口用于对load接口加载的预设应用进行初始化。
本步骤在具体实施时,在得到创建好的容器镜像之后,可以利用该容器镜像启动一个用于接收应用启动请求的web server,其中,在web server启动完成的情况下,webserver中包括的第一接口和第二接口也启动完成,可以被调用。
S103:基于容器镜像启动多个待分配容器,并在启动过程中为每个待分配容器分别添加启动完成的web server。
这里,待分配容器具体可以为docker容器,用于启动预设应用。基于容器镜像启动的待分配容器的数量可以根据实际开发需要进行设置,也可以根据计算能力进行设置,此处不进行限定。
具体实施时,在利用容器镜像成功启动web server之后,可以利用容器镜像预先启动多个待分配容器,并为启动的每一个待分配容器添加启动成功的web server,也即,每个启动完成的待分配容器中均可以包括一个web server,以及可以包括web server对应的启动完成的第一接口和第二接口。这里,在容器镜像适用于启动任一种预设应用的情况下,通过容器镜像启动得到的多个待分配容器中的每个待分配容器也可以适用于启动任一种预设应用。
在多个待分配容器均启动完成之后,可以将多个待分配容器作为一个容器池,例如,可以作为一个warming pool(热池),该warming pool中包含一定数量的启动成功的待分配容器,每个待分配容器中包括启动完成的第一接口和第二接口。如图2所示,为本公开实施例所提供的一种warming pool的示意图。图2仅作为一种示例,其中仅示出了4个启动完成的待分配容器(容器1、容器2、容器3、容器4),但关于warming pool中包括的待分配容器的具体数量可以根据实际开发需要进行设置,本公开实施例不进行限定。
这样,基于至少一种预设应用在启动时所需要的运行环境,可以创建出能够用于启动任一种预设应用的容器镜像。基于打开的web server,保证了可以接收到针对任一种预设应用的应用启动请求。在容器镜像适用于启动任一种预设应用的情况下,通过容器镜像启动多个待分配容器,不仅可以得到预先启动完成的多个待分配容器,还可以保证每个启动完成的待分配容器能够适用于启动任一种预设应用;并通过为每个待分配容器分别添加启动完成的web server,保证了启动完成的每个待分配容器都可以利用对应的webserver获取应用启动请求。在接收到启动应用的请求之后,可以直接从多个待分配容器分配目标容器以启动应用,相比于现有技术在接收到启动应用的请求之后,先启动容器再利用容器启动应用而言,省略了启动目标容器的过程,提高了应用启动的速度,降低了用户的等待时间,保证了用户的使用体验。并且,即使在应用使用流量突变的情况下,同时接收到多个启动应用的请求,也可以保证存在足够数量的待分配容器以供使用,进而能够满足每一个请求对应的预设应用的启动需求,既保证了应用启动的效率,还实现了对流量突变的合理应对。
在一种实施例中,在多个待分配容器启动完成后,还包括使用待分配容器的步骤:
步骤一、在接收到针对至少一种预设应用中的目标应用的外部启动请求之后,从多个待分配容器中确定外部启动请求对应的目标容器,并基于外部启动请求确定针对目标容器的应用启动请求。
这里,目标应用为预设应用中的一个应用,外部启动请求可以为用户发起的使用目标应用的请求。目标应用可以在任一个待分配容器中启动。一个目标应用在一个待分配容器启动之后,还可以在其他待分配容器中启动。在一个待分配容器中启动完成的目标应用可供至少一个用户使用。
应用启动请求为针对外部启动请求对应的目标容器的请求,也即,应用启动请求为目标容器能够直接接收的请求,应用启动请求为容器不能直接接收的请求。具体的,应用启动请求可以为一个HTTP请求。
具体实施时,当用户存在使用任一预设应用的需求时,可以将该预设应用作为目标应用,并在客户端发起针对目标应用的外部启动请求,进而,可以接收到客户端发起的外部启动请求。这里,接收外部启动请求的可以为服务端或者服务端对应的内部操作系统。
在接收到针对目标应用的外部启动请求之后,从多个待分配容器中确定可以用于响应该外部启动请求的待分配容器,将该待分配容器作为该外部启动请求对应的目标容器。其中,目标容器为多个待分配容器中的空闲的容器。其中,在确定目标容器时,可以从多个待分配容器中随机分配一个空闲的待分配容器作为目标容器;或者,也可以预先为每个待分配容器分配一个容器编号,将容器编号最小的、且空闲的待分配容器作为目标容器。
另外,在一种可能的实施方式中,在从待分配容器中确定目标容器的过程中,在从多个待分配容器中随机确定出一个空闲的待分配容器之后,还可以确定该空闲的待分配容器的容器运行状态。这里,容器运行状态可以包括运行正常、运行异常、正在使用三种状态。进而,可以在确定该空闲的待分配容器的容器运行状态为运行正常的状态的情况下,将该空闲的待分配容器作为目标容器。否则,在确定该空闲的待分配容器的容器运行状态为运行异常的状态(或为正在使用的状态)的情况下,则需要从多个待分配容器中重新选取新的空闲的待分配容器,并在确定该新的空闲的待分配容器的容器运行状态为运行正常的状态的情况下,将该新的空闲的待分配容器作为目标容器。
并且,在接收到针对目标应用的外部启动请求之后,还可以对外部启动请求进行转换,将其转换为待分配容器能够直接接收的应用启动请求;例如,可以对外部启动请求进行解析,确定外部启动请求对应的目标应用以及目标应用对应的目标代码的代码位置;然后基于该目标应用以及该代码位置,生成应用启动请求并将转换后的该应用启动请求作为针对目标容器的请求。或者,也可以只根据确定的代码位置生成应用启动请求。其中,目标代码即为目标应用对应的应用代码。
在一种实施例中,可以按照以下步骤生成应用启动请求:
在接收到针对目标应用的外部启动请求之后,可以对外部启动请求进行解析,得到外部启动请求中携带的目标应用对应的目标代码的代码位置以及HTTP请求头信息;然后可以根据HTTP请求头信息和代码位置,生成包括HTTP请求头信息和代码位置的HTTP请求,将该HTTP请求作为生成的应用启动请求。
步骤二、将应用启动请求发送至目标容器对应的web server。
具体实施时,可以将转换得到的针对目标容器的应用启动请求发送至目标容器对应的web server。
步骤三、利用目标容器对应的web server中的第一接口和第二接口,启动目标应用。
本步骤中,在目标容器对应的web server接收到应用启动请求之后,可以利用目标容器对应的web server中的第一接口对应用启动请求对应的目标应用的目标代码进行加载;然后在利用第二接口对加载完成的目标代码进行初始化,以实现对目标应用的启动。
这样,即使在应用使用流量突变的情况下,同时接收到多个应用启动请求,也可以利用多个待分配容器可以直接满足每一个应用启动请求对应的应用的启动需求,既保证了应用启动的效率,还实现了对流量突变的合理应对。
在一种实施例中,针对上述步骤三,可以按照以下步骤实施:
①、基于应用启动请求,确定目标应用对应的目标代码的代码位置。
这里,代码位置为目标应用对应的目标代码的存储位置,或代码位置也可以为目标应用对应的目标代码的下载位置。
由上述实施例可知,应用启动请求可以基于代码位置和目标应用生成,所以目标容器在接收到应用启动请求之后,可以对该应用启动请求进行解析,以得到该应用启动请求对应的代码位置。
②、调用目标容器对应的第一接口,从代码位置处加载目标代码。
具体实施时,可以直接利用针对目标容器的应用启动请求,调用目标容器对应的第一接口,在第一接口调用成功的情况下,可以利用该第一接口从代码位置处加载目标应用对应的目标代码,也即,利用load接口加载目标应用。
③、在确定目标代码加载完成的情况下,利用第二接口基于加载的目标代码,启动目标应用。
这里,在利用第一接口将目标代码加载完成的情况下,可以直接利用第二接口对加载完成的目标代码进行初始化,以实现对目标代码对应的目标应用的启动。
在一种实施例中,针对上述③,可以按照以下步骤实施:
P1:利用应用启动请求,调用第二接口。
这里,在利用第一接口将目标代码加载完成的情况下,可以生成用于指示代码加载成功的第一提示信息,并将该第一提示信息返回给向目标容器对应的web server发送应用启动请求的服务端(或服务端对应的内部操作系统)。
在接收到第一提示信息之后,可以利用生成的应用启动请求,调用目标容器对应的第二接口。
P2:利用第二接口执行加载的目标代码,在加载的目标代码执行完成的情况下,确定目标应用启动成功。
具体实施时,在成功调用到目标容器对应的第二接口的情况下,可以利用第二接口执行加载完成的目标代码,也即,利用第二接口对目标代码对应的目标应用进行初始化。
进一步的,在确定加载的目标代码执行完成的情况下,即可以确定目标应用启动成功。
这里,在确定加载的目标代码执行完成的情况下,还可以生成用于指示代码执行成功的第二提示信息并反馈给服务端(或服务端对应的内部操作系统),以提示服务端(或服务端对应的内部操作系统),目标应用已经启动成功。
在一种实施方式中,服务端在接收到第二提示信息之后,还可以将第二提示信息发送给客户端,以使用户可以在客户端获取目标应用启动成功的信息。
在一种实施例中,在成功启动目标应用之后,还包括:
接收针对目标应用的应用访问请求,利用目标容器对应的web server,将应用访问请求转发给目标应用,以使目标应用对应用访问请求进行响应。
这里,应用访问请求可以为用户发起的访问启动成功的目标应用的请求。例如,应用访问请求可以为使用目标应用的某一功能的请求、获取目标应用的某一页面的请求等等。
具体实施时,在目标应用在目标容器中启动成功之后,当用户存在访问目标应用的需求时,可以在客户端发起针对目标应用的应用访问请求。进而,服务端(或服务端对应的内部操作系统)可以接收到客户端发送的应用访问请求,并确定应用访问请求对应的目标容器。
这里,在确定应用访问请求对应的目标容器时,在目标应用对应的目标容器包括多个的情况下,也即在目标应用在多个目标容器中启动的情况下,可以基于应用访问请求中携带的客户端标识,确定与该客户端标识相匹配的目标容器,将该目标容器作为应用访问请求对应的目标容器。
进而,可以利用目标容器对应的web server,将应用访问请求转发给目标应用。
具体的,可以先将应用访问请求发送至确定的目标容器对应的web server,然后,利用该web server将该应用访问请求转发给在目标容器中成功启动的目标应用。
然后,目标应用可以对获取的应用访问请求进行响应。例如,为用户开放应用访问请求对应的应用功能的权限,为用户展示应用访问请求对应的应用页面等。
如图3所示,为本公开实施例所提供的一种利用目标容器启动目标应用并访问目标应用的流程图,可以包括以下步骤:
S301:调用目标容器对应的第一接口,从应用启动请求对应的代码位置处加载目标代码。
这里,应用启动请求为基于用户在客户端发起的针对目标应用的外部启动请求确定的,其中包括有目标应用对应的目标代码的代码位置。
S302:在利用第一接口将目标代码加载完成的情况下,生成并返回用于指示代码加载成功的第一提示信息。
S303:利用应用启动请求,调用目标容器对应的第二接口。
S304:在确定加载的目标代码执行完成的情况下,生成并返回用于指示代码执行成功的第二提示信息。
S305:接收针对目标应用的应用访问请求。
这里,应用访问请求为用户在客户端发起的访问启动成功的目标应用的请求。
S306:利用目标容器对应的web server,将应用访问请求转发给目标应用,以使目标应用对应用访问请求进行响应。
关于S301~S306的具体实施步骤,可以参照上述各实施例,这里不再赘述。
在一种实施例中,在启动目标应用之后,还包括:
在确定目标应用使用完毕之后,对目标容器进行容器资源释放,以将目标容器对应的状态恢复至分配给目标应用之前的状态。
这里,目标应用使用完毕可以包括但不限于用户关闭目标应用、退出目标应用。在确定目标应用使用完毕之后,可以对目标容器进行容器资源释放。具体的,可以将在目标容器中启动成功的目标应用删除,并删除与目标应用相关的各种应用使用信息。
其中,容器资源释放的目标为:将目标容器对应的状态恢复至分配给目标应用之前的状态,也即,将目标容器对应的状态恢复至该目标容器刚被预先创建的容器镜像成功启动后的状态。
进而,可以将容器资源释放完成的目标容器重新添加至warming pool中,以在接收到新的外部启动请求的情况下,可以直接利用该目标容器启动新的外部启动请求对应的目标应用。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与应用启动方法对应的应用启动装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述应用启动方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图4所示,为本公开实施例提供的一种应用启动装置的示意图,包括:
创建模块401,用于基于至少一种预设应用在启动时所需要的运行环境,创建容器镜像;
第一启动模块402,用于利用所述容器镜像启动用于接收应用启动请求的网页服务器web server;所述web server包括用于加载应用代码的第一接口和用于初始化应用的第二接口;
第二启动模块403,用于基于所述容器镜像启动多个待分配容器,并在启动过程中为每个所述待分配容器分别添加启动完成的所述web server。
在一种可能的实施方式中,所述装置还包括:
第三启动模块404,用于在所述多个待分配容器启动完成后,在接收到针对所述至少一种预设应用中的目标应用的外部启动请求之后,从所述多个待分配容器中确定所述外部启动请求对应的目标容器,并基于所述外部启动请求确定针对所述目标容器的应用启动请求;
将所述应用启动请求发送至所述目标容器对应的web server;
利用所述目标容器对应的web server中的第一接口和第二接口,启动所述目标应用。
在一种可能的实施方式中,所述第三启动模块404,用于基于所述应用启动请求,确定所述目标应用对应的目标代码的代码位置;
调用所述目标容器对应的所述第一接口,从所述代码位置处加载所述目标代码;
在确定所述目标代码加载完成的情况下,利用所述第二接口基于加载的所述目标代码,启动所述目标应用。
在一种可能的实施方式中,所述第三启动模块404,用于利用所述应用启动请求,调用所述第二接口;
利用所述第二接口执行加载的所述目标代码,在加载的所述目标代码执行完成的情况下,确定所述目标应用启动成功。
在一种可能的实施方式中,所述装置还包括:
转发模块405,用于在启动所述目标应用之后,接收针对所述目标应用的应用访问请求,利用所述目标容器对应的web server,将所述应用访问请求转发给所述目标应用,以使所述目标应用对所述应用访问请求进行响应。
在一种可能的实施方式中,所述第三启动模块404,用于对所述外部启动请求进行解析,得到所述外部启动请求中携带的目标应用对应的目标代码的代码位置以及HTTP请求头信息,并生成包括所述HTTP请求头信息和所述代码位置的应用启动请求。
在一种可能的实施方式中,所述装置还包括:
释放模块406,用于在启动所述目标应用之后,在确定所述目标应用使用完毕之后,对所述目标容器进行容器资源释放,以将所述目标容器对应的状态恢复至分配给所述目标应用之前的状态。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种计算机设备,如图5所示,为本公开实施例提供的一种计算机设备结构示意图,包括:
处理器51和存储器52;所述存储器52存储有处理器51可执行的机器可读指令,处理器51用于执行存储器52中存储的机器可读指令,所述机器可读指令被处理器51执行时,处理器51执行下述步骤:S101:基于至少一种预设应用在启动时所需要的运行环境,创建容器镜像;S102:利用容器镜像启动用于接收应用启动请求的网页服务器web server;webserver包括用于加载应用代码的第一接口和用于初始化应用的第二接口以及S103:基于容器镜像启动多个待分配容器,并在启动过程中为每个待分配容器分别添加启动完成的webserver。
上述存储器52包括内存521和外部存储器522;这里的内存521也称内存储器,用于暂时存放处理器51中的运算数据,以及与硬盘等外部存储器522交换的数据,处理器51通过内存521与外部存储器522进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的应用启动方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的应用启动方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的应用启动方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的应用启动方法的步骤,具体可参见上述方法实施例,在此不再赘述。
该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。