search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

Fission:基於 Kubernetes 的 Serverless 函數框架

簡單的來講,Fission 是一個構建在 Kubernetes 之上的 FaaS/Serverless 函數框架。

註:Faas 即 Function as a Service 的縮寫

Fission 允許你通過函數輕鬆的在 Kubernetes 上創建 HTTP 服務。它工作在源碼級別函數和抽象的容器鏡像之上(大多時候),同時簡化了 Kubernetes 的學習曲線,讓你不用深入了解 Kubernetes 就能創建出有用的服務。

通過 Fission CLI,你可以簡單地創建和添加函數,還可以將這些函數關聯到 HTTP 路由、Kubernetes 事件、或者其他觸發器。函數在調度器觸發后被執行,而且函數運行時只消耗 CPU 和內存(空閑的函數除了存儲不會消耗任何資源)。Fission 當前支持多種語言,包括 NodeJS 和 Python。

為什麼要在 Kubernetes 上創建一個 FaaS 框架?

基於 Fission 的特性,我們認為有必要讓一個 FaaS 框架運行在不同的基礎設施上,包括公有雲和專屬雲(on-premise)。但我們不清楚是否應該從無到有來構建,還是可以基於現有的編排系統。後來證明我們不應該從零開始去重複創造諸如集群管理、調度、網路管理等一系列功能。

藉助強大和快速生長的社區,Kubernetes 提供了一個強大和靈活的編排系統,並有完善的 API 支持。在它上面構建意味著可以將容器編排功能留給 Kubernetes,而 Fission 就專註於 FaaS 特性

另外,我們不想分離 FaaS 集群的原因是 FaaS 可以和其它基礎設施很好的結合。比如,FaaS 可能適合做一個小的 REST API,但它需要和其它設施結合來存儲狀態。同時 FaaS 還有一個很好的工作機制,那就是作為事件處理者,用於處理來自存儲、資料庫,甚至 Kubernetes 本身的通知。Kubernetes 是一個讓所有這些設施相互合作的平台。

部署和使用 Fission

Fission 可以用 kubectl create 命令來安裝:詳情可查看項目 README(https://github.com/fission/fission#get-and-run-fission-minikube-or-local-cluster)。

如下是一個如何寫 hello world HTTP 服務的例子:

$ cat > hello.py

def main(context):

print "Hello, world!"

$ fission function create --name hello --env python --code hello.py --route /hello

$ curl http://<fission router>/hello

Hello, world!

Fission 會關心如何將函數載入到容器當中,如何將請求路由過去等等。接下來我們將探討更多的技術細節。

Fission 是怎樣在 Kubernetes 上實現的

最核心的,一個 FaaS 框架必須做好:

  • 將函數轉化為服務

  • 管理這些服務的生命周期

有很多種方法可以達到以上目標,每種方法都需要權衡。框架計算是基於源碼級別,還是 Docker 鏡像級別,又或者是兩者之間(類似buildpacks)?一個函數首次運行時間上限是多少?這些選擇都會影響平台的靈活性、易用性、資源的利用率和消耗,當然還有性能。

打包,源碼和鏡像

我們的目標是想讓 Fission 對新手友好。我們選擇基於源碼級別來計算,所以用戶能避免處理容器鏡像打包、推送鏡像到鏡像中心、管理鏡像中心證書、鏡像版本等問題。

然而,容器鏡像還是最靈活的打包應用的方式,比如,一個純粹的代碼級別介面是不允許用戶打包二進位依賴的。

所以,Fission 選擇了一種混合的方法—-容器鏡像包含函數所需的動態裝載器。這種方法允許大多數用戶純粹從源碼級別來使用 Fission,但需要時也允許他們自定義容器鏡像。

在 Fission 中,這些鏡像被稱作「環境鏡像」,包含了編程語言(比如說 NodeJS 或者 Python) 所需的運行環境,一系列通用的依賴和為函數準備動態載入器。如果這些依賴滿足用戶所寫的函數,鏡像無需重新構建,否則,依賴列表需要修改,鏡像需要重新構建。

這些環境鏡像只是和 Fission 的特定語言相關,它們給框架提供了一個統一的介面。這樣的設計可以讓 Fission 相對容易地擴展到其他語言。

冷啟動性能

Serverless 函數其中一個目標就是函數只在運行時使用 CPU/內存資源。這樣優化了函數的資源消耗,但也帶來了從空閑到啟動的性能損耗(冷啟動損耗)。

冷啟動損耗在很多場景下非常重要。特別是互動式應用的場景——就像用戶等待一個 web 或移動應用響應——幾秒的冷啟動延遲是不能接收的。

為了優化冷啟動延遲,Fission 為每個環境保持著一個運行容器池。當一個函數請求進來之後, Fission 不需要部署一個新容器——它只需要選擇一個已經在運行的容器,將函數拷貝到容器當中,將函數動態載入起來,並將請求路由到這個實例即可。對 NodeJS 和 Python 函數來說,這個過程的損耗差不多是 100 毫秒。

Fissin 是怎樣在 Kuberntes 上工作的

如上圖所示,Fission 被設計為一系列的微服務。Controller 負責追蹤函數、HTTP 路由、事件觸發器和環境鏡像。poolmgr 負責管理空閑的環境容器池、將函數載入到這些容器當中、以及殺死空閑的函數實例。Router 接收 HTTP 請求,並將他們路由到函數實例上,如果需要會向 poolmgr 請求新的實例。

Controller 提供 Fission API,所有其他組件通過關注 controller 來更新。Router 被暴露為 Kubernetes 的服務,可能是 LoadBalancer 類型或 NodePort 類型,依賴於 Kubernetes 集群在哪裡託管。

當 router 獲得請求,它會查找緩存,看是否有一個路由過去的服務。如果沒有,它會查找匹配請求的函數,並且向 poolmgr 請求一個新的實例。poolmgr 有一個空閑 pods 池,它會選擇一個 pod,將函數載入進去(將請求發送到 pod 的容器中),並將 pod 地址返回給 router。Router 將請求代理到這個pod。這個 pod 也會被緩存給隨後的請求,如果空閑了好幾分鐘,那就會被殺掉。

註:目前,Fission 映射一個函數到一個容器;自動擴容到多實例還在計劃當中;還計劃加入重用函數 pods 用以託管多函數,特別是對於那種無需隔離的場景。

Fission 的用法

Bots,Webhooks,REST APIs

Fission 是一個不錯的框架,易於構建小的 REST APIs,實現 webhooks,以及為 Slack 等服務編寫聊天機器人(Chatbots)。

以一個簡單的 REST API 為例,我們製作了一個小的留言板(guestbook)應用,它用函數來完成讀寫,結合 redis 來跟蹤狀態。你可以在 Fission GitHub 倉庫中找到該應用。

這個應用包含兩個訪問終端——其中一個是 GET 終端, 它從 redis 緩存獲取留言板實體,並將它們轉化為 HTML 輸出;另一個是 POST 終端,它向 redis 緩存中添加留言板列表想的新實體。函數所做的就這些而已——不需要管理 Dockerfile,更新 app 只需要簡單地更新 Fission 函數即可。

處理 Kubernetes 事件

Fission 同樣支持基於 Kubernetes watches 來觸發函數。舉個例子,你可以構造一個函數來觀察在特定 namespace 中, 匹配特定 label 的 pod。函數獲取序列化對象,監聽事件,並基於上下文做相應操作(增加/刪除/修改)。

這些事件處理函數可以用來做簡單的監控,比如,無論何時當一個新的服務被加入到集群當中,你就可以發送一個 slack 消息。還有其它更複雜的應用場景,比如寫一個自定義的 controller,來監聽 Kubernetes 的第三方資源。

狀態和路線圖

Fission 當前還是早期的 alpha 版。還沒做好生產使用的準備。我們正在尋找早期的使用者和反饋。

Fission 接下來要做什麼呢?我們在努力使基於 Kubernetes 的 FaaS 更便捷,更容易使用和集成。在接下來的幾個月我們會做這些支持:單元測試、Git 集成、函數監控和日誌聚合。我們同樣在考慮集成其它的事件源。

創建更多的語言環境也在工作當中,當前已經支持 NodeJS、Python、PHP7、.Net、Golang、Ruby。

你也可以在我們的 GitHub issues 和 projects 中查找當前的路線圖。

附錄:

原文作者:Soam Vasani, Software Engineer, Platform9 Systems

編譯: 黃慶兵,網易雲系統開發工程師

以上由網易企業信息化服務提供商,湖南領先網路科技整理髮布。

網易企業服務,是網易憑藉其20年品牌優勢與經驗在企業郵箱的基礎上,為進一步布局企業市場而打造的企業級產品矩陣,致力於提供一站式企業信息化解決方案。湖南領先網路科技是網易企業產品授權經銷商,專業為企業提供網易企業郵箱、網易辦公套件等一站式企業信息化專業解決方案。辦理網易企業郵箱及旗下企業產品相關業務,就找湖南領先網路科技。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦