CN112835865A - 一种应用热部署系统、方法及装置 - Google Patents
一种应用热部署系统、方法及装置 Download PDFInfo
- Publication number
- CN112835865A CN112835865A CN202110346752.3A CN202110346752A CN112835865A CN 112835865 A CN112835865 A CN 112835865A CN 202110346752 A CN202110346752 A CN 202110346752A CN 112835865 A CN112835865 A CN 112835865A
- Authority
- CN
- China
- Prior art keywords
- file
- class
- container
- files
- directory
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
-
- 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/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
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Stored Programmes (AREA)
Abstract
本说明书实施例提供一种应用热部署系统、方法及装置,可以应用于大数据处理技术领域。所述系统包括:文件传输装置,用于将类文件上传至分布式文件系统的文件目录的指定目录中;容器集群,用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象,以解决容器的重新部署会导致用户使用中断的问题,提高容器应用的部署效率。
Description
技术领域
本说明书实施例涉及大数据处理技术领域,特别涉及一种应用热部署系统、方法及装置。
背景技术
随着容器化云上应用的深入推广,越来越多的应用使用基于Spring框架和SpringBoot框架的JavaWeb应用程序实现容器化上云,且多容器部署方式解决了传统单例部署的性能瓶颈问题。
基于目前主流的前后端分离技术,前端程序和JavaWeb后端应用程序分别部署于不同容器,而容器化的部署方式要求完整的部署镜像,容器应用集成性好且较独立,每个容器均是一个完整的运行环境。
然而,一个生产运行的应用不可避免地会遇到棘手的系统问题需要马上解决,而由于某些情况可能不能做到快速解决问题,这些情况包括:容器部署基于整个镜像的打包部署,整个上线流程较长,很难实现快速响应,如包括:编译打包,走发布流水线,生产接收镜像包,生产部署镜像。对于某些问题,可以快速提供临时方案,临时方案实际上不需要作为容器的完整内容存在,后续仍需提供完整版本部署。当前容器存在用户请求和访问,容器的重新部署会导致用户使用中断,影响用户体验。
发明内容
本说明书实施例的目的是提供一种应用热部署系统、方法及装置,以解决容器的重新部署会导致用户使用中断的问题,提高容器应用的部署效率。
为解决上述问题,本说明书实施例提供一种应用热部署系统,所述系统包括:文件传输装置,用于将类文件上传至分布式文件系统的文件目录的指定目录中;容器集群,用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。
为解决上述问题,本说明书实施例还提供一种应用热部署方法,所述方法包括:监控分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。
为解决上述问题,本说明书实施例还提供一种应用热部署装置,所述装置包括:监控模块,用于监控分布式文件系统的文件目录中类文件的变动情况;加载模块,用于在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;实例化模块,用于在接收到用户请求的情况下,使用所述目标类文件实例化对象。
由以上本说明书实施例提供的技术方案可见,本说明书实施例中,所述系统可以包括:文件传输装置,用于将类文件上传至分布式文件系统的文件目录的指定目录中;容器集群,用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。本说明书实施例提供的系统,基于Java的类加载器技术,通过对容器外部存放类文件的目录进行监控,例如使用分布式文件系统存放类文件,使用自定义类加载器对类文件进行动态加载,从分布式文件系统目录中读取类文件并替代容器中原类文件,从而解决容器的重新部署会导致用户使用中断的问题,提高容器应用的部署效率。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一个场景示例的示意图;
图2为本说明书实施例一种应用热部署系统的结构示意图;
图3为本说明书实施例类文件加密装置的结构示意图;
图4为本说明书一个场景示例中监控程序的执行步骤示意图;
图5为本说明书一种应用热部署方法的流程图;
图6为本说明书实施例一种应用热部署装置的功能结构示意图。
具体实施方式
下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
在本说明书实施例中,容器是一个视图隔离、资源可限制、独立文件系统的进程集合。所述视图隔离就是能够看到部分进程以及具有独立的主机名等;控制资源使用率则是可以对于内存大小以及CPU使用个数等进行限制。简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了
容器具有一个独立的文件系统,因为使用的是系统的资源,所以在独立的文件系统内不需要具备内核相关的代码或者工具,我们只需要提供容器所需的二进制文件、配置文件以及依赖即可。只要容器运行时所需的文件集合都能够具备,那么这个容器就能够运行起来。
然而,一个生产运行的应用不可避免地会遇到棘手的系统问题需要马上解决,而由于某些情况可能不能做到快速解决问题,这些情况包括:容器部署基于整个镜像的打包部署,整个上线流程较长,很难实现快速响应,如包括:编译打包,走发布流水线,生产接收镜像包,生产部署镜像。对于某些问题,可以快速提供临时方案,临时方案实际上不需要作为容器的完整内容存在,后续仍需提供完整版本部署。当前容器存在用户请求和访问,容器的重新部署会导致用户使用中断,影响用户体验。
考虑到如果能够基于Java的ClassLoader类加载器技术,通过对容器外部存放Class文件的目录进行监控,例如使用分布式文件系统存放Class文件,使用自定义类加载器对Class文件进行动态加载,从分布式文件系统目录中读取Class文件并替代容器中原Class文件,则有望解决现有技术中容器的重新部署会导致用户使用中断的问题,在不重启应用的情况下,实现快速更新生产上容器应用中的类,保持用户使用的连贯性,提高容器应用的部署效率。基于此,本说明书实施例提供一种应用热部署方法、装置及存储介质。
请参阅图1,介绍本说明书一个场景示例。图1为所述场景示例中应用热部署方法的流程图。具体可以包括以下步骤。
步骤A1:使用文件传输装置上传类文件,类文件存放位置为容器中挂载的分布式文件系统盘,在容器内部外部均可访问。
Class文件(类文件)文件,就是通常用javac编译器产生的.class文件,这些文件具有严格定义的格式。Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有添加分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据。当遇到需要占用8位字节以上空间的数据项时,会按照高位在前的方式分割成若干个8位字节进行存储。
具体的,所述文件传输装置可以通过指前台页面、投产流水线文件传输、系统管理员手工上传等多种方式上传Class文件。例如采用前台页面上传方式上传Class文件,页面支持多文件上传和指定每个文件上传路径,分布式文件系统记录上传的Class文件名称、路径等信息日志,提供给监控程序动态监控每次文件变动。
在本场景示例中,基于多容器部署的场景,上传操作仅在单个节点中的单个容器上进行,因此,文件上传后需存储在容器中挂载的分布式文件系统盘上,以供其他节点和容器共享使用。
为防止Class文件被非法篡改,须保证分布式文件系统上Class文件的可信,上传的Class文件可以先由加密装置对Class文件加密后上传到分布式文件系统,加密后的Class文件后缀为可以.classx。Class文件先通过加密装置加密后,再通过文件传输装置上传。
步骤A2:容器中添加监控程序,监控分布式文件系统目录。
具体的,监控程序可以集成在容器中的应用程序中,由于分布式文件系统目录的变动会比较消耗资源,因此监控程序可以实时监控分布式文件系统目录中文件变动的日志,变动日志在文件上传时更新,当发生文件变动时,监控程序调用类加载器动态加载Class文件。
步骤A3:容器中自定义类加载器,加载分布式文件系统目录中的类文件。
类加载器(ClassLoader)是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类的加载由类加载器完成,类加载器通常由JVM(JavaVirtualMachine,Java虚拟机)提供,这些类加载器也是前面所有程序运行的基础。JVM提供的加载器如果按照继承来分,可分为ClassLoader子类和非ClassLoader子类,如果按照层次结构来分,则可分为这三种:
根类加载器(bootstrap class loader):它用来加载Java的核心类,是用原生代码来实现的,并不继承自java.lang.ClassLoader(负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类)。
扩展类加载器(extensions class loader):它负责加载JRE的扩展目录,lib/ext或者由java.ext.dirs系统属性指定的目录中的JAR包的类。由Java语言实现,父类加载器为null。
系统类加载器(system class loader):被称为系统(也称为应用)类加载器,它负责在JVM启动时加载来自Java命令的-classpath选项、java.class.path系统属性,或者CLASSPATH换将变量所指定的JAR包和类路径。程序可以通过ClassLoader的静态方法getSystemClassLoader()来获取系统类加载器。如果没有特别指定,则用户的自定义类加载器都以此类加载器作为父加载器。系统类加载器由Java语言实现,父类加载器为ExtClassLoader。
由于Java的特性,不同的类加载器加载的Class文件是不同的,在JVM中分别属于不同的实例,类加载器在加载Class文件时,每次都是生成新的实例。在本场景示例中,自定义类加载器只对类进行加载,不会进行初始化,在应用需实例化对象时才会初始化类。
在本场景示例中,自定义类加载器加载类时使用全盘负责委托机制。即当自定义类加载器加载一个类文件时,这个类所关联的其他类,也由这个类加载器加载。自定义类加载器在加载类文件时,会先让父加载器先加载,父加载器未加载时才由自己加载。
在本场景示例中,自定义类加载器在加载类时,需要验证被加载类文件是否有正确的结构。具体的,类文件被加载前,先检查被加载类的方法输入输出是否与旧类保持一致,以免应该其他正常功能。
在本场景示例中,当类加载器所在容器当前用户使用量较大,且有存在正在执行当前更新的类文件时,作为实时加载的备用方案,当前容器通知PaaS平台启动一个新的容器以加载新的Class文件,而当前容器执行优雅停机指令,不再接收新的用户请求,当当前正在执行的操作完成之后即删除当前容器,从而实现新旧容器的平滑切换。
步骤A4:用户请求相关功能时,使用类文件实例化。
具体的,可以在接收到用户请求的情况下,使用加载的类文件实例化对象。所述实例化是指在面向对象的编程中,把用类创建对象的过程。实例化过程中一般由类名对象名=new类名(参数1,参数2...参数n)构成。
请参阅图2。本说明书实施例提供一种应用热部署系统。所述系统包括容器集群B1和文件传输装置B3。
所述文件传输装置B3,用于将类文件上传至分布式文件系统B2的文件目录的指定目录中。所述文件传输装置B3可以通过指前台页面、投产流水线文件传输、系统管理员手工上传等多种方式上传类文件。
所述分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。
在一些实施例中,所述文件传输装置可以提供类文件上传页面,以便于用户通过所述类文件上传页面将类文件上传至分布式文件系统的指定目录中;其中,所述类文件上传页面支持多文件上传和指定每个文件上传路径。具体的,用户可以在所述类文件上传页面选择需要上传的一个或多个类文件,并指定每个文件的上传路径,从而实现类文件的上传。在一个具体的示例中,用户可以从本地文件中选择需要上传的一个或多个类文件,并在上传路径选择框中指定每个文件的上传路径,点击上传按钮,所述类文件上传页面可以响应于用户触发的上传操作,将选择的一个或多个类文件按照上传路径上传至分布式文件系统的文件目录中。通过上述方式上传类文件,能够提高上传效率,以及实现类文件能够被其他节点和容器共享。
在一些实施例中,所述系统还可以包括类文件加密装置B4。所述类文件加密装置B4,用于读取开发环境编译生成的类文件;通过加密算法对所述类文件进行加密;相应的,所述文件传输装置B3用于将加密后的类文件上传至分布式文件系统的指定目录中。
所述类文件加密装置B4的结构如图3所示。所述类文件加密装置B4可以包括类文件读取模块,用于读取开发环境编译生成的class文件,获取二进制信息;加密模块。用于对读取的文件信息通过加密算法加密;加密类文件保存模块用于,对加密后的二进制信息保存到classx文件。具体的,加密过程可以采用预设的加密算法实现,例如可以采用DES(DataEncryption Standard)、3DES(Triple DES)等对称加密算法,也可以采用RSA、DSA(DigitalSignature Algorithm)等非对称加密算法。通过上述方式对类文件进行加密,将加密后的类文件上传至分布式文件系统的指定目录中,能够防止Class文件被非法篡改,保证分布式文件系统上Class文件的可信。
所述容器集群B1可以用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。所述容器集群B1可以由多个容器组成,这些容器可以由PaaS(Platform as a Service,平台即服务)平台提供。
在一些实施例中,所述监控程序可以集成在容器中的应用程序中。所述监控程序可以通过分析分布式文件系统的日志的方式实现监控所述分布式文件系统的文件目录中类文件的变动情况。具体可以包括:获取所述分布式文件系统的日志;根据所述日志中的文件目录变化信息确定所述分布式文件系统的文件目录中类文件的变动情况。具体的,文件传输装置在上传类文件的过程中,所述分布式文件系统可以基于文件目录中的文件变化信息生成日志,所述监控程序可以获取所述分布式文件系统的日志;根据所述日志中的文件目录变化信息确定所述分布式文件系统的文件目录中类文件的变动情况。通过分析分布式文件系统的日志的方式实现监控所述分布式文件系统的文件目录中类文件的变动情况,相比与直接监控文件目录中的文件变动,能够减少资源的消耗。
在一些实施例中,所述文件目录变化信息可以包括上传的类文件的标识和上传路径,相应的,根据上传的类文件的标识确定发生变动的目标类文件,以便于所述自定义类加载器根据所述上传路径从所述分布式文件系统的文件目录中将所述目标类文件加载至容器中。具体的,监控程序可以根据上传的类文件的标识确定发生变动类文件,将该类文件确定为目标类文件,然后可以将目标类文件的标识和上传路径提供给自定义加载器。上述方式,能够从而使得监控程序可以准确识别出发送变动的类文件,提高后续自定义加载器加载类文件的效率。
在一些实施例中,所述自定义类加载器加载目标类文件时使用全盘负责委托机制。其中,所述全盘负责委托机制为当一个类加载器负责加载某个类文件时,该类文件所依赖和引用其他类也将由该类加载器负责载入,除非显示使用另外一个类加载器来载入。所述自定义类加载器在加载类文件时,还会先让父加载器先加载,父加载器未加载时才由自己加载。上述加载而方式能够避免类文件的重复加载,提高类文件的加载效率。
在一些实施例中,所述自定义类加载器加载目标类文件之前,包括:对所述目标类文件进行验证,在验证通过的情况下加载所述目标类文件;其中,所述验证包括文件格式验证、元数据验证、字节码验证、符号引用验证中的至少一种。
其中,所述文件格式验证主要验证字节流是否符合Class文件格式规范,并且能被当前的虚拟机加载处理。例如:主,次版本号是否在当前虚拟机处理的范围之内。验证常量池中是否有不被支持的常量类型、指向常量的中的索引值是否存在不存在的常量或不符合类型的常量。
所述元数据验证包括对字节码描述的信息进行语义的分析,分析是否符合java的语言语法的规范。
所述字节码验证包括分析数据流和控制,确定语义是合法的,符合逻辑的。主要的针对元数据验证后对方法体的验证。保证类方法在运行时不会有危害出现。
所述符号引用验证:主要是针对符号引用转换为直接引用的时候,去确定访问类型等涉及到引用的情况,保证引用会被访问到,不会出现类等无法访问的问题。
通过上述验证方式,能够检验被加载的类是否有正确的内部结构,并和其他类协调一致,防止容器中的应用被恶意入侵,提高容器的安全性。
在一些实施例中,对于所述文件传输装置用于将加密后的类文件上传至分布式文件系统的指定目录中的情况,所述容器集群还用于对发生变动的目标类文件进行解密,调用自定义类加载器将解密后的目标类文件加载至容器中。具体的,可以通过监控程序调用类文件解密装置对目标类文件进行解密,并将解密后的目标类文件的信息传递给自定义类加载器,以使自定义类加载器将解密后的目标类文件加载至容器中。
以一个场景示例对所述监控程序进行说明。在本场景示例中,所述监控程序的执行步骤如图4所示,可以包括:
定时读取类文件变更日志:读取分布式文件系统的文件目录变更日志,监控目录中文件变化,可支持多个文件同时变动。
读取类文件:根据变更日志,找到对应的目录遍历读取.classx文件,获取二进制信息。
类文件解密:通过加密算法加密对文件信息解密,获取原始Class文件信息。
调用类加载器:Class文件信息传递给自定义类加载器,通过自定义类加载器动态加载类。
在一些实施例中,所述容器集群还可以用于,在所述自定义类加载器所在的容器当前用户使用量大于预设阈值的情况下,启动新的容器,以便于使用所述新的容器中的自定义类加载器加载目标类文件。具体的,当类加载器所在容器当前用户使用量较大,且有存在正在执行当前更新的类文件时,作为实时加载的备用方案,当前容器通知PaaS平台启动一个新的容器以加载新的Class文件,而当前容器执行优雅停机指令,不再接收新的用户请求,当当前正在执行的操作完成之后即删除当前容器,从而实现新旧容器的平滑切换,进一步提高容器应用的部署效率。
本说明书实施例中,所述系统可以包括:文件传输装置,用于将类文件上传至分布式文件系统的指定目录中;容器集群,用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。本说明书实施例提供的系统,基于Java的类加载器技术,通过对容器外部存放类文件的目录进行监控,例如使用分布式文件系统存放类文件,使用自定义类加载器对类文件进行动态加载,从分布式文件系统目录中读取类文件并替代容器中原类文件,从而解决容器的重新部署会导致用户使用中断的问题,提高容器应用的部署效率。
请参阅图5。基于上述应用热部署系统,本说明书实施例提供一种应用热部署方法。在本说明书实施例中,执行所述应用热部署方法的主体可以是由若干容器形成的容器集群。所述方法可以包括以下步骤。
S510:监控分布式文件系统的文件目录中类文件的变动情况。
在一些实施例中,文件传输装置可以向分布式文件系统的指定目录中上传类文件,所述分布式文件系统在接收到类文件时,将类文件存储在所述指定目录中,所述容器集群可以通过监控程序监控分布式文件系统的文件目录中类文件的变动情况。
所述文件传输装置可以提供类文件上传页面,以便于用户通过所述类文件上传页面将类文件上传至分布式文件系统的指定目录中;其中,所述类文件上传页面支持多文件上传和指定每个文件上传路径。具体的,用户可以在所述类文件上传页面选择需要上传的一个或多个类文件,并指定每个文件的上传路径,从而实现类文件的上传。在一个具体的示例中,用户可以从本地文件中选择需要上传的一个或多个类文件,并在上传路径选择框中指定每个文件的上传路径,点击上传按钮,所述类文件上传页面可以响应于用户触发的上传操作,将选择的一个或多个类文件按照上传路径上传至分布式文件系统的文件目录中。
在一些实施例中,可以通过分析分布式文件系统的日志的方式实现监控所述分布式文件系统的文件目录中类文件的变动情况。具体可以包括:获取所述分布式文件系统的日志;根据所述日志中的文件目录变化信息确定所述分布式文件系统的文件目录中类文件的变动情况。具体的,文件传输装置在上传类文件的过程中,所述分布式文件系统可以基于文件目录中的文件变化信息生成日志,所述监控程序可以获取所述分布式文件系统的日志;根据所述日志中的文件目录变化信息确定所述分布式文件系统的文件目录中类文件的变动情况。通过分析分布式文件系统的日志的方式实现监控所述分布式文件系统的文件目录中类文件的变动情况,相比与直接监控文件目录中的文件变动,能够减少资源的消耗。
在一些实施例中,所述文件目录变化信息可以包括上传的类文件的标识和上传路径,相应的,根据上传的类文件的标识确定发生变动的目标类文件,以便于所述自定义类加载器根据所述上传路径从所述分布式文件系统的文件目录中将所述目标类文件加载至容器中。具体的,监控程序可以根据上传的类文件的标识确定发生变动类文件,将该类文件确定为目标类文件,然后可以将目标类文件的标识和上传路径提供给自定义加载器。上述方式,能够从而使得监控程序可以准确识别出发送变动的类文件,提高后续自定义加载器加载类文件的效率。
S520:在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件。
在一些实施例中,所述自定义类加载器加载目标类文件时使用全盘负责委托机制。其中,所述全盘负责委托机制为当一个类加载器负责加载某个类文件时,该类文件所依赖和引用其他类也将由该类加载器负责载入,除非显示使用另外一个类加载器来载入。所述自定义类加载器在加载类文件时,还会先让父加载器先加载,父加载器未加载时才由自己加载。上述加载而方式能够避免类文件的重复加载,提高类文件的加载效率。
在一些实施例中,所述自定义类加载器加载目标类文件之前,包括:对所述目标类文件进行验证,在验证通过的情况下加载所述目标类文件;其中,所述验证包括文件格式验证、元数据验证、字节码验证、符号引用验证中的至少一种。
其中,所述文件格式验证主要验证字节流是否符合Class文件格式规范,并且能被当前的虚拟机加载处理。例如:主,次版本号是否在当前虚拟机处理的范围之内。验证常量池中是否有不被支持的常量类型、指向常量的中的索引值是否存在不存在的常量或不符合类型的常量。
所述元数据验证包括对字节码描述的信息进行语义的分析,分析是否符合java的语言语法的规范。
所述字节码验证包括分析数据流和控制,确定语义是合法的,符合逻辑的。主要的针对元数据验证后对方法体的验证。保证类方法在运行时不会有危害出现。
所述符号引用验证:主要是针对符号引用转换为直接引用的时候,去确定访问类型等涉及到引用的情况,保证引用会被访问到,不会出现类等无法访问的问题。
通过上述验证方式,能够检验被加载的类是否有正确的内部结构,并和其他类协调一致,防止容器中的应用被恶意入侵,提高容器的安全性。
在一些实施例中,在所述目标类文件为加密文件的情况下,还可以对发生变动的目标类文件进行解密,调用自定义类加载器将解密后的目标类文件加载至容器中。具体的,可以通过监控程序调用类文件解密装置对目标类文件进行解密,并将解密后的目标类文件的信息传递给自定义类加载器,以使自定义类加载器将解密后的目标类文件加载至容器中。
在一些实施例中,在所述自定义类加载器所在的容器当前用户使用量大于预设阈值的情况下,启动新的容器,以便于使用所述新的容器中的自定义类加载器加载目标类文件。具体的,当类加载器所在容器当前用户使用量较大,且有存在正在执行当前更新的类文件时,作为实时加载的备用方案,当前容器通知PaaS平台启动一个新的容器以加载新的Class文件,而当前容器执行优雅停机指令,不再接收新的用户请求,当当前正在执行的操作完成之后即删除当前容器,从而实现新旧容器的平滑切换,进一步提高容器应用的部署效率。
S530:在接收到用户请求的情况下,使用所述目标类文件实例化对象。
具体的,可以在接收到用户请求的情况下,使用加载的类文件实例化对象。所述实例化是指在面向对象的编程中,把用类创建对象的过程。实例化过程中一般由类名对象名=new类名(参数1,参数2...参数n)构成。
本说明书实施例提供的方法,可以监控分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。本说明书实施例提供的方法,基于Java的类加载器技术,通过对容器外部存放类文件的目录进行监控,例如使用分布式文件系统存放类文件,使用自定义类加载器对类文件进行动态加载,从分布式文件系统目录中读取类文件并替代容器中原类文件,从而解决容器的重新部署会导致用户使用中断的问题,提高容器应用的部署效率。
图6为本说明书实施例一的应用热部署装置的功能结构示意图,该装置具体可以包括以下的结构模块。
监控模块610,用于监控分布式文件系统的文件目录中类文件的变动情况;
加载模块620,用于在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;
实例化模块630,用于在接收到用户请求的情况下,使用所述目标类文件实例化对象。
需要说明的是,本说明书实施例提供的应用热部署系统、方法及装置,可以应用于大数据处理技术领域。当然,也可以应用于金融领域,或者除金融领域之外的任意领域,本说明书实施例对所述应用热部署系统、方法及装置的应用领域不做限定。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于装置实施例和设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员在阅读本说明书文件之后,可以无需创造性劳动想到将本说明书列举的部分或全部实施例进行任意组合,这些组合也在本说明书公开和保护的范围内。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(AlteraHardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。
Claims (10)
1.一种应用热部署系统,其特征在于,所述系统包括:
文件传输装置,用于将类文件上传至分布式文件系统的文件目录的指定目录中;
容器集群,用于通过监控程序监控所述分布式文件系统的文件目录中类文件的变动情况;在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;在接收到用户请求的情况下,使用所述目标类文件实例化对象。
2.根据权利要求1所述的系统,其特征在于,所述文件传输装置提供类文件上传页面,以便于用户通过所述类文件上传页面将类文件上传至分布式文件系统的指定目录中;其中,所述类文件上传页面支持多文件上传和指定每个文件上传路径。
3.根据权利要求1所述的系统,其特征在于,所述系统还包括:
类文件加密装置,用于读取开发环境编译生成的类文件;通过加密算法对所述类文件进行加密;
相应的,所述文件传输装置用于将加密后的类文件上传至分布式文件系统的指定目录中;
所述容器集群还用于对发生变动的目标类文件进行解密,调用自定义类加载器将解密后的目标类文件加载至容器中。
4.根据权利要求1所述的系统,其特征在于,所述监控所述分布式文件系统的文件目录中类文件的变动情况包括:
获取所述分布式文件系统的日志;
根据所述日志中的文件目录变化信息确定所述分布式文件系统的文件目录中类文件的变动情况。
5.根据权利要求4所述的系统,其特征在于,所述文件目录变化信息包括上传的类文件的标识和上传路径;
相应的,根据上传的类文件的标识确定发生变动的目标类文件,以便于所述自定义类加载器根据所述上传路径从所述分布式文件系统的文件目录中将所述目标类文件加载至容器中。
6.根据权利要求1所述的系统,其特征在于,所述自定义类加载器加载目标类文件时使用全盘负责委托机制。
7.根据权利要求1所述的系统,其特征在于,所述自定义类加载器加载目标类文件之前,包括:
对所述目标类文件进行验证,在验证通过的情况下加载所述目标类文件;其中,所述验证包括文件格式验证、元数据验证、字节码验证、符号引用验证中的至少一种。
8.根据权利要求1所述的系统,其特征在于,所述容器集群还用于,在所述自定义类加载器所在的容器当前用户使用量大于预设阈值的情况下,启动新的容器,以便于使用所述新的容器中的自定义类加载器加载目标类文件。
9.一种应用热部署方法,其特征在于,所述方法包括:
监控分布式文件系统的文件目录中类文件的变动情况;
在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;
在接收到用户请求的情况下,使用所述目标类文件实例化对象。
10.一种应用热部署装置,其特征在于,所述装置包括:
监控模块,用于监控分布式文件系统的文件目录中类文件的变动情况;
加载模块,用于在所述分布式文件系统的文件目录中类文件发生变动的情况下,调用自定义类加载器将发生变动的目标类文件加载至容器中,以替换容器中的所述目标类文件对应的旧版本类文件;
实例化模块,用于在接收到用户请求的情况下,使用所述目标类文件实例化对象。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110346752.3A CN112835865A (zh) | 2021-03-31 | 2021-03-31 | 一种应用热部署系统、方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110346752.3A CN112835865A (zh) | 2021-03-31 | 2021-03-31 | 一种应用热部署系统、方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112835865A true CN112835865A (zh) | 2021-05-25 |
Family
ID=75930664
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110346752.3A Pending CN112835865A (zh) | 2021-03-31 | 2021-03-31 | 一种应用热部署系统、方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835865A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
-
2021
- 2021-03-31 CN CN202110346752.3A patent/CN112835865A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113221077B (zh) * | 2021-05-31 | 2023-11-14 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9983891B1 (en) | Systems and methods for distributing configuration templates with application containers | |
US10824716B2 (en) | Executing native-code applications in a browser | |
US9864600B2 (en) | Method and system for virtualization of software applications | |
KR102255767B1 (ko) | 가상 머신 감사를 위한 시스템 및 방법들 | |
US9779111B2 (en) | Method and system for configuration of virtualized software applications | |
US8739147B2 (en) | Class isolation to minimize memory usage in a device | |
US6519594B1 (en) | Computer-implemented sharing of java classes for increased memory efficiency and communication method | |
US20100205604A1 (en) | Systems and methods for efficiently running multiple instances of multiple applications | |
US10146942B2 (en) | Method to protect BIOS NVRAM from malicious code injection by encrypting NVRAM variables and system therefor | |
US10574524B2 (en) | Increasing reusability of and reducing storage resources required for virtual machine images | |
US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
US20240078116A1 (en) | Just-in-Time Containers | |
KR20000053113A (ko) | 정보 장치 아키텍쳐 | |
US8893272B2 (en) | Method and device for recombining runtime instruction | |
CN112231384A (zh) | 适配多种数据源的分布式应用国产化改造方法及设备 | |
CN112835865A (zh) | 一种应用热部署系统、方法及装置 | |
US20100180269A1 (en) | Domains with polymorphic type implementations | |
CN115016862A (zh) | 基于Kubernetes集群的软件启动方法、装置、服务器及存储介质 | |
US20180101421A1 (en) | Storage and application intercommunication using acpi | |
US11726922B2 (en) | Memory protection in hypervisor environments | |
CN115136133A (zh) | 按需代码执行的单次使用执行环境 | |
Tang et al. | Basic Knowledge of Firmware | |
US20240152371A1 (en) | Dynamic re-execution of parts of a containerized application pipeline | |
US20240202036A1 (en) | Unloading interdependent shared libraries | |
US20240012666A1 (en) | Protecting container images and runtime data |
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 |