System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于无服务器计算领域,特别是一种基于zygote机制的降低无服务器计算容器冷启动延迟的方法。
技术介绍
1、互联网技术的迅猛发展催生了对更加高效、便捷开发模式的追求。在这样的大环境下,无服务器计算凭借其出色的可维护性、敏捷的伸缩能力和细粒度的计费方式,成为了一种新的解决方案。在无服务器计算中,开发者把应用拆分成若干函数,这些函数在无服务器平台提供的容器或虚拟机中执行。这种方法的引入带来了以下显著的好处:首先,它能自适应地调整处理能力,让开发者摆脱对服务器数量和配置的担忧,极大地简化了管理流程。其次,开发者的费用仅基于实际使用时间计算,这不仅降低了成本,还有助于提升性能。
2、尽管无服务器计算优势巨大,但仍存在一些问题,容器冷启动延迟便是其中之一。冷启动延迟会显著影响无服务器函数的整体运行效率。这主要是由于2个原因:一是冷启动频繁发生;二是冷启动占用的延迟时间比例过高。通常,无服务器函数的生命周期较短,大部分无服务器函数甚至只需要几十毫秒即可执行完毕,与之相比,几十上百的冷启动延迟就显得。有人对14个无服务器函数执行延迟与总响应延迟的比例进行了计算,发现有12个无服务器函数的执行延迟甚至不到30%。因此,快速的冷启动对于开发者来说至关重要。
3、时间序列预测指的是对历史时序数据进行分析并预测未来趋势,已在交通、气象学、股票市场等多个领域展现出其独特价值。该技术通过对过去数据的深入分析,捕捉数据随时间变化的规律,并结合季节性调整、周期性波动等因素,进而准确地预测未来数据趋势。现有方法大多直接通过预测
4、zygotes机制最初源于android系统,是一种用于提高应用程序启动的速度和效率的优化技术。当需要启动一个新的应用程序时,zygote进程会通过fork()系统调用创建一个新的子进程,且这个子进程已经包含了一些预加载的运行时环境和类库,从而避免从头开始加载运行时环境和类库的时间消耗,有效地简化了应用启动过程。在本专利技术中,将包含函数公共依赖包的基础容器视作zygote容器,其可充当多个函数的“父容器”,其在公共域提前下载、安装、导入了一些依赖,并在私有域提前下载了一些依赖,且由于造成容器冷启动的主要原因是函数所需依赖的安装与下载,因此直接由zygote容器fork新容器可显著减少启动时间。
5、现有的基于zygotes机制的方法中要么是缓存被调用过的zygote树,并通过lru算法更新缓存;要么是基于相似度合并几个容器的公共包创建zygote容器,但这些都极易造成生成的zygote容器不会被用到,既造成未来的函数调用无法使用zygote容器以减少冷启动,无用的zygote容器又占用了大量内存。
技术实现思路
1、针对现有工作中出现的问题,本专利技术提供一种基于zygote机制的无服务器计算容器冷启动优化方法。该方法首先通过时间序列预测获取未来函数调用次数,接着根据函数调用次数确定启动哪些私有容器或启动哪些zygote容器以及zygote容器提前准备了哪些依赖,使得提前创建的私有容器和zygote容器极大概率被使用,进而让绝大多数函数调用均可以直接使用私有容器或根据zygote容器获取函数实例来减少冷启动延迟。
2、为了解决上述技术问题,本专利技术提出的一种基于zygote机制的冷启动优化方法,包括以下步骤:
3、步骤一,通过时间序列预测获取下一时间段各函数调用次数
4、1-1)数据预处理:本专利技术使用包含函数id、函数调用时间的数据集,将所有待预测函数的每个时间段的调用次数作为特征,并通过序列长度和排列熵对各函数序列的可预测性进行了度量,只对序列长度高于阈值l1且排列熵低于阈值lh的序列进行预测。忽略了记录数量极少且预测效果不佳却需要消耗一定资源的序列;
5、1-2)构建并时间序列预测模型:本专利技术使用timesnet作为预测模型,并使用tweedie损失函数作为损失函数。并按照7:1:2的比例将上述数据集划分成训练集、验证集、测试集。训练集用于训练模型,验证集用于调整模型超参数,测试集用于最后实验评估效果;
6、1-3)预测未来的函数调用情况:使用构建好的神经网络模型在每个时间段,预测下一时间段各函数的调用次数;
7、步骤二,根据函数调用情况确定容器种类
8、获取到预测结果后,需要确定创建哪种容器;
9、2-1)确定私有容器种类:判断下一时间段各函数调用次数是否大于等于阈值lp,倘若满足条件,则发送创建容器实例的命令,执行步骤三;否则,执行步骤2-2);
10、2-2)确定zygote容器种类:首先,获取所有调用次数小于阈值lp的函数及其对应的调用次数;接着获取所有函数的所有依赖集合,再计算某依赖集合i的分数s(i),以衡量依赖集合i出现频次以及根据该依赖集合创建zygote容器带来的收益,分数计算公式如下:
11、
12、其中times(i)表示包含依赖集合i的所有函数下一时间段调用次数之和,本专利技术使用其来衡量下一时间段调用的函数需要依赖集合i的可能性,timeconfiguration(i)表示将依赖集合i安装、导入的平均时间,用来衡量创建该zygote容器相对其它种类zygote容器可节省冷启动的时间长短。α、β、γ均为超参数。tf(i)表示依赖集合i的“词频”。
13、得到各集合分数后,再按分数大小排序,按以下方法迭代:每次选择分数最高的集合作为新创建zygote容器的公共域的依赖集合cs,获取所有含有该依赖集合的函数,并得到除依赖集合cs的其它依赖,将其作为各函数私有域的依赖集合cp,并同时更新除依赖集合cs以外的其它集合的分数。更新方法为:获取所有包含分数最高依赖集合的函数,对于每个函数j,得到其所有依赖集合,并将依赖集合对应的times(i)减去函数j的下一时间段调用次数,再更新该依赖集合的分数。迭代结束条件为所有函数均可使用某个zygote容器获取函数实例或者剩余依赖集合的分数低于阈值ls。
14、步骤三,根据控制器命令创建容器
15、主机接收到创建命令后,需要按命令提前创建对应容器,以下为具体创建方法;
16、3-1)创建私有容器:直接启动对应函数的镜像,容器内函数依赖均已被下载、安装、导入,且代码正在运行;
17、3-2)创建zygote容器:容器内部设有共享域和每个函数对应的私有域,可使用该容器的函数只能访问共享域和函数对应的私有域。共享域安装、导入了所有函数所需的依赖;私有域中提前下载了每个函数对应的依赖和代码;
18、步骤四,执行函数调用请求
19、函数调用请求到来后,将请求发送本文档来自技高网...
【技术保护点】
1.一种基于Zygote机制的无服务器计算容器冷启动优化方法,其特征在于,包括以下步骤:
【技术特征摘要】
1.一种基于zygote机制的无服务器计算容...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。