一种预处理函数的无服务器计算方法及其系统
文献发布时间:2023-06-19 10:06:57
技术领域
本申请涉及云计算技术领域,特别涉及一种预处理函数的无服务器计算方法及其系统。
背景技术
无服务器计算是一种新型的云计算模式,它将传统的单体应用进行细粒度分割,把应用分割成一个个函数,每个函数承担应用的一部分功能,将一个应用变成函数的组合。无服务器计算的特点有按使用时间付费、向用户屏蔽服务器配置、快速的扩缩容能力、无状态化,无服务器计算因为其低廉的成本和高度的弹性深受用户的欢迎。
随着云计算技术的迅猛发展,无服务器计算逐渐成为云计算发展的必然趋势,无服务器计算是以函数为粒度将一个应用拆分,函数的执行由一些用户定义的规则或请求来触发执行。
在无服务器计算中,只有在有请求到来时或者规则触发时占用资源调用服务,没有请求或者没有规则触发则不占用任何资源,用户根据调用次数、时长进行付费。相比传统的云计算架构,无服务器计算极大降低了用户的使用成本,而且使用户可以完全免除对服务器的配置从而简化了开发提高了开发效率,无服务器计算有极大的弹性可以满足不同并发量下的资源需求。
在目前的无服务器计算系统中使用容器作为函数的执行器,在用户提交函数后,系统不经任何处理将源代码保存起来,当执行的时候才将源代码注入容器中解释或编译执行,这样的启动方式十分低效:首先,作为函数执行器的容器每次冷启动的时候都需要加载源代码然后编译或解释执行,这种重复的操作占用额外的资源;其次,有些比较复杂的函数可能会有较长的编译或解释时间,这会很影响用户的体验。
发明内容
本申请主要解决的技术问题是提供一种预处理函数的无服务器计算方法及其系统,其通过在用户提交函数请求后对函数进行函数预处理生成可执行的目标文件或中间文件并保存,在作为函数执行器的容器冷启动的时候挂载函数对应目录的数据卷,从而容器启动后不用从源代码开始解释或编译执行,减少冷启动延迟。
为解决上述技术问题,本申请采用的一个技术方案是:提供一种预处理函数的无服务器计算方法,其中,包括如下步骤:
步骤S1、接收用户的请求;
步骤S2、根据用户提交的请求信息,进行判断,如果是提交函数请求,则分析源代码或者提取函数请求的参数从而确定用户使用的编程语言类型;如果是函数执行请求,则跳到步骤S4;
步骤S3、根据步骤S2得到的编程语言类型进行对应的代码处理,生成目标文件,并且进行保存;
步骤S4、当收到函数执行请求时,将步骤S3内的目标文件挂载到作为函数执行器的容器中,直接执行目标文件内函数。
作为本申请的一种改进,在步骤S3内,所述代码处理包括编译处理和解释处理。
作为本申请的进一步改进,在步骤S3内,所述目标文件包括可执行文件和/或中间语言文件。
作为本申请的更进一步改进,在步骤S3内,如果编程语言类型为静态语言,则进行编译处理生成可执行文件;如果编程语言类型为动态语言,则进行解释处理生成中间语言文件。
作为本申请的更进一步改进,在步骤S4内,判断请求是否为执行函数的请求,如果不是,则丢弃;如果是,根据用户请求的信息确定所要使用函数执行器的信息。
作为本申请的更进一步改进,判断是否需要冷启动容器,如果需要,则根据用户请求的信息将所需目标文件挂载到作为函数执行器的容器中,直接执行目标文件内函数;如果不需要,则根据用户请求的信息选择正在运行的容器使之执行其内目标文件的函数。
一种预处理函数的无服务器计算系统,其中,包括:
控制器模块,用于负责确定用户请求的类别并进行处理;
预处理模块,用于对所述控制器模块确定用户使用的编程语言类型进行对应的代码处理生成目标文件;
存储模块,用于将所述预处理模块生成的目标文件、用户信息、函数信息进行保存;
函数执行器,用于作为执行函数的容器;
容器调度器,用于根据用户请求调度所述函数执行器执行目标文件内函数。
作为本申请的一种改进,还包括:
服务发现模块,用于负责管理所有的函数执行器的信息,向所述控制器模块发送其所需的函数执行器的信息。
作为本申请的进一步改进,还包括:
消息队列模块,用于缓存所述控制器模块发送的请求并发送至所述容器调度器。
作为本申请的更进一步改进,在所述函数执行器需要冷启动的时候,所述存储模块向所述容器调度器提供函数信息和相关的文件信息以供所述函数执行器冷启动使用。
本申请的有益效果是:与现有技术相比,本申请通过在用户提交函数请求后对函数进行函数预处理生成可执行的目标文件或中间文件并保存,在作为函数执行器的容器冷启动的时候挂载函数对应目录的数据卷,从而容器启动后不用从源代码开始解释或编译执行,减少冷启动延迟。
附图说明
图1为本申请的预处理函数的无服务器计算方法的步骤框图;
图2为本申请的预处理函数的无服务器计算方法的实施例的方法流程示意图;
图3为本申请的预处理函数的无服务器计算系统的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
目前无服务器计算不像传统的应用那样在服务器持久运行,只有当用户执行请求到来时才会使用服务器资源,因此减少无服务器计算的启动时延十分重要。
在当今的无服务器计算系统中,启动时延的主要影响因素是作为函数执行器的容器的冷启动时延。
为了减少容器的冷启动时延,亚马逊公司的Alexandru Agache等人在文章《Firecracker:Lightweight Virtualization for Serverless Applications》中提出一种轻量级的无服务器计算专用容器Firecracker来减少容器的启动开销,Firecracker结合了硬件虚拟化技术提供的安全性与隔离性和容器的速度与灵活性,它使用Linux内核虚拟机来创建和运行微虚拟机,剔除了不必要的设备和面向客户的功能,以减少每个微虚拟机的内存占用,这可以提高硬件利用率并缩短启动时间;Manco F等人在文章《My VM isLighter(and Safer)than your Container》提出通过不断的裁剪虚拟机去除不必要的开销减少启动虚拟机占用的资源来减少启动时延。这些方法都通过重新设计容器使用的虚拟化技术减少容器的复杂度以减轻初始化的开销。
现有的大多解决无服务器计算的容器冷启动延迟都是从容器本身入手,使用轻量级容器替代原本的重量级容器来达到节省启动开销的效果,但是这些方法都有一个共同的局限性:他们忽略了容器冷启动时进行代码编译执行或解释执行所占的时延,这是影响容器冷启动效率的一个重要因素,每次容器冷启动的时候都需要重新编译或解释函数源代码,这种重复的操作会浪费系统资源而且重新编译或解释函数源代码会影响启动时延。
如图1所示,本申请提供一种预处理函数的无服务器计算方法,包括如下步骤:
步骤S1、接收用户的请求;
步骤S2、根据用户提交的请求信息,进行判断,如果是提交函数请求,则分析源代码或者提取函数请求的参数从而确定用户使用的编程语言类型;如果是函数执行请求,则跳到步骤S4;
步骤S3、根据步骤S2得到的编程语言类型进行对应的代码处理,生成目标文件,并且进行保存;
步骤S4、当收到函数执行请求时,将步骤S3内的目标文件挂载到作为函数执行器的容器中,直接执行目标文件内函数。
其中,在步骤S3内,代码处理包括编译处理和解释处理。
进一步,在步骤S3内,目标文件包括可执行文件和/或中间语言文件,具体地讲,如果编程语言类型为静态语言,则进行编译处理生成可执行文件;如果编程语言类型为动态语言,则进行解释处理生成中间语言文件。
在步骤S4内,判断请求是否为执行函数的请求,如果不是,则丢弃;如果是,根据用户请求的信息确定所要使用函数执行器的信息;判断是否需要冷启动容器,如果需要,则根据用户请求的信息将所需目标文件挂载到作为函数执行器的容器中,直接执行目标文件内函数;如果不需要,则根据用户请求的信息选择正在运行的容器使之执行其内目标文件的函数。
如图2所示,本申请提供一个实施例,该实施例的步骤如下:
步骤1、首先接收用户的请求;
步骤2、判断请求类型,如果是提交函数的请求,则执行步骤3,否则执行步骤6;
步骤3、分析源代码或者提取请求参数信息获得该函数使用的编程语言类型;
步骤4、根据语言类型进行相应的处理;处理方式一般包括编译和解释,对于静态语言一般进行编译处理生成可执行文件;对于动态语言来说一般进行解释处理生成中间语言文件;一些语言需要混合编译和解释处理来生成中间语言文件或者可执行文件,语言处理的过程根据语言特点选择对应的方式;处理函数源代码所需的环境可以使用本机配置的环境或者利用容器技术在容器中处理后输出目标文件;
步骤5、将步骤4处理后得到的文件保存,同时保存对应函数和用户的原数据信息;
步骤6、判断请求是否为执行函数的请求,如果是则执行步骤8,否则执行步骤7;
步骤7、该请求非法,丢弃;
步骤8、根据用户请求的信息确定所要使用函数执行器的信息;
步骤9、根据步骤8的确定的信息判断是否需要冷启动容器,如果需要则执行步骤11,否则执行步骤10;
步骤10、已经有正在运行的容器,根据步骤8确定的函数执行器信息选择相应的容器执行函数;
步骤11、没有正在运行的容器,容器需要冷启动,容器冷启动的时候根据步骤8确定的信息挂载对应的文件,容器启动后执行函数。
也就是说,1、根据用户提交的源代码和请求信息,分析源代码或者提取请求的参数确定用户使用的编程语言;2、根据得到的编程语言进行对应的代码处理,不同的编程语言类型可能有不同的处理方式,静态语言一般可以生成可执行文件,动态语言一般生成中间语言文件,将处理后生成的文件保存;3、当收到用户的函数执行请求时,作为函数执行器的容器冷启动的过程中把生成的文件挂载到容器中,使容器跳过解释或编译函数源代码的过程减少容器的冷启动的时间。
如图3所示,本申请提供一种预处理函数的无服务器计算系统,包括:
控制器模块,用于负责确定用户请求的类别并进行处理;
服务发现模块,用于负责管理所有的函数执行器的信息,向所述控制器模块发送其所需的函数执行器的信息;
预处理模块,用于对所述控制器模块确定用户使用的编程语言类型进行对应的代码处理生成目标文件;
存储模块,用于将所述预处理模块生成的目标文件、用户信息、函数信息进行保存;
函数执行器,用于作为执行函数的容器;
消息队列模块,用于缓存所述控制器模块发送的请求并发送至所述容器调度器;
容器调度器,用于根据用户请求调度所述函数执行器执行目标文件内函数。
其中,在函数执行器需要冷启动的时候,存储模块向容器调度器提供函数信息和相关的文件信息以供函数执行器冷启动使用。
也就是说,控制器模块用于分析用户请求和函数源代码信息,确定执行函数所需要的容器信息;预处理模块用于对函数源代码进行对应的处理;服务发现模块用于寻找作为函数执行器的容器信息并发送给控制器模块;消息队列模块用于缓存请求的信息;容器调度器用于根据消息队列模块中的请求从存储模块取出对应的信息来启动容器或选择现有的容器来执行函数;函数执行器用于作为执行函数的容器。
具体地讲:
控制器模块:控制器模块是系统的入口,负责确定用户请求的类别并进行相应的处理;如果是提交函数请求,则控制器模块会分析函数源代码或提取请求参数获取源代码使用的语言类别,并将语言类别、函数元数据信息和用户信息传递给预处理模块;如果请求为函数执行请求,则控制器模块向服务发现模块获取对应函数执行所需要的容器信息,然后将执行函数所需要的容器信息和请求信息发送给消息队列模块。
服务发现模块:服务发现模块负责管理整个系统运行中的函数执行器的信息,当服务发现模块收到控制器模块发来的请求时,它会检索所有运行中的函数执行器,如果找到合适的函数执行器则会将该容器的信息返回给控制器模块,如果没找到则通知控制器模块准备冷启动函数执行器。
预处理模块:预处理模块从控制器模块收到源代码和对应的用户信息和编程语言类型信息后会根据语言类型选择对应的处理方式,处理后将生成的文件、用户信息、函数信息保存到存储模块;预处理模块处理函数源代码使用的环境可以是本机配置的环境,也可以利用容器技术把源代码在含有相应环境的容器中处理后输出目标文件。
存储模块:存储模块用来存储从预处理模块获取到的文件、用户信息、函数信息;在函数执行器需要冷启动的时候向容器调度器提供函数信息和相关的文件信息以供函数执行器冷启动使用。
消息队列模块:消息队列模块用来缓存控制器模块发出来的请求并送向容器调度器,消息队列模块可以在请求数量太大来不及处理的时候临时缓存请求信息,避免丢失请求的情况发生。
容器调度器模块:容器调度器模块从消息队列模块取得相应的信息,信息内容包括用户信息、函数信息、服务发现模块获取到的函数执行器信息;当容器调度模块收到的信息后,根据信息内容如果需要冷启动函数执行器的时候,则容器调度器模块用函数信息和用户信息从存储模块检索相应的文件信息,在作为函数执行器的容器冷启动的时候将文件挂载到容器中;如果不需要冷启动,则函数调度器模块根据获取到的信息选择相应的函数执行器执行函数。
函数执行器模块:作为执行函数的容器,供容器调度器模块调度。
在本申请内,通过在用户提交函数源代码后进行相应的处理,保存处理后的文件,在作为函数执行器的容器冷启动的时候将对应的文件挂载到容器中以加快容器的启动。
对于作为函数执行器的容器冷启动时延过长的问题,现有技术都是从容器本身入手,减小容器本身占用的资源来加快容器的启动,忽略了在容器冷启动时延中的关键因素,容器冷启动时间中很大一部分用在了对函数源代码的编译或者解释处理,本申请则通过提前处理函数源代码生成目标文件,在容器冷启动的时候直接挂载进容器中,避免了对源代码的编译或解释时间,很大程度上提高了容器的启动效率,同时还减少了服务器资源在容器冷启动时用于函数源代码解释或编译的开销。
本申请具备如下优点:
1、改进在无服务器计算系统中函数执行器冷启动时间过长的问题,通过在用户提交函数后对函数进行函数预处理生成可执行的目标文件或中间文件并保存,在作为函数执行器的容器冷启动的时候挂载函数对应目录的数据卷,从而容器启动后不用从源代码开始解释或编译执行,减少冷启动延迟。
2、改进在无服务器计算系统中函数执行器冷启动时重复处理函数源代码占用系统资源的问题,通过提前处理用户提交的函数源代码,将处理后的源代码直接挂载到冷启动的容器中以避免对函数源代码的解释或编译操作。
3、通过在预处理函数的无服务器计算系统中的预处理模块,预处理用户提交的函数源代码,生成可执行文件或者中间文件,在容器启动的时候直接挂载到容器中加速容器的启动。
以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
- 一种预处理函数的无服务器计算方法及其系统
- 一种基于资源缓存的高性能无服务器计算方法及系统