Skip to content

Serverless

第一章:初识

一、是什么?

Serverless 是对服务端运维体系的极端抽象。

二、FaaS 原理

1. FaaS 流程

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

当用户第一次访问 HTTP 函数触发器时,函数触发器就会 Hold 住用户的 HTTP 请求,并产生一个 HTTP Request 事件通知函数服务。

紧接着函数服务就会检查有没有闲置的函数实例;如果没有函数实例,就去函数代码仓库中拉取你的代码;初始化并启动一个函数实例,执行这个函数,传入这个 HTTP Request 对象作为函数的参数,执行函数。

再进一步,函数执行的结果 HTTP Response 返回函数触发器,函数触发器再将结果返回给等待的用户客户端。

第一个"GreetingServiceGreetingFunctionhttpTrigger"函数触发器,函数触发器是所有请求的统一入口,当请求发生时,它会触发事件通知函数服务,并且等待函数服务执行返回后,将结果返回给等待的请求。

第二个"GreetingService"函数服务,当函数触发器通知的“事件”到来,它会查看当前有没有闲置的函数实例,如果有则调用函数实例处理;如果没有,则会创建函数实例,等实例创建完毕后,再调用函数实例处理事件。

第三个"GreetingServiceGreetingFunction"函数代码,“函数服务”在第一次实例化函数时,就会从这个代码仓库中拉取代码,并构建函数实例。

2. FaaS 为什么可以极速启动?

FaaS 中的冷启动是指从调用函数开始到函数实例准备完成的整个过程。

蓝色部分是云服务商负责的,红色部分由你负责,而函数代码初始化,一人一半。

**蓝色:**云服务商还会不停地优化自己负责的部分,毕竟启动速度越快对资源的利用率就越高,例如冷启动过程中耗时比较长的是下载函数代码。云服务商可以提前下载你的代码构建函数实例的镜像。请求第一次访问时,直接跳过冷启动的下载函数代码步骤,从镜像启动容器,这个也叫预热冷启动。

3. FaaS 是怎么分层的?

云服务商负责的就是容器和 Runtime 的准备阶段。而开发者自己负责的则是函数执行阶段。

总结:

  1. 纯FaaS应用调用链路由函数触发器、函数服务和函数代码三部分组成,它们分别替代了传统服务端运维的负载均衡&反向代理,服务器&应用运行环境,应用代码部署。
  2. 对比传统应用托管PaaS平台,FaaS应用最大的不同就是,FaaS应用可以缩容到0,在事件到来时极速启动,Node.js的函数甚至可以做到100ms启动并执行。
  3. FaaS在设计上牺牲了用户的可控性和应用场景,来简化代码模型,并且通过分层结构进一步提升资源的利用率,这也是为什么FaaS冷启动时间能这么短的主要原因。关于FaaS的3层结构,你可以这么想象:容器层就像是Windows操作系统;Runtime就像是Windows里面的播放器暴风影音;你的代码就像是放在U盘里的电影。

4. FaaS 的两种进程模型

preview
图片加载中
预览

Released under the MIT License.