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架構:無服務器單頁應用開發》,點此鏈接可在博文視點官網查看此書。
想及時獲得更多精彩文章,可在微信中搜索“博文視點”或者掃描下方二維碼並關注。
最後更新:2017-10-16 10:03:19
上一篇:
web前端學習——零基礎web前端學習路線
下一篇:
Gartner 2018 十大IT預測:未來5年IT專業人才需求縮減到75%
Storm專題一、Storm DRPC 分布式計算
香港服務器租用現狀
js字符串函數
持續創新和改進,為用戶創造最大價值,阿裏雲數加MaxCompute獲得C-Tech Awards 2016年度“最具技術創新獎”
《時代周刊》文章: 那些泄密的技術宅
獨家 | 手把手教隨機森林
WinAPI: SetWindowPos - 改變窗口的位置與狀態
J2EE部署項目至Tomcat報錯:Unable to read TLD "META-INF/c.tld"
阿裏雲全球第二批MVP 祁寧專訪 - 社區的成長才是我們的價值所在
被我誤解的max_connect_errors