從函數(shù)計算到 Serverless 架構(gòu)
作者 | 秋雨陳(本文選自“Serverless 函數(shù)計算征集令”征文)
前言
從思想到產(chǎn)品升級
Serverless 精神的更迭
最初,Serverless 架構(gòu)指的是 FaaS 與 BaaS 的結(jié)合,認為開發(fā)者可以不用花費更多的精力在服務(wù)器等底層資源上,而是可以將精力放在更具價值的業(yè)務(wù)邏輯之上。這也是文章《Serverless Architectures》中所強調(diào)的觀點。
但隨著時間發(fā)展,大家發(fā)現(xiàn),對于 Serverless 架構(gòu)這樣的描述過于單薄,沒有凸顯出 Serverless 架構(gòu)為業(yè)務(wù)帶來的技術(shù)紅利,也沒能表現(xiàn)出 Serverless 所交付的心智。
所以 UC 伯克利在《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中對 Serverless 架構(gòu)進一步的定義:對于被認為是 Serverless 架構(gòu)的服務(wù)/產(chǎn)品還需要具備按量付費和彈性伸縮的特點,并認為, long-run 的運行模式并不符合 Serverless 精神。
云計算相關(guān)技術(shù)的發(fā)展,往往有一個特點:云廠商的驅(qū)動性非常強,因為云廠商往往會最先感知到普遍性的用戶需求,并且有足夠的數(shù)據(jù)支撐其做出合理的判斷與創(chuàng)新。所以 Serverless 架構(gòu)的創(chuàng)新很多時候也都是由廠商驅(qū)動的;在事件驅(qū)動與函數(shù)計算的發(fā)展下,廠商逐漸發(fā)現(xiàn)函數(shù)計算的模式 “短時運行” 沒有辦法滿足更多用戶的訴求,此時一種 long-run 模式的 Serverless 計算服務(wù)就逐漸的被孵化出來了。至此,Serverless 架構(gòu)也從最初的單薄,逐漸完善,通過 “自我革新”,完成了新一輪業(yè)務(wù)能力的自我豐富與產(chǎn)品功能的自我完善。
隨著 long-run 模式逐漸被開發(fā)者們認可,傳統(tǒng) Serverless 架構(gòu)的定義有點 “格格不入”:既不能在模式上覆蓋最新的 Serverless 產(chǎn)品緯度,也不能在形態(tài)上描述清 Serverless 的特性。
此時 Serverless 架構(gòu)定的義,就自然而然的得以升級,例如:
Serverless 應(yīng)該是 FaaS + BaaS + CaaS,
Serverless 應(yīng)該是 FaaS + BaaS + Others,
Serverless 就是 Server + Less,即服務(wù)端免運維/低運維的形式就是真正意義上的 Serverless 架構(gòu)。
從函數(shù)到更 Serverless
通過阿里云官網(wǎng),不難發(fā)現(xiàn)其 Serverless 產(chǎn)品形態(tài)還是相對完整的:
計算平臺:從函數(shù)計算到容器鏡像再到微服務(wù)形態(tài); 基礎(chǔ)產(chǎn)品/服務(wù):存儲產(chǎn)品、數(shù)據(jù)庫等產(chǎn)品的 Serverless 形態(tài);
產(chǎn)品與功能體驗
阿里云函數(shù)計算
服務(wù)與函數(shù)
函數(shù)與服務(wù)的功能如下圖所示:
函數(shù)計算產(chǎn)品形態(tài)為兩層結(jié)構(gòu):服務(wù)、函數(shù)。
服務(wù):一種邏輯關(guān)系,表示的是一系列函數(shù)以及部分公共配置的集合;即帶有特定屬性的函數(shù)集合; 函數(shù):一種確切的資源或業(yè)務(wù)邏輯;由代碼,觸發(fā)器以及相關(guān)的配置組成;
業(yè)務(wù)劃分更清晰:可以讓開發(fā)者更清晰的將同類型業(yè)務(wù)/功能劃分在一個服務(wù)下,不僅讓頁面更清晰,也會讓管理(包括資源分配,權(quán)限劃分,賬單等)更便利; 讓環(huán)境劃分更簡單:通過服務(wù)將業(yè)務(wù)進行歸類之后,有助于基于服務(wù)進行環(huán)境的劃分。通過服務(wù)進行不同環(huán)境的劃分,相比針對函數(shù)進行環(huán)境的劃分會更便利和更容易被接受;




任務(wù)
除服務(wù)與函數(shù),函數(shù)計算還有一個模塊:任務(wù)。
在任務(wù)頁面的描述匯總,不難看出它實際上是函數(shù)的一種變形:
通過創(chuàng)建任務(wù)的過程,以及創(chuàng)建任務(wù)結(jié)束頁面:
同樣可以驗證剛剛的想法:任務(wù)的本質(zhì)依舊是函數(shù)計算,只不過:
弱化了服務(wù)的概念,可以通過簡單配置,完成任務(wù)創(chuàng)建; 本質(zhì)是函數(shù)異步任務(wù)的另一種表達,將異步任務(wù)抽象成一個可以讓開發(fā)者快速的創(chuàng)建和發(fā)布任務(wù)的功能;
由于任務(wù)往往是異步的,所以從上游經(jīng)過函數(shù)的處理再傳遞到下游,整個鏈路的串聯(lián)是非常重要的,這也是對云廠商服務(wù)一致性與可觀測性的一種考驗。
通過對任務(wù)的體驗,整體感覺是比較順暢的,通過抽象出來的產(chǎn)品化能力,讓任務(wù)的創(chuàng)建流程和步驟更加精簡,可以幫助 “特定的開發(fā)者快速使用”;但是也會對一些新手用戶產(chǎn)生困擾:應(yīng)用、任務(wù)、服務(wù)及函數(shù)是什么關(guān)系?任務(wù)和函數(shù)有什么區(qū)別?
應(yīng)用
與任務(wù)相同的是,應(yīng)用也是建立在服務(wù)與函數(shù)之上的;與任務(wù)不同的是,應(yīng)用不僅僅是函數(shù)計算??梢哉J為,應(yīng)用是函數(shù)計算中,聯(lián)動其他產(chǎn)品的入口或者 Serverless 應(yīng)用的管理平臺。
通過應(yīng)用創(chuàng)建頁面,可以快速體驗 Serverless 應(yīng)用:
可以看到,應(yīng)用與任務(wù),服務(wù)及函數(shù)的很大區(qū)別在于,應(yīng)用是場景化非常明確的一個模塊,所有的創(chuàng)建過程和導(dǎo)入的過程均是在建設(shè) “場景化” 的心智。
通過應(yīng)用創(chuàng)建頁面,可以看到目前已經(jīng)有框架、音視頻處理等多個場景的應(yīng)用,以其中的圖片壓縮為例進行體驗:
可以通過引導(dǎo)快速完成應(yīng)用創(chuàng)建,整個流程最為精簡。創(chuàng)建完成之后,可以得到最終的體驗頁面:
在體驗頁面中,可以體驗當(dāng)前應(yīng)用的功能。
應(yīng)用的出現(xiàn),無疑是 Serverless 架構(gòu)多產(chǎn)品逐漸 “一起戰(zhàn)斗” 的表現(xiàn),即開發(fā)者對應(yīng)用進行管理,而不再是對代碼和資源進行分別的管理。通過應(yīng)用模塊,開發(fā)者可以
1.迅速體驗 Serverless 架構(gòu);便于學(xué)習(xí)和調(diào)研 Serverless 架構(gòu);
2.可以進行資源聯(lián)動,并以應(yīng)用緯度對資源進行管理,對權(quán)限進行劃分,對業(yè)務(wù)進行運維;
值得注意的是,應(yīng)用功能默認有一套標(biāo)準(zhǔn)的 GitOps 配置,通過基于代碼倉庫進行應(yīng)用部署之后可以發(fā)現(xiàn)應(yīng)用本身是基于 Serverless Devs 開發(fā)者工具實現(xiàn)的,這也充分的將線上平臺與線下工具進行聯(lián)動,在一定程度上可以進一步保證開發(fā)者使用體驗的一致性。另外,在體驗應(yīng)用模塊之后,會產(chǎn)生一些想法:
1.作為產(chǎn)品聯(lián)動入口,應(yīng)用模塊需要牽扯其他資源投入,如何保證應(yīng)用模塊的資源可以逐漸的 “自運營” 將會成為應(yīng)用模塊能否成功的關(guān)鍵點之一(所謂自運營指的是不需要某固定團隊主動提升應(yīng)用數(shù)量、質(zhì)量,而是可以由更多參與者自發(fā)的去做這項工作);
2.應(yīng)用模塊在一定程度上應(yīng)該屬于 Serverless 而不僅僅是函數(shù)計算,否則過小的 Scope 會限制該模塊的持續(xù)發(fā)展與生態(tài)演進;
3.作為擁有標(biāo)準(zhǔn) GitOps 配置的應(yīng)用,目前 CI/CD 能力過于單?。?/span>
4.功能不完善,創(chuàng)建后的使用體驗有待加強。例如,部署后的 “如何應(yīng)用” 的引導(dǎo)、可觀測要如何去做 ......
Serverless 工作流
Serverless 工作流在一定程度上可以認為是任務(wù)模塊的一種升級表現(xiàn)。即單純的任務(wù)模塊是基于函數(shù)計算的,是異步的,Serverless 工作流在此基礎(chǔ)上增加了編排能力:
通過 Serverless 工作流加持的任務(wù)將會:
具有服務(wù)的編排能力;
支持長時間運行流程;
可進行流程狀態(tài)管理;
Serverless Devs
工具安裝與配置 項目初始化 項目開發(fā)與部署
s config命令進行密鑰信息配置:
s init命令,進行案例代碼的初始化:


Serverless Devs 開發(fā)者工具針對阿里云 Serverless 架構(gòu)來說,其最大的意義和價值,應(yīng)該就在于:
下一代 Serverless 探索
用戶體驗相關(guān)
進一步 “統(tǒng)一”
天下大同也許是不可能的,但是技術(shù)發(fā)展的結(jié)局,趨于同質(zhì)化卻是一種趨勢。
Serverless 架構(gòu)同樣如此,在云原生技術(shù)日益發(fā)展的今天,Serverless 架構(gòu)已經(jīng)不再是單純的某個產(chǎn)品或者某種形態(tài),它已逐漸的發(fā)展成為一種思想。
基于 Serverless 架構(gòu)所傳遞的精神,已經(jīng)有越來越多的 Serverless 產(chǎn)品出現(xiàn),盡管如今,他們依舊是 “單打獨斗” 的多,但隨著時間的發(fā)展,這些產(chǎn)品注定會以一種 ”粘合劑“ 為核心,統(tǒng)一的,一致的為開發(fā)者提供服務(wù)。
從加法到減法
雖然 Serverless 架構(gòu)并沒有確切的定義,但他所要傳達的心智卻一定不是更復(fù)雜。
所以在未來的發(fā)展過程中,Serverless 架構(gòu)的發(fā)展方向之一,就是做減法,減掉那些 “看似合理,卻又沒有道理的能力”。例如,為什么要透露出各種實例類型(彈性實例、GPU實例、性能實例、按量實例等)?為什么需要配置預(yù)留,需要配置彈性策略?
也許,很多為什么現(xiàn)在看來是合情合理,但是站在另一個維度上,他可能就是不合理的,所以做減法,不僅僅是一種勇氣,更是一種對技術(shù)的挑戰(zhàn),對產(chǎn)品抽象能力的挑戰(zhàn)。
功能探索
云開發(fā)模式
Serverless 架構(gòu)的下一站是什么?這是一個很多人思考的問題。
函數(shù)計算僅僅是一個計算平臺,可以單打,但也不能獨斗,想要更容易被接受,資源的聚合、聯(lián)動是必不可少的。盡管函數(shù)計算的應(yīng)用模塊,在一定程度上正在聯(lián)動更多資源,但是這也僅僅是管理層面的,開發(fā)者所接觸 Serverless 架構(gòu)后,開發(fā)也是非常重要的一環(huán)節(jié),那么云開發(fā)模式就值得考慮。
低代碼模式
Serverless 架構(gòu)在一定程度上是可以讓很多功能模塊化的,而模塊化的進一步發(fā)展,就可能是低代碼模式。
基于 Serverless 架構(gòu)的低代碼有望將 Serverless 思想應(yīng)用到產(chǎn)品建設(shè)思想上,模塊化的快速部署、更新,平穩(wěn)發(fā)布與下線也都是符合 Serverless 思想的。
總結(jié)
作者:秋雨陳 原文閱讀: https://developer.aliyun.com/article/984858
RECRUITMEN
1分鐘 Serverless 極速抽盲盒
點擊上方卡片了解活動詳情!










