OpenFaaS 101 - 4:Design & Architecture

掌握了hello world之后,就来看看OpenFaaS架构

Overview

OpenFaaS 101 - 4:Design & Architecture

如上图,OpenFaaS在架构上,属于承上启下的第二层,需要部署在k8s上,同时需要container registry存储image;也需要NATS负责异步处理,Prometheus负责收集metrics,同时负责扩容

OpenFaaS 101 - 4:Design & Architecture

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

OpenFaaS 101 - 4:Design & Architecture

Auto-scalling

Auto-scalling功能使得function根据不通metrics来进行扩容和缩容

  • QPS + AlertManager: AlertManager通过读取Permethues metrics,判断是否apply rule触发扩容和缩容
  • CPU/Memory Utilization + k8s HPA: 也可以不使用AlertManager;利用k8s HPA 可以通过判断pod的CPU和Memory的利用率来做扩缩容

此外值得提一点的是,如果function长时间没有任何request,function instance的数量就会变为0 (down to zero replica),在openfaas里叫做idlingfaas-idler就是专门干这个的,当然直接调用API也可以

???? 值得考虑OpenFaaS或者Serverless吗?

继续深入之前,有个问题摆在面前;就是,真的值得将现有App迁移到 Serverless 上吗?到底什么场景适合使用OpenFaas?

我理解是,只有那些小型不复杂,且依赖(内部/外部)较小,且对 server load 没严格认识或要求 (扩缩容甚至0 request)的backend项目,才可以尝试…

比如说各种小程序后台,数据处理,甚至机器学习的模型API…

这里先给自己立个flag,下一篇,尝试一下使用OpenFaaS部署机器学习模型,并expose api