BaaS、FaaS、Serverless都是什麼餡兒?
小編說:軟體行業是一個飛速發展的行業,不斷推出新技術,以及令人目不暇接的概念和術語。釐清各種概念和術語的含義,對於分析技術發展趨勢,決定是否需要及時入坑很有必要。今天我們就來聊一聊最近被熱烈討論的Serverless,以及與之相關的兩個概念BaaS及FaaS。本文編譯自What’s Serverless?(O’Reilly電子書)作者:Mike Roberts,John Chapin。
國內外的各大雲廠商 Amazon、微軟、Google、IBM、阿里雲、騰訊雲相繼推出Serverless產品,Serverless實際上涵蓋了很多技術,可以分為兩類:BaaS和FaaS。
BaaS
BaaS(Backend as a Service,後端即服務)是指我們不再編寫和/或管理所有服務端元件。與虛擬例項和容器相比,在概念上它更接近SaaS(軟體即服務)。SaaS主要是業務流程的外包——HR、銷售工具,或者從技術端來講,像Github這樣的產品,而BaaS則是要把應用拆分為更小的顆粒,其中一部分完全使用外部產品實現。
BaaS 服務都是領域通用的遠端元件(而不是程式內的庫),可以以 API 的形式使用,深受移動 App 或者單頁Web app開發團隊的歡迎。因為這些團隊通常會使用大量的第三方服務,否則他們就要自己花很多精力做這些事情。我們來看一些例子。
Google Firebase是完全由雲廠商(Google)管理的資料庫,可以直接在移動或者Web應用中使用,而無須經過我們自己的中間層應用伺服器。這解釋了BaaS的一個方面:用服務替我們管理資料元件。
BaaS服務還允許我們倚賴其他人已經實現的應用邏輯。對於這點,認證就是一個很好的例子。很多應用都要自己編寫實現註冊、登入、密碼管理等邏輯的程式碼,而其實對於不同的應用這些程式碼往往大同小異。完全可以把這些重複性的工作提取出來,再做成外部服務,而這正是Auth0和Amazon Cognito等產品的目標。它們能實現全面的認證和使用者管理,開發團隊再也不用自己編寫或者管理實現這些功能的程式碼。
BaaS這個詞是隨著移動應用開發火起來的。事實上,它有時指的是MBaaS(Mobile Backend as a Service)。然而,使用完全託管在外部的產品來開發應用,這個理念並不是移動開發,或者更一般地說,前端開發,所獨有的。比如,我們可以不再管理EC2機器上的MySQL資料庫伺服器,轉而使用Amazon的RDS服務,或者我們可以用Kinesis取代我們自己的Kafka訊息匯流排。其他資料基礎設施服務還有:檔案系統/物件儲存(如Amazon S3)、資料倉儲(如Amazon Redshift),而更面向邏輯的服務,比如語音分析(如Amazon Lex)以及前面提到的認證,也可以直接在服務端元件中使用。這其中有很多服務都可以認為是Serverless,但並非全部都是。
FaaS/Serverless計算
事實上,Serverless 還有一半是 FaaS(Function asa Service,也即函式即服務)。FaaS 是Compute as a Service(計算即服務)的一種形式。事實上,有些人(特別是AWS)說FaaS就是Serverless計算。當然,不可否認,AWS的Lambda是如今被採用得最廣泛的FaaS實現。
FaaS是一種構建和部署服務端軟體的新方式,面向部署單個的函式或者操作。關於Serverless許多時髦的詞兒都來自FaaS。很多人認為Serverless就是FaaS,其實他們是隻知其一不知其二。
我們部署服務端軟體的傳統方式都是這樣開始的:先要有一個主機例項,一般是一個虛擬機器(VM)或者容器(見圖1),然後把應用部署在主機上。如果主機是VM或者容器,那麼我們的應用就是一個作業系統程式。通常我們的應用裡包含各種相關操作的程式碼——比如一個Web服務可能要收回和更新資源。
圖1 傳統服務端軟體的部署
FaaS改變了這種部署模式(見圖2)。我們去掉主機例項和應用程式,僅關注表達應用邏輯的那些操作或者函式。我們把這些函式上傳至由雲廠商提供的FaaS平臺。
圖2 FaaS軟體部署
但是在一個伺服器程式中,函式不是一直處於執行狀態的,它們只會在需要的時候才執行,其他時間都是空閒狀態(見圖3)。我們可以對FaaS平臺進行配置,讓它為每一個操作監聽特定事件。一旦該事件發生,平臺就會例項化Lambda函式,然後再用這個觸發事件來呼叫該函式。
圖3 FaaS函式生命週期
一旦這個函式執行完畢,FaaS平臺就可以隨意銷燬它。或者,平臺將其保留一會兒,直到有另一個事件需要處理。
FaaS本質上是事件驅動的途徑。除了提供一個平臺儲存和執行程式碼,FaaS供應商還會將各種同步和非同步事件源整合起來。比如 HTTP API Gateway 就是一個同步源;而託管的訊息匯流排、物件儲存,或者協調的事件就是非同步源。
2014年秋 Amazon 釋出了 AWS Lambda,經過3年時間,該產品已經逐漸成熟,開始被一些企業採納。有些Lambda函式的使用量非常少,一天就幾次,而也有些公司使用Lambda每天處理數十億事件。截至本文寫作之時,Lambda已經整合了15種以上的不同事件源,可以滿足各種不同應用的需求。
除了大家所熟識的 AWS Lambda 之外,微軟、IBM及Google等大公司,以及一些更小的廠商比如Auth0,也提供商業FaaS。正如各種Computer-as-a-Service平臺(IaaS、PaaS、Container-as-a-Service)一樣,現在也有一些開源FaaS專案,你可以在自己的硬體或者公有云平臺上執行。目前這類私有FaaS還處於混戰時代,並沒有明顯的冒尖者。Galactic Fog、IronFunctions及Fission(使用的是Kubernetes),以及IBM公司自己的OpenWhisk均屬於開源系的FaaS。
Serverless的關鍵
從表面上看,BaaS和FaaS是兩碼事——前者是把應用中的各個部分完全外包出去,後者是一種新的執行程式碼的託管環境。那麼,為什麼要把它們都劃歸為Serverless呢?關鍵在於,它們都不需要你管理自己的伺服器主機或者伺服器程式。一個完全Serverless的app不需要你考慮架構中的任何東西。你的應用邏輯——不管是自己程式設計實現,還是使用第三方服務整合——執行在一個完全彈性的操作環境裡。你的狀態也是以同樣彈性的形式儲存的。
Serverless並不意味著沒有伺服器,而是你不需要操心伺服器相關的事情。
跨越式變革
Serverless是變革。過去十年來,我們已經把應用和環境中很多通用的部分變成了服務。Serverless也有這樣的趨勢——如把主機管理、作業系統管理、資源分配、擴容,甚至是應用邏輯的全部元件都外包出去,把它們都看作某種形式的商品——廠商提供服務,我們掏錢購買。這是雲端計算向縱深發展的一種自然而然的過程。
但是,Serverless給應用架構帶來巨大的變化。直到現在,大多數雲服務並沒有從根本上改變我們設計應用的方式。比如,使用Docker時,把一個小“箱子”放到應用邊上,但是它仍然是一個箱子,而我們的應用也沒有顯著改變。當我們把自己的MySQL例項託管到雲上時,還是要思考需要怎樣的虛擬機器來處理負載,考慮故障轉移問題。
Serverless帶來躍進式的變化。Serverless FaaS開啟的是一種全新的應用架構,完全由事件驅動。更細粒度的部署,需要在 FaaS 元件外面持久化狀態。Serverless BaaS把我們從編寫邏輯元件中解放出來,但是我們必須將應用與雲廠商提供的特定介面與模式整合。
說一千道一萬,Serverless應用如此特別,它長什麼樣呢?有什麼優缺點,適合什麼樣的場景呢?只有自己做一個應用來親身體會一下,才有發言權。
以上內容節選自《Serverless架構:無伺服器單頁應用開發》,點此連結可在博文視點官網檢視此書。
想及時獲得更多精彩文章,可在微信中搜尋“博文視點”或者掃描下方二維碼並關注。
相關文章
- IT行業中,APaaS、SaaS、BaaS、DaaS都是什麼行業
- 為什麼它有典型FaaS能力,卻是非典型FaaS架構?架構
- Azure Functions(一)什麼是 ServerLessFunctionServer
- csdn什麼玩意兒嗎
- make makefile cmake qmake都是什麼,有什麼區別?
- TDD、BDD、ATDD都是什麼、有什麼區別?(下)
- TDD、BDD、ATDD都是什麼、有什麼區別?(上)
- Webpower:雙十一郵件各大商家都是怎麼玩兒的Web
- 看什麼程式語言都是天堂
- C語言中,&和&&都是做什麼的?C語言
- Serverless 架構開發手冊 — “人人都是 Serverless 架構師”先導篇Server架構
- HTML和CSS是什麼玩意兒?HTMLCSS
- 為什麼那麼多的遊戲主角都是“啞巴”?遊戲
- 為什麼說 Serverless 是雲的未來?Server
- 精讀《Serverless 給前端帶來了什麼》Server前端
- 什麼是Serverless無伺服器架構?Server伺服器架構
- Redis16個資料庫都是什麼?Redis資料庫
- JS/TS專案裡的Module都是什麼?JS
- BIOS、UEFI、Boot Loader都是些什麼iOSboot
- Dockerfile中常用配置項的功能都是什麼?Docker
- UI設計和美工都是做什麼的?兩者有什麼區別?UI
- 搞安全開發都是用什麼程式語言?
- Java3大框架的學習都是什麼Java框架
- 十二星座的程式設計師都是什麼樣?程式設計師
- 為什麼程式設計師都是夜貓子程式設計師
- Antlr的+ * ?在yacc中都是什麼樣的模式?模式
- HelloCode:什麼是少兒程式設計程式設計
- 你來講講AQS是什麼吧?都是怎麼用的?AQS
- 什麼是TF簽名,為什麼現在普遍都是用testflight簽名!
- 收益 or 挑戰?Serverless 究竟給前端帶來了什麼Server前端
- iOS 為什麼app都是非同步程式設計iOSAPP非同步程式設計
- 入門必讀:糖果,空投,擼羊毛都是什麼?
- 為什麼遊戲裡的閃避都是用“滾”的?遊戲
- 穀雨資料:北京住別墅的都是什麼人?
- CLR裡的MethodTable,MethodDescChunk,MethodDesc,FixUpPreCode都是什麼意思
- 都是學 AI,為什麼別人薪資比你高?AI
- Laravel 分頁後的欄位返回都是什麼意思?Laravel
- 大資料、人工智慧、機器學習與深度學習都是什麼?有什麼關係?大資料人工智慧機器學習深度學習