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

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

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

一、Faas是怎么运行的

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

传统部署一个应用的流程如下图:
在这里插入图片描述

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

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

在这里插入图片描述
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是冷启动方面速度最快的。

在这里插入图片描述

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

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

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

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

1、Faas是怎么分层的

在这里插入图片描述

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

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

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

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

在这里插入图片描述

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Serverless和FaaS(函数即服务)是相关但不完全相同的概念。下面是它们之间的区别和联系: 区别: 1. 范围:Serverless是一个更广泛的计算模型,它不仅包括FaaS,还包括其他形式的无服务器服务,如无服务器存储、无服务器数据库等。而FaaS是Serverless模型中的一种特定实现方式。 2. 粒度:FaaS更注重函数级别的计算,开发者将代码封装为独立的函数,并以事件驱动的方式触发执行。而Serverless可以包含更大粒度的服务,如整个应用程序或服务的无服务器实现。 3. 编程模型:FaaS通常采用函数式编程模型,将函数作为服务提供。而Serverless可以使用不同的编程模型,包括函数式编程、事件驱动编程等。 联系: 1. 底层技术:FaaS是Serverless模型的一种实现,它基于无服务器架构和弹性计算资源来提供函数级别的计算能力。在Serverless环境下,FaaS通常是最常见和典型的应用场景。 2. 开发模式:无论是Serverless还是FaaS,它们都旨在使开发者能够专注于业务逻辑而无需关心底层基础设施的管理。它们都提供了弹性扩展、自动管理和付费即用的特性。 3. 优势:Serverless和FaaS都具有速启动、按需分配资源、高度可扩展和降低运维成本的优势。它们都能够提供更高的开发效率和更好的资源利用率。 总的来说,Serverless是一个更广泛的概念,而FaaS是Serverless模型中最常见的实现方式之一。它们都具有类似的优势和特点,但FaaS更专注于函数级别的计算,而Serverless可以包含更大粒度的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值