基於 Kubernetes 的 FaaS 平臺開源實現——Kubeless 的應用實踐

內容來源:2018 年 09 月 16 日,噹噹網數字業務事業部技術總監李志偉在「中國雲原生用戶大會」進行《基於 Kubernetes 的 FaaS 平臺開源實現——Kubeless 的應用實踐》演講分享。IT 大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。python

閱讀字數:2450 | 7分鐘閱讀網絡

獲取嘉賓演講視頻及PPT,請點擊: t.cn/EwPPdr0

摘要

一般咱們認爲Serverless包含兩個部分,FaaS和BaaS,本次主要講的是FaaS部分。架構

什麼是Serverless

一般咱們認爲Serverless包含兩個部分,FaaS和BaaS,本次主要講的是FaaS部分。less

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咱們認爲它最重要的價值在於提供了企業內部的代碼微服務化的一種可選方案,實現了系統層和業務邏輯之間的隔離,讓軟件開發更貼近其目的的本源。

以上爲今天的分享內容,謝謝你們!

相關文章
相關標籤/搜索