掌握了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