- Serverless從入門到進(jìn)階:架構(gòu)、原理與實(shí)踐
- 方坤丁 孫遠(yuǎn)高
- 1339字
- 2021-06-24 11:19:07
2.1 Serverless架構(gòu)概述
本節(jié)主要介紹Serverless架構(gòu)的組成,并對(duì)Serverless架構(gòu)和傳統(tǒng)服務(wù)架構(gòu)的區(qū)別和對(duì)應(yīng)關(guān)系進(jìn)行分析。
2.1.1 Serverless = FaaS + BaaS
根據(jù)第1章的介紹可知,Serverless包含了FaaS和BaaS兩部分。為了更好地區(qū)分FaaS和BaaS,我們對(duì)構(gòu)建一個(gè)軟件應(yīng)用所需的服務(wù)進(jìn)行分析,如圖2-1所示。

圖2-1 構(gòu)建應(yīng)用所需的前后端服務(wù)劃分
由圖2-1可知,應(yīng)用的前端服務(wù)更多是用戶可見(jiàn)的,例如應(yīng)用的界面、交互邏輯等,這些主要通過(guò)業(yè)務(wù)實(shí)現(xiàn)的API提供。而用戶無(wú)法看到的后端邏輯部分則更為復(fù)雜,例如數(shù)據(jù)庫(kù)的管理、數(shù)據(jù)的存儲(chǔ)、用戶鑒權(quán)邏輯、應(yīng)用的推送,甚至靜態(tài)資源加速等優(yōu)化能力,都算作后端服務(wù)。這些復(fù)雜的后端邏輯構(gòu)成了用戶前端的體驗(yàn),并且為軟件提供穩(wěn)定、高可用的服務(wù)。
回到FaaS和BaaS的概念區(qū)分,F(xiàn)aaS服務(wù)主要提供了計(jì)算相關(guān)的平臺(tái),用于實(shí)現(xiàn)應(yīng)用的業(yè)務(wù)邏輯;而B(niǎo)aaS服務(wù)則更多側(cè)重冰山底層的能力,例如數(shù)據(jù)庫(kù)服務(wù)、存儲(chǔ)服務(wù)、鑒權(quán)服務(wù)等。圖2-2中對(duì)典型的FaaS服務(wù)和BaaS服務(wù)進(jìn)行了劃分。

圖2-2 典型的FaaS服務(wù)和BaaS服務(wù)
一個(gè)完整的Serverless應(yīng)用必然是FaaS服務(wù)和BaaS服務(wù)的結(jié)合,此外,該應(yīng)用中所有FaaS服務(wù)和BaaS服務(wù)都是Serverless化的,即擁有彈性擴(kuò)縮容、按需使用和付費(fèi)的特點(diǎn)。
2.1.2 傳統(tǒng)應(yīng)用架構(gòu)分析
在了解Serverless架構(gòu)之前,我們先來(lái)了解,構(gòu)建一個(gè)全棧服務(wù),傳統(tǒng)的架構(gòu)應(yīng)該是怎樣的,如圖2-3所示。

圖2-3 全棧應(yīng)用架構(gòu)
可以看到,在傳統(tǒng)的服務(wù)架構(gòu)中,需要考慮以下幾個(gè)方面。
- 整體架構(gòu)的高可用能力:?jiǎn)慰捎脜^(qū)故障時(shí),是否具備容災(zāi)切換的策略。
- 接入層的性能和安全性:針對(duì)接入層,需要考慮其傳輸性能。例如支持靜態(tài)資源的緩存、負(fù)載均衡、多地域接入加速等。此外,要考慮對(duì)請(qǐng)求進(jìn)行安全加密,并針對(duì)業(yè)務(wù)場(chǎng)景提供用戶鑒權(quán)等能力。
- 計(jì)算層擴(kuò)縮容:在計(jì)算層,需要保證計(jì)算節(jié)點(diǎn)的資源分配、管理和彈性伸縮能力。例如,通過(guò)配置伸縮組,在突發(fā)流量時(shí)進(jìn)行彈性擴(kuò)縮容。
- 數(shù)據(jù)庫(kù)層的性能和高可用:在數(shù)據(jù)層面,需要考慮數(shù)據(jù)庫(kù)的主備。為了防止出現(xiàn)過(guò)多連接導(dǎo)致數(shù)據(jù)庫(kù)慢查詢等問(wèn)題,需要針對(duì)數(shù)據(jù)庫(kù)做連接管理,維護(hù)連接池,實(shí)現(xiàn)復(fù)用。
如上所述,實(shí)現(xiàn)一個(gè)完備的應(yīng)用架構(gòu),需要一定的運(yùn)維人力對(duì)架構(gòu)進(jìn)行管理和維護(hù),有較高的學(xué)習(xí)門檻。
2.1.3 典型Serverless應(yīng)用架構(gòu)
與2.1.2節(jié)傳統(tǒng)應(yīng)用架構(gòu)對(duì)應(yīng),典型Serverless架構(gòu)如圖2-4所示。

圖2-4 典型Serverless應(yīng)用架構(gòu)
因?yàn)楫?dāng)前架構(gòu)全部運(yùn)行在云端的PaaS服務(wù)上,所以架構(gòu)本身的高可用性可以依賴對(duì)應(yīng)的PaaS服務(wù)。進(jìn)一步分析Serverless架構(gòu)可以看出,用戶通過(guò)多種客戶端(Web端、App端、小程序端等)對(duì)服務(wù)進(jìn)行訪問(wèn),發(fā)起請(qǐng)求。
在接入層,通過(guò)網(wǎng)關(guān)服務(wù)對(duì)訪問(wèn)請(qǐng)求進(jìn)行處理,并將請(qǐng)求轉(zhuǎn)發(fā)到后端的Serverless計(jì)算(FaaS)節(jié)點(diǎn)中執(zhí)行業(yè)務(wù)邏輯。在后端,可以連接多種多樣的BaaS服務(wù),例如涉及數(shù)據(jù)增刪改查的業(yè)務(wù),會(huì)在后端連接數(shù)據(jù)庫(kù)、Redis緩存等;如果需要調(diào)用其他服務(wù),可以直接連接第三方API快速實(shí)現(xiàn),如圖片識(shí)別、文字翻譯等;如果需要對(duì)消息進(jìn)行批量處理或再次計(jì)算,可以在后端連接消息隊(duì)列實(shí)現(xiàn)解耦,并再次調(diào)用Serverless計(jì)算(FaaS)節(jié)點(diǎn)。
對(duì)比傳統(tǒng)的服務(wù)架構(gòu)可以看出,Serverless架構(gòu)無(wú)須考慮底層的運(yùn)維和調(diào)度,也不需要關(guān)心后端數(shù)據(jù)層的連接管理、復(fù)用等,為開(kāi)發(fā)者提供了極大的便利,讓其可以專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
2.1.4 Serverless架構(gòu)與傳統(tǒng)架構(gòu)
為了進(jìn)行更直觀的對(duì)比說(shuō)明,下面整理了Serverless架構(gòu)和傳統(tǒng)架構(gòu)中服務(wù)的對(duì)應(yīng)關(guān)系,如表2-1所示。
表2-1 Serverless和傳統(tǒng)架構(gòu)中的服務(wù)對(duì)比

對(duì)比傳統(tǒng)的服務(wù)架構(gòu),Serverless架構(gòu)在成本、運(yùn)維上都有較為顯著的優(yōu)勢(shì),因此也越來(lái)越受企業(yè)和開(kāi)發(fā)者的喜愛(ài)。
- 深入核心的敏捷開(kāi)發(fā):ThoughtWorks五大關(guān)鍵實(shí)踐
- Unreal Engine Physics Essentials
- Python面向?qū)ο缶幊蹋簶?gòu)建游戲和GUI
- Visual C#通用范例開(kāi)發(fā)金典
- Python項(xiàng)目實(shí)戰(zhàn)從入門到精通
- 汽車人機(jī)交互界面整合設(shè)計(jì)
- 寫給大家看的Midjourney設(shè)計(jì)書
- Visual Basic程序設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)及考試指南
- Go Systems Programming
- Elastix Unified Communications Server Cookbook
- Manage Your SAP Projects with SAP Activate
- 讀故事學(xué)編程:Python王國(guó)歷險(xiǎn)記
- Go語(yǔ)言編程之旅:一起用Go做項(xiàng)目
- Learning Unity Physics
- JavaWeb入門經(jīng)典