本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。
Faas的实际使用可以去阿里云上找nodejs运行示例-函数计算去尝试下。
serverless是使用技术手段帮我们屏蔽了复杂性,和其他的云技术没有什么差别。
serverless是对服务端运维的极端抽象,HTTP请求的全链路并没有质的变化,只是简化了流程。
之前需要在服务端构建代码的运行环境,Faas应用将这一步抽象为函数服务。
之前需要配置负载均衡和反向代理,Faas应用这一步抽象为HTTP函数触发器。
之前需要构建代码和启动服务,Faas将这步抽象为函数代码。
Faas应用用户访问顺序如下:
1、用户第一次访问到HTTP函数触发器的时候,函数触发器就会hold住用户的HTTP请求,并产生一个HTTP Request事件通知函数服务。
2、函数服务会检查有没有空闲的函数实例,如果没有就去仓库中拉取代码,初始化并启动一个函数实例,执行这个函数,传入这个HTTP Request对象作为函数的参数,执行函数。
3、函数执行的结果 HTTP Response返回给函数触发器,函数触发器再将结果返回给等待的客户端。
阿里云的演示中,一个Faas应用,默认创建了3个服务:
Faas与应用托管平台Paas对比,最大的区别在于资源利用率。
Faas最少可以缩容到0个实例,Paas最少维持1台实例。
阿里云演示的例子中,用户第一次请求之前,实际的服务器占用为0。
因为第一次请求过来是,函数才被HTTP事件触发,启动函数实例。
Faas上没有请求就可以不占用资源,Paas上的应用启动一般需要几十秒,为了用户体验一般最少维持一个实例运行。
就像声控开关,在有人的时候能快的亮起来,就像感应手龙头,能很快的感应出水。
PC上有个冷启动的概念:关闭电源后,再启动电脑仍然需要加载BIOS表,从硬件驱动开始启动,因此启动速度比较慢。
Faas是指从调用函数开始到函数实例准备完成的整个过程。
冷启动我们关注的是启动时间,冷启动的平均耗时基本在100~700ms之间Nodejs是冷启动方面速度最快的。
冷启动中耗时比较长的是下载代码,一旦更新代码,云厂商就会在后台下载代码,调度资源,构建镜像等。
当我们开始访问的时候,云厂商就会从镜像启动容器,这个也叫预热冷启动。
所以如果对时间比较敏感的话:可以通过预热冷启动或者预热实例策略,加速或者绕过冷启动时间。
Paas在初始化环境的时候,有大量依赖和多语言需要兼容,构建时间也会比较长。
Faas设计之初就牺牲了用户的可控性和应用场景,简化代码模型,通过分层结构进一步提高资源利用率。
至少3层结构:容器、运行时Runtime、具体函数代码
运行时Runtime:就是函数执行时的上下文context。Runtime的信息包括代码运行的语言和版本,例如:Nodejs v10,Python3.6;可调用对象,例如aliyun SDK;系统信息,例如环境变量等。
容器层相当于是Windows操作系统;Runtime相当于暴风影音;代码相当于是放在U盘中的电影。
所以云厂商负责的就是容器和Runtime准备阶段,开发者负责的则是函数执行阶段,启动以后会维持一段时间,当一段时间没有用户请求则会销毁这个实例。
总结:
1、纯Faas应用的调用链路是函数触发器、函数服务、函数代码三部分组成。分别替代了传统服务端运维的负载均衡&反向代理,服务器&应用运行环境,应用代码部署。
2、与Paas比,Faas可以缩容到0,在事件到来时极速启动。
3、Faas设计上牺牲了用户可控性和应用场景,简化代码模型。分层结构进一步提高资源利用率。