02 | 原理:通過一個案例,理解FaaS的運行邏輯

本文僅作爲學習記錄,非商業用途,侵刪,如需轉載需作者同意。

Faas的實際使用可以去阿里雲上找nodejs運行示例-函數計算去嘗試下。

一、Faas是怎麼運行的

serverless是使用技術手段幫我們屏蔽了複雜性,和其他的雲技術沒有什麼差別。

傳統部署一個應用的流程如下圖:
在這裏插入圖片描述

serverless是對服務端運維的極端抽象,HTTP請求的全鏈路並沒有質的變化,只是簡化了流程。

之前需要在服務端構建代碼的運行環境,Faas應用將這一步抽象爲函數服務。
之前需要配置負載均衡和反向代理,Faas應用這一步抽象爲HTTP函數觸發器。
之前需要構建代碼和啓動服務,Faas將這步抽象爲函數代碼。

在這裏插入圖片描述
Faas應用用戶訪問順序如下:
1、用戶第一次訪問到HTTP函數觸發器的時候,函數觸發器就會hold住用戶的HTTP請求,併產生一個HTTP Request事件通知函數服務。
2、函數服務會檢查有沒有空閒的函數實例,如果沒有就去倉庫中拉取代碼,初始化並啓動一個函數實例,執行這個函數,傳入這個HTTP Request對象作爲函數的參數,執行函數。
3、函數執行的結果 HTTP Response返回給函數觸發器,函數觸發器再將結果返回給等待的客戶端。

阿里雲的演示中,一個Faas應用,默認創建了3個服務:

  • 第一個"GreetingServiceGreetingFunctionhttpTrigger"函數觸發器:函數觸發器是所有請求的入口。當請求發生時,它會觸發事件通知函數服務,等函數執行返回後,將結果返回給等待的請求。
  • 第二個"GreetingService"函數服務:當收到函數觸發器的事件後,會查看當前有無空閒的函數實例,如果有則調用函數實例處理,如果沒有則創建函數實例,然後調用函數實例去處理
  • 第三個"GreetingServiceGreetingFunction"函數代碼:在第一次實例化函數時就會拉取代碼,構建函數實例。

Faas與應用託管平臺Paas對比,最大的區別在於資源利用率。
Faas最少可以縮容到0個實例,Paas最少維持1臺實例。

阿里雲演示的例子中,用戶第一次請求之前,實際的服務器佔用爲0。
因爲第一次請求過來是,函數才被HTTP事件觸發,啓動函數實例。
Faas上沒有請求就可以不佔用資源,Paas上的應用啓動一般需要幾十秒,爲了用戶體驗一般最少維持一個實例運行。

主要是啓動時間縮短了很多,可以這樣做。

就像聲控開關,在有人的時候能快的亮起來,就像感應手龍頭,能很快的感應出水。

二、Faas爲什麼可以極速啓動

PC上有個冷啓動的概念:關閉電源後,再啓動電腦仍然需要加載BIOS表,從硬件驅動開始啓動,因此啓動速度比較慢。

Faas是指從調用函數開始到函數實例準備完成的整個過程。
冷啓動我們關注的是啓動時間,冷啓動的平均耗時基本在100~700ms之間Nodejs是冷啓動方面速度最快的。

在這裏插入圖片描述

冷啓動中耗時比較長的是下載代碼,一旦更新代碼,雲廠商就會在後臺下載代碼,調度資源,構建鏡像等。

當我們開始訪問的時候,雲廠商就會從鏡像啓動容器,這個也叫預熱冷啓動。
所以如果對時間比較敏感的話:可以通過預熱冷啓動或者預熱實例策略,加速或者繞過冷啓動時間。

三、爲什麼Faas可以極速啓動,Paas不行?

Paas在初始化環境的時候,有大量依賴和多語言需要兼容,構建時間也會比較長。
Faas設計之初就犧牲了用戶的可控性和應用場景,簡化代碼模型,通過分層結構進一步提高資源利用率。

1、Faas是怎麼分層的

在這裏插入圖片描述

至少3層結構:容器、運行時Runtime、具體函數代碼

運行時Runtime:就是函數執行時的上下文context。Runtime的信息包括代碼運行的語言和版本,例如:Nodejs v10,Python3.6;可調用對象,例如aliyun SDK;系統信息,例如環境變量等。

容器層相當於是Windows操作系統;Runtime相當於暴風影音;代碼相當於是放在U盤中的電影。

所以雲廠商負責的就是容器和Runtime準備階段,開發者負責的則是函數執行階段,啓動以後會維持一段時間,當一段時間沒有用戶請求則會銷燬這個實例。

在這裏插入圖片描述

總結:
1、純Faas應用的調用鏈路是函數觸發器、函數服務、函數代碼三部分組成。分別替代了傳統服務端運維的負載均衡&反向代理,服務器&應用運行環境,應用代碼部署。
2、與Paas比,Faas可以縮容到0,在事件到來時極速啓動。
3、Faas設計上犧牲了用戶可控性和應用場景,簡化代碼模型。分層結構進一步提高資源利用率。

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