FaaS介绍
FaaS介紹
???????? 云計算技術的核心是服務化,服務化就需要提供閉環和靈活的服務。而云計算也在持續發展中,從最初的基礎設施服務化(IaaS),平臺服務化(PaaS),軟件服務化(SaaS),陸續演化出數據庫服務化(DBaaS),容器服務化(CaaS)。其實一個更細分的服務化叫做FaaS,FaaS是Functions as a Service的縮寫,可以廣義的理解為功能服務化,也可以解釋為函數服務化。使用FaaS只需要關注業務代碼邏輯,無需關注服務器資源,所以FaaS也跟開發者無需關注服務器Serverless密切相關。可以說FaaS提供了一個更加細分和抽象的服務化能力。
????????
FaaS和PaaS的關系
? ? 要理解FaaS,就必須了解FaaS和PaaS的關系(關于PaaS的前世今生可以參考筆者的另一篇博客http://dockone.io/article/635)。
???????? 在早期的PaaS的技術實現中,比如GAE、SAE,因為當時還沒有像Docker容器這樣的沙盒打包能力,PaaS往往會提供各種語言技術棧,比如Java\PHP等,而開發者通過上傳的代碼的方式進行部署,PaaS會負責代碼構建和服務的生命周期管理。進一步的,PaaS開始允許開發者自定義開發和構建環境,比如像Heroku和CloudFoundry的Buildpack就是定義了代碼的構建和運行邏輯,Buildpack實現了三步功能:
?
- detect:檢查當前代碼是否能支持,比tomcat buildpack發現WEB-INF路徑就認為自己能夠運行它。
- compile:將代碼進行編譯構建,比如將java代碼構建成jar包。
- release:將應用程序啟動,比如運行tomcat的startup.sh。
?
備注:buildpack的詳細說明可以參考https://docs.cloudfoundry.org/buildpacks/
????????
???????? 實際上BuildPack還是比較難解決代碼依賴的問題,而Docker的容器一致性環境和Dockerfile組成完成了強大的沙盒打包能力,為此PaaS平臺紛紛支持Docker容器來解決代碼構建,像Kubernete就可以專注于容器編排和服務生命周期管理,而不用像CloudFoundry那樣要在內部流程和組件提供代碼構建能力,所以Kubernete也被稱為CaaS,因為只關注容器的服務化管理,代碼的構建由Docker或者上層Devops平臺負責。
????????
???????? 所以可以說一開始FaaS是和PaaS融合在一起的,而現在PaaS就更加專注于服務編排和資源管理,而FaaS也開始獨立出來,FaaS逐漸形成以代碼函數為主體的事件驅動架構,使用FaaS的時候可以將函數作為一個線上服務、遠程計算服務,可以通過 API 執行、通過郵件執行、通過Iot 執行,通過隊列執行。
???????? 云計算服務提供商也紛紛提出FaaS,比如AWS Lambda,Google Cloud Functions以及Azure Functions,然后也有更多的FaaS開源框架推出。接下來我們通過介紹AWS Lambda讓讀者更加清楚FaaS的業務形態和使用場景。
?
AWS Lambda
??? Lambda是AWS 2014年推出的計算服務。Lambda是一種FaaS,所以Lambda服務的核心概念是Lambda function(簡稱function,函數)。圍繞function可以定義情景,包括執行環境(語言、內存、超時、?IAM角色)以及這個function要觸發的另一個function。
?????? function上傳之后,開發者可以將其指定到指定的AWS資源(如某個S3 bucket,某個DynamoDB表,某個Kinesis流),然后Lambda就會建立該資源跟你的function之間的關聯。當資源方面發生變動,Lambda就會去創建資源去執行你的function。用于運行function的資源的創建分配和釋放都有Lambda自動來做,開發者完全不需要去干預。
???????? Lambda是一個事件驅動架構,應用由函數(functions,即業務邏輯的載體)+ 數據(data,即跟業務相關的輸入與輸出),以及這兩者之間的交互——即事件(events。常見的事件如增加、變更、刪除等)組成。所以Lambda可以無縫地和其他服務集成,如下:
場景1:Amazon S3 +Lambda進行圖片處理
???????假設有一個照片共享應用程序。用戶在應用程序上傳照片,應用程序將這些用戶照片存儲到?Amazon S3?存中。然后應用程序針對上傳的圖片進行處理,包括圖片壓縮、加水印等等,在這種場景下,通過?Lambda?配合S3,Amazon S3?是Lambda支持的?AWS?事件源之一,可以發布對象創建的事件?并調用您的?Lambda?函數。?Lambda?函數代碼可以從?S3?存儲桶讀取照片對象、進行圖片處理,然后將其保存到S3?。
?
場景2:Amazon APIGateway+Lambda實現API調用
???????通過 Amazon API Gateway,可以根據在 AWS?Lambda?中運行的代碼快速、輕松地創建自定義 API,然后通過 API 調用EC2或者 Lambda。Lambda相比EC2來說是一個即開即用的函數,在沒有調用的時候是不會運行和計費的,并且AWS可以根據請求的大小,自動伸縮Lambda所需的資源,這一切都是開發者無需關心的。
??????
????????
?
?
作者簡介
吳龍輝,致力于云計算PaaS的研究和實踐,《Kubernetes實戰》作者,活躍于CloudFoundry,Docker,Kubernetes等開源社區,貢獻代碼和撰寫技術文檔。?
郵箱:wlh6666@qq.com
總結
- 上一篇: Fluentd初探 简介与安装
- 下一篇: Faas 和无服务器架构