System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,特别涉及一种应用程序运行方法、节点及计算设备集群。
技术介绍
1、字节码增强(bytecode enhancement)技术是一种在java应用程序启动以及运行时,对java应用程序的字节码进行修改,以增强java应用程序的功能的技术。字节码增强技术可以在不修改java应用程序的源代码的情况下,对java应用程序的功能进行增强,从而在对java应用程序进行维护和升级的情况下,避免对源代码的破坏。
2、在java应用程序的启动过程中,实施字节码增强技术,延长了java应用程序的启动时长,导致java应用程序不能及时运行。
技术实现思路
1、本申请实施例提供了一种应用程序运行方法、节点及计算设备集群,可以在保障应用程序的字节码增强效果的同时,避免或减少字节码增强对应用程序的启动时长的影响,使得应用程序可以及时运行,从而可以实现服务的及时扩容或高效部署。
2、第一方面,提供了一种应用程序运行方法,应用于微服务架构,微服务架构包括第一容器组,并且微服务架构存储有应用程序的第一java归档文件,该方法包括:第一容器组中的第一容器加载第一java归档文件中的字节码,得到应用程序的第二java归档文件;其中,第二java归档文件包括应用程序的需增强类的第一字节码,第一容器运行有第一增强组件;第一字节码是在第一容器加载第一java归档文件中的字节码的过程中,第一增强组件修改第一java归档文件中需增强类的字节码得到的;第一容器组中的第二容器加载第二java
3、在微服务架构中,容器作为容器组中的服务实例,用于提供一个或多个服务。具体而言,容器运行应用程序,该运行程序使得容器能够提供相应的服务。也就是说,容器并非天然是服务实例,而是容器创建后,该容器启动并运行应用程序而成为服务实例。
4、在本申请实施例提供的方法中,当需要在容器组中部署服务时,该容器组中的第一容器可以在加载该服务对应的应用程序的java归档文件(即第一java归档文件)过程中,对应用程序的java归档文件进行字节码增强,并将增强后的字节码包括到该应用程序的java归档文件,得到增强java归档文件(即第二java归档文件)。然后,容器组中的第二容器可以通过加载增强java归档文件,以在第二容器中启动该应用程序。
5、其中,增强后的java归档文件包括增强后字节码,因此,第二容器在加载增强java归档文件过程中,无需进行字节码增强操作,即可实现应用程序的字节码增强效果,并且还降低了应用程序的启动时长,实现了在应用程序在第二容器中的快速启动,从而提高了容器组中服务部署效率,使得容器组可及时提供服务,响应业务的需求。特别是,在服务扩容的场景下,容器组中的新创建的容器可以通过加载增强java归档文件,迅速启动并运行应用程序,实现了服务扩容的及时性。
6、在一种可能的实现方式中,第二容器运行有第二增强组件,第二java归档文件包括清单,清单包括需增强类的标识;第二容器加载第二java归档文件中的字节码,包括:第二容器从第二java归档文件中获取清单,其中,在第二容器加载第二java归档文件中的字节码的过程中,清单用于指示已经完成对第一字节码的修改操作。
7、在该实现方式中,通过第二java归档文件中的清单指示第一字节码的修改操作已经完成,如此,第二容器在加载第二java归档文件时,第二容器中的第二增强组件可忽略清单上标识所代表的类,不再对清单上标识所代表的类进行识别,节省了识别耗时,进一步降低了应用程序的启动耗时。
8、在一种可能的实现方式中,微服务架构还包括第二容器组,该方法还包括:第二容器组中的第三容器加载第二java归档文件中的字节码,得到第二加载结果;第三容器基于第二加载结果,运行应用程序。
9、在该实现方式中,当第一容器组提供的服务难以满足业务需求,而需要进行服务扩容时,可以在第二容器组等其他容器组部署该服务。第二容器组中部署该服务,需要第二容器组中的容器启动并运行该服务对应的应用程序。其中,第二容器组中的容器可以加载该应用程序的增强java归档文件(即第二java归档文件),以迅速启动并运行应用程序,从而可以迅速提供该服务,实现了服务扩容的及时性。
10、在一种可能的实现方式中,微服务架构还包括管理平台,该方法还包括:管理平台将java归档文件的获取地址从第一java归档文件的存储地址修改为第二java归档文件的存储地址;第二容器加载第二java归档文件中的字节码,包括:第二容器基于获取地址,获取第二java归档文件。
11、在该实现方式中,可以通过管理平台将用于容器获取java归档文件的地址,修改为增强java归档文件的存储地址,由此,容器在需要启动应用程序时,基于该地址获取到增强java归档文件,进而可以通过加载增强java归档文件,实现应用程序的启动。
12、在一种可能的实现方式中,该方法还包括:当第二容器基于第一加载结果,运行应用程序出现异常时,第二容器加载第一java归档文件,得到第三加载结果;第二容器基于第三加载结果,运行应用程序。
13、在该实现方式中,当容器运行应用程序出现异常时,容器可以通过加载原来的java归档文件(即第一java归档文件),启动并运行应用程序,以保障应用程序可以正常运行,进而保障服务的稳定性。
14、在一种可能的实现方式中,第一容器是微服务架构中首个加载第一java归档文件的容器。
15、在该实现方式中,在应用程序的java归档文件(具体是第一java归档文件)首次加载时,生成应用程序的增强java归档文件,使得后续启动应用程序的容器可以通过加载增强java归档文件,启动应用程序,从而提高了在微服务架构中部署该应用程序对应的服务的效率。
16、第二方面,提供了一种运行容器组的节点,节点运行有第一容器组,并且节点存储有应用程序的第一java归档文件;第一容器组中的第一容器用于:加载第一java归档文件中的字节码,得到应用程序的第二java归档文件;其中,第二java归档文件包括应用程序的需增强类的第一字节码,第一容器运行有第一增强组件;第一字节码是在第一容器加载第一java归档文件中的字节码的过程中,第一增强组件修改第一java归档文件中需增强类的字节码得到的;第一容器组中的第二容器用于:加载第二java归档文件中的字节码,得到第一加载结果;第一加载结果包括需增强类的第一对象,第一对象是在第二容器加载第二java归档文件中的字节码的过程中,第二容器基于第一字节码创建的;第二容器还用于:基于第一加载结果,运行应用程序。
17、在一种可能的实现方式中,第二容器运行有第本文档来自技高网...
【技术保护点】
1.一种应用程序运行方法,其特征在于,应用于微服务架构,所述微服务架构包括第一容器组,并且所述微服务架构存储有应用程序的第一Java归档文件,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述第二容器运行有第二增强组件,所述第二Java归档文件包括清单,所述清单包括所述需增强类的标识;
3.根据权利要求1或2所述的方法,其特征在于,所述微服务架构还包括第二容器组,所述方法还包括:
4.根据权利要求1-3中任一项所述的方法,其特征在于,
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一容器是所述微服务架构中首个加载所述第一Java归档文件的容器。
7.一种运行容器组的节点,其特征在于,所述节点运行有第一容器组,并且所述节点存储有应用程序的第一Java归档文件;
8.根据权利要求7所述的节点,其特征在于,所述第二容器运行有第二增强组件,所述第二Java归档文件包括清单,所述清单包括所述需增强类的标识;
...【技术特征摘要】
1.一种应用程序运行方法,其特征在于,应用于微服务架构,所述微服务架构包括第一容器组,并且所述微服务架构存储有应用程序的第一java归档文件,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述第二容器运行有第二增强组件,所述第二java归档文件包括清单,所述清单包括所述需增强类的标识;
3.根据权利要求1或2所述的方法,其特征在于,所述微服务架构还包括第二容器组,所述方法还包括:
4.根据权利要求1-3中任一项所述的方法,其特征在于,
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一容器是所述微服务架构中首个加载所述第一java归档文件的容器。
7.一种运行容器组的节点,其特征在于,所述节点运行有第一容器组,并且所述节点存储有应用程序的第一java归档文件;
8.根据权利要求7所述的节点,其特征在于,所述第二容器运行有第二增强组件,所述第二java归档文件包括清单,所述清单包括所述需增强类的标识;
【专利技术属性】
技术研发人员:李来,杨奕,栾文飞,
申请(专利权)人:华为云计算技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。