Serverless名词解释
首先,我们先对Serverless名词做一个简单的理解。将Serverless拆开看,Serverless = Server(服务端) + less(较少关心),组合起来便是“较少关心服务端”。其中,Server限定了解决问题的边界。这里的“服务端”是指对服务运行资源的运维。因此,Serverless还有另一种解释是服务端免运维,即NoOps。<br />概念方面Serverless是对运维体系的一个极端抽象,技术方面给应用开发和部署提供了一个极简的模型。
它的整体架构如图所示,PS:图里一些还没提及的名词,在后续段落中会一一介绍,此处先对逻辑架构有个概览。其中:
• FaaS(Function as a Service):函数即服务。将简单的函数发布成函数实例,外部可通过触发器使用该函数实例。FaaS支持动态扩缩容。以http请求为例,当请求量很大时FaaS函数会自动扩容多实例同时运行;在http请求降低时自动缩容;无流量时还可以缩容到0实例。
•BaaS(Backend as a Service):后端即服务。具备高可用&弹性,且免运维的后端服务。可以是符合以上特点的对象存储服务、数据库服务、身份验证服务等等。从狭义上讲,BaaS是为FaaS提供服务支撑。
•基础设施Serverless化是指:通过FaaS和BaaS技术可以将服务Serverless化,为了支撑FaaS和BaaS技术,不仅要在应用进程上做文章,更底层的需要在网络协议、容器、容器编排上做一些升级和优化。
FaaS 是 Serverless 架构的一种。FaaS 全称 function as a service(函数即服务),function 就是提供某个功能的函数或代码块,FaaS 即提供这类 function 运行环境及调度的服务。比如我们编写了一个为图片生成缩略图的函数保存到 FaaS 里,当用户上传图片时,FaaS 会触发该函数运行,生成对应的缩略图。可以看到,FaaS 只需要一个运行环境即可运行,因此无需关系服务器资源,例如提供 JS 语言的 FaaS 只需要提供 JS 的运行环境即可;此外,函数只有在特定事件被触发时才会运行,因此,FaaS 的计费方式更合理,只需为调用付费,函数未被调用时不会运行,也不会占用系统资源,因此无需支付固定月费或年费;另外,由于运行的是细粒度的函数,因此具有更高的可扩展性和冷启动性能。
FaaS 的优缺点
优点
- 降低运营成本
- 灵活的伸缩能力
- 快速交付,缩短创新周期
- 更高的安全性
- 解放前端生产力
缺点
- 不适合需要长时间运行、需要处理大量请求的应用
- 依赖云服务商提供的其他服务,迁移成本高(对于云服务商可能是优点~)
- 不适合有状态的服务
- 调用内部资源延迟
- 本地开发测试麻烦
- 运行环境更新较慢(目前 Nodejs 稳定版已经到了 10.x,但各 FaaS 服务商提供的 Node 运行环境依然以 6.x 和 8.x 为主,其他语言类似)