CN114064215A - 动态部署模块化的方法、设备、装置及计算机程序产品 - Google Patents
动态部署模块化的方法、设备、装置及计算机程序产品 Download PDFInfo
- Publication number
- CN114064215A CN114064215A CN202111412918.3A CN202111412918A CN114064215A CN 114064215 A CN114064215 A CN 114064215A CN 202111412918 A CN202111412918 A CN 202111412918A CN 114064215 A CN114064215 A CN 114064215A
- Authority
- CN
- China
- Prior art keywords
- module
- functional module
- functional
- modules
- loading
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000004590 computer program Methods 0.000 title claims abstract description 20
- 230000003068 static effect Effects 0.000 claims abstract description 72
- 230000006870 function Effects 0.000 claims description 55
- 238000005516 engineering process Methods 0.000 claims description 26
- 239000012634 fragment Substances 0.000 claims description 19
- 238000004806 packaging method and process Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 16
- 238000007726 management method Methods 0.000 description 11
- 238000002955 isolation Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种动态部署模块化的方法、设备、装置及计算机程序产品,涉及软件架构技术领域,用于实现模块间的动态部署,为每一个功能模块都分配一个对应的类加载器进行加载,并且为每一个功能模块都分配独立的静态资源,由于功能模块间的加载过程是独立的,任一个功能模块都分配有独立的静态资源,即功能模块所占用的硬件资源是独立的,即使其中一个功能模块崩溃后,也不会影响其他功能模块的正常运行。该方法包括:将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
Description
技术领域
本发明涉及软件架构技术领域,特别涉及一种动态部署模块化的方法、设备、装置及计算机程序产品。
背景技术
当应用服务的功能(模块)较多且体量较小时,由于应用服务中的模块承担的业务量较小,在对应用服务调试时如果单独启动JAVA虚拟机会比较浪费资源;当模块间有相互调用关系时,如果采用独立部署,则需要解决进程间调用效率问题。基于此,目前提出了更细粒度的模块化方案,即将应用服务拆分成多个模块,目前的模块化方案虽然可以实现模块的动态部署,但是只针对Class文件,并没有完成静态资源的模块化,如果一个模块崩溃后会影响其他模块的正常运行,导致整个进程同样无法使用。
发明内容
本发明提供一种动态部署模块化的方法、设备、装置及计算机程序产品,用于实现模块间的动态部署,由于模块的静态资源独立,能够避免一个模块崩溃后影响其他模块正常运行的技术问题。
第一方面,本发明实施例提供的一种动态部署模块化的方法,包括:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
本实施例提供的动态部署模块化的方法,为每一个功能模块都分配一个对应的类加载器进行加载,并且为每一个功能模块都分配独立的静态资源,由于任一个功能模块都对应一个类加载器,则功能模块间的加载过程是独立的,并且由于任一个功能模块都分配有独立的静态资源,则即使其中一个功能模块崩溃后,由于功能模块间的静态资源是独立的,即功能模块所占用的硬件资源是独立的,因此,即使一个功能模块崩溃后也不会影响其他功能模块的正常运行。从而真正实现模块间的独立部署,避免由于一个模块的崩溃导致整个进程的中断。
作为一种可选的实施方式,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
作为一种可选的实施方式,所述任意一个功能模块的jar文件是基于Spring框架生成的。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源,包括:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,该方法还包括:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,该方法还包括:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
作为一种可选的实施方式,所述使用对应的类加载器加载所述功能模块,包括:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
作为一种可选的实施方式,该方法还包括:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
第二方面,本发明实施例提供的一种动态部署模块化的设备,包括处理器和存储器,所述存储器用于存储所述处理器可执行的程序,所述处理器用于读取所述存储器中的程序并执行如下步骤:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
作为一种可选的实施方式,所述任意一个功能模块的jar文件是基于Spring框架生成的。
作为一种可选的实施方式,所述处理器具体被配置为执行:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,所述处理器具体还被配置为执行:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
作为一种可选的实施方式,为所述功能模块分配独立的静态资源之后,所述处理器具体还被配置为执行:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
作为一种可选的实施方式,所述处理器具体被配置为执行:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
作为一种可选的实施方式,所述处理器具体还被配置为执行:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
第三方面,本发明实施例还提供一种动态部署模块化的装置,包括:
应用拆分部署单元,用于将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
功能模块加载单元,用于针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
作为一种可选的实施方式,所述任意一个功能模块的jar文件是基于Spring框架生成的。
作为一种可选的实施方式,所述功能模块加载单元具体用于:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,所述功能模块加载单元具体还用于:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,还包括合并部署单元用于:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
作为一种可选的实施方式,所述功能模块加载单元具体用于:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
作为一种可选的实施方式,还包括模块管理单元用于:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
第四方面,本发明实施例还提供计算机存储介质,其上存储有计算机程序,该程序被处理器执行时用于实现上述第一方面所述方法的步骤。
第五方面,本发明实施例还提供计算机程序产品,包含有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述第一方面所述方法的步骤。
本申请的这些方面或其他方面在以下的实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种动态部署模块化的方法的实施流程图;
图2为本发明实施例提供的一种多个功能模块的部署结构示意图;
图3为本发明实施例提供的一种模块化的功能架构示意图;
图4为本发明实施例提供的一种模块加载引擎和模块管理器的交互示意图;
图5为本发明实施例提供的一种功能模块的加载及初始化的流程图;
图6为本发明实施例提供的一种动态部署模块化具体实施流程图;
图7为本发明实施例提供的一种动态部署模块化的设备示意图;
图8为本发明实施例提供的一种动态部署模块化的装置示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
当应用服务的功能(模块)较多且体量较小时,由于应用服务中的模块承担的业务量较小,在对应用服务调试时如果单独启动JAVA虚拟机会比较浪费资源;当模块间有相互调用关系时,如果采用独立部署,则需要解决进程间调用效率问题。基于此,目前提出了更细粒度的模块化方案,即将应用服务拆分成多个模块,目前的模块化方案虽然可以实现模块的动态部署,但是只针对Class文件,并没有完成静态资源的模块化,如果一个模块崩溃后会影响其他模块的正常运行,导致整个进程同样无法使用,并且前端资源和后端资源需要进行独立部署,如果多版本的应用服务同时测试,则容易发生不同版本的应用服务冲突;如果需要联合调试该应用服务中的多个功能时,需要启动很多进程,DEBUG端口会非常多,难以维护。
另外,目前的模块化方案需要学习新的规范和使用教程,技术门槛较高,同时面对后期模块的重新规划,无法适应新的通用开发规范,需要重新对模块进行改造,增加了后期的维护成本。在应用服务的调试过程中,经常会在应用服务中引入第三方包,这时候如果第三方所依赖的jar文件与应用服务的jar文件版本不一致则会导致jar冲突,如果两个jar文件无法统一,则会导致项目进展无法继续推进,带来巨大风险。
实施例1、本发明实施例提供的一种动态部署模块化的方法,主要针对中小型终端设备,通过对应用服务更细粒度的拆分,能够为中小型终端设备提供不间断的动态部署服务的能力,核心思想是将应用服务拆分成多个功能模块后,为每一个功能模块都分配一个对应的类加载器进行加载,并且为每一个功能模块都分配一个独立的静态资源,从而真正实现模块间的独立部署,避免由于一个模块的崩溃导致整个进程的中断。
如图1所示,本实施例提供的一种动态部署模块化的方法的实施流程如下所示:
步骤100、将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
实施中,本实施例对应用服务的拆分的粒度是根据应用服务中包含的各个功能确定的,具体拆分使用的粒度可以根据实际需求确定,本实施例不作过多限定。
需要说明的是,本实施例中的拆分是对应用服务的拆分,主要针对功能较多且功能模块承载的业务量较小的应用服务,将该应用服务拆分成多个功能模块后,能够解决在有限的资源上调试该应用服务时,单独启动JVM(JAVA虚拟机)会浪费资源的问题。
实施中,为每一个拆分后的功能模块都分配唯一的类加载器(URL ClassLoader)。其中,class文件是由java编译器生成的,是一种8位字节的二进制流文件,class文件中的各个数据项按顺序紧密的从前向后排列,相邻的数据项之间没有间隙,使得class文件非常紧凑,体积轻巧,可以被JVM快速的加载至内存。标准的class文件通过Java反编译工具可以很容易恢复出源码。
ClassLoade是用来动态的加载class文件到虚拟机中,并转换成java.lang.class类的一个实例,每个这样的实例用来表示一个java类,可以根据Class的实例得到该类的信息,并通过实例的newInstance()方法创建出该类的一个对象,除此之外,ClassLoader还负责加载Java应用所需的资源,如图像文件和配置文件等。
在一些实施例中,本实施例中为了便于进行功能模块的维护,本实施例中的ClassLoade的层级简单,可以是设计两个层级,还可以根据需求定义,本实施例对此不作过多限定。
在一些实施例中,本实施例中的多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
可选的,本实施例中的多个功能模块具有一个相同的父类模块。实施中,如果需要进行多个功能模块间的联合调试时,则可以通过父类模块和功能模块之间的关系,确定多个功能模块间的调用关系,从而解决多个功能模块间的联合调试时如果提高进程间的调用效率问题。
步骤101、针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
需要说明的是,本实施例中的静态资源可以理解为前端的固定页面,包含HTML(超文本标记语言)、CSS(级联样式表)、JS(Java Script)、图片等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。
在一些实施例中,本实施例中的静态资源还可以理解为硬件资源,包括但不限于存储资源、内存资源以及CPU资源中的至少一种。
本实施例对每一个功能模块都使用唯一对应的类加载器进行加载,从而实现功能上的相对隔离,并且为每个功能模块分配独立的静态资源后,实现了功能模块间的独立管理。由于每一个功能模块都唯一对应一个类加载器,因此,也能够避免使用同一个类加载器加载不同版本的功能模块时,导致的模块间冲突问题。
在一些实施例中,本实施例中的任意一个功能模块的jar文件是基于Spring框架生成的。本实施例采用通用的技术框架Spring作为技术底层依赖,用户可以通过几乎零成本的学习成本完成功能模块化的开发任务,有效降低开发人力成本。
其中,Spring框架是一个开放源代码的J2EE应用服务框架,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。Spring解决了开发者在J2EE开发中遇到的常见问题,提供了功能强大IOC(Inversion of Control,控制反转)、AOP(AspectOriented Programming,面向切面编程)及Web MVC等功能。
由于本实施例采用通用的Spring框架生成功能模块的jar文件,因此不需要开发人员学习新技术,仅需要按照通用技术完成功能模块的主体开发并生成可独立运行的jar文件即可,实施中,可以对大部分配置进行约定的方式进行简化,仅需简单配置项即可完成功能模块的部署包的生成,这样当功能模块需要重新规划到更大粒度的服务的情况下,比如微服务,应用服务的功能部分是不需要改动的,能够最大程度的减少后期的维护升级成本,同时也保留了应用服务模块化的灵活性。
在一些实施例中,本实施例通过如下方式为功能模块分配独立的静态资源:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
其中,JVM租户技术能够解决静态资源隔离的问题,实现类、实例、资源三方面的隔离。本实施例采用JVM租户技术能够彻底隔离各个功能模块的CPU和内存使用情况,解决一个功能模块崩溃(crash)引发的整个JVM的崩溃发生。
需要说明的是,Jvm租户具体指的是通过一些技术隔离手段来实现,各业务模板间的隔离,这种隔离包括但不限于存储资源、内存资源、CPU资源、网络资源、IO资源等,实施中,可以通过linux内核提供的特性Cgroup和Namespace来实现。其中,Cgroup(Controlgroup)是Linux内核提供的一个特性,用于限制和隔离一组进程对系统资源的使用。对不同资源的具体管理是由各个子系统分工完成的。Namespace是将内核的全局资源做封装,使得每个Namespace都有一份独立的资源,因此不同的进程在各自的Namespace内对同一种资源的使用能够实现互不干扰。
本实施例可以通过功能模块中提供的配置资源清单来为功能模块配置独立的存储资源、内存资源、CPU资源、网络资源、IO资源等的使用情况,在初始化功能模块前,对硬件资源(即静态资源)创建对应的Namespace和Cgroup来实现硬件资源的隔离和限制。
在一些实施例中,本实施例为所述功能模块分配独立的静态资源之后,还可以利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
其中,Web-fragment是为了给开发人员更好的可插拔性和更少的配置,在Servlet3.0的规范中,引入了web模块部署描述符片段(web fragment)的概念。web fragment是web.xml的部分或全部,web fragment是web应用的一个逻辑分区,相当于对web.xml进行扩展,有助于将Servlet(Server Applet,小服务程序或服务连接器)、Filter(过滤器)、Listener(监听器)更好地封装,有助于模块化。Web-fragment技术实际上是一个静态模块化的方式,将原来需要集中化配置的方案分化到可以独立分片配置,最终通过servlet3的功能可以进行识别组装。web fragment可以在jar包中,定义web-fragment.xml配置文件,内可配置servlet、filter、listener等组件。web项目中引入含有web fragment的jar包,那么加载顺序为:先是web.xml,再是web-fragment.xml。当web项目引入多个含有webfragment的jar包时,也可以自定义各个jar包间的web-fragment.xml加载顺序。
本实施例采用Web-fragment的文件约定加载模块化,加载前端资源(即功能模块的静态资源),进而达到前端、后端程序合并部署的目的。
在一些实施例中,本实施例为所述功能模块分配独立的静态资源之后,还可以将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
实施中,前端资源文件(静态资源的配置文件)比如html及js等通过Web-fragment模块化的方式,和功能模块对应的jar文件一起打包,实现前后端合并部署。
在一些实施例中,如图2所示,本实施例提供一种多个功能模块的部署结构示意图,包括JVM、模块加载引擎(ModuleLoader)、模块管理组件(ModuleManager)、多个功能模块(包括模块A、模块B等);其中多个功能模块部署在同一个JVM上。
在一些实施例中,本实施例通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
在一些实施例中,本实施例还可以通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
在一些实施例中,本实施例使用纯java实现,实现了功能模块的动态加载、更新、卸载等功能。本实施例可以采用JDK8版本,兼容现有系统的通用规划,同时屏蔽引入新版本会带来的不确定性问题。底层框架技术采用通用Spring技术,减少技术门槛,同时后期升级维护成本几乎为零。
在一些实施例中,如图3所示,本实施例还提供一种模块化的功能架构示意图,其中,包括模块加载引擎300和模块管理器301。如图4所示,本实施例还提供一种模块加载引擎300和模块管理器301之间的交互示意图。
其中,模块加载引擎300用于负责功能模块的发现和分析加载功能,具体用于实现功能模块部署包检测,功能模块部署包加载、功能模块部署包分析、功能模块加载、前端功能模块管理等。
本实施例中的功能模块部署包,由模块核心库jar文件和模块配置文件组成,jar由通用的Spring框架构建,模块配置文件由通用JSON格式表达。
本实施例中的功能模块的加载,采用独立的URLClassLoader独立加载模块,并识别Spring注解形式的Bean到Spring容器中,解析存储Action到URL路由的映射,并采用高效的路由算法识别支持正则表达式的URL匹配效果。
其中,模块管理器301用于提供模块通用管理、模块版本管理以及模块资源管理,模块通用管理具体用于实现模块查找、模块卸载、模块注册、模块激活等。
实施中,功能模块部署包加载时,会通过模块管理器301的通用管理功能,对功能模块进行查找、注册、卸载、激活中的至少一种操作。
本实施例中的模块注册,不仅可以注册class文件和Spring配置文件,也可以按需添加增强功能的注册,仅需实现ApplicationContextAware并注册到Spring上下文即可,可选的,默认支持通用的AOP、MyBatis、Shiro等功能。
在一些实施例中,如图5所示,本实施例还提供一种功能模块的加载及初始化的流程,以应用服务中功能模块的注册操作为例,该流程的具体实施步骤如下所示:
步骤500、应用服务扫描本地功能模块部署包;
步骤501、应用服务解压扫描到的本地功能模块部署包;
步骤502、应用服务校验功能模块部署包的有效性,并生成功能模块部署包的配置项;
步骤503、应用服务加载待加载的功能模块列表;
步骤504、模块加载引擎分析、加载、卸载功能模块的版本;
步骤505、模块加载引擎注册功能模块的增强功能;
步骤506、模块加载引擎加载功能模块;
步骤507、模块加载引擎注册功能模块;
步骤508、模块管理器为该功能模块分配资源及初始化Spring上下文;
步骤509、模块管理器初始化URLMapping路由。
如图6所示,本发明实施例还提供一种动态部署模块化具体实施流程,如下所示:
步骤600、将应用服务拆分成多个功能模块,任意一个功能模块的jar文件是基于Spring框架生成的;
步骤601、将多个功能模块部署在同一个JVM上,多个功能模块具有一个相同的父类模块;
步骤602、针对任意一个功能模块,通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置;
步骤603、利用JVM租户技术,为所述功能模块分配独立的静态资源;
步骤604、利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件;
步骤605、将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
步骤606、通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
实施例2、基于相同的发明构思,本发明实施例还提供了一种动态部署模块化的设备,由于该设备即是本发明实施例中的方法中的设备,并且该设备解决问题的原理与该方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图7所示,该设备包括处理器700和存储器701,所述存储器701用于存储所述处理器700可执行的程序,所述处理器700用于读取所述存储器701中的程序并执行如下步骤:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
作为一种可选的实施方式,所述任意一个功能模块的jar文件是基于Spring框架生成的。
作为一种可选的实施方式,所述处理器700具体被配置为执行:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,所述处理器700具体还被配置为执行:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
作为一种可选的实施方式,为所述功能模块分配独立的静态资源之后,所述处理器700具体还被配置为执行:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
作为一种可选的实施方式,所述处理器700具体被配置为执行:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
作为一种可选的实施方式,所述处理器700具体还被配置为执行:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
实施例3、基于相同的发明构思,本发明实施例还提供了一种动态部署模块化的装置,由于该装置即是本发明实施例中的方法中的装置,并且该装置解决问题的原理与该方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
如图8所示,该装置包括:
应用拆分部署单元800,用于将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
功能模块加载单元801,用于针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
作为一种可选的实施方式,所述任意一个功能模块的jar文件是基于Spring框架生成的。
作为一种可选的实施方式,所述功能模块加载单元801具体用于:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,所述功能模块加载单元801具体还用于:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
作为一种可选的实施方式,所述为所述功能模块分配独立的静态资源之后,还包括合并部署单元用于:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
作为一种可选的实施方式,所述功能模块加载单元801具体用于:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
作为一种可选的实施方式,还包括模块管理单元用于:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
基于相同的发明构思,本发明实施例还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如下步骤:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
基于相同的发明构思,本发明实施例还提供了一种计算机程序产品,包含有计算机可执行指令,所述计算机可执行指令用于使计算机执行如下步骤:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理装置的处理器以产生一个机器,使得通过计算机或其他可编程数据处理装置的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理装置以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理装置上,使得在计算机或其他可编程装置上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程装置上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (17)
1.一种动态部署模块化的方法,其特征在于,该方法包括:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
2.根据权利要求1所述的方法,其特征在于,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
3.根据权利要求1所述的方法,其特征在于,所述任意一个功能模块的jar文件是基于Spring框架生成的。
4.根据权利要求1所述的方法,其特征在于,所述为所述功能模块分配独立的静态资源,包括:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
5.根据权利要求1所述的方法,其特征在于,所述为所述功能模块分配独立的静态资源之后,该方法还包括:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
6.根据权利要求1所述的方法,其特征在于,所述为所述功能模块分配独立的静态资源之后,该方法还包括:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
7.根据权利要求1所述的方法,其特征在于,所述使用对应的类加载器加载所述功能模块,包括:
通过模块加载引擎,使用对应的类加载器动态加载所述功能模块,并完成所述功能模块的初始化配置。
8.根据权利要求1所述的方法,其特征在于,该方法还包括:
通过模块管理器,对所述功能模块执行注册、卸载、路由以及调用中的至少一种功能。
9.一种动态部署模块化的设备,其特征在于,该设备包括处理器和存储器,所述存储器用于存储所述处理器可执行的程序,所述处理器用于读取所述存储器中的程序并执行如下步骤:
将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
10.根据权利要求9所述的设备,其特征在于,所述多个功能模块中的任意两个功能模块具有至少一个相同的父类模块,其中所述父类模块用于表征功能模块之间的调用关系。
11.根据权利要求9所述的设备,其特征在于,所述任意一个功能模块的jar文件是基于Spring框架生成的。
12.根据权利要求9所述的设备,其特征在于,所述处理器具体被配置为执行:
利用JVM租户技术,为所述功能模块分配独立的静态资源。
13.根据权利要求9所述的设备,其特征在于,所述为所述功能模块分配独立的静态资源之后,所述处理器具体还被配置为执行:
利用Web-fragment技术加载所述功能模块的静态资源对应的配置文件。
14.根据权利要求9所述的设备,其特征在于,为所述功能模块分配独立的静态资源之后,所述处理器具体还被配置为执行:
将所述功能模块对应的静态资源的配置文件,以及所述功能模块对应的jar文件一起进行打包处理,以实现前端资源和后端资源的合并部署。
15.一种动态部署模块化的装置,其特征在于,包括:
应用拆分部署单元,用于将应用服务拆分成多个功能模块,将所述多个功能模块部署在同一个JVM上,其中所述功能模块与类加载器是一一对应的;
功能模块加载单元,用于针对任意一个功能模块,使用对应的类加载器加载所述功能模块,并为所述功能模块分配独立的静态资源。
16.一种计算机存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1~8任一所述方法的步骤。
17.一种计算机程序产品,其特征在于,包含有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111412918.3A CN114064215A (zh) | 2021-11-25 | 2021-11-25 | 动态部署模块化的方法、设备、装置及计算机程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111412918.3A CN114064215A (zh) | 2021-11-25 | 2021-11-25 | 动态部署模块化的方法、设备、装置及计算机程序产品 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114064215A true CN114064215A (zh) | 2022-02-18 |
Family
ID=80276170
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111412918.3A Pending CN114064215A (zh) | 2021-11-25 | 2021-11-25 | 动态部署模块化的方法、设备、装置及计算机程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114064215A (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004072821A2 (en) * | 2003-02-12 | 2004-08-26 | Bea Systems, Inc. | System and method for using classloader hierarchy to load software applications |
CN103473089A (zh) * | 2013-09-02 | 2013-12-25 | 深圳市华傲数据技术有限公司 | 一种分布式java程序运行方法、装置和系统 |
CN106528663A (zh) * | 2016-10-20 | 2017-03-22 | 深圳中兴网信科技有限公司 | 静态资源的管理方法及管理系统 |
CN108108181A (zh) * | 2017-12-14 | 2018-06-01 | 深圳市雷鸟信息科技有限公司 | 应用程序的功能更新方法、装置及计算机可读存储介质 |
CN110427198A (zh) * | 2018-04-27 | 2019-11-08 | 中兴通讯股份有限公司 | 应用程序的热修复方法、装置及终端、存储介质 |
CN112035192A (zh) * | 2020-09-02 | 2020-12-04 | 中国银行股份有限公司 | 支持组件热部署的Java类文件加载方法及装置 |
CN112433747A (zh) * | 2020-12-16 | 2021-03-02 | 深圳乐播科技有限公司 | 一种适用于软件开发工具包sdk的差分升级方法及系统 |
-
2021
- 2021-11-25 CN CN202111412918.3A patent/CN114064215A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004072821A2 (en) * | 2003-02-12 | 2004-08-26 | Bea Systems, Inc. | System and method for using classloader hierarchy to load software applications |
CN103473089A (zh) * | 2013-09-02 | 2013-12-25 | 深圳市华傲数据技术有限公司 | 一种分布式java程序运行方法、装置和系统 |
CN106528663A (zh) * | 2016-10-20 | 2017-03-22 | 深圳中兴网信科技有限公司 | 静态资源的管理方法及管理系统 |
CN108108181A (zh) * | 2017-12-14 | 2018-06-01 | 深圳市雷鸟信息科技有限公司 | 应用程序的功能更新方法、装置及计算机可读存储介质 |
CN110427198A (zh) * | 2018-04-27 | 2019-11-08 | 中兴通讯股份有限公司 | 应用程序的热修复方法、装置及终端、存储介质 |
CN112035192A (zh) * | 2020-09-02 | 2020-12-04 | 中国银行股份有限公司 | 支持组件热部署的Java类文件加载方法及装置 |
CN112433747A (zh) * | 2020-12-16 | 2021-03-02 | 深圳乐播科技有限公司 | 一种适用于软件开发工具包sdk的差分升级方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108287694B (zh) | 应用程序构建方法、系统、计算机设备和存储介质 | |
Akkus et al. | {SAND}: Towards {High-Performance} serverless computing | |
US8495598B2 (en) | Control flow graph operating system configuration | |
CN107291480B (zh) | 一种函数调用方法及装置 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN112463123B (zh) | 任务编译方法、装置、网络节点、系统及存储介质 | |
Kacamarga et al. | Lightweight virtualization in cloud computing for research | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
US10749984B2 (en) | Processing requests for multi-versioned service | |
CN111459499A (zh) | 程序编译方法及装置、计算机存储介质、电子设备 | |
Ruiz et al. | Reconstructable software appliances with kameleon | |
US11106572B2 (en) | Progressive regression impact management for code changes in a computer program | |
Wozniak et al. | MPI jobs within MPI jobs: A practical way of enabling task-level fault-tolerance in HPC workflows | |
US20110225213A1 (en) | Loop control flow diversion | |
CN113900704A (zh) | 应用程序安装包的发布方法、装置、可读介质及电子设备 | |
CN114327479A (zh) | 用于大数据的数据处理方法和数据处理装置 | |
Mahéo et al. | The serverless shell | |
US20160147559A1 (en) | Modification of context saving functions | |
US10108400B1 (en) | Rapid avionics development environment | |
CN114064215A (zh) | 动态部署模块化的方法、设备、装置及计算机程序产品 | |
US11720348B2 (en) | Computing node allocation based on build process specifications in continuous integration environments | |
CN104461557A (zh) | Puppet配置数据的处理方法及装置 | |
CN113778451A (zh) | 文件加载方法、装置、计算机系统和计算机可读存储介质 | |
Madushan | Cloud Native Applications with Ballerina: A guide for programmers interested in developing cloud native applications using Ballerina Swan Lake | |
CN107862038B (zh) | 一种解耦web客户端与大数据挖掘分析的数据挖掘平台及实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |