基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践
通常我們認為Serverless包含兩個部分,FaaS和BaaS,本次主要講的是FaaS部分。
什么是Serverless
通常我們認為Serverless包含兩個部分,FaaS和BaaS,本次主要講的是FaaS部分。
Serverless作為無服務架構,有幾個最基本的特點。首先是 無需關心底層基礎設施,開發者無需考慮擴展和網絡方面的問題;由于它的部署單位是function,使得開發者無需關心運行實例和容器,減少了應用部署時間;可以做到按需運行,實現細粒度的成本控制。
Serverless帶來的好處是顯而易見的,這主要涉及公有云和私有云兩種場景。公有云上的Serverless可以有效減少復雜度,運維開銷、代碼部署時間等。很多公有云廠商都提供相應的服務,讓開發者無需管理操作系統,也不用構建容器,僅需為運行中的function付費,代碼push之后不用關心后續的運維問題。
不過公有云提供的FaaS平臺的問題在于標準不一致,會造成在A服務商平臺上寫的代碼在B服務商平臺上無法運行。 這對于初創企業來說可能影響不大,但有一定規模的企業應該會想要更多的選擇自主權,而非限定于特定服務商,在私有云平臺上搭建自己的FaaS平臺是更優的方案。
Serverless in kubernetes
當前流行的開源FaaS平臺有OpenFaas、Kuberless、Fission、openWhisk,Knative。這些項目大多是在2016的時候興起的,基于kubernetes,因此我們可以認為FaaS的成長很大程度上是伴隨著kubernetes的成熟而發展起來的。
Kubeless
Kubeless是基于kubernetes平臺上原生的FaaS平臺,這主要是因為它大量使用了kubernetes能力,包括auto-scaling、API routing、monitoring等。當前支持的開發語言也有很多,涵蓋python、PHP、Nodejs、Ruby、Golang、.net、Java。
基于kubernetes原生能力的設計
kubeless基于kubernetes原生能力的設計包含多個方面:
-
使用CRD表示Functions
-
每個事件源被建模成一個獨立的Trigger CRD對象
-
獨立的CRD控制器負責CRD對象的CRUD操作
-
Pod來運行相關的Runtime
-
Configmap用來注入函數代碼到Runtime Pod中
-
Init-contain用來加載函數可能的依賴
-
Service用來暴露函數
-
Ingress用來對外暴露函數
Kubeless的核心概念
Kubeless的核心概念有三個:Function-被執行的代碼、Trigger-觸發函數的事件、Runtime-執行函數的語言和運行時環境。
上圖是一個簡單的示例,可以看到構建Function只需要指定function名字和runtime,然后將代碼push上去就行了。
有了Function之后就需要和具體的Trigger綁定才能夠使用,目前主要有3種Triggers類型:HTTP-通過k8s的Ingress同步觸發函數執行;CronJob-通過k8s的CronJob對象定時觸發函數執行;PubSub-通過kafka/NAST消息隊列異步觸發函數執行。
Kubeless的應用維護
上圖為kubeless官方提供的UI工具,雖然看上去比較簡陋,但功能還是夠用的,它基本上涵蓋了函數創建、函數執行、日志查詢、代碼修改,足以應付一些小規模測試。
前面提到過FaaS是按需運行的,一般在沒有function執行的時候,Runtime會被銷毀掉。這歸功于k8s的彈性伸縮策略,該策略基于兩種metric:CPU和QPS。
監控方面FaaS主要關注Call rate、Failure rate、Execution duration這3個指標,通過它們來衡量function,也可以從中看出Kubeless本身的一些運行情況。
關于微服務與function的思考
一般來說FaaS比較適用于事件驅動的應用場景。典型的有Webhook、消息推送、IoT數據采集、定時任務、輕量級API網關、流式事件處理等。
將微服務和function進行對比之后,我們可以看到Function是天然的微服務,從它們之間的各種特征來看,微服務的業務粒度劃分和function很類似,function可以實現和微服務同樣的功能。
從長期來看,FaaS會改變傳統軟件開發模式,這只是事件長短的問題。我們團隊之所以這么關注kubeless,就是因為我們認為它會對未來的軟件開發模式有非常大的影響,它可以能有效提高開發效率和代碼質量。
微服務化過程是一個逐步演進的過程,無法一蹴而就。
關于微服務和function的部分基本就是以上這些。對于kubeless我們認為它最重要的價值在于提供了企業內部的代碼微服務化的一種可選方案,實現了系統層和業務邏輯之間的隔離,讓軟件開發更貼近其目的的本源。
本文轉自掘金-基于 Kubernetes 的 FaaS 平臺開源實現——Kubeless 的應用實踐
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-InnerClass内部类
- 下一篇: DRF分页器