什么是Serverless
CNCF给出的定义是“Serverless computing refers to the concept of building and running applications that do not require server management.”。Serverless并不能望文生义理解为”无服务器“,其核心思想是让用户不再关心Server,只关注于业务开发。要了解Serverless首先要搞清楚以下两个概念:
· BaaS(Backend as a Service)即后台即服务。服务器端的逻辑和状态是完全依赖于云平台进行管理的,如Firebase。
· FaaS(Function as a Service)即函数即服务。开发者提供实现拥有后台逻辑的函数,这些函数执行在一个无状态的计算容器中的,函数的执行是基于事件驱动的,关于这些函数的部署、执行、触发是由云平台来管理的。其最典型的例子就是AWS Lambda。
Serverless的应用架构是将BaaS和FaaS组合在一起的应用,用户只需要关注应用的业务逻辑代码,编写函数为粒度将其运行在FaaS平台上,并且和BaaS第三方服务整合在一起,最后就搭建了一个完整的系统。整个系统过程中完全无需关注服务器。
Serverless处理模型
· 事件源(Event sources)-触发器或流事件到一个或多个函数实例中
· 函数实例(Function instances)-单个函数/微服务,可根据需求进行扩展
· FaaS控制器(FaaS Controller)-部署、控制和监视函数实例及其源
· 平台服务(Platform services )-FaaS解决方案使用的通用集群或云服务(BaaS)
Function生命周期

Serverless的优势
减少硬件基础设施的部署和维护成本
具备真正意义上的高度扩展性
按需使用,按需计费
Serverless的问题
启动延迟
不适合长时间运行应用
比较依赖于第三方云服务
缺乏调试和开发工具
Serverless与传统架构
传统架构需要服务器一直处于运行状态并且监听请求,而Serverless架构只需有请求的时候创建函数实例处理请求。
传统架构需要关心底层服务器的状态、资源(比如CPU、内存、磁盘及网络)及数量,而Serverless应用正常运行所需要的计算资源由底层的云计算平台动态提供。
Serverless适用场景
定时任务,如定时数据统计
事件驱动型任务,如物联网事件处理、Webhook等
对启动延时不敏感的任务,如邮件通知、短信等
Serverless不适合场景
需要一直长期不间断的运行,对处理延时要求高的实时任务
Serverless 和微服务
Serverless 与微服务架构是相辅相成的。微服务和 Serverless 架构都实现了细粒度的部署,维护和伸缩。 目前的 Serverless 实现通常会依赖 FaaS,那么粒度就由 Service 变成了更细粒度的 Function。
参考
https://github.com/cncf/wg-serverless/tree/master/whitepapers/serverless-overview