掌桥专利:专业的专利平台
掌桥专利
首页

一种无侵入式异构微服务框架的自适配接入方法及系统

文献发布时间:2023-06-19 19:30:30


一种无侵入式异构微服务框架的自适配接入方法及系统

技术领域

本发明属于云计算软件开发领域,具体涉及一种无侵入式异构微服务框架的自适配接入方法及系统。

背景技术

随着IT相关技术和互联网技术的快速发展,电力系统的信息技术也取得了长足的发展。电力系统逐步改变以往“单体架构开发”的传统构建方式,并基于微服务架构构建新的电力系统应用。微服务架构主要利用现代信息技术分散大系统,具备高内聚、低耦合的特征,一个服务负责一个业务,高度、独立地运行,实现自治。因此,微服务架构具备敏捷的理念,在微服务架构上研究电力系统,可以最大限度地简化服务开发。

目前主流的微服务开发语言是Java,其成熟的框架存在着gRPC、SpringCloud、Dubbo等,对应的注册中心有Nacos、Eureka、Consul、Zookeeper等,以及配置中心有Apollo、Nacos等,针对异构的微服务框架和注册配置中心选型,需要集成不同的SDK,并做代码级修改。因此,不可避免的面临着技术栈变更、服务升级等过程中带来的架构升级变更调整以及后向兼容等一系列问题。

即,目前不同服务框架下的应用系统都是独立部署管理的,类似一个个烟囱系统,如图1所示,各自需要集成对应注册发现、远端配置和服务治理的SDK,同时系统之间也无法实现服务互相发现。

发明内容

为克服上述现有技术的不足,本发明提出一种无侵入式异构微服务框架的自适配接入方法及系统,通过Agent JAR包进行无侵入式的方式将各个异构微服务框架中的各个应用系统中的对应注册发现、远端配置和服务治理实现统一的管理,实现各个异构微服务框架服务的统一性。

本发明提供的技术方案如下:

本发明提供了一种无侵入式异构微服务框架的自适配接入方法,包括:

将异构微服务框架中的各个微服务中治理逻辑和业务逻辑进行剥离;

根据每一个微服务开发独立的Agent包作为挂载逻辑;

将所述挂载逻辑挂载到目标业务的微服务上使得挂载逻辑替代该微服务中的治理逻辑。

优选的,所述将所述挂载逻辑挂载到目标业务的微服务上,包括:

通过目标业务的进程ID找到目标业务的微服务的运行环境;

将所述挂载逻辑通过Attach挂载到所述目标业务的微服务的运行环境中。

优选的,所述通过目标业务的进程ID找到其微服务的运行环境,包括:

将所述目标业务的进程ID与设定的类中的运行环境对象列表进行匹配;

当匹配成功的时候,选定对应的运行环境为所述目标业务的微服务的运行环境;

当匹配不成功的时候,不操作。

优选的,所述设定的类为com.sun.tools.attach.VirtualMachine类。

优选的,所述挂载逻辑包括一个或者多个模块,每一个模块具有相应的治理能力。

优选的,每一个所述模块通过独立的类加载器加载。

基于同一个发明构思,本发明还提出了一种无侵入式异构微服务框架的自适配接入系统,包括:

逻辑剥离单元,用于:将异构微服务框架中的各个微服务中治理逻辑和业务逻辑进行剥离;

挂载逻辑生成单元,用于:根据每一个微服务开发独立的Agent包作为挂载逻辑;

逻辑替代单元,用于:将所述挂载逻辑挂载到目标业务的微服务上使得挂载逻辑替代该微服务中的治理逻辑。

优选的,所述逻辑替代单元将所述挂载逻辑挂载到目标业务的微服务上,包括:

通过目标业务的进程ID找到目标业务的微服务的运行环境;

将所述挂载逻辑通过Attach挂载到所述目标业务的微服务的运行环境中。

优选的,所述逻辑替代单元通过目标业务的进程ID找到其微服务的运行环境,包括:

将所述目标业务的进程ID与设定的类中的运行环境对象列表进行匹配;

当匹配成功的时候,选定对应的运行环境为所述目标业务的微服务的运行环境;

当匹配不成功的时候,不操作。

优选的,所述设定的类为com.sun.tools.attach.VirtualMachine类。

优选的,所述挂载逻辑生成单元和所述逻辑替代单元中的挂载逻辑包括一个或者多个模块,每一个模块具有相应的治理能力。

优选的,每一个所述模块通过独立的类加载器加载。

基于同样的发明构思,本发明还提出了一种计算机设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行时,实现上述的一种无侵入式异构微服务框架的自适配接入方法。

基于同样的发明构思,本发明还提出了一种计算机可读存储介质,其上存有计算机程序,所述计算机程序被执行时,实现上述的一种无侵入式异构微服务框架的自适配接入方法。

与最接近的现有技术相比,本发明具有的有益效果如下:

本发明提供了一种无侵入式异构微服务框架的自适配接入方法及系统,通过将异构微服务框架中的各个微服务中治理逻辑和业务逻辑进行剥离;再根据每一个微服务开发独立的Agent包作为挂载逻辑;最后将所述挂载逻辑挂载到目标业务的微服务上使得挂载逻辑替代该微服务中的治理逻辑。实现了将各个异构微服务框架中的各个应用系统中的对应注册发现、远端配置和服务治理等逻辑实现统一的管理,从而实现各个异构微服务框架服务的统一性,同时大大降低用户从既有技术栈迁移到企业级平台的门槛,节省大量的开发适配和迁移成本。

附图说明

图1为目前不同服务框架下的应用系统的分布示意图;

图2为本发明提供的一种无侵入式异构微服务框架的自适配接入方法的流程示意图;

图3为本发明的无侵入式异构微服务框架架构图;

图4为本发明中挂载逻辑的模块化机制分布图;

图5为本发明提供的一种无侵入式异构微服务框架的自适配接入系统的系统连接示意图。

具体实施方式

下面结合附图对本发明的具体实施方式做进一步的详细说明。

实施例1:

本发明提供了一种无侵入式异构微服务框架的自适配接入方法,如图2所示,包括:

步骤1:将异构微服务框架中的各个微服务中治理逻辑和业务逻辑进行剥离;

步骤2:根据每一个微服务开发独立的Agent包作为挂载逻辑;

步骤3:将所述挂载逻辑挂载到目标业务的微服务上,使得挂载逻辑替代该微服务中的治理逻辑。

本发明通过异构框架兼容的无侵入接入,如图3所示,将异构兼容的治理逻辑(注册发现、远程配置、服务调用和治理等通用兼容性的逻辑)和业务逻辑进行剥离和拆分,这样剥离和拆分后的治理逻辑和业务逻辑就可以分别开发了,此时,根据微服务的特点开发一个完全独立的Agent包并由该Agent包代替原始的治理逻辑,原始的治理逻辑可以保留也可以删除,由此每个服务通过该Agent包获取相关的治理逻辑,这样就可以使得后续的开发专注在业务逻辑的开发上,致力于用户体验。

本发明的技术方案通过JVMTI(JVM Tool Interface)接口实现,通过JVMTI,外部进程可以获取到运行时JVM(Java虚拟机,即业务微服务的运行环境)的诸多信息,比如线程等。Agent可以从目标JVM(目标业务微服务的运行环境)中获取数据,然后将数据传递给外部进程,以此来监测和协助JVM,甚至能够替换和修改某些类的定义,实现字节码的增强。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和Java类操作。

本发明方案提供了虚拟机级别支持的AOP实现方式,使得开发者无需对JDK做任何升级和改动,就可以实现某些AOP的功能了,并且可以实现在JVM启动时加载生效,以及运行时修改类定义。

本发明为了实现了Agent的运行时加载能力,首先实现了下面的入口函数方法:

[1]public static void Agentmain(String AgentArgs,Instrumentationinst);

[2]public static void Agentmain(String AgentArgs);

Agent需要打包成一个jar包,在ManiFest属性中指定“Premain-Class”或者“Agent-Class”,即:

Premain-Class:class

Agent-Class:class

在将编写的Agent打成jar包后,可以挂载到目标JVM上去了,而同时因为需要实现在运行时挂载到目标JVM,方案做了特定的增强开发。

方案通过指定的进程ID找到目标JVM,然后通过Attach挂载到目标JVM上,从而执行加载Agent操作。VirtualMachine的Attach方法就是用来将Agent挂载到目标JVM上去的,而Detach则是将Agent从目标JVM卸载。

即,在步骤3中,将所述挂载逻辑挂载到目标业务的微服务上,包括以下步骤:

步骤a:通过目标业务的进程ID找到目标业务的微服务的运行环境;

步骤b:将所述挂载逻辑通过Attach挂载到所述目标业务的微服务的运行环境中。

其中,在步骤a中,通过目标业务的进程ID找到其微服务的运行环境,包括下列的步骤:

步骤(1):将所述目标业务的进程ID与设定的类中的运行环境对象列表进行匹配;

步骤(2):当匹配成功的时候,选定对应的运行环境为所述目标业务的微服务的运行环境;

步骤(3):当匹配不成功的时候,不操作。

其中,所述设定的类为com.sun.tools.attach.VirtualMachine类。

在本发明中,进程和类之间的关系是细化的实现,代码中会通过制定的进程ID和上文virtualmachine类型的JVM对象列表做对比,如果匹配就是目标JVM,之后将Agent挂载上去。

即是,本发明是基于com.sun.tools.attach.VirtualMachine类的JVM抽象,通过这个类找到目标JVM,并且实现对应的运行时挂载逻辑。下面是使用com.sun.tools.attach.VirtualMachine进行动态挂载Agent的实现:

同时,在本发明中,所述挂载逻辑生成单元和所述逻辑替代单元中的挂载逻辑包括一个或者多个模块,每一个模块具有相应的治理能力。作为优选的,每一个所述模块通过独立的类加载器加载。

本发明营造一个进程内的独立环境,与用户程序隔离,来专门进行相关治理能力。模块之间通过独立的类加载器来加载,这样不同框架和模块间的依赖就不会互相影响,不同的ClassLoader加载的类也不是同一个类。

有了相对独立的环境,那么Agent就能扮演进程内Sidecar的角色,接管不同协议的出入流量、治理Java方法。即将所有的能力放在Agent自有的classLoader之下,通过字节码将用户程序的流量或者调用引导至Agent。

本发明可基于实际情况加载对应的模块,如图4所示,如Agent-http、Agent-dubbo和Agent-grpc等,以http为例,其实现了Tomcat容器下的Filter拦截即请求入口拦截、实现了Resttemplate、Feign等客户端拦截即请求出口拦截,面对新的http Client实现其约定的字节码增强接口也可扩展新的拦截能力。多注册中心注册支持通过统一的Registery接口实现Eureka、Nacos等注册中心的统一适配和接管,并支持插件化扩展新的注册中心。

综上,相对于目前的技术,一般常见的Agent实现本质是基于BOOT应用加入对应依赖,打上对应注解实现相关能力,无非是基于Agent不需要用户手工改造,利用Agent的字节码实现而已。而针对异构框架的支持,需要能接管任何框架的应用,具备完整的兼容性,同时需要考虑异构框架面临的依赖冲突等问题,因此本发明设计了新的架构和实现方式。基于ClassLoader隔离,模块化管理,模块使用独立的类加载器来加载,不同模块之间的依赖不会互相影响,即所有能力的实现放在Agent自有的ClassLoader下,通过字节码将用户程序的流量引导至Agent。同时基于扩展设计,基于Interceptor拦截器实现方法级的拦截和治理;基于Filter实现流量治理能力。

实施例2:

本发明提供了一种无侵入式异构微服务框架的自适配接入系统,如图5所示,包括:逻辑剥离单元、挂载逻辑生成单元以及逻辑替代单元。

逻辑剥离单元,用于:将异构微服务框架中的各个微服务中治理逻辑和业务逻辑进行剥离;

挂载逻辑生成单元,用于:根据每一个微服务开发独立的Agent包作为挂载逻辑;

逻辑替代单元,用于:将所述挂载逻辑挂载到目标业务的微服务上使得挂载逻辑替代该微服务中的治理逻辑。

具体的,所述逻辑替代单元将所述挂载逻辑挂载到目标业务的微服务上,包括:

通过目标业务的进程ID找到目标业务的微服务的运行环境;

将所述挂载逻辑通过Attach挂载到所述目标业务的微服务的运行环境中。

具体的,所述逻辑替代单元通过目标业务的进程ID找到其微服务的运行环境,包括:

将所述目标业务的进程ID与设定的类中的运行环境对象列表进行匹配;

当匹配成功的时候,选定对应的运行环境为所述目标业务的微服务的运行环境;

当匹配不成功的时候,不操作。

具体的,所述设定的类为com.sun.tools.attach.VirtualMachine类。

具体的,所述挂载逻辑包括一个或者多个模块,每一个模块具有相应的治理能力。

具体的,每一个所述模块通过独立的类加载器加载。

本发明的系统的各个模块,其之间相互配合完成对应的工作,用于实现上述的一种无侵入式异构微服务框架的自适配接入方法。

实施例3:

基于同一种发明构思,本发明还提供了一种计算机设备,该计算机设备包括处理器以及存储器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器用于执行所述计算机存储介质存储的程序指令。处理器可能是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor、DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其是终端的计算核心以及控制核心,其适于实现一条或一条以上指令,具体适于加载并执行计算机存储介质内一条或一条以上指令从而实现相应方法流程或相应功能,以实现上述实施例中一种无侵入式异构微服务框架的自适配接入方法的步骤。

实施例4:

基于同一种发明构思,本发明还提供了一种存储介质,具体为计算机可读存储介质(Memory),所述计算机可读存储介质是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了终端的操作系统。并且,在该存储空间中还存放了适于被处理器加载并执行的一条或一条以上的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机可读存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。可由处理器加载并执行计算机可读存储介质中存放的一条或一条以上指令,以实现上述实施例中一种无侵入式异构微服务框架的自适配接入方法的步骤。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

最后应当说明的是:以上实施例仅用于说明本发明的技术方案而非对其保护范围的限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:本领域技术人员阅读本发明后依然可对申请的具体实施方式进行种种变更、修改或者等同替换,但这些变更、修改或者等同替换,均在申请待批的权利要求保护范围之内。

相关技术
  • 一种OSGi异构软件框架的扩展机制适配方法
  • 一种异构API适配处理方法及系统
  • 一种非侵入式监测系统下电器的识别方法
  • 无侵入式微服务接入方法及系统
  • 适配多云平台的多微服务分布式框架的构建系统及方法
技术分类

06120115934819