Serverless 的价值
作者 | 許曉斌 阿里云高級(jí)技術(shù)專(zhuān)家
回顧架構(gòu)的演進(jìn)過(guò)程,我們不難發(fā)現(xiàn),研發(fā)運(yùn)維人員正在逐漸地把關(guān)注點(diǎn)從機(jī)器上移走,不再去管理機(jī)器。
其實(shí)我們都知道,雖然說(shuō)是 Serverless,但 Server(服務(wù)器)是不可能真正消失的,Serverless 里這個(gè) less 更確切地說(shuō),應(yīng)該是開(kāi)發(fā)者不用關(guān)心服務(wù)器的意思。這就好比現(xiàn)代編程語(yǔ)言 Java 和 Python,開(kāi)發(fā)不用手工分配和釋放內(nèi)存,但內(nèi)存依然在哪里,只不過(guò)交給垃圾收集器管理了。稱(chēng)一個(gè)能幫助你管理服務(wù)器的平臺(tái)為 Serverless 平臺(tái),就好比稱(chēng)呼 Java 和 Python 為 Memoryless 語(yǔ)言一樣。
但是,如果我們把目光放到今天這個(gè)云的時(shí)代,那么就不能狹義地把 Serverless 僅僅理解為不用關(guān)心服務(wù)器。云上的資源除了服務(wù)器所包含的基礎(chǔ)計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)資源之外,還包括各種類(lèi)別的更上層的資源,例如數(shù)據(jù)庫(kù)、緩存、消息等。
Serverless 的愿景
2019 年 2 月,UC 伯克利大學(xué)發(fā)表了一篇標(biāo)題為《Cloud Programming Simplified: A Berkeley View on Serverless Computing》的論文,論文中也有一個(gè)非常清晰形象的比喻,文中這樣描述:
在云的上下文中,Serverful 的計(jì)算就像使用低級(jí)的匯編語(yǔ)言編程,而 Serverless 的計(jì)算就像使用 Python 這樣的高級(jí)語(yǔ)言進(jìn)行編程。例如 c = a + b 這樣簡(jiǎn)單的表達(dá)式,如果用匯編描述,就必須先選擇幾個(gè)寄存器,把值加載到寄存器,進(jìn)行數(shù)學(xué)計(jì)算,再存儲(chǔ)結(jié)果。這就好比今天在云環(huán)境下 Serverful 的計(jì)算,開(kāi)發(fā)首先需要分配或找到可用的資源,然后加載代碼和數(shù)據(jù),再執(zhí)行計(jì)算,將計(jì)算的結(jié)果存儲(chǔ)起來(lái),最后還需要管理資源的釋放。
論文中所謂的 Serverful 計(jì)算,是我們今天主流的使用云的方式,但不應(yīng)該是未來(lái)我們使用云的方式。我認(rèn)為 Serverless 的愿景應(yīng)該是 Write locally, compile to the cloud,即代碼只關(guān)心業(yè)務(wù)邏輯,由工具和云去管理資源。
Serverless 的價(jià)值
在對(duì) Serverless 有一個(gè)總體的抽象概念之后,也需要具體了解 Serverless 平臺(tái)的主要特點(diǎn),同時(shí)這些特點(diǎn)也是 Serverless 核心優(yōu)勢(shì)的體現(xiàn)。
1. 不用關(guān)心服務(wù)器
管理一兩臺(tái)服務(wù)器可能不是什么麻煩的事情,管理數(shù)千甚至數(shù)萬(wàn)臺(tái)服務(wù)器就沒(méi)那么簡(jiǎn)單了。任何一臺(tái)服務(wù)器都可能出現(xiàn)故障,如何自動(dòng)識(shí)別故障,摘除有問(wèn)題的實(shí)例,這是 Serverless 平臺(tái)必須具備的能力;此外,操作系統(tǒng)的安全補(bǔ)丁升級(jí),需要做到不影響業(yè)務(wù),自動(dòng)完成;日志和監(jiān)控系統(tǒng)需要默認(rèn)打通;系統(tǒng)的安全策略需要自動(dòng)配置好以避免風(fēng)險(xiǎn);當(dāng)資源不夠時(shí),需要能夠自動(dòng)分配資源并安裝相關(guān)的代碼和配置,等等。
2. 自動(dòng)彈性
今天的互聯(lián)網(wǎng)應(yīng)用都被設(shè)計(jì)成可伸縮架構(gòu),當(dāng)業(yè)務(wù)有比較明顯的高峰和低谷時(shí),或者業(yè)務(wù)有臨時(shí)的容量需求時(shí)(比如營(yíng)銷(xiāo)活動(dòng)),Serverless 平臺(tái)都能夠及時(shí)且穩(wěn)定地實(shí)現(xiàn)自動(dòng)彈性。為了實(shí)現(xiàn)這個(gè)能力,平臺(tái)需要有非常強(qiáng)大的資源調(diào)度能力,以及對(duì)應(yīng)用各項(xiàng)指標(biāo)(如 load、并發(fā))非常敏銳的感知能力。
3. 按實(shí)際資源使用計(jì)費(fèi)
Serverful 的方式使用云資源,是按占用而非使用計(jì)費(fèi)的,例如用戶(hù)在云上購(gòu)買(mǎi)了三臺(tái) ECS,那么不管用戶(hù)實(shí)際使用了這三臺(tái) ECS 多少的 CPU 和內(nèi)存,他都需要支付這三臺(tái) ECS 整體的費(fèi)用。而在 Serverless 模式下,用戶(hù)是按實(shí)際使用的資源付費(fèi)的,例如一個(gè)請(qǐng)求實(shí)際使用了一臺(tái) 1core2g 規(guī)格資源 100ms 的時(shí)間,那么用戶(hù)就只需要為該規(guī)格的單價(jià)乘以時(shí)間(即100ms)付費(fèi)。類(lèi)似的,用戶(hù)如果用的是 Serverless 數(shù)據(jù)庫(kù),那么就只需要為 query 實(shí)際消耗的資源,以及數(shù)據(jù)存儲(chǔ)的資源付費(fèi)。
4. 更少的代碼,更快的交付速度
基于 Serverless 架構(gòu)的代碼通常會(huì)重度使用后端的服務(wù),將數(shù)據(jù)、狀態(tài)管理等內(nèi)容從代碼中分離出去;此外,更徹底的 FaaS 架構(gòu)則把代碼的 Runtime 也交給了平臺(tái)管理。這就意味著,同樣的應(yīng)用,Serverless 模式下的代碼相比 Serverful 模式會(huì)少很多,因此不論是從分發(fā)還是啟動(dòng),都會(huì)更快。Serverless 平臺(tái)也通常能夠提供非常成熟的代碼構(gòu)建發(fā)布、版本切換等特性,提升交付速度。
總結(jié)
以上是生活随笔為你收集整理的Serverless 的价值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见 Serverless 架构模式
- 下一篇: 函数计算是如何工作的?