掌握了hello world之后,就来看看OpenFaaS架构
Overview
如上图,OpenFaaS在架构上,属于承上启下的第二层,需要部署在k8s上,同时需要container registry存储image;也需要NATS负责异步处理,Prometheus负责收集metrics,同时负责扩容
workflow上看:
OpenFaaS Gateway
负责处理所有request (svc/func的route是自动生成的,当然也可以自定义)Prometheus
通过Gateway
收集各种metrics,同时结合AlertManager
,来判断是否需要扩容和缩容- 直接
/function/name
是同步执行func,/async-function/name
则是借助NATS
实现异步执行func (可以自定义callback url)
OpenFaaS WatchDog
watchdog
的主要任务是:启动和监控各个function;它相当于一个 init process
,内置了一个Go写的Http Server
;
Auto-scalling
Auto-scalling
功能使得function根据不通metrics来进行扩容和缩容
QPS
+AlertManager
: AlertManager通过读取Permethues metrics,判断是否apply rule触发扩容和缩容CPU/Memory Utilization
+k8s HPA
: 也可以不使用AlertManager;利用k8sHPA
可以通过判断pod的CPU和Memory的利用率来做扩缩容
此外值得提一点的是,如果function长时间没有任何request,function instance的数量就会变为0 (down to zero replica),在openfaas
里叫做idling
;faas-idler
就是专门干这个的,当然直接调用API也可以
🤔 值得考虑OpenFaaS
或者Serverless
吗?
继续深入之前,有个问题摆在面前;就是,真的值得将现有App迁移到 Serverless
上吗?到底什么场景适合使用OpenFaas
?
我理解是,只有那些小型不复杂,且依赖(内部/外部)较小,且对 server load 没严格认识或要求 (扩缩容甚至0 request)的backend项目,才可以尝试…
比如说各种小程序后台,数据处理,甚至机器学习的模型API…
这里先给自己立个flag,下一篇,尝试一下使用OpenFaaS
部署机器学习模型,并expose api