FAAS
简介
FaaS 全称 Function-as-a-Service,可以理解成给 Function 提供运行环境和调度的服务。Function 一般指一个代码功能块,这个功能块具体包含的功能数量是没有限制的,但是 FAAS 要求系统的冷启动时间在毫秒数量级。
FaaS 的本质上是以程序的快速启动来实现按需运行,按需伸缩,以及高可用。Function 配合调度系统,就可以完全做到开发者对服务运行的实例无感,实现Serverless。
原理
弹性伸缩
弹性伸缩是根据业务需求和策略自动调整计算能力(即实例数量)的能力。弹性伸缩实现了动态调度的能力,即将应用部署在合适的服务器上。
弹性伸缩一般是根据系统的访问量或者负载进行自动的调度伸缩策略,例如当函数的访问量上升时,弹性伸缩系统根据策略将函数实例数扩容,用来承载更多的请求;当系统容量过多,系统负载在低水平运行时,则适当的缩容部分实例。在传统的开发运维模式中,扩容和缩容都是较为复杂的流程。扩容需要申请服务器资源、环境配置、部署服务等流程;缩容则需要停止服务、从负载均衡服务器中剔除等。弹性伸缩能力通过将扩容和缩容流程进行自动化简化了手工运维的过程。
弹性伸缩一般通过Kubernetes实现,Kubernetes解决了弹性伸缩的基础设施的问题以及服务部署调度的问题,通过调整Deployment的副本数能帮我们解决服务实例调整的问题、通过接入HPA可以实现实例的自动伸缩问题。开源社区的Serverless/FaaS产品基本是基于k8s实现的,也正是因为k8s的发展,促进了开源社区的Serverless/FaaS产品的发展。
除了Kubernetes的HPA外,社区内还有诸如事件驱动架构弹性框架Keda、以及KPA(Knative实现)等。其解决的核心问题是在事件驱动架构下的弹性伸缩(事件触发扩缩容)的问题。