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




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


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










