基于底层指标的Serverless函数容器冷启动优化方法

xiaoxiao4月前  52


本发明属于无服务器计算架构,具体涉及一种基于底层指标的serverless函数容器冷启动优化方法。


背景技术:

1、随着计算领域的不断发展,function as a service(faas)逐渐成为一种流行的云计算模型。在无服务器计算中,每个服务对应一个无状态函数,该函数通常在资源有限的专用容器中执行。与传统的infrastructure as a service(iaas)不同,容器只在函数被调用时启动,并在处理请求后立即休眠。如果函数有一段时间没有被调用,函数容器将被删除,再次调用函数时将发生冷启动。冷启动严重影响无服务器计算的响应性,特别是对于调用不频繁的函数,因为它可能导致每次调用的长延迟,限制了更广泛应用程序对无服务器计算的使用和采用。

2、缓解冷启动问题的重要方法是对函数进行预热。然而,现有的预热策略由于缺乏准确的容器冷启动时间信息,为了确保函数能够成功预热,现有的预热策略需要预留远高于容器正常启动的时间来确保在可能的请求到来前容器被成功提前启动,这种方式会造成极大的资源浪费。同时,容器的启动耗时在节点不同的负载情况下可能存在几倍甚至几十倍的差异,很容易造成资源的浪费或无法在请求到来前完成容器的预热。

3、现有方法中的预热基于各种预测算法模型,但这些模型总会存在一定的预测失误。由于无法准确预测函数冷启动时间,一旦冷启动发生,现有策略就无法有效地选择合适的节点来启动容器,以降低服务整体的延迟。因此,现有技术在解决冷启动问题时存在一些局限性,需要进一步改进以提高预热效率和降低成本。


技术实现思路

1、针对上述技术背景中的缺陷,本发明提出一种基于底层指标的serverless函数容器冷启动优化方法。该方法通过准确预测节点在不同负载情况下的容器启动时间,来选择合适的节点和预热容器的时间点,从而降低保活成本。与现有策略不同的是,该方法可以在合适的时间点预热容器,而不需要提前很长时间来预热容器,从而减少资源的浪费。

2、本发明采用以下技术方案实现:

3、一种基于底层指标的serverless函数容器冷启动优化方法。该方法采用在线和离线两种方式,通过prometheus和node exporter采集目标函数在不同节点负载情况下的冷启动时间数据,并利用机器学习算法构建不同负载指标下的serverless函数容器启动时间预测模型。

4、通过本发明的预测模型能够动态获取不同负载情况下的函数冷启动时间,从而可以更合理地预留时间来提前预热函数。这样一来,就能够避免过早预热函数造成的保活成本浪费,同时也能够避免预热预留时间过短导致请求到达时函数未完成预热的情况。

5、此外,即使在冷启动不可避免的情况下,本发明的预测方法也能够决定函数容器在更合适的节点上启动,从而降低服务整体的冷启动延时。这项发明为优化serverless计算环境中函数的冷启动问题提供了一种有效的解决方案。

6、所述基于底层指标的serverless函数容器冷启动优化方法,具体包括以下步骤:

7、1)数据采集

8、在线数据采集:在不同节点、不同时刻下收集容器启动时间的底层指标数据;

9、离线数据采集:通过压力测试工具stress-ng对系统逐步施加cpu、内存和磁盘i/o压力来模拟不同底层指标变化情况,并多次测试函数容器的启动时间,并收集不同节点的容器启动时间及其底层指标数据;

10、2)容器启动时间预测模型训练

11、利用采集到的底层指标和容器启动时间数据,训练针对目标函数的容器启动时间预测模型;

12、3)容器的启动优化

13、3.1)函数请求时序预测

14、利用时序预测算法来预测目标函数请求到达的时间点,利用所述容器启动时间预测模型预测容器启动时间,从而确定提前预热的时间并进行函数预热以避免冷启动;

15、3.2)函数调度

16、若无法避免冷启动,则在冷启动发生时,将函数调度到启动时间尽可能短的节点,以降低服务时延。

17、上述技术方案中,进一步地,所述步骤1)具体为,利用node exporter收集和暴露主机级别的硬件和操作系统指标给prometheus;利用prometheus抓取带有时间戳的实时性能数据;同时通过收集容器的.created字段和.state.startedat字段来获得容器的创建时间和启动时间,通过计算这两个时间点之间的时间差,将容器的启动时间与系统的性能指标进行关联,以便更准确地分析容器启动对系统性能的影响。

18、进一步地,所述步骤2)中,在训练容器启动时间预测模型之前,采用数据增强和数据分箱的方法来解决高负载时期的数据不足的问题,具体方法为:

19、首先,通过将容器启动时间的原始数据按照固定的时间间隔进行分箱,将连续的时间数据有效地分组到不同的时间范围内;接着,在每个箱中进行随机抽样,并允许重复,以确保每个时间范围内的数据量相等,从而生成一个新的、更均匀的数据集。

20、进一步地,所述步骤3.1)中,利用时序预测算法来预测目标函数请求到达的时间点,具体方法为:通过分析和处理数据的内在动态关系来预测目标函数在未来时刻的请求频率,从而确定目标函数的请求到达时间点。

21、进一步地,所述步骤3.2)中,在冷启动发生时,将函数调度到启动时间尽可能短的节点,具体方法为:根据不同节点的负载指标情况,利用所述容器启动时间预测模型预测容器启动时间,选择启动时间最短的节点来完成函数容器的调度和启动。

22、在本发明中:

23、1、基于底层指标驱动的容器启动时间预测模型:利用底层指标数据训练模型,通过数据分箱和数据加强,准确预测函数容器在不同负载情况下的冷启动时间。

24、2.动态预热策略:根据预测的启动时间和请求到达预测时间,合理预留时间进行函数容器的预热,避免过早或过晚预热带来的资源浪费或预热失败的问题。

25、3.容器调度优化:在冷启动发生时,选择启动时间最短的节点来完成函数容器的调度和启动,以降低服务时延。

26、本发明的有益效果为:

27、本发明基于底层指标的serverless函数容器启动时间预测与动态预热策略能够实时分析节点的底层指标,准确获取函数容器的启动时间。这一方法极大地降低了预热所需的提前预留时间,从而减少了在保活过程中产生的资源浪费,并避免了因低估函数容器启动时间而导致请求到来时函数未能完成预热的情况。

28、同时,在faas场景下,尽管冷启动问题无法完全避免,但本方法能够动态选择负载状况良好的节点,在冷启动发生时快速启动函数容器。这样可以尽可能满足函数服务的slo要求,并降低函数服务的整体时延。



技术特征:

1.一种基于底层指标的serverless函数容器冷启动优化方法,其特征在于,具体包括以下步骤:

2.根据权利要求1所述的基于底层指标的serverless函数容器冷启动优化方法,其特征在于,所述步骤1)具体为,利用node exporter收集和暴露主机级别的硬件和操作系统指标给prometheus;利用prometheus抓取带有时间戳的实时性能数据;同时通过收集容器的.created字段和.state.startedat字段来获得容器的创建时间和启动时间,通过计算这两个时间点之间的时间差,将容器的启动时间与系统的性能指标进行关联,以便更准确地分析容器启动对系统性能的影响。

3.根据权利要求1所述的基于底层指标的serverless函数容器冷启动优化方法,其特征在于,所述步骤2)中,在训练容器启动时间预测模型之前,采用数据增强和数据分箱的方法来解决高负载时期的数据不足的问题,具体方法为:

4.根据权利要求1所述的基于底层指标的serverless函数容器冷启动优化方法,其特征在于,所述步骤3.1)中,利用时序预测算法来预测目标函数请求到达的时间点,具体方法为:通过分析和处理数据的内在动态关系来预测目标函数在未来时刻的请求频率,从而确定目标函数的请求到达时间点。

5.根据权利要求1所述的基于底层指标的serverless函数容器冷启动优化方法,其特征在于,所述步骤3.2)中,在冷启动发生时,将函数调度到启动时间尽可能短的节点,具体方法为:根据不同节点的负载指标情况,利用所述容器启动时间预测模型预测容器启动时间,选择启动时间最短的节点来完成函数容器的调度和启动。


技术总结
本发明公开了一种基于底层指标的Serverless函数容器冷启动优化方法,该方法通过准确预测节点在不同负载情况下的容器启动时间,来选择合适的节点和预热容器的时间点,从而降低保活成本。与现有策略不同的是,该方法可以在合适的时间点预热容器,而不需要提前很长时间来预热容器,从而减少资源的浪费。

技术研发人员:肖腾涛,才振功,杨波威
受保护的技术使用者:浙江大学
技术研发日:
技术公布日:2024/9/23

最新回复(0)