如何理解Serverless?
Serverless 概念的誕生由來已久,但至今仍然沒有清楚的定義。這個詞首次出現大概是在 2012 年,雲基礎設施服務提供商 Iron.io 的副總裁 Ken Fromm 在一篇文章中闡述了為什麼他認為 Serverless 是軟體的未來(事實上,Iron.io 自 2012 年以來就支持這種概念和框架)。緊接著,在 2014 年,亞馬遜發布 AWS Lambda,在這之後,Serverless 開始變得流行起來,國內外各大雲廠商都爭相跟進。
2016 年 8 月, martinfowler.com 上的一篇文章對 Serverless 做了詳細闡述。簡單來說,Serverless 主要用來描述兩個互相有重疊的概念:
Serverless 最早用於描述那些大部分或者完全依賴於第三方(雲端)應用或服務來管理伺服器端邏輯和狀態的應用,這些應用通常是富客戶端應用(單頁應用或者移動端 App),他們建立在雲端服務生態之上,包括資料庫(Parse、Firebase)、賬號系統(Auth0、AWS Cognito)等。這些服務最早被稱為 「(Mobile) Backend as a Service」,下文將對此簡稱為 「BaaS」。
Serverless 還可以指代這種情況:應用的一部分服務端邏輯依然由開發者完成,但是不像傳統架構那樣運行在一個無狀態的計算容器中,而是由事件驅動、短時執行(甚至只有一次調用)、完全由第三方管理。對此有一個叫法是 Functions as a service(FaaS)。AWS Lambda 是目前的熱門 FaaS 實現之一。
為了進一步了解 Serverless 的概念,InfoQ 記者對亞馬遜中國研發中心首席架構師蔡超進行了採訪,同時,蔡超也將會在 10 月 17 日舉行的 QCon 全球軟體開發大會上分享相關話題,歡迎關注。
InfoQ:可否用通俗易懂的語言談談什麼是 Serverless?
蔡超:Serverless 還處在一個比較初期的階段,目前也沒有權威和官方的定義。顧名思義,Serverless 就是指應用的開發不再需要考慮伺服器這樣的硬體基礎設施,基於 Serverless 架構的應用主要依賴於第三提供的後端服務(BaaS, Backend as a Service) 和應用邏輯運行容器(FaaS Container,Function as a Service)。
打個形象的比方,假如你想賣一些自己的產品,那你就需要買或者租一個店面。但無論是買的還是租的,你都要做一些基本店面布置和維護工作,比如布置櫃檯、清掃店面,這就好比傳統的應用架構,你需要設計,部署和維護硬體基礎設施。當然現在你也有另外一種選擇,就是在「瘋果盒子」這樣的店面里,直接租一個放你的產品的盒子,委託「瘋果盒子」來銷售你的產品。這就像 Serverless,你利用第三方的服務和設施來實現你的業務。
InfoQ:Serverless 的誕生到底是想解決什麼問題?
蔡超:我想這個問題可以從 Serverless 的主要優勢來看:
降低硬體基礎設施的部署和維護成本。
降低應用擴展(scaling)成本。目前的 Serverless 運行平台如 Amazon AWS,都可以支持動態的自動擴張。
這些無疑都有助於讓開發者專註自身應用的開發,更快地發布他們的應用。Serverless 可以讓開發者不必擔心基礎架構的伸縮性(scalability)是否能支撐未來的業務擴張,同時減少由於訪問量變化而帶來的硬體資源浪費。
InfoQ:Serverless 和微服務之間是什麼關係?
蔡超:微服務和 Serverless 架構都實現了細粒度的部署,維護和伸縮(scaling)。 目前的 Serverless 實現通常會依賴 FaaS,那麼粒度就由 Service 變成了更細粒度的 Function。
InfoQ:Serverless 架構與 FaaS 概念是一回事嗎?FaaS 與 PaaS 又有什麼區別?可以理解 FaaS 是 PaaS 的升級版本嗎?
蔡超:Serverless 和 FaaS 本質上不是一回事。例如,一個簡單的 Serverless 應用可以僅僅依賴於 BaaS(比如 AWS SQS、DynamoDB)。目前,大家一提到 Serverless 就會自然的想到 FaaS,主要是因為 Serverless 這個詞是在 2014 年 AWS Lambda(Amazon 的 FaaS Container)發布以後才開始變得流行開來的。
我認為 FaaS 和 PaaS 關鍵的區別在於 Scaling,PaaS 無法像 FaaS 那樣在很短的時間內啟動或停止一個實例,所以無法實現 FaaS 的按請求動態伸縮,用戶必須提前考慮 PaaS 基礎設施對於訪問量變化的影響。我認為 FaaS 不是 PaaS 的升級,目前看各有特點適用於不同的場合。
InfoQ:要使用 Serverless 架構,是不是就意味著必須上雲?
蔡超:至今 Serverless 沒有十分官方和明確的定義。目前的 Serverless 應用都依賴於第三方提供的後端服務(BaaS)和邏輯運行容器(FaaS Container),所以目前的人們認為的 Serverless 的確是運行在雲上的。
InfoQ:我們應該如何構建 Serverless 架構?有哪些需要注意的點?
蔡超:這個問題其實蠻大的,Amazon 給出了一些 Serverless 架構的模版大家可以參考。和其他技術,尤其是新技術一樣,在實踐中你會遇到不少問題和陷阱,所以值得注意的地方不少,我總結了一些我們的實踐經驗將在 QCon 演講中分享給大家。
這裡我就提一下最重要的一點,就是首先判斷一下 Serverless 架構是否適合於你的應用。例如,如果你的應用是實時性要求很高的,就目前來看是不適合的(關於 AWS BaaS 及 FaaS 的限制你可以參照 AWS 的各服務的官方文檔有關於限制的部分),當然你要考慮因素還應包括開發團隊和成本等。
※落地機器學習前,我們應該思考清楚的幾個問題
※Facebook 如何實現大規模快速發布?
※欲修鍊成架構師,必先……
※瞄準全球頂尖的AI落地案例,AICon來了!
※英特爾軟體開發人員大會報名
TAG:InfoQ |