EasyFaaS亮相GOTC | 小而美的函數計算引擎是如何煉成的?

百度雲原生導讀:近日,由開放原子開源基金會與Linux基金會聯合開源中國發起的GOTC全球開源技術峯會在深圳會展中心召開,百度雲原生團隊的高級研發工程師何守芬帶來了《 EasyFaaS:從一個函數計算單機引擎說起》爲主題的演講,引發了與會者的廣泛關注。

此次演講主要分爲三個部分:

1. 爲什麼要開源 EasyFaaS

2.EasyFaaS 的前世今生

3.未來規劃

 

1. 爲什麼要開源 EasyFaaS

 

隨着雲計算技術演進,Serverless 因其在降低運營成本,提升研發效率方面的優勢越來越受到關注。Serverless 技術一般被定義爲 FaaS(函數即服務) + BaaS(後端即服務)。百度於2017年開始進行 Serverless 佈局,發佈了公有云的函數計算產品 CFC,經過3年多的發展,CFC 支撐了公司內網多個業務場景,如小度 Dueros 自定義技能服務,百度小程序等等,同時在私有化領域也展開始露頭腳,在金融等領域完成了落地。

 

爲了推廣Serverless技術,百度雲原生團隊於今年4月份開源了一款單機函數計算引擎:EasyFaaS

 

何爲函數計算?函數計算就是上文中提到的FaaS(Function as a Service),它提供一種基於事件觸發的、高可用的、彈性伸縮的、按需使用、按需付費的無服務器雲端計算能力。 

 

對於開發者而言,無需再關注物理服務器或者容器資源等等的申請擴容等運維工作,只需要使用自己熟悉的編程語言編寫業務代碼邏輯成一個個函數,在函數計算平臺上配置好相應的觸發器即可,比如需要定時執行一個函數,那麼配置好定時任務觸發器就好,函數計算平臺會負責定時觸發執行函數任務。

 

函數計算是事件觸發的,按需加載按需付費,因此當用戶的函數不使用時,資源被其他用戶使用,降低了運營的成本;同時開發者無需關注服務器部署,資源擴容縮容,減少了運維工作;當然研發效率也會極大提升: 函數本身已經是最小的功能粒度,業務將功能拆分成函數會更方便功能迭代。

 

 

2. EasyFaaS 的前世今生

 

2.1 EasyFaaS 的設計初衷

 

據何守芬介紹,EasyFaaS 來源於百度雲原生團隊對 CDN 邊緣計算的一些業務場景探索。在 CDN 節點上,有很多關於在邊緣上基於用戶自定義的一些請求的裁剪,視頻編解碼等這樣需要將算力放到邊緣的需求,非常適合使用函數計算來滿足用戶這樣的需求。

 

團隊之前在做的時候首先想到的是直接將雲上我們已有的函數計算服務部署在邊緣,但在調研過程中發現邊緣計算場景與雲端IDC機房有很大差別,它的集羣環境更加複雜,中心與邊緣節點之間的通信容易受到網絡質量影響,同時公有云上函數計算產品有很多依賴比如ETCD,中心的K8S等服務,中心組件的運維成本比較高,因此團隊想要設計適合邊緣計算場景的函數計算引擎,擁有適配性強,資源佔用少,依賴輕,能是無狀態和自治的,因此就有了 EasyFaaS。

 

EasyFaaS是一款小而美的函數計算引擎,能夠很方便使用它構建自己的函數計算平臺方案,主要優勢包括:

 

  • 降低成本:體現在降低運維成本,資源成本,研發成本上。EasyFaaS支持一鍵式安裝,能夠使用Docker/Docker compose/K8S 進行部署;EasyFaaS的核心繫統模塊只有三個,佔用資源少,同時EasyFaaS 的代碼都是模塊化的,易插拔,易於開發者進行二次開發。

 

  • 提升效能:EasyFaaS是核心函數計算功能集,用戶能夠很容易使用它構建 Serverless 解決方案;熱啓動性能能在1ms左右;輕量體現依賴比較少,系統資源佔用少;EasyFaaS 也是標準化的,積極擁抱開源遵循社區標準。

 

2.2 EasyFaaS 的功能及架構優勢

 

在產品功能方面能夠支持基本的函數信息管理,代碼包管理,版本管理等;請求與資源調度方面支將請求調度到函數實例,併發控制,錯誤重試等,當然底層還依賴容器與容器技術,如運行時動態掛載,多語言運行時支持等等。

 

 

EasyFaaS 的核心組件都部署在 K8S 最小資源單位 pod 中,外側是一個函數元信息和代碼的管理服務。上面的部分是函數調用請求端,可以是直接發起的請求,也可以是雲端各種觸發器發起的請求。

 

再來看一下 EasyFaaS 的核心組件,包含2個常駐工作容器,首先是 controller 容器,負責流量轉發,併發控制等,其次是 Funclet 容器,主要負責二層工作容器池的維護,包括 warmup 工作容器及回收工作容器;以及 runner-runtime 的容器,它作爲一個 init 容器,負責準備工作容器的 rootfs 及多語言運行時 runtime 的準備工作,準備工作完成後該容器就退出。

 

EasyFaaS 的核心技術,主要體現爲:高內聚,高彈性,高性能

 

 

高內聚體現在了上文所述的設計要點,不再多贅述;高彈性是指能夠動態調整函數實例的容量,動態掛載運行時和代碼等相關資源;高性能主要使用了多層緩存機制,預先啓動資源池,來降低冷啓動的延時問題。

 

2.3 基於 EasyFaaS 搭建自己的函數計算平臺

 

 

如何使用EasyFaaS搭建函數計算平臺?上圖展示一個基於 K8S 集羣環境搭建函數計算平臺的方案。

 

首先函數計算服務本身可以通過使用K8S deployment 這種工作負載進行多副本部署,構建函數實例資源池,通過使用 K8S service 在集羣內暴露服務;func-registry提供函數元信息及代碼的管理,可以替換成更合適的或者已有的存儲;當然函數觸發服務除了常用的觸發器,還可以開發自定義的觸發器,滿足更多樣的觸發場景。

 

用戶也可以基於現有函數計算服務之上搭建工作流服務,支持函數編排;作爲平臺服務本身,可以藉助開源已有的解決方案構建平臺的公共服務,如日誌使用經典ELK,監控使用Peomethus等等。

 

最上面這裏是客戶端即控制面數據面的入口,包含控制檯,接下來是Gateway,用來做路由等,這裏可以用Nginx ingress等等,這樣就搭建好了一個函數計算平臺服務。  

 

會上,何守芬還介紹了兩個在金融行業使用這套函數計算平臺的典型應用場景。

 

一是後端服務SSR的一個場景,解決的痛點是能夠提升開發者效率。

 

 

第二個是批量任務的場景,解決的痛點是能夠高效彈性地使用資源。

 

 

3. EasyFaaS 的後續規劃

 

 

未來 EasyFaaS 會引入一個 gateway ,提供更全的資源池視角,做更全面的資源調度和資源控制;開源一個更高效更快更符合函數觸發場景的自動擴縮容組件。

在基於通用雲端事件規範的基礎之上開源更豐富的通用觸發器,滿足更多樣的觸發場景;基於通用函數編排規範支持函數工作流,滿足函數編排需求等等。

歡迎廣大開發者一起加入,一起打磨 EasyFaaS。

點擊進入瞭解更多技術資訊~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章