6 岁!是时候重新认识下 Serverless 了
來源 | Serverless 公眾號
背景
Serverless 概念從 2012 年開始提出,真正推出相關(guān)云產(chǎn)品是 2014 年 AWS 推出 Lambda。如果我們將 Serverless 比作一個嬰兒,那么它已經(jīng) 6 歲了。
雖然業(yè)界對 Serverless 尚無一致認可的定義,但是我相信大部分開發(fā)者在聽到 Serverless 時,會聯(lián)想到 Lambda,并且冒出“函數(shù)”、“按需(調(diào)用次數(shù))收費”、“事件驅(qū)動”等關(guān)鍵詞。確實當年剛剛誕生的 Serverless 就像下面可愛的“紫薯人”,紫色充滿神秘感(當年剛推出的時候絕對是黑科技),讓人印象深刻。
剛剛出生的 Serverless
AWS 的巨大影響力以及本身攜帶的一身黑科技,確實讓人記住了 Serverless,但是也正因為誕生的時候太印象深刻,以至于現(xiàn)在提到已經(jīng) 6 歲的 Serverless,很多人的印象還是停留在Serverless=Lambda或者Serverless=FC(Function Compute),這不得不說是某種遺憾。
現(xiàn)在的 Serverless
今天企業(yè)都在全面數(shù)字化轉(zhuǎn)型,整個技術(shù)架構(gòu)體系都渴望依托云原生來獲取巨大技術(shù)紅利,Serverless 從誕生的第一天起就是云原生的,所以我們有必要再系統(tǒng)地認識一下 Serverless 的理念以及這些年誕生的相關(guān)產(chǎn)品,相信不管你是前端、后端、架構(gòu)師、SRE、CTO,都會有所收獲,并且在未來能更好地發(fā)揮 Serverless 的技術(shù)價值助力商業(yè)成功。
定義
業(yè)界一直在嘗試定義 Serverless,比如 CNCF 給出的定義是:NoOps 和 Pay as You Run,還有伯克利說 Serverless = FaaS + BaaS。但是我想說,Serverless 其實無需再去定義,他本身就已經(jīng)非常清晰明確:“Server + less”,他是一個理念,核心思想就是你不再需要關(guān)注 Server,作為對比的是 IaaS 時代,購買服務(wù)器,安裝各種工具,再在上面開發(fā)自己的業(yè)務(wù)。
Server 不會消失,而是讓一般的開發(fā)者不需要再關(guān)注 Server,這意味著【智能彈性】、【快速交付】、【更低成本】,這也是 Serverless 相關(guān)產(chǎn)品的典型特性。
所以沒必要再去給 Serverless 做什么定義,他本身已經(jīng)描述得很清晰。我們拋開概念,看看在各個具體技術(shù)領(lǐng)域的產(chǎn)品,相信你會有更直觀的認識。
PaaS 在 Serverless 時代的重生
PaaS 本身的概念挺大,廣義的說它處于 IaaS 和 SaaS 之間,我們先從一個具體的產(chǎn)品說起:GAE(Google App Engine)。2006 年 AWS 推出了 IaaS 的云計算,Google 認為云計算不應(yīng)該是 IaaS 這樣的底層形態(tài),所以在 2008 年推出了自己的云計算代表產(chǎn)品 GAE(關(guān)于這里的發(fā)展緣由,可以參考張磊的這篇文章:容器十年 ,一部軟件交付編年史)。
初推出的 GAE,也像 Lambda,讓人眼前一亮,但是很快開發(fā)者就發(fā)現(xiàn)它的限制非常多,用今天的話說就是典型的“我不要你覺得,我要我覺得”,最后的結(jié)果就是大家都紛紛回到了 IaaS 的懷抱。
到后來的 PaaS 產(chǎn)品比如 Cloud Foundry,這類 PaaS 產(chǎn)品相對更實際一些,底層 IaaS 還是云廠商提供,上層提供一套應(yīng)用管理生態(tài),背后的思想還是不希望開發(fā)者通過 IaaS 這么底層的方式去使用云計算,而是從 PaaS 開始,不過它也不是 Serverless 化的,你還是要考慮服務(wù)器的維護、更新、擴展和容量規(guī)劃等等。
SAE(Serverless App Engine)
到了現(xiàn)在,隨著容器技術(shù)的成熟,以及 Serverless 理念的進一步發(fā)展,PaaS 和 Serverless 理念也開始融合,這樣的產(chǎn)品既有 PaaS 為代表的【快速交付】,又有 Serverless 的特點【智能彈性】、【更低成本】,典型的產(chǎn)品代表就是阿里云在 2019 年推出的產(chǎn)品:SAE(Serverless App Engine)。
**首先,它是一個 PaaS,再具體一點說,是一個應(yīng)用 PaaS。**這意味著大部分開發(fā)者使用起來都會非常自然,因為里面的概念你會非常熟悉,比如應(yīng)用發(fā)布、重啟、灰度、環(huán)境變量、配置管理等等。
**同時,它也是 Serverless 化的。**這意味著你不必再關(guān)心服務(wù)器,不用再申請機器,維護服務(wù)器,裝一堆工具,而是按需使用,按分鐘計費,結(jié)合強大的彈性能力(定時彈性、指標彈性)實現(xiàn)極致成本。
最后,得益于 Docker 為代表的容器技術(shù)的發(fā)展,SAE 解決了經(jīng)典 PaaS 的突出問題(各種限制和強綁定),依托于容器鏡像,在上面可以跑任意的語言的應(yīng)用。
看到這里,我相信大部分開發(fā)者對于 PaaS 和 Serverless 結(jié)合的產(chǎn)品已經(jīng)有了一個輪廓,在中國云原生用戶調(diào)研報告中(2020 年) ,這種形態(tài)的 Serverless 產(chǎn)品開始被越來越多的開發(fā)者采用。
在這個基礎(chǔ)上,還有另外一個話題值得再討論一下,那就是微服務(wù)和 Serverless。
微服務(wù)和 Serverless
現(xiàn)在業(yè)界關(guān)于微服務(wù)和 Serverless,會有部分這樣的認知:認為當前云計算典型代表技術(shù)是微服務(wù),下一代的代表技術(shù)是 Serverless,這會讓你覺得 Serverless 比微服務(wù)要先進,甚至?xí)X得未來有了 Serverless 就沒有微服務(wù)了,類似下面這張圖:
個人認為產(chǎn)生這一認知還是因為將 Serverless 的理念具象化到函數(shù)計算(FaaS)這樣的產(chǎn)品。現(xiàn)在我們聊到微服務(wù),會想到背后的技術(shù)框架,比如 Spring Cloud、Dubbo,但是其實微服務(wù)這個詞已經(jīng)遠遠超出了純技術(shù)框架的范疇,它背后也有核心的支撐思想,包括:
微服務(wù)雖然一定程度上增加了技術(shù)復(fù)雜度,但是在一定規(guī)模下它會降低系統(tǒng)復(fù)雜度和組織復(fù)雜度。
現(xiàn)代業(yè)務(wù)系統(tǒng)越來越復(fù)雜,很多業(yè)務(wù)系統(tǒng)會基于領(lǐng)域驅(qū)動設(shè)計(DDD),微服務(wù)其實是 DDD 背后的支撐技術(shù)。
單體、微服務(wù)和復(fù)雜度
所以如果到了 Serverless 時代就沒法用微服務(wù),我相信很多開發(fā)者會覺得不知所措,或者會“抵觸未來”,因為他們會覺得有人給我描繪了一個未來,但是完全不知道怎么走過去。
拋開各種具體的技術(shù)實現(xiàn),回到背后的理念,Serverless 代表的是一種無需關(guān)注服務(wù)器,降低使用云計算服務(wù)的理念,所以它和微服務(wù)其實不沖突,完全可以共存。在阿里云的 SAE 中,集成了微服務(wù)的能力(依托于阿里云產(chǎn)品 MSE),這意味著:
部署在 SAE 這類 Serverless 平臺上的應(yīng)用,完全可以繼續(xù)使用微服務(wù)開發(fā),不需要經(jīng)過任何改造。
在 SAE 上甚至提供了很多微服務(wù)能力增強,包括了注冊中心托管、服務(wù)治理等等,進一步降低開發(fā)者使用微服務(wù)的門檻和負擔。
所以在 Serverless 類的 PaaS 產(chǎn)品上,Serverless 和微服務(wù)不再是對立的,開發(fā)者完全可以繼續(xù)使用微服務(wù)技術(shù)開發(fā),同時也可以享受 Serverless 理念所帶來的【智能彈性】、【更低成本】等。
函數(shù)計算 FC
講完 Serverless Application(應(yīng)用),我們再來看看 Serverless Function(函數(shù)),FC 作為”根正苗紅“的 Serverless 產(chǎn)品,相信大家都對它不陌生,經(jīng)過這么些年的發(fā)展,它已經(jīng)在前端 Serverless、多媒體處理、AI、事件類的場景(云產(chǎn)品事件、數(shù)據(jù)庫變更事件等等)、物聯(lián)網(wǎng)消息等場景得到了很好地應(yīng)用,甚至也有越來越多的公司將業(yè)務(wù)完全構(gòu)建在 FC 之上,比如:世紀聯(lián)華的 Serverless 實踐。
另外針對早期的很多技術(shù)限制,現(xiàn)在也已經(jīng)有了解決方案:
早期大多數(shù)的函數(shù)計算產(chǎn)品都對磁盤大小、代碼包大小、運行時長、內(nèi)存規(guī)格等有限制,阿里云函數(shù)計算推出了性能實例基本解決了這些限制。
針對冷啟動問題,可以使用預(yù)留性能實例解決。
下面我們就具體介紹部分使用 FC 的典型的場景。
前端 Serverless
前端經(jīng)過了 Ajax、Nodejs、React 等技術(shù)迭代后,已經(jīng)形成了相對成熟的技術(shù)體系,特別是 Nodejs,使前端和服務(wù)端產(chǎn)生了聯(lián)系。
前端和后端的分工發(fā)揮了各個的優(yōu)點,但是在協(xié)作的過程中也一直存在一個問題,后端同學(xué)通常是面向領(lǐng)域和服務(wù)提供接口,但是前端是面向用戶具體的數(shù)據(jù)接口,有時候一個簡單的需求會因為兩邊的定義和聯(lián)調(diào)搞半天。所以也誕生了 BFF(Backends For Frontends)這樣一層,誰使用誰開發(fā),專門解決領(lǐng)域模型 - UI 模型的轉(zhuǎn)換。
理想很美好,現(xiàn)實也很骨感,如果前端同學(xué)去做 BFF 這一層,發(fā)現(xiàn)要學(xué)習(xí)后端的 DevOps、高可用、容量規(guī)劃等等,這些其實是前端同學(xué)不想關(guān)心的,這種訴求在 Serverless 時代得到了很好地解決,由 BFF 變?yōu)榱?SFF(Serverless For Frontend),讓前端同學(xué)只要寫幾個 Function,其他都交給 Serverless 平臺。
類似的還有服務(wù)端渲染 SSR(Server Side Rendering),本來前后端分工后,后端只需要寫接口,前端負責渲染,但是在 SEO 友好以及快速首屏渲染等需求背景下,有時候會用到服務(wù)端渲染的方案,同樣,使用 Serverless 前端同學(xué)又可以愉快地玩耍了。
其實現(xiàn)在很多偏前端產(chǎn)品里面(比如各類小程序以及語雀等產(chǎn)品),前端同學(xué)會全棧完成整體開發(fā),越來越多地會用到 Serverless 相關(guān)技術(shù)。
當然,要用好 Serverless,需要完整的生態(tài),包括相關(guān)的框架、運行時、工具鏈、配置規(guī)范等等,這方面可以參考阿里 Midway。
多媒體處理
現(xiàn)在在線教育、直播、短視頻等行業(yè)都蓬勃發(fā)展,也催生了很多視頻需求,包括視頻的處理,例如視頻剪輯、切分、組合、轉(zhuǎn)碼、分辨率調(diào)整、客戶端適配等等,典型場景的比如:
-
每周五定期產(chǎn)生幾百個 4G 以上的 1080P 大視頻, 但是希望當天幾個小時后全部處理完;
-
甚至您有更高級的自定義處理需求,比如視頻轉(zhuǎn)碼完成后,需要記錄轉(zhuǎn)碼詳情到數(shù)據(jù)庫,或者在轉(zhuǎn)碼完成后,自動將熱度很高的視頻預(yù)熱到 CDN 上,從而緩解源站壓力。
這些訴求在 Serverfull 的場景下,你可能需要搭建一套復(fù)雜的系統(tǒng)來支撐,但是如果使用 FC,那么你會發(fā)現(xiàn)一切都變得那么簡單。
AI Serverless
AI Model Serving 是函數(shù)計算一個比較典型的應(yīng)用場景。數(shù)據(jù)科學(xué)家訓(xùn)練好模型以后往往需要找軟件工程師把模型變成系統(tǒng)或者服務(wù),通常把這個過程稱之為 Model Serving。函數(shù)計算無需運維和彈性伸縮的特性,正好符合數(shù)據(jù)科學(xué)家對高可用分布式系統(tǒng)的訴求。
Serverless 容器 - ASK
Kubernetes 作為生產(chǎn)級別的容器編排系統(tǒng),現(xiàn)在已經(jīng)成為了容器編排的事實標準,被廣泛用于自動部署,擴展和管理容器化應(yīng)用。它也有相應(yīng)的 Serverless Kubernetes 產(chǎn)品,比如阿里云的 ASK、AWS Fargate 等。在這類產(chǎn)品中,你無需購買節(jié)點即可直接部署容器應(yīng)用,無需對集群進行節(jié)點維護和容量規(guī)劃,并且根據(jù)應(yīng)用配置的 CPU 和內(nèi)存資源量進行按需付費。ASK 集群提供完善的 Kubernetes 兼容能力,同時降低了 Kubernetes 使用門檻,讓您更專注于應(yīng)用程序,而不是管理底層基礎(chǔ)設(shè)施。
如果您是 K8S 的重度用戶,那么使用 Serverless Kubernetes 是一個不錯的選擇,典型客戶場景包括:
- 微博:在 30s 之內(nèi)可以極速擴容 500 個應(yīng)用實例,應(yīng)對跨年活動和熱點事件;
- 曠視科技:基于 ASK 開發(fā)智能、免運維的 AI 應(yīng)用平臺;
- 趣頭條:基于 ASK 構(gòu)建 Serverless 大數(shù)據(jù)計算平臺。
BaaS
上面提到的都是“計算類” Serverless 產(chǎn)品,FC、SAE、ASK 等,但是我們都知道,開發(fā)過程中不可能只有計算邏輯,還有很多其他依賴,比如存儲、中間件等。**BaaS(Backend-as-a-Service,后端即服務(wù))**類產(chǎn)品,提供基于 API 的服務(wù),這些 API 一般都是按需使用、免運維、自動擴縮容的,所以他們也是 Serverless 的。
典型的比如阿里云的 OSS,具有與平臺無關(guān)的 RESTful API 接口,可以在任何應(yīng)用、任何時間、任何地點存儲和訪問任意類型的數(shù)據(jù)。
值得一提還有開發(fā)企業(yè)級應(yīng)用時大家非常熟悉的中間件,以阿里為例當前也在進行 4.0 技術(shù)架構(gòu)升級,全面 BaaS 化,統(tǒng)一運維、交付、計費、支持模式,開箱即用,產(chǎn)品化程度持續(xù)提升。
總結(jié)
總結(jié)一下,上面提到的一系列 Serverless 的產(chǎn)品,覆蓋了前端、后端、容器、BaaS 各個領(lǐng)域,包括很多上面沒有提到的(比如 CDN)其實也算是 Serverless 的產(chǎn)品,所以我不認同伯克利的 Serverless = BaaS + FaaS 的觀點,但是我非常認可他的另一個觀點:“Serverless will dominate cloud computing”。
Serverless 首先是一個理念,不是某一種具體的技術(shù),當未來某一天,99% 的云產(chǎn)品都有 Serverless 化的形態(tài)時,云計算也就 Serverless 化了,這種變化我認為不是非黑即白的,不是推翻重來這種革命性的,而是全面地降低用戶使用云的成本,全面地提升開發(fā)者的研發(fā)效率。
作者簡介:陳濤,10 年軟件開發(fā)經(jīng)驗,4 年創(chuàng)業(yè)經(jīng)歷,曾在淘寶、滴滴任職,關(guān)注云原生、微服務(wù)、Serverless 等技術(shù)領(lǐng)域,積累了在云計算、電商、從 0 到 1 創(chuàng)業(yè)等方面的研發(fā)、管理和業(yè)務(wù)經(jīng)驗。目前就職阿里云,在云原生應(yīng)用平臺從事 Serverless 應(yīng)用引擎(SAE)的設(shè)計和研發(fā)。
總結(jié)
以上是生活随笔為你收集整理的6 岁!是时候重新认识下 Serverless 了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Forrester 最新报告:阿里云稳居
- 下一篇: 阿里云 OAM 入选「2020中国技术力