文章目录

  • 举例场景:
  • 我们进入游戏度的影响因素都有什么呢?
  • 冷启动的优化
  • 开发者角度的优化:
  • 首先是下载游戏
  • 其次看第二点
  • 最后是第三点
  • 云厂商角度的优化:
  • 一、增加缓存
  • 二、环境准备
  • 三、流量预测


咱们通过上篇啊Sei去网吧大杀四方的例子了解了函数计算的冷启动成因,这篇文章呢我们再继续结合上一篇的案例来对如何消除冷启动进行一个简单的分析和学习。

举例场景:

我们进入游戏度的影响因素都有什么呢?

当我们想要玩一个游戏的时候,我们需要先打开电脑—》找到游戏—》然后打开并运行,这个过程也是我们上一篇所说的冷启动的过程。

当然为了更加形象的来说明冷启动影响因素以及探索其解决方案,我们在这个流程中再增加一个环节下载游戏:打开电脑—》下载安装游戏—》找到游戏—》打开并运行

冷启动的优化

结合上面流程,每节省一步或缩短一步都是对我们玩游戏的启动时间的缩短,对应到serverless架构来说呢,就是冷启动的优化。

开发者角度的优化:

我们深入的探索一下,都可以取消哪些步骤或者优化哪些步骤:

首先是下载游戏

大家可以试想一下,下载游戏是不是和游戏的大小以及网络因素有关呢

再serverless架构中呢,网络并不是我们要过多考虑的因素,但是我们的代码包是我们可以关注到的内容,当我们上传的业务逻辑代码包越大时,那么在冷启动的过程中,下载代码包所消耗的时间也就会越久。

容器镜像的拉取为例,毕竟现在的阿里云,腾讯云和AWS等faas平台都已经支持了容器镜像的能力,如果一个容器镜像是200M,另一个容器镜像是2000M,这两者的拉取速度下载速度,以及他们的装载速度是否是一致的呢,显然是不一样的,

所以站在我们的角度,冷启动优化的第一点,就可以使优化代码包体积,尽可能减少,例如删除无用的依赖,再例如Node.js 的开发者可以考虑ncc编译、webpack打包等

其次看第二点

如果我们玩完了游戏,并不关掉游戏而是先放在那里等下次想玩的时候直接玩,这样的启动速度会不会比我们下次要玩的时候重新打开游戏的速度要快?

所以我们在函数中,涉及到部分初始化的操作在使用之后是不是可以不进行销毁呢,比如说再函数启动的时候就进行AI推理模型的装载,或者数据库连接的一个建立,这样即使本次函数的调用结束,下次实例被复用的时候,她就可以避免再次装在和初始化,而是可以直接使用,所以站在我们开发者角度来对冷启动进行优化的时候,还可以考虑实例服用的情况,在一定程度上也可以大幅度避免冷启动带来的负面影响

最后是第三点

我们可以在激进一些考虑,当我们想要玩某个游戏的时候,这个游戏已经被打开了,是不是可以避免开机安装游戏这些过程,就像我们和朋友一起去网吧一样,为了节约时间,通常和朋友先说当我把游戏打开,号登进去,我马上就到。

同样的道理,如果我们函数在被触发的时候,发现所有的环境都已经被准备好了,代码也已经下载好了,万事俱备只欠启动,那么这个时候冷启动其实已经被消灭掉了,那么我们如何来实现呢,其实无论是阿里云、百度智能云、腾讯云等平台都已经再自己的Faas平台上支持了预留的功能,就是我提前帮你预留一些资源,在你需要的时候,我都已经准备好了你直接来使用就可以,不需要任何过程,所以通过实例预留也可以在一定程度上,帮我们消灭冷启动带来的危害和影响

云厂商角度的优化:

上面所说的三种情况都是我们站在开发者角度尽可能地优化冷启动带来的负面影响,最后我们来探索一下,云厂商可以通过哪些方法来帮助我们优化冷启动。

一、增加缓存

就像刚才我们所说的游戏过程一样,厂商也是可以在这些环节中,来进行速度的提升,例如每个环节都增加一些缓存来进行冷启动的优化,例如下载游戏的过程中通过一些特殊的手段将代码加载到自己最近的节点直接使用

二、环境准备

再比如网吧是如何在细节上提升用户的幸福感呢,很多网吧电脑都是待机状态,到了网吧不需要开机,直接动下鼠标就能启动,并且可以直接使用,那么是不是云平台也可以准备很多的环境,很多的资源,某个函数需要的时候,就可以直接把函数装载进去直接使用,而不需要从头再开始准备所有的资源呢,在不同层面准备不同的资源来做备用,这个过程可以认为是一个直化的过程。

三、流量预测

除此之外厂商还可以根据用户的一些特征,通过AI的推理或某些规则,猜测这个函数下一个时间点可能会有多少请求和流量,也就是一个流量预测功能,进而能提前准备好一些资源,这种预热的操作其实目前也有很多厂商正在做也是正在探索的。