通过多年云服务商的建设,基础设施越来越完善,由IaaS到PaaS再到后面各种容器化、微服务、Cloud Native的提出。大家渐渐进入了一个越来越不需要了解底层设计的阶段。云服务商帮大家隔离了底层的基础设施-机器、网络……直接一键创建;到PaaS平台的阶段,IaaS上各种底层开发环境都被供应商提供和管理了,直接在上面部署各种最终业务逻辑即可;而再往下一层,当大家希望只专注于业务开发,完全隔离运行环境和实现细节,Serverless和FaaS应运而生。
Serverless
如同上面所讲,Serverless并不是真不要服务器,只是云服务上抽象了几乎所有的云服务管理和底层基础架构的实现,也就是开发者只用关心服务的逻辑实现,对服务器的任何运行完全不用在意,实现“无服务器”化。AWS云架构战略副总裁Adrian Cockcroft曾经说过:“如果你的PaaS能够有效地在20毫秒内启动实例并运行半秒,那么就可以称之为Serverless”。
FaaS
FaaS即Functions as a Service,即函数即服务。互联网服务的早期,所有的服务都被打成一大坨组合为一个巨大的后端服务,各种服务之间互相调用。而在这之后,微服务把各个模块强耦合的模式打散成为一个个细小的微服务,每个服务独立运行,通过服务编排穿在一起。而FaaS则跟进一步,直接把逻辑拆成函数的粒度,各个函数之间串联起了整个服务的流程,数据、存储都依靠云服务商提供的各个组件完成。Function的执行通过各种各样的事件或者Http请求驱动,数据在各个Function之间传递、被处理、最终完成预期的操作。我觉得各个云平台推出的FaaS服务名字也很形象生动的表达FaaS的概念:AWS Lambda、Google Cloud Functions、Microsoft Azure Functions,尤其是AWS的Lambda,参考各个语言里的Lambda表达式,即用即定义,灵活性超高。
FaaS = Serverless?
看了很多材料里基本会把FaaS和Serverless等同,但如果严肃的区分下的话,Serverless主要指一个运行于云服务供应商上,使用BaaS(Backend as a Service)服务或FaaS服务,隔离了服务端的架构。FaaS被定义为一种由事件或HTTP请求驱动的处理流程。非生产环境的FaaS不一定使用Serverless架构。
优缺点
优点:
- 只用专注于核心业务逻辑上、加快代码开发速度
- 不用关注基础设施的管理,减少了运营成本
- 内生的可扩展性
- 可以根据运用次数付费,不用为没有使用的资源付费
- 强可靠性,故障容忍性强
- 使用FaaS构建的服务必然会被拆分为最小的业务逻辑单元
缺点: - 减少服务透明度,基础设施层很难了解服务全貌
- 难于debug
- 自动唤起带来的自动计费使估计费用变得比较难
- 如果有一大堆函数需要部署,带来的监控等问题很麻烦
- 无状态的服务很适合,但是有状态的服务需要的存储交互必然增加延迟和复杂性
再进一步
Serverless作为新兴技术,有各种各样的场景可供探索。而最近接触到的,是其结合边缘计算的应用。Azure的AIOT edge和AWS的Lambda edge都是这种模式,直接部署一个FaaS服务到边缘计算设备上,轻量化实现对各种搜集数据的处理和上传。