CN111782340A - 一种基于字节码的数据处理方法、装置、设备及系统 - Google Patents
一种基于字节码的数据处理方法、装置、设备及系统 Download PDFInfo
- Publication number
- CN111782340A CN111782340A CN202010606036.XA CN202010606036A CN111782340A CN 111782340 A CN111782340 A CN 111782340A CN 202010606036 A CN202010606036 A CN 202010606036A CN 111782340 A CN111782340 A CN 111782340A
- Authority
- CN
- China
- Prior art keywords
- plug
- modification
- bytecode
- ins
- execution method
- 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.)
- Granted
Links
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/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本说明书提供了一种基于字节码的数据处理方法、装置、设备及系统。所述方法包括将目标服务对应的类加载到Java虚拟机;启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。利用本说明书实施例可以以对应用无入侵的方式实现字节码修改,从而减少工作量。
Description
技术领域
本申请涉及分布式监控技术领域,特别涉及一种基于字节码的数据处理方法、装置、设备及系统。
背景技术
在分布式体系中,链路追踪、请求限流在故障预警定位、系统高可用层面发挥着重要作用,其实现思路主要是对请求进行埋点,然后在请求前后插入链路采集、流量控制等逻辑。然而在请求前后插入链路采集、流量控制等逻辑通常采用侵入式实现,这种方式通常需要修改应用代码,从而会导致工作量加大。
发明内容
本说明书实施例提供了一种基于字节码的数据处理方法、装置、设备及系统,可以以对应用无入侵的方式实现对字节码的处理,从而减少工作量。
本说明书提供的基于字节码的数据处理方法、装置、设备及系统是包括以下方式实现的。
一种基于字节码的数据处理方法,包括:将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
一种基于字节码的数据处理装置,包括:加载模块,用于将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;获取模块,用于启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;获得模块,用于利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;实例化模块,用于将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
一种基于字节码的数据处理设备,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
一种基于字节码的数据处理系统,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现本说明书实施例中任意一个方法实施例方法的步骤。
本说明书提供的一种基于字节码的数据处理方法、装置、设备及系统。一些实施例中通过以非侵入方式对同一个方法进行多次字节码修改,可以解决侵入式需要修改应用代码、应用落地困难问题。由于不同插件可共存且功能不冲突,通过利用不同插件对同一执行方法进行多次字节码修改,不仅可以达到功能叠加的效果,增强对应的功能,而且可以有效减少冗余代码,提高服务性能。采用本说明书提供的实施方案,可以以对应用无入侵的方式实现字节码修改,方便应用落地的同时,增强应用实现的功能。
附图说明
此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,并不构成对本说明书的限定。在附图中:
图1是本说明书提供的基于字节码的数据处理方法的一个实施例的流程示意图;
图2是本说明书提供的基于字节码的数据处理方法的一个具体实施例的流程示意图;
图3是本说明书提供的一种基于字节码的数据处理装置的一个实施例的模块结构示意图;
图4是本说明书提供的一种基于字节码的数据处理系统的一个实施例的结构示意图;
图5是本说明书提供的一种基于字节码的数据处理服务器的一个实施例的硬件结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书中的一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例保护的范围。
在分布式体系中,链路追踪、请求限流在故障预警定位、系统高可用保障层面发挥着必不可少的作用,实现思路本质上是对请求进行埋点,在请求前后插入链路采集、流量控制等逻辑。然而在请求前后插入链路采集、流量控制等逻辑通常需要修改应用代码,应用落地比较困难。
本说明书提供的一种基于字节码的数据处理方法、装置、设备及系统,以非侵入式的方式对某个方法同时落地链路追踪和限流组件,且两种组件可共存,不仅可以解决侵入式需要修改应用代码、应用落地困难问题,而且可以对同一个方法达到功能叠加效果,从而增强应用实现的功能。
下面以一个具体的应用场景为例对本说明书实施方案进行说明。具体的,图1是本说明书提供的基于字节码的数据处理方法的一个实施例的流程示意图。虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者部分合并后更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本说明书实施例或附图所示的执行顺序或模块结构。所述的方法或模块结构在实际中的装置、服务器或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境、甚至包括分布式处理、服务器集群的实施环境)。
需要说明的是,下述实施例描述并不对基于本说明书的其他可扩展到的应用场景中的技术方案构成限制。具体的一种实施例如图1所示,本说明书提供的一种基于字节码的数据处理方法的一种实施例中,所述方法可以包括以下步骤。
S0:将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法。
其中,Java虚拟机(Java Virtual Machine简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境。由于JVM可以屏蔽与具体操作系统平台相关的信息,使得Java程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM也可以理解为是一个可运行的程序,其可以全部用软件方式来实现,也可以采用硬件或软件结合的方式来实现。当启动一个Java程序时,就会相应运行一个JVM。运行中的JVM可以称为Java虚拟机的一个实例。Java程序运行结束关闭后,运行这个程序的JVM也会关闭。
当JVM运行一个Java程序时,可以使用类加载器加载Java程序的类文件,并且在计算机内申请一块内存区域,作为运行数据区。运行数据区可以用来存储程序的类文件、创建的静态对象和实例对象、方法、局部变量、中间结果、方法的返回值等。
本说明书一些实施例中,可以基于类加载器,将目标服务对应的类加载到JVM。其中,在Java中,类可以理解为是对一类事物的声明。目标服务可以理解为要满足某些需求或实现某些功能的服务。一些实施例中,JVM的作用主要是加载编译器编译好的字节码,并解释成机器码。在Java中,将虚拟机可以读懂的代码,称之为字节码。需要说明的是,字节码是指虚拟机可以读懂的代码,也就是Java中的class文件。
本说明书一些实施例中,所述目标服务对应的类中可以包括所述目标服务调用的执行方法。所述执行方法可以理解为是Java中的方法。其中,在Java中,函数就是方法,其可以实现不同功能。Java中,类可以包括属性和方法,方法必须在类中。每个Java程序的主类都包括一个main()方法,JVM启动Java程序时,会调用主类的main()方法作为Java程序的入口。
本说明书一些实施例中,可以先初始化JVM,然后基于JVM类加载器,将目标服务调用的执行方法所在类加载到JVM。
S2:启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容。
本说明书实施例中,JavaAgant可以理解为是一个字节码层面的类的加强器,其可以在不改变类的情况下,增加一些用户需要的功能。JavaAgant可以在字节码层面对类和方法进行修改。
本说明书一些实施例中,在将服务调用的执行方法所在类加载到JVM后,可以基于JVM,启动JavaAgant。其中,JavaAgant程序需要随应用程序一起启动。
本说明书实施例中,JAR文件可以理解为是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。JAR文件也可以称为jar包。JavaAgant可以用于指定一个jar包,这个jar包的MANIFEST.MF文件必须指定Premain-Class项,Premain-Class指定的类必须实现premain方法。premain方法可以理解为运行在main函数之前的类。当JVM启动时,在执行main函数之前,JVM会先运行JavaAgant所指定jar包内Premain-Class这个类的premain方法。需要说明的是,可以通过-javaagent来指定编写的Agant的jar路径及要传给Agant的参数,这样在启动时,Agant就可以实现指定功能。例如,以JavaAgant程序放置在/tmp/xxx.jar为例,可以在Java启动命令增加-javaagent:/tmp/xxx.jar。
本说明书一些实施例中,JAR文件中可以包括不同插件。例如,/tmp/xxx.jar中可以包含链路追踪、限流等插件。其中,插件可以按需对字节码进行修改。
一些实施场景中,不同插件可以包括链路追踪插件、限流插件、对微服务进行鉴权插件、负载均衡插件等。优选的,本说明书实施例中,所述不同插件至少可以包括链路追踪插件和限流插件。其中,链路追踪插件可以用于提供完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等,还可以用于快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。限流插件可以用于实现节点级别的读写限流,在关键时刻对指定索引降级,将流量控制在合适范围内,从而提高服务的稳定性。对微服务进行鉴权插件可以用于对微服务之间的调用进行校验,从而保证信息安全。负载均衡插件可以将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,从而有效解决并发问题,提高应用处理性能。需要说明的是,还可以包括其它功能的插件,用于改变原始字节码的功能。
本说明书一些实施例中,启动JavaAgant后,可以基于JavaAgant查找对应的插件。例如,启动JavaAgant后,可以基于JavaAgant,从/tmp/xxx.jar中找到链路追踪插件和限流插件。
本说明书一些实施例中,所述插件可以用于对执行方法进行字节码增强。其中,字节码增强可以理解为是在Java字节码生成之后,对字节码进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。一些实施场景中,所述插件还可以用于修改执行方法的功能,使其达到的效果更好。
本实施例中,通过对执行方法进行字节码增强,可以有效减少冗余代码,提高服务性能。
本说明书一些实施例中,不同插件可以对应不同修改信息。一些实施例中,所述修改信息可以包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容。一些实施场景中,所述进行字节码修改的目标名称可以包括执行方法对应的类名和方法名。一些实施场景中,可以将进行字节码修改的目标名称记为key,将与所述目标名称对应的字节码修改内容记为value,此时,key可以对应类名+方法名,value可以对应字节码修改内容。其中,key与value对应。这样,根据目标名称就可以知道针对哪个类的哪个方法进行字节码修改。例如,目标名称可以为com.alibaba.dubbo.rpc.Filter(类名)+invoke(方法名),这样,在获取不同插件对应的修改信息后,就可以确定是针对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改,然后可以根据修改信息中包括的字节码修改内容对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改,从而增强其实现的功能。
本说明书一些实施例中,启动JavaAgant后,可以基于JavaAgant,查找对应的插件,并获得与插件对应的修改信息。例如,启动JavaAgant后,可以基于JavaAgant,从/tmp/xxx.jar中找到链路追踪插件和限流插件,并分别获取链路追踪插件对应的修改信息和限流插件对应的修改信息。
一些实施例中,所述从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,可以包括:从JavaAgant对应的JAR文件中获取不同插件;将所述不同插件对应的路径注册到缓存中;从所述缓存中获取与所述不同插件对应的修改信息。其中,将不同插件对应的路径注册到缓存中可以记录插件的目录,以便后续根据目录直接读取插件的内容,从而提高执行效率。一些实施场景中,可以以key-value的方式将不同插件对应的路径注册到缓存中,其中,key为类名+方法名,value为字节码修改内容。一些实施场景中,可以以队列的方式将不同插件对应的路径注册到缓存。其中,队列可以理解为是一种线性表,其可以允许在表的前端进行删除操作,在表的后端进行插入操作。
本说明书一些实施例中,所述缓存中可以包括针对同一执行方法进行字节码修改的插件,也可以包括针对不同执行方法进行字节码修改的插件。一些实施场景中,可以根据插件对应的修改信息中包括的目标名称将缓存中的插件进行分类,获得不同目标名称对应的插件信息,即获得针对同一执行方法进行字节码修改的插件。其中,插件信息中可以包括一个或多个插件对应的信息。
本说明书一些实施例中,当所述插件为链路追踪插件时,所述字节码修改内容可以包括在与所述目标名称对应的执行方法前增加链路ID(Identity Document)获取信息,在与所述目标名称对应的执行方法后增加链路耗时获取信息、执行结果获取信息、链路发送信息等。本说明书一些实施例中,当所述插件为限流插件时,所述字节码修改内容可以包括增加调用次数统计信息,次数超过阈值后抛出异常信息等。
本说明书实施例中,通过启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,可以为后续进行字节码修改提供保障。
S4:利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同。
本说明书实施例中,在从JavaAgant对应的JAR文件中获取不同插件对应的修改信息后,可以利用不同插件对应的字节码修改内容对与目标名称对应的执行方法进行字节码修改。
本说明书一些实施例中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同。这样,不同插件可以用于对同一执行方法进行字节码修改。
本说明书一些实施例中,所述利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法,可以包括:利用第一插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得第一修改后的执行方法;将所述第一插件从所述缓存中删除;判断所述缓存中是否存在与所述目标名称对应的第二插件;确认存在时,利用所述第二插件对应的字节码修改内容对所述第一修改后的执行方法进行字节码修改,获得第二修改后的执行方法;相应的,将所述第二插件从所述缓存中删除,直至所述缓存中不存在与所述目标名称对应的插件时,获得修改后的执行方法。
需要说明的是,上述实施例中,“第一”、“第二”只是为了区分不同的插件,并没有实际含义。此外,可以在利用插件对应的修改信息进行字节码修改后,将插件从缓存中删除,也可以在获取插件对应的修改信息后,将插件从缓存中删除,上述只是示例性说明,对本说明书其它实施方案并不构成限定。
例如一些实施场景中,从缓存中获取的链路追踪插件对应的修改信息包括的key为com.alibaba.dubbo.rpc.Filter+invoke,value为在invoke方法前增加链路ID获取和在invoke方法后增加链路耗时获取、执行结果获取、链路信息发送,限流插件对应的修改信息包括的key为com.alibaba.dubbo.rpc.Filter+invoke,value为增加调用次数统计和次数超过阈值后抛出异常。这样,可以先利用链路追踪插件对应的value对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改,链路追踪插件修改后,将链路追踪插件从缓存中移除,然后检查缓存中是否还存在key为com.alibaba.dubbo.rpc.Filter+invoke的插件。此时,由于限流插件对应的key为com.alibaba.dubbo.rpc.Filter+invoke,所以缓存中存在key为com.alibaba.dubbo.rpc.Filter+invoke的限流插件,此时可以利用限流插件对链路追踪插件修改后的方法进行字节码修改,限流插件修改后,将限流插件从缓存中移除,然后继续检查缓存中是否还存在key为com.alibaba.dubbo.rpc.Filter+invoke的插件,直至缓存中不存在key为com.alibaba.dubbo.rpc.Filter+invoke的插件时,获得修改后的执行方法。
上述实施例中,以非侵入式的方式对某个方法同时落地链路追踪和限流组件,且两种组件可共存,不仅可以解决侵入式需要修改应用代码、应用落地困难问题,方便的实现字节码修改,而且可以对同一个方法达到功能叠加效果,增强应用实现的功能。
本说明书一些实施例中,利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法,还可以包括:根据插件对应的修改信息中包括的目标名称,获得缓存中针对同一执行方法进行字节码修改的所有插件,然后利用所有插件对目标名称对应的执行方法逐一或同时进行字节码修改,当所有插件对目标名称对应的执行方法完成修改后,将这些插件从缓存中移除,获得修改后的执行方法。其中,不同插件对应的功能不冲突,可以叠加。
本说明书一些实施例中,对同一执行方法进行字节码修改时,不同插件对应的功能不冲突,可以叠加。这样,使用非侵入式对同一个JAVA类的同一个方法多次字节码修改就不会覆盖前次修改后的字节码,从而可以达到功能叠加的效果,更便于应用落地。
需要说明的是,缓存中针对同一方法进行字节码修改的插件可以包括一个或多个,上述只是进行示例性说明,对本说明书其它实施例并不构成限制。此外,本说明书实施例中,缓存中包括多个插件时,利用插件进行字节码修改的顺序可以随机,也可以预先设定,本说明书对此不作限定。
S6:将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
其中,在面向对象的编程中,可以把用类创建对象的过程称为实例化,其是将一个抽象的概念类,具体到该类实物的过程。
本说明书一些实施例中,在利用不同插件对应的字节码修改内容对与目标名称对应的执行方法进行字节码修改,获得修改后的执行方法后,可以将修改后的执行方法对应的类实例化为对象,以使目标服务进行调用。
例如一些实施场景中,可以将修改后的com.alibaba.dubbo.rpc.Filter类的字节码实例化为对象,提供给应用使用,这样应用执行com.alibaba.dubbo.rpc.Filter类的invoke方法时,就可以实现链路追踪和限流的功能。
下面结合一个具体实施例对上述方法进行说明,然而,值得注意的是,该具体实施例仅是为了更好地说明本申请,并不构成对本申请的不当限定。如图2所示,图2是本说明书提供的基于字节码的数据处理方法的一个具体实施例的流程示意图。其中,以JavaAgant程序放置在/tmp/xxx.jar为例,在执行具体实施例前,可以对应用进行部署:(1)应用Java启动命令增加-javaagent:/tmp/xxx.jar;(2)/tmp/xxx.jar中包含链路追踪和限流两种插件,链路追踪插件和限流插件对应的修改信息中key均为com.alibaba.dubbo.rpc.Filter+invoke。本具体实施例中,以对dubbo服务调用的执行方法进行链路追踪和限流为例说明,其中,dubbo是一个高性能优秀的服务框架,使得应用可通过高性能的RPC(RemoteProcedure Call,远程过程调用)实现服务的输出和输入功能,可以和Spring框架无缝集成。dubbo可以提供面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。具体可以包括以下步骤。
S20:JVM初始化,基于JVM类加载器,将dubbo服务调用的执行方法所在类加载到JVM。
S22:启动JavaAgant,基于JavaAgant获得链路追踪插件和限流插件。
本实施例中,可以基于JavaAgant,从/tmp/xxx.jar中找到链路追踪插件和限流插件。
S24:将链路追踪插件和限流插件的所在路径注册到缓存中。
本实施例中,将链路追踪插件和限流插件的所在路径注册到缓存中主要可以用于记录插件的目录,以便后续根据该目录读取插件的内容。
本实施例中,可以以key-value的方式将不同插件对应的路径注册到缓存中,其中,key为类名+方法名,value为字节码修改内容。
S26:获取链路追踪插件对应的key和value1,基于value1对key对应的方法进行字节码修改。
本实施例中,key为进行字节码修改的目标名称。value1为与目标名称对应的字节码修改内容。其中,根据key可以知道针对哪个类的哪个方法进行字节码修改。根据value1可以知道对目标名称对应的方法进行如何修改。
本实施例中,目标名称为com.alibaba.dubbo.rpc.Filter+invoke,与目标名称对应的字节码修改内容为:在invoke方法前增加链路ID获取,在invoke方法后增加链路耗时获取,执行结果获取,链路信息发送。其中,该字节码修改内容可以用于链路追踪。
本实施例中,可以基于字节码修改内容对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改,即增加链路追踪内容。
本实施例中,在增加链路追踪内容后,可以将链路追踪插件从缓存中移除。
S28:检查缓存中是否存在与链路追踪插件key相同的插件。
本实施例中,存在与链路追踪插件key相同的插件时,说明还存在针对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改的插件,此时,执行步骤S30;不存在与链路追踪插件key相同的插件时,说明不存在针对com.alibaba.dubbo.rpc.Filter类的invoke方法进行字节码修改的插件,此时,执行步骤S32。
S30:获取与链路追踪插件key相同的插件对应的key和value2,基于value2对key对应的方法进行字节码修改。
本实施例中,由于/tmp/xxx.jar中包含链路追踪和限流两种插件,链路追踪插件和限流插件对应的修改信息中key均为com.alibaba.dubbo.rpc.Filter+invoke,所以缓存中存在与链路追踪插件key相同的限流插件。此时,可以相应的获取限流插件对应的key和value2,基于该value2对key对应的方法进行字节码修改。其中,该修改是基于增加链路追踪内容后key对应的方法进行字节码修改。
本实施例中,value2,即与目标名称对应的字节码修改内容为:增加调用次数统计和次数超过阈值后抛出异常。其中,其中,该字节码修改内容可以用于实现流量控制。
本实施例中,在增加流量控制内容后,可以将流量插件从缓存中移除。
本实施例中,上述链路追踪插件和限流插件均是对key对应的方法进行字节码修改,链路追踪插件和限流插件对应的功能不冲突,可以叠加,即同一个类多次修改不会覆盖前次修改后的字节码。
需要说明的是,由于本实施例中,/tmp/xxx.jar中只包含链路追踪和限流两种插件,所以在进行两次字节修改后,不再检查缓存中是否存在key为com.alibaba.dubbo.rpc.Filter+invoke的插件,直接执行步骤S32。一些实施例中,jar文件中可以包括更多插件,此时需要继续检查缓存中是否存在key为com.alibaba.dubbo.rpc.Filter+invoke的插件,如存在,则继续根据插件对应的信息进行字节码修改,直至缓存中不存在与该key对应的插件,获得字节码修改后对应的方法。
S32:将字节码修改后方法对应的类实例化为对象,以便服务调用。
本实施例中,可以将修改后的com.alibaba.dubbo.rpc.Filter类的字节码实例化为对象,提供给应用使用,则应用执行com.alibaba.dubbo.rpc.Filter类的invoke方法时,就可以包括链路追踪和限流的功能。
本说明书提供的一种基于字节码的数据处理方法,通过以非侵入方式对同一个方法进行多次字节码修改,可以解决侵入式需要修改应用代码、应用落地困难问题,减少工作量。由于不同插件可共存且功能不冲突,通过利用不同插件对同一执行方法进行多次字节码修改,不仅可以达到功能叠加的效果,增强对应的功能,而且可以有效减少冗余代码,提高服务性能。
本说明书中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参加即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。
基于上述所述的一种基于字节码的数据处理方法,本说明书一个或多个实施例还提供一种基于字节码的数据处理装置。所述的装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本说明书实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
具体地,图3是本说明书提供的一种基于字节码的数据处理装置的一个实施例的模块结构示意图,如图3所示,本说明书提供的一种基于字节码的数据处理装置可以包括:加载模块120,获取模块122,获得模块124,实例化模块126。
加载模块120,可以用于将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;
获取模块122,可以用于启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;
获得模块124,可以用于利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;
实例化模块126,可以用于将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
本说明书提供的一种基于字节码的数据处理装置,通过以非侵入方式对同一个方法进行多次字节码修改,可以解决侵入式需要修改应用代码、应用落地困难问题,减少工作量。由于不同插件可共存且功能不冲突,通过利用不同插件对同一执行方法进行多次字节码修改,不仅可以达到功能叠加的效果,增强对应的功能,而且可以有效减少冗余代码,提高服务性能。
需要说明的,上述所述的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
本说明书还提供一种基于字节码的数据处理设备的实施例,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:
将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;
启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;
利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;
将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
需要说明的,上述所述的设备根据方法或装置实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
本说明书还提供一种基于字节码的数据处理系统的实施例,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现上述任意一个或者多个实施例中所述方法的步骤,例如包括:将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。所述的系统可以为单独的服务器,也可以包括使用了本说明书的一个或多个所述方法或一个或多个实施例装置的服务器集群、系统(包括分布式系统)、软件(应用)、实际操作装置、逻辑门电路装置、量子计算机等并结合必要的实施硬件的终端装置。
如图4所示,图4是本说明书提供的一种基于字节码的数据处理系统的一个实施例的结构示意图,本说明书提供的一种基于字节码的数据处理系统可以包括:JVM初始化装置,JVM类加载装置,Java Agent启动装置,插件识别装置,插件管理装置,限流插件装置,链路追踪插件装置,字节码修改装置,JVM实例化装置。
JVM初始化装置,可以用于对JVM初始化;还可以用于调起JVM类加载装置和JavaAgant启动装置;
JVM类加载装置,可以用于将目标服务调用的执行方法所在类加载到JVM;
Java Agent启动装置,可以用于调起插件识别装置;
插件识别装置,可以用于查找链路追踪插件和限流插件;还可以用于将链路追踪插件和限流插件的所在路径注册到插件管理装置的缓存中;
限流插件装置,可以用于存储限流插件对应的修改信息;其中,字节码修改内容包括增加调用次数统计、次数超过阈值后抛出异常;
链路追踪插件装置,可以用于存储链路追踪插件对应的修改信息;其中,字节码修改内容包括:在方法前增加链路ID获取,在方法后增加链路耗时获取、执行结果获取、链路信息发送;
插件管理装置,可以用于从链路追踪插件装置获取链路追踪插件对应的修改信息和从限流插件装置获取限流插件对应的修改信息,其中,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;还可以用于将获取的修改信息发送至字节码修改装置;还可以用于在将获取的修改信息发送至字节码修改装置后,将链路追踪插件和限流插件从缓存中移除;
字节码修改装置,可以用于根据限流插件对应的字节码修改内容对目标名称对应的方法进行字节码修改,以实现流量控制;还可以用于根据链路追踪插件对应的字节码修改内容对目标名称对应的方法进行字节码修改,以实现链路追踪;还可以用于检查插件管理装置的缓存中是否存在目标名称对应的其它插件,如果存在,基于其它插件对应的字节码修改内容对目标名称对应的方法进行字节码修改;
JVM实例化装置,可以用于将修改后的方法对应的类实例化为对象,并提供给应用使用。
本说明书所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图5是本说明书提供的一种基于字节码的数据处理服务器的一个实施例的硬件结构框图,该服务器可以是上述实施例中的基于字节码的数据处理装置或基于字节码的数据处理系统。如图5所示,服务器10可以包括一个或多个(图中仅示出一个)处理器100(处理器100可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器200、以及用于通信功能的传输模块300。本领域普通技术人员可以理解,图5所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器10还可包括比图5中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如数据库或多级缓存、GPU,或者具有与图5所示不同的配置。
存储器200可用于存储应用软件的软件程序以及模块,如本说明书实施例中的基于字节码的数据处理方法对应的程序指令/模块,处理器100通过运行存储在存储器200内的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器200可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器200可进一步包括相对于处理器100远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输模块300用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输模块300包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块300可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本说明书实施例所描述方案的效果。
所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质有可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
本说明书提供的上述基于字节码的数据处理方法或装置实施例可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作系统的c++语言在PC端实现、linux系统实现,或其他例如使用android、iOS系统程序设计语言在智能终端实现,以及基于量子计算机的处理逻辑实现等。
需要说明的是说明书上述所述的装置、计算机存储介质、系统根据相关方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照对应方法实施例的描述,在此不作一一赘述。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例并不局限于必须是符合行业通信标准、标准计算机数据处理和数据存储规则或本说明书一个或多个实施例所描述的情况。某些行业标准或者使用自定义方式或实施例描述的实施基础上略加修改后的实施方案也可以实现上述实施例相同、等同或相近、或变形后可预料的实施效果。
本领域技术人员可知,设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。本领域技术人员也应该清楚,只需要将方法流程用硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把部分模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现,可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (10)
1.一种基于字节码的数据处理方法,其特征在于,包括:
将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;
启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;
利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;
将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
2.根据权利要求1所述的方法,其特征在于,所述不同插件至少包括链路追踪插件和限流插件。
3.根据权利要求2所述的方法,其特征在于,当所述插件为链路追踪插件时,所述字节码修改内容包括在与所述目标名称对应的执行方法前增加链路ID获取信息,在与所述目标名称对应的执行方法后增加链路耗时获取信息、执行结果获取信息、链路发送信息。
4.根据权利要求2所述的方法,其特征在于,当所述插件为限流插件时,所述字节码修改内容包括增加调用次数统计信息,次数超过阈值后抛出异常信息。
5.根据权利要求1所述的方法,其特征在于,所述从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,包括:
从JavaAgant对应的JAR文件中获取不同插件;
将所述不同插件对应的路径注册到缓存中;
从所述缓存中获取与所述不同插件对应的修改信息。
6.根据权利要求5所述的方法,其特征在于,所述利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法,包括:
利用第一插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得第一修改后的执行方法;
将所述第一插件从所述缓存中删除;
判断所述缓存中是否存在与所述目标名称对应的第二插件;
确认存在时,利用所述第二插件对应的字节码修改内容对所述第一修改后的执行方法进行字节码修改,获得第二修改后的执行方法;
相应的,将所述第二插件从所述缓存中删除,直至所述缓存中不存在与所述目标名称对应的插件时,获得修改后的执行方法。
7.根据权利要求1所述的方法,其特征在于,所述进行字节码修改的目标名称包括执行方法对应的类名和方法名。
8.一种基于字节码的数据处理装置,其特征在于,包括:
加载模块,用于将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;
获取模块,用于启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;
获得模块,用于利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;
实例化模块,用于将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
9.一种基于字节码的数据处理设备,其特征在于,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:
将目标服务对应的类加载到Java虚拟机;其中,所述目标服务对应的类中包括所述目标服务调用的执行方法;
启动JavaAgant,从JavaAgant对应的JAR文件中获取不同插件对应的修改信息,所述插件用于对执行方法进行字节码修改,所述修改信息包括进行字节码修改的目标名称和与所述目标名称对应的字节码修改内容;
利用所述不同插件对应的字节码修改内容对与所述目标名称对应的执行方法进行字节码修改,获得修改后的执行方法;其中,不同插件对应的目标名称相同,不同插件对应的字节码修改内容不同;
将所述修改后的执行方法对应的类实例化为对象,以使所述目标服务调用。
10.一种基于字节码的数据处理系统,其特征在于,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现权利要求1-7中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010606036.XA CN111782340B (zh) | 2020-06-29 | 2020-06-29 | 一种基于字节码的数据处理方法、装置、设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010606036.XA CN111782340B (zh) | 2020-06-29 | 2020-06-29 | 一种基于字节码的数据处理方法、装置、设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782340A true CN111782340A (zh) | 2020-10-16 |
CN111782340B CN111782340B (zh) | 2023-08-08 |
Family
ID=72760247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010606036.XA Active CN111782340B (zh) | 2020-06-29 | 2020-06-29 | 一种基于字节码的数据处理方法、装置、设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782340B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111796865A (zh) * | 2020-06-28 | 2020-10-20 | 北京字节跳动网络技术有限公司 | 一种字节码文件修改方法、装置、终端设备及介质 |
CN112463303A (zh) * | 2020-12-01 | 2021-03-09 | 中国工商银行股份有限公司 | Java虚拟机类加载方法及系统 |
CN112612678A (zh) * | 2020-12-29 | 2021-04-06 | 中孚安全技术有限公司 | 一种基于字节码技术的零侵入监控方法及系统 |
CN112860235A (zh) * | 2021-02-04 | 2021-05-28 | 北京百度网讯科技有限公司 | 处理文本的方法、装置、设备和存储介质 |
CN112965848A (zh) * | 2021-03-05 | 2021-06-15 | 北京百度网讯科技有限公司 | 用于微服务的熔断降级方法、装置、设备和介质 |
CN113434210A (zh) * | 2021-06-23 | 2021-09-24 | 深圳市酷开网络科技股份有限公司 | 一种插件加载控制方法、系统、终端设备及存储介质 |
CN114416567A (zh) * | 2022-01-20 | 2022-04-29 | 浙江吉利控股集团有限公司 | 应用程序访问方法及装置 |
CN115022389A (zh) * | 2022-05-26 | 2022-09-06 | 携程旅游网络技术(上海)有限公司 | 全链路信息的处理方法、系统、电子设备及存储介质 |
CN115292203A (zh) * | 2022-09-30 | 2022-11-04 | 平安银行股份有限公司 | 一种源代码分析方法及装置 |
CN115629992B (zh) * | 2022-12-16 | 2023-04-07 | 云筑信息科技(成都)有限公司 | 一种对使用Spring技术栈构建的应用系统进行调试的方法 |
CN116909681A (zh) * | 2023-06-13 | 2023-10-20 | 北京远舢智能科技有限公司 | 数据处理组件的生成方法、装置、电子设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045746A (zh) * | 2018-10-12 | 2020-04-21 | 北京京东尚科信息技术有限公司 | 代码扩展方法和框架 |
-
2020
- 2020-06-29 CN CN202010606036.XA patent/CN111782340B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045746A (zh) * | 2018-10-12 | 2020-04-21 | 北京京东尚科信息技术有限公司 | 代码扩展方法和框架 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111796865A (zh) * | 2020-06-28 | 2020-10-20 | 北京字节跳动网络技术有限公司 | 一种字节码文件修改方法、装置、终端设备及介质 |
CN112463303A (zh) * | 2020-12-01 | 2021-03-09 | 中国工商银行股份有限公司 | Java虚拟机类加载方法及系统 |
CN112463303B (zh) * | 2020-12-01 | 2023-11-24 | 中国工商银行股份有限公司 | Java虚拟机类加载方法及系统 |
CN112612678A (zh) * | 2020-12-29 | 2021-04-06 | 中孚安全技术有限公司 | 一种基于字节码技术的零侵入监控方法及系统 |
CN112860235B (zh) * | 2021-02-04 | 2023-09-05 | 北京百度网讯科技有限公司 | 处理文本的方法、装置、设备和存储介质 |
CN112860235A (zh) * | 2021-02-04 | 2021-05-28 | 北京百度网讯科技有限公司 | 处理文本的方法、装置、设备和存储介质 |
CN112965848A (zh) * | 2021-03-05 | 2021-06-15 | 北京百度网讯科技有限公司 | 用于微服务的熔断降级方法、装置、设备和介质 |
US12034820B2 (en) | 2021-03-05 | 2024-07-09 | Beijing Baidu Netcom Science Technology Co., Ltd. | Fusing and degradation method and apparatus for micro-service, device, and medium |
CN113434210A (zh) * | 2021-06-23 | 2021-09-24 | 深圳市酷开网络科技股份有限公司 | 一种插件加载控制方法、系统、终端设备及存储介质 |
CN114416567A (zh) * | 2022-01-20 | 2022-04-29 | 浙江吉利控股集团有限公司 | 应用程序访问方法及装置 |
CN115022389A (zh) * | 2022-05-26 | 2022-09-06 | 携程旅游网络技术(上海)有限公司 | 全链路信息的处理方法、系统、电子设备及存储介质 |
CN115292203A (zh) * | 2022-09-30 | 2022-11-04 | 平安银行股份有限公司 | 一种源代码分析方法及装置 |
CN115629992B (zh) * | 2022-12-16 | 2023-04-07 | 云筑信息科技(成都)有限公司 | 一种对使用Spring技术栈构建的应用系统进行调试的方法 |
CN116909681A (zh) * | 2023-06-13 | 2023-10-20 | 北京远舢智能科技有限公司 | 数据处理组件的生成方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111782340B (zh) | 2023-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111782340B (zh) | 一种基于字节码的数据处理方法、装置、设备及系统 | |
CN109710384B (zh) | 一种安全的Java智能合约解释执行引擎及方法 | |
US10698668B1 (en) | Custom code transformations during compilation process | |
Afonso et al. | Going native: Using a large-scale analysis of android apps to create a practical native-code sandboxing policy | |
Liu et al. | {FANS}: Fuzzing android native system services via automated interface analysis | |
US8799885B2 (en) | Method and system for automated root-cause analysis for class loading failures in java | |
Bruce et al. | Jshrink: In-depth investigation into debloating modern java applications | |
CN105574411B (zh) | 一种动态脱壳方法、装置和设备 | |
KR101740604B1 (ko) | 멀웨어 검출을 위한 애플리케이션들의 제네릭 언패킹 | |
CN105094797A (zh) | 用于电子设备的应用分析系统 | |
CN111400757B (zh) | 防止安卓第三方库中native代码泄露用户隐私的方法 | |
CN111880987A (zh) | 应用程序的动态监测方法、装置、存储介质以及电子装置 | |
US20240143739A1 (en) | Intelligent obfuscation of mobile applications | |
Jia et al. | Programmable system call security with ebpf | |
Barthe et al. | Mobius: Mobility, ubiquity, security: Objectives and progress report | |
Ruggia et al. | Android, notify me when it is time to go phishing | |
US20190102279A1 (en) | Generating an instrumented software package and executing an instance thereof | |
de la Cámara et al. | Model checking software with well-defined apis: the socket case | |
CN115658165A (zh) | 用于启动租户插件以及实现进程内通信的方法和装置 | |
Smith et al. | Android platform modeling and Android app verification in the ACL2 theorem prover | |
Lachmund | Auto-generating access control policies for applications by static analysis with user input recognition | |
Ruchlejmer | Secure Rewind and Discard on ARM Morello | |
Fehnker et al. | Model checking dataflow for malicious input | |
Marty et al. | LIO*: Low Level Information Flow Control in F | |
US11216255B1 (en) | Open compiler system for the construction of safe and correct computational systems |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |