CN115756763A - 微服务容器快速编译运行方法、装置、系统及电子设备 - Google Patents
微服务容器快速编译运行方法、装置、系统及电子设备 Download PDFInfo
- Publication number
- CN115756763A CN115756763A CN202211679842.5A CN202211679842A CN115756763A CN 115756763 A CN115756763 A CN 115756763A CN 202211679842 A CN202211679842 A CN 202211679842A CN 115756763 A CN115756763 A CN 115756763A
- Authority
- CN
- China
- Prior art keywords
- service
- target
- function
- code
- micro
- 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
-
- 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
- Stored Programmes (AREA)
Abstract
本公开提供了一种微服务容器快速编译运行方法、装置、系统、电子设备及存储介质,涉及云计算技术领域。其中,方法包括:汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;将目标服务函数的目标编译结果上传至目标代码共享库中。本公开可提升目标主机上微服务容器的启动速度,降低服务代码加载的内存开销,并且减少服务代码即时编译的CPU开销。
Description
技术领域
本公开涉及云计算技术领域,尤其涉及一种微服务容器快速编译运行方法、装置、系统、电子设备及存储介质。
背景技术
微服务应用通常采用容器方式部署运行,在应用构建时间将应用的目标代码包和所依赖的系统库和组件库一起打包构建成应用容器镜像,部署到容器环境中运行。
每个微服务应用容器在启动时都要从镜像文件中解压和加载所需的基础类库和应用目标代码,这些类库和目标代码需要在多个容器中重复加载,解压和加载时间长,内存开销较大。
基于此,如何提升微服务容器启动速度,节省服务代码加载的内存开销成为了亟需解决的技术问题。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开提供一种微服务容器快速编译运行方法、装置、系统、电子设备及存储介质,至少在一定程度上克服相关技术中微服务容器启动速度慢和服务代码加载使内存开销较大的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一个方面,提供一种微服务容器快速编译运行方法,包括:在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;将所述目标服务函数的目标编译结果上传至目标代码共享库中,其中,所述目标代码共享库用于为所述多个目标主机上的微服务容器共享服务函数的编译结果。
在本公开的一个实施例中,所述方法还包括:执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到所述微服务容器镜像中,并将所述微服务容器镜像的启动指令命名为服务启动脚本,其中,所述服务依赖配置包括服务入口依赖配置和服务接口依赖配置;将构建好的所述微服务容器镜像存储至镜像仓库中;通过服务代码加载器从镜像仓库下载所述微服务容器镜像,提取所述微服务容器的服务依赖配置和服务目标代码,并将所述服务依赖配置和所述服务目标代码保存到目标代码共享库中。
在本公开的一个实施例中,所述方法还包括:利用静态分析方式和/或动态分析方式,分析所述服务入口依赖配置和所述服务接口依赖配置,更新所述目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,所述方法还包括:下载所述微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析所述服务入口依赖配置和所述服务接口依赖配置,确定所述代码共享内存中需要更新的目标代码;从所述目标代码共享库中批量下载所述代码共享内存中需要更新的目标代码。
在本公开的一个实施例中,所述方法还包括:下载所述微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析所述服务入口依赖配置和所述服务接口依赖配置,确定所述代码共享内存中版本缺失的目标代码列表;从所述目标代码共享库中批量下载所述代码共享内存中版本缺失的目标代码数据。
在本公开的一个实施例中,所述方法还包括:根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
根据本公开的另一个方面,提供一种微服务容器快速编译运行装置,包括:目标代码同步模块,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;服务函数地址绑定模块,用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;计数更新与上报模块,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;即时编译模块,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;编辑结果上传模块,用于将所述目标服务函数的目标编译结果上传至目标代码共享库中,其中,所述目标代码共享库用于为所述多个目标主机上的微服务容器共享服务函数的编译结果。
在本公开的一个实施例中,上述目标代码同步模块,还用于执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到所述微服务容器镜像中,并将所述微服务容器镜像的启动指令命名为服务启动脚本,其中,所述服务依赖配置包括服务入口依赖配置和服务接口依赖配置;将构建好的所述微服务容器镜像存储至镜像仓库中;通过服务代码加载器从镜像仓库下载所述微服务容器镜像,提取所述微服务容器的服务依赖配置和服务目标代码,并将所述服务依赖配置和所述服务目标代码保存到目标代码共享库中。
在本公开的一个实施例中,上述计数更新与上报模块,还用于利用静态分析方式和/或动态分析方式,分析所述服务入口依赖配置和所述服务接口依赖配置,更新所述目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,上述装置还包括目标代码更新模块,该目标代码更新模块,用于下载所述微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析所述服务入口依赖配置和所述服务接口依赖配置,确定所述代码共享内存中版本缺失的目标代码列表;从所述目标代码共享库中批量下载所述代码共享内存中版本缺失的目标代码数据。
在本公开的一个实施例中,上述计数更新与上报模块,还用于执行所述服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,上述计数更新与上报模块,还用于根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
根据本公开的再一个方面,提供一种微服务容器快速编译运行系统,包括:服务代码共享节点和容器主控节点;其中,所述容器主控节点,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;所述容器主控节点,还用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;所述服务代码共享节点,包括目标代码共享库、热点函数计数器模块、即时编译调度模块和多语言多平台即时编译器;所述目标代码共享库,用于为所述多个目标主机上的微服务容器共享服务函数的编译结果;所述热点函数计数器模块,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;所述即时编译调度模块,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,触发所述多语言多平台即时编译器对所述目标服务函数的即时编译;所述多语言多平台即时编译器,用于根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果,并将所述目标服务函数的目标编译结果上传至目标代码共享库中。
在本公开的一个实施例中,所述系统还包括微服务容器镜像;所述微服务容器镜像,用于执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到所述微服务容器镜像中,并将所述微服务容器镜像的启动指令命名为服务启动脚本,其中,所述服务依赖配置包括服务入口依赖配置和服务接口依赖配置;所述微服务容器镜像,还用于将构建好的所述微服务容器镜像存储至镜像仓库。
在本公开的一个实施例中,所述服务容器主控节点还包括服务代码加载器;所述服务代码加载器,用于通过服务代码加载器从镜像仓库下载所述微服务容器镜像,提取所述微服务容器的服务依赖配置和服务目标代码,并将所述服务依赖配置和所述服务目标代码保存到目标代码共享库中。
在本公开的一个实施例中,所述热点函数计数器模块,还用于利用静态分析方式和/或动态分析方式,分析所述服务入口依赖配置和所述服务接口依赖配置,更新所述目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,所述容器主控节点,还用于下载所述微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析所述服务入口依赖配置和所述服务接口依赖配置,确定所述代码共享内存中版本缺失的目标代码列表;从所述目标代码共享库中批量下载所述代码共享内存中版本缺失的目标代码数据。
在本公开的一个实施例中,所述容器主控节点,还用于执行所述服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;所述热点函数计数器模块,还用于更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,所述即时编译调度模块,还用于根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
根据本公开的再一个方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述的微服务容器快速编译运行方法。
根据本公开的又一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的微服务容器快速编译运行方法。
本公开的实施例所提供的一种微服务容器快速编译运行方法、装置、系统、电子设备及存储介质,其中,方法包括:在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;将所述目标服务函数的目标编译结果上传至目标代码共享库中,其中,所述目标代码共享库用于为所述多个目标主机上的微服务容器共享服务函数的编译结果。本公开可提升目标主机上微服务容器的启动速度,降低服务代码加载的内存开销,并且减少服务代码即时编译的CPU开销。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本公开实施例中一种目标代码与即时编译器共享系统架构的示意图;
图2示出本公开实施例中一种微服务容器快速编译运行方法流程图;
图3示出本公开实施例中另一种微服务容器快速编译运行方法流程图;
图4示出本公开实施例中另一种微服务容器快速编译运行方法流程图;
图5示出本公开实施例中一种微服务容器快速编译运行方法示意图;
图6示出本公开实施例中另一种微服务容器快速编译运行方法示意图;
图7示出本公开实施例中一种微服务容器快速编译运行装置示意图;
图8示出本公开实施例中一种微服务容器快速编译运行系统示意图;
图9示出本公开实施例中一种电子设备的结构框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
正如上述背景技术中所提及的,应用构建交付的目标代码通常有三种,第一种是平台无关的脚本代码,如Python、JavaScript和Ruby等语言开发的应用,依赖解释器逐条解释执行,第二种是平台无关的字节代码(或中间代码),依赖语言虚拟机批量解释执行,如Java、Swift等,第三种是平台相关的机器代码,与特定的CPU指令集和操作系统绑定,可以直接在机器上执行,如C/C++、Rust等。基于脚本或字节代码构建的应用,编译构建时间通常较短,交付的应用包(或目标代码包)较小,比较适合敏捷交付、跨平台、大批量部署的微服务应用场景,基于机器代码构建的应用,与特定平台绑定,构建时间长,交付的应用包较大,执行性能高,比较适合面向特定平台的系统级应用场景。
微服务应用通常采用容器方式部署运行,在应用构建时间将应用的目标代码包和所依赖的系统库和组件库一起打包构建成应用容器镜像,部署到容器环境中运行。每个微服务应用容器在启动时都要从镜像文件中解压和加载所需的基础类库和应用目标代码,这些类库和目标代码需要在多个容器中重复加载,解压和加载时间长,内存开销较大。
加载到微服务应用容器内存中的源代码或中间代码需要逐条解释成机器指令执行,性能较差,为了提升代码执行性能,Java、JavaScript、Python等高级语言引擎采用了JIT(Just In Time)即时编译机制,把经常需要执行的代码片段编译成高性能的机器代码执行。虽然即时编译仅编译经常调用的热点代码,其编译时间和开销小于传统的全量编译,然而由于每个微服务容器都是独立运行的,每个容器都要独自进行即时编译,既无法共享热点函数计数,也无法共享热点代码的编译结果,使得每个新启动的微服务容器都需要进行长时间的预热,执行完所有热点函数的即时编译之后才能达到最佳的性能。而且细粒度的微服务应用或无服务应用容器往往需要频繁升级重启,这也会反复触发的即时编译,造成较大的CPU开销。
基于此,本公开提供了一种微服务容器快速编译运行方法、装置、系统、电子设备及存储介质,通过设置目标代码共享库,将服务函数的编译结果上传至目标代码共享库,使相同的服务函数仅在目标主机的内存上编译一次,目标主机上的所有微服务容器均可共享服务函数的编译结果,从而提升微服务容器的启动速度,降低服务代码加载的内存开销,并且减少服务代码即时编译的CPU开销。
本公开通过增量式即时编译,可以实现编译速度快、资源开销少、仅编译代码发生变更的热点服务函数;通过共享服务静态代码,实现服务容器启动速度快和内存占用少,不同的服务容器共享相同的静态代码内存,相同的静态代码只需要在主机内存中加载一次。
图1示出了可以应用于本公开实施例的微服务容器快速编译运行方法或微服务容器快速编译运行装置的示例性系统架构的示意图。
如图1所示,系统架构可以包括服务容器主控节点、服务代码共享节点、容器主机节点、微服务容器镜像和微服务容器。
其中,服务容器主控节点,用于负责管理服务镜像,通知服务代码共享节点加载服务目标代码,调度容器主机节点创建服务代码共享内存,启动微服务容器。
服务代码共享节点,用于负责从服务镜像加载服务代码,并根据服务函数调用计数器触发服务代码即时编译,并提供统一的服务目标代码查询接口。包括服务代码加载器、目标代码共享库、热点函数计算器模块、即时编译器调度模块和多语言多平台即时编译器。其中,服务代码加载器用于从容器镜像仓库中下载服务容器镜像,并从容器镜像中提取服务的脚本代码、字节代码和机器代码,加载到目标代码共享库。目标代码共享库,用于存储服务的各类目标代码,包括脚本代码、字节代码、机器代码,并提供按函数、语言、平台和应用检索和获取目标代码的能力,可以采用集中式存储架构或分布式存储架构实现,其中,分布式存储架构可以是分布式内存存储或分布式文件存储。热点函数计数器,用于记录不同语言、不同平台的服务调用链中的每个服务函数的调用次数。即时编译器调度模块,负责设置和监听热点函数计数器,根据热点函数调用阈值触发相应语言和平台的即时编译器,将热点函数编译成机器代码,存储到目标代码库中。多语言多平台即时编译器,用于将特定语言的脚本代码或目标代码编译成能在特定平台上执行的目标机器代码。
容器主机节点,用于启动轻量级微服务容器,挂载代码共享内存,同步和绑定服务代码,采集主机上各个服务容器的服务调用链计数,并批量上报给服务代码共享节点的热点函数计数模块。容器主机上的代码共享内存区既可以是整个主机的所有类型的目标代码共用一个共享内存区,也可以按不同语言、不同平台的目标代码划分成多个独立的共享内存区。
微服务容器镜像,包含服务入口函数依赖配置、服务接口函数依赖配置和服务启动脚本。其中,服务入口函数是指服务启动时所调用的第一个函数,入口函数依赖配置定义了入口函数的语言版本、平台版本、函数签名、和函数版本,以及入口函数所依赖的子函数列表;服务接口函数是指服务运行时接收和处理服务请求的API函数,服务接口函数依赖也定义了服务接口函数的语言版本、平台版本、函数签名、函数版本以及接口函数所依赖的所有子函数列表。服务入口函数依赖和接口函数依赖均可通过对服务目标代码的函数依赖关系进行静态扫描或动态扫描分析而自动生成。
微服务容器,用于运行服务启动脚本,代码共享内存中绑定服务所需的目标代码函数入口,服务接口响应服务调用请求,通过服务接口函数钩子记录服务接口级别的调用次数,通知服务接口调用计数模块上报服务接口调用计数。
下面结合附图及实施例对本示例实施方式进行详细说明。
首先,本公开实施例中提供了一种微服务容器快速编译运行方法,该方法可以应用于上述图1公开的系统,该方法可以由任意具备计算处理能力的电子设备执行。
图2示出本公开实施例中一种微服务容器快速编译运行方法流程图,如图2所示,本公开实施例中提供的微服务容器快速编译运行方法包括如下步骤:
S202,在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中。
需要说明的是,服务函数可以通过包名、函数名和参数名进行标识;一个服务函数可以有多个版本,服务函数的版本通过服务函数代码或字节码的哈希摘要(如MD5/SHA)区分;微服务容器通过服务函数标识与服务函数版本确定所需的服务函数。
S204,启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址。
需要说明的是,目标主机可以是各种类型的计算机,如台式计算机、笔记本电脑、个人计算机等等,目标主机可创建多个微服务容器。服务函数,也即Service函数,服务函数的类别可以分为远程服务、本地服务、前台服务和后台服务等等。
对于目标主机上新部署或新调用的服务函数,目标主机的代码共享内存中并不存在该服务函数的目标代码,这时需要从目标代码共享库中把缺失的目标函数代码拉加载到代码共享内存中。对于尚未触发即时编译的服务函数,代码共享内存中只有中间代码,没有机器代码,因此绑定的是中间代码地址。对于已触发即时编译的服务函数,代码共享内存中同时存在中间代码和编译后的机器代码,服务函数地址绑定的是机器代码地址。
在本公开的一个实施例中,参见图3所示的另一种微服务容器快速编译运行方法流程图,上述方法还可以包括如下微服务容器构建交付的步骤:
S302,执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到微服务容器镜像中,并将微服务容器镜像的启动指令命名为服务启动脚本,其中,服务依赖配置包括服务入口依赖配置和服务接口依赖配置。
S304,将构建好的微服务容器镜像存储至镜像仓库中。
S306,通过服务代码加载器从镜像仓库下载微服务容器镜像,提取微服务容器的服务依赖配置和服务目标代码,并将服务依赖配置和服务目标代码保存到目标代码共享库中。
需要说明的是,目标层代码可以是系统层代码、语言层代码、框架层代码和应用层代码。
S206,接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数。
需要说明的是,服务函数优先调用绑定的机器代码,如果机器代码调用失败,则尝试调用对应的中间代码。
在本公开的一个实施例中,服务函数计数是针对服务函数的各个版本进行计数,例如,有两个服务函数servicefun1、servicefun2,servicefun1有两个版本v1、v2,servicefun2有3个版本v1、v2、v3,那么至少有5个计数器分别用于对servicefun1.v1、servicefun1.v2、servicefun2.v1、servicefun2.v2、servicefun3.v3进行计数;目标主机上需要提供本主机上所有服务函数版本的计数器(即主机热点代码计数模块),记录本主机上所有服务函数的所有版本的调用次数,目标主机上所有微服务容器共享相同的服务函数调用计数器;目标主机周期性(如每隔30秒)向集群热点代码计数模块上报一次本主机的所有增量服务计数:
例如在T1周期上述5个调用计数器为:
servicefun1.v1.count=1000;
servicefun1.v2.count=2000;
servicefun2.v1.count=1000;
servicefun2.v2.count=2000;
servicefun2.v3.count=2000;
在T2周期上述5个调用计数器变为:
servicefun1.v1.count=1000;
servicefun1.v2.count=2500;
servicefun2.v1.count=1000;
servicefun2.v2.count=2000;
servicefun2.v3.count=3000;
那么在T2周期需上报的调用计数器增量为:
servicefun1.v2.count.delta=500;
servicefun2.v3.count.delta=1000;
集群热点代码集群模块负责汇总各个目标主机上报的服务函数增量计数(按服务函数标识+服务函数版本汇总)。
S208,汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到目标服务函数的目标编译结果。
需要说明的是,语言版本可以是各种编程语言的类型,如C/C++、C#、Go、Java、JavaScript、TypeScript、Python或Ruby;平台版本可以是语言开发环境的版本。不同语言、不同平台或不同类型的服务函数,可以设置不同的热点阈值。
需要说明的是,多个即时编译器为多语言多平即时编译器;目标编译结果可以是对目标服务函数中的目标代码进行编译,得到的目标服务函数的机器代码;预设热点阈值可以根据目标服务函数的类别自由设置。
在本公开的一个实施例中,可以利用服务函数的调用次数与预设热点阈值,判断服务函数是否为热点函数,热点函数为需要进行即时编译的函数。
本公开利用多语言多平台即时编译器调度,根据服务函数的语言版本和平台版本调用合适语言的即时编译器,实现多种语言和多种平台的服务函数即时编译。
S210,将目标服务函数的目标编译结果上传至目标代码共享库中,其中,目标代码共享库用于为多个目标主机上的微服务容器共享服务函数的编译结果。
本公开实施例提供的微服务容器快速编译运行方法,通过统计目标主机上所有微服务容器调用各个服务函数的调用次数,与服务函数的版本信息,在多个服务函数中目标服务函数的调用次数大于预设热点阈值的情况下,根据目标服务函数的语言版本和平台版本,从多个即时编译器中选取对应的目标即时编译器执行目标服务函数的即时编译,得到目标服务函数的目标编译结果,将目标编译结果上传至目标代码共享库中,以便目标主机上的多个微服务容器共享服务函数的编译结果,相同的服务函数仅在目标主机的内存上编译一次,目标主机上的所有微服务容器均可共享服务函数的编译结果,从而提升微服务容器的启动速度,降低服务代码加载的内存开销,并且减少服务代码即时编译的CPU开销。
在本公开的一个实施例中,方法还包括:利用静态分析方式和/或动态分析方式,分析服务入口依赖配置和服务接口依赖配置,更新目标主机上所有微服务容器调用各个服务函数的调用次数。
需要说明的是,可以利用预设分析方式,分析服务入口依赖配置和服务接口依赖配置,预设分析方式可以采用静态分析方式和/或动态分析方式。其中,静态分析方式是对脚本代码或字节代码的内容进行递归分析,提取出服务端各个入口函数签名、服务接口函数签名和服务接口函数所调用的所有子函数列表;动态分析方式是将微服务容器运行起来,对每个服务接口都至少执行一次接口调用测试,通过服务入口函数和接口函数的调用堆栈分析各个入口函数和接口函数调用链。
在本公开的一个实施例中,可以结合静态分析方式和动态分析方式,利用静态分析方式分析服务入口依赖配置,利用动态分析方式分析服务入口依赖配置。
本公开通过服务接口函数依赖关系批量更新整个服务接口函数调用链上的服务函数计数器,提升全局函数计数器更新效率。
在本公开的一个实施例中,参见图4所示的另一种微服务容器快速编译运行方法流程图,上述方法还可以包括如下步骤:
S402,下载微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本。
S404,检查微服务容器依赖的函数列表,解析服务入口依赖配置和服务接口依赖配置,确定代码共享内存中版本缺失的目标代码列表。
S406,从目标代码共享库中批量下载代码共享内存中版本缺失的目标代码数据。
需要说明的是,版本缺失的目标代码列表可以包含代码共享内存中缺失的函数或版本不一致的函数中的目标代码。在本公开的一个实施例中,可以根据代码共享内存中版本缺失的目标代码列表,从目标代码共享库中批量下载代码共享内存中版本缺失的目标代码数据。
本公开可以自动从目标代码共享库中同步缺失和不一致的服务函数目标代码到代码共享内存,以加速服务容器的启动速度。
本公开利用多级服务可执行代码缓存与共享机制,提供镜像仓库、目标代码共享库和本地的代码共享内存实现目标代码多级缓存,包括可解释或直接执行的脚本代码、字节代码和机器代码。
在本公开的一个实施例中,参见图5所示的一种微服务容器快速编译运行方法示意图,上述方法还可以包括如下微服务容器启动加载目标代码的步骤:下载服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查并同步更新服务容器依赖的函数列表,解析服务入口依赖配置和服务接口依赖配置,查找代码共享内存中需要更新的函数代码(缺失的函数或版本不一致的函数),从目标代码共享库批量下载更新服务函数的目标代码;在目标主机上创建微服务容器,挂载代码共享内存,将目标主机上的代码共享内存作为内存映射设备挂载到微服务容器中。执行微服务启动脚本,从代码共享内存中绑定当前服务的入口函数、接口函数和所依赖的子函数地址;服务接口响应服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应服务函数的目标代码;更新服务接口调用计数器,通过服务接口函数钩子拦截服务调用请求,记录服务接口计数器,通过服务计数器上报模块上报服务接口计数值。
在本公开的一个实施例中,上述方法还包括:执行服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,参见图6所示的另一种微服务容器快速编译运行方法示意图,上述方法还可以包括微服务容器热点代码及时编译步骤,如下:为每个服务接口函数及其子函数提供函数调用计数器,同一函数的不同版本使用不同的计数器;接收服务接口函数调用计数,批量更新服务接口函数及其所有子函数的调用计数;监听服务函数的热点阈值,可以为每类服务函数分别设置热点阈值,当函数调用次数达到热点阈值时触发服务函数的即时编译;调度多语言多平台即时编译器,根据服务函数的语言版本和平台版本选择合适的JIT即时编译器进行编译;执行服务函数即时编译,以服务函数的源代码或字节码作为输入,编译生成目标平台版本的服务函数机器代码;存储服务函数编译结果,将服务函数机器码存储到服务代码共享库中。
在本公开的一个实施例中,方法还包括:根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
基于同一发明构思,本公开实施例中还提供了一种微服务容器快速编译运行装置,如下面的实施例。由于该装置实施例解决问题的原理与上述方法实施例相似,因此该装置实施例的实施可以参见上述方法实施例的实施,重复之处不再赘述。
图7示出本公开实施例中一种微服务容器快速编译运行装置示意图,如图7所示,该装置包括:
目标代码同步模块710,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;
服务函数地址绑定模块720,用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;
计数更新与上报模块730,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;
即时编译模块740,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到目标服务函数的目标编译结果;
编辑结果上传模块750,用于将目标服务函数的目标编译结果上传至目标代码共享库中,其中,目标代码共享库用于为多个目标主机上的微服务容器共享服务函数的编译结果。
在本公开的一个实施例中,上述目标代码同步模块710,还用于执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到微服务容器镜像中,并将微服务容器镜像的启动指令命名为服务启动脚本,其中,服务依赖配置包括服务入口依赖配置和服务接口依赖配置;将构建好的微服务容器镜像存储至镜像仓库中;通过服务代码加载器从镜像仓库下载微服务容器镜像,提取微服务容器的服务依赖配置和服务目标代码,并将服务依赖配置和服务目标代码保存到目标代码共享库中。
在本公开的一个实施例中,上述计数更新与上报模块730,还用于利用静态分析方式和/或动态分析方式,分析服务入口依赖配置和服务接口依赖配置,更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,上述装置还包括目标代码更新模块,该目标代码更新模块,用于下载微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析服务入口依赖配置和服务接口依赖配置,确定代码共享内存中版本缺失的目标代码列表;从目标代码共享库中批量下载代码共享内存中版本缺失的目标代码数据。
在本公开的一个实施例中,上述计数更新与上报模块730,还用于执行服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,上述计数更新与上报模块730,还用于根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
基于同一发明构思,本公开实施例中还提供了一种微服务容器快速编译运行系统,如下面的实施例。由于该系统实施例解决问题的原理与上述方法实施例相似,因此该系统实施例的实施可以参见上述方法实施例的实施,重复之处不再赘述。
图8示出本公开实施例中一种微服务容器快速编译运行系统示意图,如图8所示,该系统包括:服务代码共享节点820和容器主控节点810;
其中,容器主控节点810,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;
容器主控节点810,还用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;
服务代码共享节点820,包括目标代码共享库821、热点函数计数器模块822、即时编译调度模块823和多语言多平台即时编译器824;
目标代码共享库821,用于为多个目标主机上的微服务容器共享服务函数的编译结果;
热点函数计数器模块,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;
即时编译调度模块,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,触发多语言多平台即时编译器对目标服务函数的即时编译;
多语言多平台即时编译器,用于根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到目标服务函数的目标编译结果,并将目标服务函数的目标编译结果上传至目标代码共享库中。
在本公开的一个实施例中,系统还包括微服务容器镜像;微服务容器镜像,用于执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到微服务容器镜像中,并将微服务容器镜像的启动指令命名为服务启动脚本,其中,服务依赖配置包括服务入口依赖配置和服务接口依赖配置;微服务容器镜像,还用于将构建好的微服务容器镜像存储至镜像仓库。
在本公开的一个实施例中,服务容器主控节点820还包括服务代码加载器;服务代码加载器,用于通过服务代码加载器从镜像仓库下载微服务容器镜像,提取微服务容器的服务依赖配置和服务目标代码,并将服务依赖配置和服务目标代码保存到目标代码共享库中。
在本公开的一个实施例中,热点函数计数器模块822,还用于利用静态分析方式和/或动态分析方式,分析服务入口依赖配置和服务接口依赖配置,更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,容器主控节点810,还用于下载微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;检查微服务容器依赖的函数列表,解析服务入口依赖配置和服务接口依赖配置,确定代码共享内存中版本缺失的目标代码列表;从目标代码共享库中批量下载代码共享内存中版本缺失的目标代码数据。
在本公开的一个实施例中,容器主控节点810,还用于执行服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;热点函数计数器模块,还用于更新目标主机上所有微服务容器调用各个服务函数的调用次数。
在本公开的一个实施例中,即时编译调度模块823,还用于根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图9来描述根据本公开的这种实施方式的电子设备900。图9显示的电子设备900仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,电子设备900以通用计算设备的形式表现。电子设备900的组件可以包括但不限于:上述至少一个处理单元910、上述至少一个存储单元920、连接不同系统组件(包括存储单元920和处理单元910)的总线930。
其中,存储单元存储有程序代码,程序代码可以被处理单元910执行,使得处理单元910执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元910可以执行上述方法实施例的如下步骤:在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到目标服务函数的目标编译结果;将目标服务函数的目标编译结果上传至目标代码共享库中,其中,目标代码共享库用于为多个目标主机上的微服务容器共享服务函数的编译结果。
存储单元920可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)9201和/或高速缓存存储单元9202,还可以进一步包括只读存储单元(ROM)9203。
存储单元920还可以包括具有一组(至少一个)程序模块9205的程序/实用工具9204,这样的程序模块9205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线930可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备900也可以与一个或多个外部设备940(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备900交互的设备通信,和/或与使得该电子设备900能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口950进行。并且,电子设备900还可以通过网络适配器960与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器960通过总线930与电子设备900的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备900使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质可以是可读信号介质或者可读存储介质。其上存储有能够实现本公开上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
本公开中的计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
在本公开中,计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可选地,计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
在具体实施时,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
Claims (10)
1.一种微服务容器快速编译运行方法,其特征在于,包括:
在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;
启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;
接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;
汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;
将所述目标服务函数的目标编译结果上传至目标代码共享库中,其中,所述目标代码共享库用于为所述多个目标主机上的微服务容器共享服务函数的编译结果。
2.根据权利要求1所述的微服务容器快速编译运行方法,其特征在于,所述方法还包括:
执行微服务容器镜像的构建指令,将微服务容器的目标层代码、服务依赖配置和服务启动脚本依次打包到所述微服务容器镜像中,并将所述微服务容器镜像的启动指令命名为服务启动脚本,其中,所述服务依赖配置包括服务入口依赖配置和服务接口依赖配置;
将构建好的所述微服务容器镜像存储至镜像仓库中;
通过服务代码加载器从镜像仓库下载所述微服务容器镜像,提取所述微服务容器的服务依赖配置和服务目标代码,并将所述服务依赖配置和所述服务目标代码保存到目标代码共享库中。
3.根据权利要求2所述的微服务容器快速编译运行方法,其特征在于,所述方法还包括:
利用静态分析方式和/或动态分析方式,分析所述服务入口依赖配置和所述服务接口依赖配置,更新所述目标主机上所有微服务容器调用各个服务函数的调用次数。
4.根据权利要求2所述的微服务容器快速编译运行方法,其特征在于,所述方法还包括:
下载所述微服务容器镜像顶层的服务入口依赖配置、服务接口依赖配置和服务启动脚本;
检查微服务容器依赖的函数列表,解析所述服务入口依赖配置和所述服务接口依赖配置,确定所述代码共享内存中版本缺失的目标代码列表;
从所述目标代码共享库中批量下载所述代码共享内存中版本缺失的目标代码数据。
5.根据权利要求4所述的微服务容器快速编译运行方法,其特征在于,所述方法还包括:
执行所述服务启动脚本,从目标代码内存中绑定当前服务的入口函数、接口函数、和所依赖的子函数地址;
响应微服务容器的服务请求,执行服务接口函数调用链,通过绑定的服务函数指针调用相应的函数目标代码;
更新目标主机上所有微服务容器调用各个服务函数的调用次数。
6.根据权利要求1所述的微服务容器快速编译运行方法,其特征在于,所述方法还包括:
根据目标服务函数的类型,设置目标服务函数对应的预设热点阈值。
7.一种微服务容器快速编译运行装置,其特征在于,包括:
目标代码同步模块,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;
服务函数地址绑定模块,用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;
计数更新与上报模块,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;
即时编译模块,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果;
编辑结果上传模块,用于将所述目标服务函数的目标编译结果上传至目标代码共享库中,其中,所述目标代码共享库用于为所述多个目标主机上的微服务容器共享服务函数的编译结果。
8.一种微服务容器快速编译运行系统,其特征在于,包括:服务代码共享节点和容器主控节点;
其中,所述容器主控节点,用于在多个目标主机上创建代码共享内存,将每个目标主机上微服务容器所依赖的服务函数目标代码从目标代码共享库中同步到该目标主机的代码共享内存中;
所述容器主控节点,还用于启动多个微服务容器,将目标主机的代码共享内存作为微服务容器的内存映射设备,挂载到各个微服务容器中,为每个微服务容器绑定所需的服务函数地址;
所述服务代码共享节点,包括目标代码共享库、热点函数计数器模块、即时编译调度模块和多语言多平台即时编译器;
所述目标代码共享库,用于为所述多个目标主机上的微服务容器共享服务函数的编译结果;
所述热点函数计数器模块,用于接收服务请求,从绑定的服务函数地址中加载和调用相应的服务函数,更新目标主机上所调用服务函数的调用计数器,周期上报每个服务函数的增量调用计数;
所述即时编译调度模块,用于汇总各个目标主机上报的服务函数增量计数,当目标服务函数的调用计数大于预设的热点阈值时,触发所述多语言多平台即时编译器对所述目标服务函数的即时编译;
所述多语言多平台即时编译器,用于根据目标服务函数的语言版本和平台版本从公共即时编译器列表中选择对应的即时编译器执行目标服务函数的即时编译,得到所述目标服务函数的目标编译结果,并将所述目标服务函数的目标编译结果上传至目标代码共享库中。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1~6中任意一项所述微服务容器快速编译运行方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~6中任意一项所述的微服务容器快速编译运行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211679842.5A CN115756763A (zh) | 2022-12-26 | 2022-12-26 | 微服务容器快速编译运行方法、装置、系统及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211679842.5A CN115756763A (zh) | 2022-12-26 | 2022-12-26 | 微服务容器快速编译运行方法、装置、系统及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115756763A true CN115756763A (zh) | 2023-03-07 |
Family
ID=85347604
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211679842.5A Pending CN115756763A (zh) | 2022-12-26 | 2022-12-26 | 微服务容器快速编译运行方法、装置、系统及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115756763A (zh) |
-
2022
- 2022-12-26 CN CN202211679842.5A patent/CN115756763A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN113885870B (zh) | 应用程序更新方法、电子设备、终端设备及系统 | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN112631622A (zh) | 应用安装方法、装置、服务器及计算机可读介质 | |
CN106293870A (zh) | 计算机系统及其策略导向压缩方法 | |
US20230259358A1 (en) | Documentation enforcement during compilation | |
CN112083968A (zh) | 一种宿主中插件加载方法及装置 | |
CN113050984A (zh) | 资源调取方法、装置、电子设备及存储介质 | |
CN113760306A (zh) | 安装软件的方法、装置、电子设备及存储介质 | |
CN116755713A (zh) | 应用程序的生成方法、装置、设备及存储介质 | |
KR101117165B1 (ko) | 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛 | |
US20210349738A1 (en) | Application library analytics tool | |
CN110334031B (zh) | 内存分配代码检测方法、装置、计算机设备及存储介质 | |
CN113821486B (zh) | pod库之间依赖关系的确定方法及其装置、电子设备 | |
CN115756763A (zh) | 微服务容器快速编译运行方法、装置、系统及电子设备 | |
CN112379885B (zh) | 小程序编译方法、装置、设备及可读存储介质 | |
CN114791884A (zh) | 测试环境的构建方法、装置、存储介质及电子设备 | |
US20020038454A1 (en) | Method of compiling code in an object oriented programming language | |
WO2019157891A1 (zh) | 应用安装方法、应用安装包的生成方法 | |
CN114490103A (zh) | 一种操作系统接口调用方法、装置以及电子设备 | |
CN116974653B (zh) | 类加载方法及系统 | |
CN110297639B (zh) | 用于检测代码的方法和装置 | |
CN116032809B (zh) | 使用Wasm的网络协议分析方法及系统 | |
CN116400945B (zh) | 一种动态链接库升级方法、电子设备及存储介质 | |
CN116414424B (zh) | 热更新方法、装置、设备及存储介质 |
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 |