02 | 原理:通过一个案例,理解FaaS的运行逻辑

本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。

Faas的实际使用可以去阿里云上找nodejs运行示例-函数计算去尝试下。

一、Faas是怎么运行的

serverless是使用技术手段帮我们屏蔽了复杂性,和其他的云技术没有什么差别。

传统部署一个应用的流程如下图:
02 | 原理:通过一个案例,理解FaaS的运行逻辑_第1张图片

serverless是对服务端运维的极端抽象,HTTP请求的全链路并没有质的变化,只是简化了流程。

之前需要在服务端构建代码的运行环境,Faas应用将这一步抽象为函数服务。
之前需要配置负载均衡和反向代理,Faas应用这一步抽象为HTTP函数触发器。
之前需要构建代码和启动服务,Faas将这步抽象为函数代码。

02 | 原理:通过一个案例,理解FaaS的运行逻辑_第2张图片
Faas应用用户访问顺序如下:
1、用户第一次访问到HTTP函数触发器的时候,函数触发器就会hold住用户的HTTP请求,并产生一个HTTP Request事件通知函数服务。
2、函数服务会检查有没有空闲的函数实例,如果没有就去仓库中拉取代码,初始化并启动一个函数实例,执行这个函数,传入这个HTTP Request对象作为函数的参数,执行函数。
3、函数执行的结果 HTTP Response返回给函数触发器,函数触发器再将结果返回给等待的客户端。

阿里云的演示中,一个Faas应用,默认创建了3个服务:

  • 第一个"GreetingServiceGreetingFunctionhttpTrigger"函数触发器:函数触发器是所有请求的入口。当请求发生时,它会触发事件通知函数服务,等函数执行返回后,将结果返回给等待的请求。
  • 第二个"GreetingService"函数服务:当收到函数触发器的事件后,会查看当前有无空闲的函数实例,如果有则调用函数实例处理,如果没有则创建函数实例,然后调用函数实例去处理
  • 第三个"GreetingServiceGreetingFunction"函数代码:在第一次实例化函数时就会拉取代码,构建函数实例。

Faas与应用托管平台Paas对比,最大的区别在于资源利用率。
Faas最少可以缩容到0个实例,Paas最少维持1台实例。

阿里云演示的例子中,用户第一次请求之前,实际的服务器占用为0。
因为第一次请求过来是,函数才被HTTP事件触发,启动函数实例。
Faas上没有请求就可以不占用资源,Paas上的应用启动一般需要几十秒,为了用户体验一般最少维持一个实例运行。

主要是启动时间缩短了很多,可以这样做。

就像声控开关,在有人的时候能快的亮起来,就像感应手龙头,能很快的感应出水。

二、Faas为什么可以极速启动

PC上有个冷启动的概念:关闭电源后,再启动电脑仍然需要加载BIOS表,从硬件驱动开始启动,因此启动速度比较慢。

Faas是指从调用函数开始到函数实例准备完成的整个过程。
冷启动我们关注的是启动时间,冷启动的平均耗时基本在100~700ms之间Nodejs是冷启动方面速度最快的。

02 | 原理:通过一个案例,理解FaaS的运行逻辑_第3张图片

冷启动中耗时比较长的是下载代码,一旦更新代码,云厂商就会在后台下载代码,调度资源,构建镜像等。

当我们开始访问的时候,云厂商就会从镜像启动容器,这个也叫预热冷启动。
所以如果对时间比较敏感的话:可以通过预热冷启动或者预热实例策略,加速或者绕过冷启动时间。

三、为什么Faas可以极速启动,Paas不行?

Paas在初始化环境的时候,有大量依赖和多语言需要兼容,构建时间也会比较长。
Faas设计之初就牺牲了用户的可控性和应用场景,简化代码模型,通过分层结构进一步提高资源利用率。

1、Faas是怎么分层的

02 | 原理:通过一个案例,理解FaaS的运行逻辑_第4张图片

至少3层结构:容器、运行时Runtime、具体函数代码

运行时Runtime:就是函数执行时的上下文context。Runtime的信息包括代码运行的语言和版本,例如:Nodejs v10,Python3.6;可调用对象,例如aliyun SDK;系统信息,例如环境变量等。

容器层相当于是Windows操作系统;Runtime相当于暴风影音;代码相当于是放在U盘中的电影。

所以云厂商负责的就是容器和Runtime准备阶段,开发者负责的则是函数执行阶段,启动以后会维持一段时间,当一段时间没有用户请求则会销毁这个实例。

02 | 原理:通过一个案例,理解FaaS的运行逻辑_第5张图片

总结:
1、纯Faas应用的调用链路是函数触发器、函数服务、函数代码三部分组成。分别替代了传统服务端运维的负载均衡&反向代理,服务器&应用运行环境,应用代码部署。
2、与Paas比,Faas可以缩容到0,在事件到来时极速启动。
3、Faas设计上牺牲了用户可控性和应用场景,简化代码模型。分层结构进一步提高资源利用率。

你可能感兴趣的:(#)