CN115543486B - 面向无服务器计算的冷启动延迟优化方法、装置和设备 - Google Patents
面向无服务器计算的冷启动延迟优化方法、装置和设备 Download PDFInfo
- Publication number
- CN115543486B CN115543486B CN202211461318.0A CN202211461318A CN115543486B CN 115543486 B CN115543486 B CN 115543486B CN 202211461318 A CN202211461318 A CN 202211461318A CN 115543486 B CN115543486 B CN 115543486B
- Authority
- CN
- China
- Prior art keywords
- function
- optional
- server
- functions
- faas
- 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.)
- Active
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/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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
本实施例提供了一种面向无服务器计算的冷启动延迟优化方法、装置和设备,所述方法包括:对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;对简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数;根据所述FaaS应用的函数调用图、所述无服务器函数和特殊函数生成可选函数集;对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。在本实施例中,无需修改底层操作系统或虚拟机管理程序,从应用层面出发,实现通过减小执行代码的大小来优化无服务器函数的冷启动延迟。
Description
技术领域
本发明涉及软件技术领域,特别涉及一种面向无服务器计算的冷启动延迟优化方法、装置和设备。
背景技术
无服务器计算是一种流行的云计算范型,并被广泛应用机器学习、科学计算、视频处理等领域。目前,云提供商提供的无服务器平台包括:AWS Lambda,Azure Functions和Google Cloud Functions等,在这些无服务器平台中,函数服务(Function as a Service,FaaS)是最突出的实现方式,FaaS表示无服务器函数,将能实现应用功能的无服务器函数的组合,称为FaaS应用。底层的无服务器平台能自动处理资源管理,因此,在运行FaaS应用的时候不必管理服务器或虚拟机实例。当无服务器函数被事件触发时,无服务器平台能自动分配资源,若无服务器函数一段时间未被使用,则将资源释放。通过这种方式,实现资源轻量级和高效管理。
但无服务器计算中的这种按需资源管理引入了更长的响应延迟,在实践中,在准备执行环境时所花费的延迟(简称冷启动延迟)已被证明在各种应用场景的总响应延迟中是显著的。而现有的工作是从系统层面优化冷启动延迟,它们需要大量的工程工作来修改底层操作系统或虚拟机管理程序,同时还存在安全机制担忧。因此,优化冷启动延迟是当代FaaS应用面临的一项关键挑战。
发明内容
鉴于上述问题,本发明实施例提供了一种面向无服务器计算的冷启动延迟优化方法、装置和设备,以便克服上述问题或者至少部分地解决上述问题。
本发明实施例的第一方面,公开了一种面向无服务器计算的冷启动延迟优化方法,所述方法包括:
对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;
对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数;
根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集;
对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
可选地,所述对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用,包括:
删除对FaaS应用的功能不产生影响的不必要文件,所述不必要文件包括:与本地虚拟化环境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件。
可选地,所述对所述简化的FaaS应用进行无服务器函数识别,包括:
查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;
当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;
通过外部接口,根据开发人员定义的无服务器函数的名称,确定无服务器函数。
可选地,所述特殊函数包括魔术函数和模块中的初始化函数,所述对所述简化的FaaS应用进行特殊函数识别,包括:
通过检验函数名称是否包含双下划线来识别魔术函数,将函数名称含有双下划线的函数确定为魔术函数;
在所有库函数的开始位置插入输出语句,离线加载常用的依赖库,并通过所述输出语句生成的日志获取在初始化阶段调用的函数信息,根据所述函数信息确定模块中的初始化函数。
可选地,所述方法还包括:
识别所述FaaS应用中给定函数的定义范围内的所有相关调用函数,并将所述相关调用函数视为潜在的调用目标,根据所述给定函数和所述相关调用函数的调用关系,生成FaaS应用的函数调用图。
可选地,所述根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集,包括:
根据所述无服务器函数和所述特殊函数构建必要函数集,遍历所述FaaS应用的函数调用图,将不在所述必要函数集中的函数作为可选函数,所有可选函数构成可选函数集。
可选地,所述对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,包括:
将可选函数集中的每个可选函数的定义和可选函数的代码内容以字符串格式保存到键值对中相应的值中;
使每个可选函数的代码内容为空,并在空代码内容处填充该可选函数的执行代码;
根据所述键值对的内容生成并压缩为一个全局轻量级文件。
可选地,所述在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码,包括:
当执行FaaS应用需要调用可选函数时,所述可选函数中的执行代码检查内存中是否存在全局轻量级文件;
若所述全局轻量级文件不存在,则将所述全局轻量级文件加载到内存中,以字符串格式获取所需的可选函数代码,并执行可选函数代码;若所述全局轻量级文件存在,则直接从内存中提取所需的可选函数代码,并执行可选函数代码。
本发明实施例的第二方面,公开了一种面向无服务器计算的冷启动延迟优化装置,所述装置包括:
消除模块,用于对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;
识别模块,用于对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数;
生成模块,用于根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集;
重写模块,用于对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
本发明实施例的第三方面,公开了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现如本发明第一方面实施所述的面向无服务器计算的冷启动延迟优化方法。
本发明实施例包括以下优点:
在本发明实施例中,首先识别FaaS应用中的无服务器函数和特殊函数,然后根据FaaS应用的函数调用图、无服务器函数和特殊函数来确定可选函数集,并对可选函数集中可选函数的代码进行函数级重写,将可选函数的原始代码压缩为轻量级文件,以得到优化的FaaS应用,在执行优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。由于进行函数级重写后的可选函数代码更加简洁,因此减小了FaaS应用在执行时的代码加载延迟,进而减小了冷启动延迟,该方案与系统层面的优化冷启动延迟技术相比,无需修改底层操作系统或虚拟机管理程序,从应用层面出发,通过减小执行代码的大小来优化无服务器函数的冷启动延迟。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种面向无服务器计算的冷启动延迟优化方法步骤流程图;
图2是本发明实施例提供的一种面向无服务器计算的冷启动延迟优化方法应用系统示意图;
图3是本发明实施例提供的一种面向无服务器计算的冷启动延迟优化装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在相关技术中,诸如开发容器的轻量级虚拟化技术、调整调度策略以保持实例激活、重新设计沙盒运行时机制等系统层面优化冷启动延迟技术,虽然具有一定的效果,但其本质上都需要大量的工程工作来修改底层操作系统或虚拟机管理程序,而无服务器平台提供商对于在他们的基础设施上采用和实现这样巨大的更改是感到忧虑的,并且上述方法还存在对安全机制的担忧。此外,申请人通过对FaaS应用进行了测量研究发现,FaaS应用中代码加载延迟占冷启动延迟的大部分时间。因此,为了克服现有技术的局限性,申请人提出以下技术构思:从应用层面出发,通过减小FaaS应用执行代码的大小来优化无服务器函数的冷启动延迟。
基于上述技术构思,本发明实施例提供了一种面向无服务器计算的冷启动延迟优化方法,如图1所示,图1为本发明实施例提供的一种面向无服务器计算的冷启动延迟优化方法步骤流程图,所述的方法包括步骤S101至步骤S104:
步骤S101:对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用。
在本实施例中,FaaS表示无服务器函数,将能实现应用功能的无服务器函数的组合,称为FaaS应用,在FaaS应用中包含有很多与FaaS应用的功能不相关的不必要文件,例如,一些用于调试的相关文件,而这些不必要的文件会增加后续对FaaS应用代码分析的复杂度。在实际开发过程,发现FaaS应用中存在以下四类文件与FaaS应用功能无关,即与本地虚拟化环境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件,因此,需要将这四类文件进行可选文件消除处理,以得到简化的FaaS应用。
具体地,所述对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用,包括:删除对FaaS应用的功能不产生影响的不必要文件,所述不必要文件包括:与本地虚拟化环境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件。
在本实施例中,将FaaS应用中的不必要文件进行删除,进而得到简化的FaaS应用,在后续步骤中基于简化的FaaS应用的代码进行分析,降低代码分析的复杂度,以提高了代码分析的效率和可靠性。
步骤S102:对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数。
在本实施例中,在FaaS应用中有两种类型的入口,第一种入口是无服务器函数,无服务器函数是暴露给网络的接口,当无服务函数被事件触发时,无服务器平台会自动为FaaS应用分匹配资源,以供FaaS应用在执行调用相应的资源;第二种入口是特殊函数,例如,Python程序中的魔术函数,当Python使用重载运算符时会调用这些函数。
在一种可选的实施例中,由于FaaS应用以事件驱动的方式执行,识别无服务器函数的关键是识别事件驱动程序,因此所述对所述简化的FaaS应用进行无服务器函数识别,包括以下三种策略:
策略一:查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数。
由于用于配置云应用资源和权限的配置文件中记录有无服务器函数和对应事件的关系,根据每个事件与无服务器函数的对应关系来确认使用的无服务器函数。例如,对于事件A,在触发事件A时调用函数B,那么就确定函数B为无服务器函数。
策略二:当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数。
当策略一不起作用时,即当FaaS应用中不存在用于配置云应用资源和权限的配置文件,采用策略二的方法,在本策略中特定参数格式是无服务器函数参数的表示形式,具体地,特定参数是指每一个无服务器函数定义后面都要跟个要传入的参数是什么,例如,对于代码:def lambda_handler( event, context): ,其中,event,context为特定参数。因此,通过对FaaS应用中的源代码进行分析,将具有特定参数格式的函数确定为无服务器函数。
策略三:通过外部接口,根据开发人员定义的无服务器函数的名称,确定无服务器函数。
当策略一和策略二都不起作用时,采用策略三的方法,即开发人员通过外部接口自定义无服务器函数的名称,将该自定义函数名称的函数确定为无服务器函数。
在本实施例中,采用多种策略以识别FaaS应用中的无服务器函数,保证了在各种情况下对无服务器函数识别的准确性。
在一种可选的实施例中,所述特殊函数包括魔术函数和模块中的初始化函数,所述对所述简化的FaaS应用进行特殊函数识别,包括:
通过检验函数名称是否包含双下划线来识别魔术函数,将函数名称含有双下划线的函数确定为魔术函数;
在所有库函数的开始位置插入输出语句,离线加载常用的依赖库,并通过所述输出语句生成的日志获取在初始化阶段调用的函数信息,根据所述函数信息确定模块中的初始化函数。
在本实施例中,FaaS应用的特殊函数是指在FaaS应用初始化或特殊系统事件处理时被FaaS平台隐式调用的函数。特殊函数主要包括两种:第一种函数是魔术函数,魔术函数是指当Python使用重载运算符时会调用的函数,并且执行过程是自动完成的,无需明确指定魔术函数的名称。因此,仅通过静态分析FaaS应用的代码,很难识别出这类自动执行行为的魔术函数的调用信息。但魔术函数的函数名称中包含有双下划线,例如,函数__init__(),函数__repr__()等都是Python中的魔术函数,因此,通过识别函数名称中是否含有双下划线的方式来判断该函数是否为魔术函数,具体地,当检测到该函数中包含于双下划线,则将该函数确定为魔术函数,否则不是魔术函数。
第二种特殊函数是模块中的初始化函数,即在加载模块之前,程序需要先调用模块初始化函数来加载模块。在本实施例中,通过在所有库函数(即依赖库中的函数,依赖库是指使用的第三方提供的代码包,本质上也是功能代码,和用户代码一样,可以供其他开发者直接导入使用)的开始位置插入输出语句,该输出语句可以记录在FaaS应用运行时调用的函数信息,然后离线加载常用的依赖库,并通过输出语句生成的日志,进而得到在初始化阶段调用的函数信息,即确定了模块初始化函数。
在一种可选的实施例中,还包括构建FaaS应用的函数调用图,函数调用图表征FaaS应用内各函数之间的调用关系,具体地,
识别所述FaaS应用中给定函数的定义范围内的所有相关调用函数,并将所述相关调用函数视为潜在的调用目标,根据所述给定函数和所述相关调用函数的调用关系,生成FaaS应用的函数调用图。
在本实施例中,给定函数是指FaaS应用中的所有函数,对于每个给定函数,会写一些代码来实现这个函数的定义,而这些代码里面可能还会调用其他函数。因此,给定函数的定义范围内就是指函数定义里面包括的内容所在的范围,在这些包括的内容里面去找有哪些其他相关的函数被调用来使用,将这些可能会被调用的相关函数都视为潜在调用目标。例如,对于给定函数A,其代码里面包括了可能需要调用的函数B和函数C,则函数B和函数C就是函数A的潜在调用目标。
具体地,在构建函数调用图时,采用类层次分析技术类似的思想来识别函数的调用目标,其中,类层次分析方法是一种快速分析技术,该方法可以保守地估计可能的调用关系,此外,还结合上下文不敏感和流不敏感分析技术来分析FaaS应用的函数调用关系,这样的设计可以在灵活的实用性和可扩展性上处理FaaS应用,最后根据识别的函数调用关系生成函数调用图。
步骤S103:根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集。
在本实施例中,FaaS应用的函数调用图包含所有函数的调用关系,但FaaS应用在执行过程中,并不是所有的函数都会被调用,即存在部分函数在一些特殊的情况下才能被调用,将这部分函数定义为可选函数。而无服务器函数和特殊函数都是FaaS应用在执行过程中必须调用的函数,这部分函数的代码在执行过程中是不可缺少的。因此,根据FaaS应用的函数调用图来识别除了无服务器函数和特殊函数所相关的函数之外的其他函数,即确定该FaaS应用中的可选函数。
在一种可选的实施例中,所述根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集,包括:
根据所述无服务器函数和所述特殊函数构建必要函数集,遍历所述FaaS应用的函数调用图,将不在所述必要函数集中的函数作为可选函数,所有可选函数构成可选函数集。
在本实施例中,必要函数集中的元素是由所有无服务器函数和特殊函数所相关的函数组成,依次将函数调用图中的每一个函数的名称与必要函数集中的函数的名称进行比较,若没有在必要函数集中发现相同的名称,这说明该函数不是必要函数,即将该函数确定为可选函数。
步骤S104:对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
在本实施例中,可选函数是FaaS应用在一些特殊情况下调用的函数,对于FaaS应用的运行,并不是每次都会调用所有的可选函数,但可选函数的代码占据了FaaS应用的一大部分,在FaaS应用执行时,也需要将所有的可选函数的代码进行加载,进而增加了FaaS应用代码的加载时间,即增加了冷启动延迟。因此,为了对FaaS应用进行优化,将可选函数的代码进行函数级重写,即将每个可选函数的代码重新写入更简洁执行代码(该执行代码的作用是实现如何取原本的可选代码内容并执行)来代替可选函数中原本的代码,并将原始可选函数的代码封装为一个轻量级的文件,当执行FaaS应用需要调用一些可选函数时,根据实际需要利用执行代码从该轻量级的文件中调用原本可选函数的代码并以执行。
在本实施例中,重写后的可选函数中的执行代码只是实现调用原本的可选函数的代码内容并执行,与函数的原始代码相比更简洁,并且重写后的代码不影响FaaS应用的功能,因此,将FaaS应用的可选函数进行重写后,减少了FaaS应用代码的大小,进而减小了代码的加载延迟,实现了对无服务器函数的冷启动延迟优化。
在一种可选的实施例中,所述对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,包括步骤S201至步骤S203:
步骤S201:将可选函数集中的每个可选函数的定义和可选函数的代码内容以字符串格式保存到键值对中相应的值中。
步骤S202:使每个可选函数的代码内容为空,并在空代码内容处填充该可选函数的执行代码。
步骤S203:根据所述键值对的内容生成并压缩为一个全局轻量级文件。
在本实施例中,每个可选函数包含有函数定义和实际代码,对于要进行函数级重写的可选函数,首先将整个可选函数的定义和其代码内容以字符串格式保存到键值对中相应的值中,然后在原本的可选函数中,让其代码内容为空,即删除原可选函数中的代码,只留下函数的定义。之后在可选函数空代码内容出填充自定义的执行代码,其中,执行代码是指用于调用该可选函数的原本代码并执行的代码,执行代码比原始代码要少很多。例如,对于用于计算的可选函数A,函数A原本的代码中包含大量关于计算过程的代码,其代码比较复杂,而对于重写后的函数A,其执行代码为实现调用函数A的原代码并执行的代码,并没有复杂的计算过程。因此,通过这种简洁的自定义的执行代码来代替复杂原始代码的方式,减少了FaaS应用的加载代码量。
在一种可选的实施例中,所述在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码,包括:
当执行FaaS应用需要调用可选函数时,所述可选函数中的执行代码检查内存中是否存在全局轻量级文件;
若所述全局轻量级文件不存在,则将所述全局轻量级文件加载到内存中,以字符串格式获取所需的可选函数代码,并执行可选函数代码;若所述全局轻量级文件存在,则直接从内存中提取所需的可选函数代码,并执行可选函数代码。
在本实施例中,执行代码具有加载全局轻量级文件和提取所需可选函数代码的功能。当执行优化后的FaaS应用时,可能需要一些可选函数,在调用可选函数时,可选函数中的执行代码将检查是否加载了全局轻量级文件,即检查内存中是否存在全局轻量级文件,若在内存中没有存在全局轻量级文件,则会执行全局轻量级文件加载功能,并提取相应的可选函数代码来执行相应的操作。此外,由于执行上下文不一致,读取的可选函数的代码执行可能依赖于一些必要的变量,这些变量是此可选函数中使用的外部函数,外部函数可以在重写可选函数时通过代码分析而生成。
在本发明实施例中,首先识别FaaS应用中的无服务器函数和特殊函数,然后根据FaaS应用的函数调用图、无服务器函数和特殊函数来确定可选函数集,并对可选函数集中可选函数的代码进行函数级重写,将可选函数的原始代码压缩为轻量级文件,以得到优化的FaaS应用,在执行优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。由于进行函数级重写后的可选函数代码更加简洁,因此减小了FaaS应用在执行时的代码加载延迟,进而减小了冷启动延迟,该方案与系统层面的优化冷启动延迟技术相比,无需修改底层操作系统或虚拟机管理程序,从应用层面出发,通过减小执行代码的大小来优化无服务器函数的冷启动延迟。
示例地,如图2所示,图2为本发明实施开一种面向无服务器计算的冷启动延迟优化方法应用系统示意图。在该应用系统中包含程序分析部分和代码生成部分,程序分析部分:用于通过构造函数调用图来识别与FaaS应用功能相关的代码,即不可或缺的代码;代码重写部分:用于通过验证FaaS应用代码的中间表示,将可选代码与原始应用分开,同时为了保证FaaS应用的正确性,将可选代码压缩到一个轻量级文件中,并在执行应用时以按需加载的方式取回分离的代码,进而实现通过减小FaaS应用代码的方式来优化无服务器函数的冷启动延迟。
具体地,在程序分析部分包含可选文件消除、无服务器函数识别、特殊函数识别和可选函数生成四个构件。其中,可选文件消除构件:用于删除不必要的文件(即与本地虚拟化境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件)以获得简化的FaaS应用。
无服务器函数识别构件:用于识别FaaS应用中的无服务器函数,无服务器函数是FaaS应用的第一类入口,由于FaaS应用以事件驱动的方式执行,识别无服务器函数的关键是识别事件驱动程序,无服务器函数识别构件使用三种识别策略来识别无服务器函数。策略一:查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;策略二:当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;策略三:通过外部接口,根据开发人员定义的无服务器函数的名称,确定无服务器函数。在执行时优先采用策略一,当策略一不起作用时采用策略二,最后当策略一和策略二都不起作用时采用策略三。通过这些策略,可以确定FaaS应用的无服务器函数,即确定FaaS应用的第一类接口。特殊函数识别构件:用于识别FaaS应用中的特殊函数,特殊函数是FaaS应用的第二类入口,特殊函数包含魔术数和模块中的初始化函数,对于魔术函数,特殊函数识别构件通过检验函数名称是否包含双下划线来识别魔术函数;对于模块中的初始化函数,特殊函数识别构件通过离线分析生成的列表来检测模块初始化函数。可选函数生成构建:用于接收无服务器函数识别构件和特殊函数识别构件识别的入口函数,并输出可选函数集。具体地,该构件遍历FaaS应用的函数调用图,并从必要函数集中的入口函数获取所有可访问的函数。然后将不在必要函数集中的函数作为可选函数输出。
代码生成部分包含函数级重写构件,函数级重写构件用于对可选函数的代码进行重写,具体地,该构件主要完成分离和重写两个操作,而且两个操作是同时进行的。分离操作将可选函数与FaaS应用分离,即对于要处理的可选函数,将整个函数定义和其代码内容以字符串格式保存到键值对中相应的值中;然后在原本的可选函数中,让其代码内容为空;重写操作中,将空代码内容填充自定义的执行代码,该自定义的执行代码比原始的代码要少,进而通过这种重写的方式,减少了FaaS应用的加载代码量,最后,键值对的内容被生成并压缩为一个全局轻量级文件。进而实现了对FaaS应用的优化。
本发明实施例还提供了一种面向无服务器计算的冷启动延迟优化装置,如图3所示,图3是本申请实施例提出的一种面向无服务器计算的冷启动延迟优化装置的结构示意图,如图3所示,所述装置包括:
消除模块31,用于对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;
识别模块32,用于对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数;
生成模块33,用于根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集;
重写模块34,用于对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
在一种可选的实施例中,所述消除模块包括:
文件删除模块,用于删除对FaaS应用的功能不产生影响的不必要文件,所述不必要文件包括:与本地虚拟化环境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件。
在一种可选的实施例中,所述识别模块包括:
第一识别子模块,用于查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;
第二识别子模块,用于当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;
第三识别子模块,用于通过外部接口,根据开发人员定义的无服务器函数的名称,确定无服务器函数。
在一种可选的实施例中,所述识别模块包括:
第四识别子模块,用于通过检验函数名称是否包含双下划线来识别魔术函数,将函数名称含有双下划线的函数确定为魔术函数;
第五识别子模块,用于在所有库函数的开始位置插入输出语句,离线加载常用的依赖库,并通过所述输出语句生成的日志获取在初始化阶段调用的函数信息,根据所述函数信息确定模块中的始化函数。
在一种可选的实施例中,所述装置还包括:
调用图构建模块,用于识别所述FaaS应用中给定函数的定义范围内的所有相关调用函数,并将所述相关调用函数视为潜在的调用目标,根据所述给定函数和所述相关调用函数的调用关系,生成FaaS应用的函数调用图。
在一种可选的实施例中,所述生成模块包括:
可选函数生成模块,用于根据所述无服务器函数和所述特殊函数构建必要函数集,遍历所述FaaS应用的函数调用图,将不在所述必要函数集中的函数作为可选函数,所有可选函数构成可选函数集。
在一种可选的实施例中,所述重写模块包括:
第一重写子模块,用于将可选函数集中的每个可选函数的定义和可选函数的代码内容以字符串格式保存到键值对中相应的值中;
第二重写子模块,用于使每个可选函数的代码内容为空,并在空代码内容处填充该可选函数的执行代码;
第三重写子模块,用于根据所述键值对的内容生成并压缩为一个全局轻量级文件。
在一种可选的实施例中,所述重写模块包括:
代码检查模块,用于当执行FaaS应用需要调用可选函数时,所述可选函数中的执行代码检查内存中是否存在全局轻量级文件;
加载执行模块,用于若所述全局轻量级文件不存在,则将所述全局轻量级文件加载到内存中,以字符串格式获取所需的可选函数代码,并执行可选函数代码;若所述全局轻量级文件存在,则直接从内存中提取所需的可选函数代码,并执行可选函数代码。
本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现本发明实施例所述的面向无服务器计算的冷启动延迟优化方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本发明实施例是参照根据本发明实施例的方法、装置、电子设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种面向无服务器计算的冷启动延迟优化方法、装置和设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
1.一种面向无服务器计算的冷启动延迟优化方法,其特征在于,所述方法包括:
对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;
对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数,所述特殊函数包括魔术函数和模块中的初始化函数;其中,所述对所述简化的FaaS应用进行无服务器函数识别,包括:查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;当所述FaaS应用中没有所述配置文件、且分析FaaS应用的源代码无法查找所有函数定义并匹配出具有特定参数格式的函数时,开发人员通过外部接口自定义无服务器函数的名称,将所述定义函数名称的函数确定为无服务器函数;
根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集,包括:根据所述无服务器函数和所述特殊函数构建必要函数集,遍历所述FaaS应用的函数调用图,将不在所述必要函数集中的函数作为可选函数,所有可选函数构成可选函数集,其中,所述函数调用图是结合上下文不敏感和流不敏感分析技术来确定的;
对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
2.根据权利要求1所述的方法,其特征在于,所述对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用,包括:
删除对FaaS应用的功能不产生影响的不必要文件,所述不必要文件包括:与本地虚拟化环境相关的文件、编译文件、常用通用库中与信息相关的目录和测试用例相关的文件。
3.根据权利要求1所述的方法,其特征在于,所述对所述简化的FaaS应用进行无服务器函数识别,包括:
查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;
当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;
通过外部接口,根据开发人员定义的无服务器函数的名称,确定无服务器函数。
4.根据权利要求1所述的方法,其特征在于,所述特殊函数包括魔术函数和模块中的初始化函数,所述对所述简化的FaaS应用进行特殊函数识别,包括:
通过检验函数名称是否包含双下划线来识别魔术函数,将函数名称含有双下划线的函数确定为魔术函数;
在所有库函数的开始位置插入输出语句,离线加载常用的依赖库,并通过所述输出语句生成的日志获取在初始化阶段调用的函数信息,根据所述函数信息确定模块中的初始化函数。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
识别所述FaaS应用中给定函数的定义范围内的所有相关调用函数,并将所述相关调用函数视为潜在的调用目标,根据所述给定函数和所述相关调用函数的调用关系,生成FaaS应用的函数调用图。
6.根据权利要求1所述的方法,其特征在于,所述对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,包括:
将可选函数集中的每个可选函数的定义和可选函数的代码内容以字符串格式保存到键值对中相应的值中;
使每个可选函数的代码内容为空,并在空代码内容处填充该可选函数的执行代码;
根据所述键值对的内容生成并压缩为一个全局轻量级文件。
7.根据权利要求1所述的方法,其特征在于,所述在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码,包括:
当执行FaaS应用需要调用可选函数时,所述可选函数中的执行代码检查内存中是否存在全局轻量级文件;
若所述全局轻量级文件不存在,则将所述全局轻量级文件加载到内存中,以字符串格式获取所需的可选函数代码,并执行可选函数代码;若所述全局轻量级文件存在,则直接从内存中提取所需的可选函数代码,并执行可选函数代码。
8.一种面向无服务器计算的启动延迟优化装置,其特征在于,所述装置包括:
消除模块,用于对FaaS应用进行可选文件消除处理,以获得简化的FaaS应用;
识别模块,用于对所述简化的FaaS应用进行无服务器函数识别和特殊函数识别,以确定所述FaaS应用中的无服务器函数和特殊函数,所述特殊函数包括魔术函数和模块中的初始化函数;其中,所述对所述简化的FaaS应用进行无服务器函数识别,包括:查找所述FaaS应用中用于配置云应用资源和权限的配置文件,根据无服务器函数和对应事件的关系,以确定无服务器函数;当所述FaaS应用中没有所述配置文件时,分析所述FaaS应用的源代码,以查找所有函数定义并匹配出具有特定参数格式的函数,将所述具有特定参数格式的函数确定为无服务器函数;当所述FaaS应用中没有所述配置文件、且分析FaaS应用的源代码无法查找所有函数定义并匹配出具有特定参数格式的函数时,开发人员通过外部接口自定义无服务器函数的名称,将所述定义函数名称的函数确定为无服务器函数;
生成模块,用于根据所述FaaS应用的函数调用图、所述无服务器函数和所述特殊函数生成可选函数集,包括:根据所述无服务器函数和所述特殊函数构建必要函数集,遍历所述FaaS应用的函数调用图,将不在所述必要函数集中的函数作为可选函数,所有可选函数构成可选函数集,其中,所述函数调用图是结合上下文不敏感和流不敏感分析技术来确定的;
重写模块,用于对所述可选函数集中可选函数的代码进行函数级重写,并将可选函数的原始代码压缩为轻量级文件,得到优化的FaaS应用,并在执行所述优化的FaaS应用时以按需加载的方式获取需要的可选函数代码。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行时实现如权利要求1至7任一所述的面向无服务器计算的冷启动延迟优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211461318.0A CN115543486B (zh) | 2022-11-16 | 2022-11-16 | 面向无服务器计算的冷启动延迟优化方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211461318.0A CN115543486B (zh) | 2022-11-16 | 2022-11-16 | 面向无服务器计算的冷启动延迟优化方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115543486A CN115543486A (zh) | 2022-12-30 |
CN115543486B true CN115543486B (zh) | 2023-03-31 |
Family
ID=84719945
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211461318.0A Active CN115543486B (zh) | 2022-11-16 | 2022-11-16 | 面向无服务器计算的冷启动延迟优化方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543486B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022120577A1 (zh) * | 2020-12-08 | 2022-06-16 | 中国科学院深圳先进技术研究院 | 一种预处理函数的无服务器计算方法及其系统 |
US20220237448A1 (en) * | 2021-01-28 | 2022-07-28 | Red Hat, Inc. | Resource constraint aware deep learning model optimization for serverless-based inference systems |
CN114528068B (zh) * | 2022-01-12 | 2024-09-24 | 暨南大学 | 一种消除无服务器计算容器冷启动的方法 |
-
2022
- 2022-11-16 CN CN202211461318.0A patent/CN115543486B/zh active Active
Non-Patent Citations (1)
Title |
---|
刘畅 ; 毋涛 ; 徐雷 ; .基于无服务器架构的边缘AI计算平台.信息通信技术.2019,(第05期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN115543486A (zh) | 2022-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11232015B2 (en) | Automated software verification service | |
CN107992307B (zh) | 一种函数编译方法及装置 | |
US11074154B2 (en) | Identifying a source file for use in debugging compiled code | |
US10360007B2 (en) | Linking optimized entry points for local-use-only function pointers | |
US9952884B1 (en) | Executing optimized local entry points and function call sites | |
US10534593B2 (en) | Optimized entry points and local function call tailoring for function pointers | |
US20180113687A1 (en) | Comparisons in Function Pointer Localization | |
EP3171275B1 (en) | Transparent process interception | |
US10346146B2 (en) | Loading optimized local entry points for local-use-only function pointers | |
US10268465B2 (en) | Executing local function call site optimization | |
US9459986B2 (en) | Automatic generation of analysis-equivalent application constructs | |
US12067122B2 (en) | Detecting added functionality in open source package | |
US10083029B2 (en) | Detect application defects by correlating contracts in application dependencies | |
CN111240987B (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
US10552135B1 (en) | Reducing a size of an application package | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
CN115543486B (zh) | 面向无服务器计算的冷启动延迟优化方法、装置和设备 | |
US11669440B2 (en) | Disk image selection in virtualized network environments | |
CN115048082A (zh) | 微前端系统构建方法、装置、服务器及可读存储介质 | |
US11269596B2 (en) | Automated microservice creation based on user interaction | |
US11720374B1 (en) | Dynamically overriding a function based on a capability set | |
US20240338185A1 (en) | Automatic runtime execution hardening through static system application programming interface (api) data mapping | |
US20240248689A1 (en) | Determining dependencies in workspaces | |
CN115934123A (zh) | 一种客户端逻辑更新方法、装置、电子设备及存储介质 | |
WO2023154092A1 (en) | Dynamically overriding a function based on a capability set during load time |
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 |