- Serverless從入門到進(jìn)階:架構(gòu)、原理與實(shí)踐
- 方坤丁 孫遠(yuǎn)高
- 1125字
- 2021-06-24 11:19:07
2.2 FaaS架構(gòu)介紹
本節(jié)主要介紹FaaS架構(gòu)。FaaS架構(gòu)屏蔽了許多底層實(shí)現(xiàn),可以讓使用者更加專注于業(yè)務(wù)??偟膩碚f,F(xiàn)aaS架構(gòu)幫助開發(fā)者做了下面幾件事。
- 通過負(fù)載均衡進(jìn)行請(qǐng)求調(diào)度和轉(zhuǎn)發(fā)。
- 通過集群調(diào)度實(shí)現(xiàn)計(jì)算資源的彈性擴(kuò)縮容。
- 對(duì)請(qǐng)求做錯(cuò)誤處理。
- 安全隔離不同租戶的資源。
這些優(yōu)化策略分別對(duì)應(yīng)了FaaS架構(gòu)中的不同模塊,本書后續(xù)將詳細(xì)介紹這些組成模塊以及請(qǐng)求在模塊間的執(zhí)行流程。
2.2.1 FaaS架構(gòu)組成
在通用的FaaS平臺(tái)中,為了實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)、擴(kuò)縮容、租戶隔離等能力,需要以下模塊的支持。
- 負(fù)載均衡器:用于接收請(qǐng)求并轉(zhuǎn)發(fā)到最近的后端服務(wù)中(往往適用于多地域、多可用區(qū)的部署方式)。
- 請(qǐng)求處理模塊:用于接收和處理請(qǐng)求,區(qū)分同步和異步請(qǐng)求等。
- 計(jì)數(shù)器:用于計(jì)算并發(fā)請(qǐng)求,并調(diào)整實(shí)例的并發(fā)限制等。
- 實(shí)例(worker):FaaS架構(gòu)中最核心的部分,為用戶代碼提供安全隔離、多語言支持的運(yùn)行環(huán)境。
- 實(shí)例管理模塊(worker manager):用于調(diào)度請(qǐng)求到對(duì)應(yīng)的實(shí)例中。通過追蹤實(shí)例的狀態(tài)(繁忙或空閑),針對(duì)狀態(tài)信息分配請(qǐng)求,將請(qǐng)求調(diào)度到處于空閑狀態(tài)的容器中。
- 資源調(diào)度模塊:管理實(shí)例的資源池。在確保不影響用戶業(yè)務(wù)的前提下,用最合理的方式創(chuàng)建或銷毀實(shí)例,確保資源池內(nèi)的實(shí)例資源充足、可復(fù)用。
2.2.2 FaaS架構(gòu)執(zhí)行流程
為了讓讀者能更清晰地理解FaaS服務(wù)的運(yùn)行原理,我們模擬在不同場(chǎng)景下一個(gè)請(qǐng)求進(jìn)入FaaS平臺(tái)被處理的全流程。在FaaS環(huán)境中已有可用實(shí)例的情況下,請(qǐng)求的執(zhí)行流程如圖2-5所示。

圖2-5 FaaS架構(gòu)中的請(qǐng)求處理流程圖(有可用實(shí)例)
可以看出,在請(qǐng)求進(jìn)入FaaS平臺(tái)后,請(qǐng)求處理模塊會(huì)在實(shí)例管理模塊中查詢是否有可用(空閑狀態(tài))的實(shí)例。如有空閑實(shí)例,則將對(duì)應(yīng)的請(qǐng)求調(diào)度到該實(shí)例中。此時(shí),如果實(shí)例第一次處理請(qǐng)求,則會(huì)執(zhí)行初始化操作,加載業(yè)務(wù)代碼。之后實(shí)例會(huì)執(zhí)行分配的請(qǐng)求,運(yùn)行用戶代碼并返回結(jié)果。
上述情況并不是一直存在的。當(dāng)遇到業(yè)務(wù)請(qǐng)求突增,需要彈性擴(kuò)容時(shí),F(xiàn)aaS環(huán)境中實(shí)例資源池不足,則新的請(qǐng)求會(huì)按照?qǐng)D2-6所示的流程進(jìn)行處理。

圖2-6 FaaS架構(gòu)中的請(qǐng)求處理流程圖(無可用實(shí)例)
在業(yè)務(wù)突增的情況下,資源池中無可用實(shí)例。請(qǐng)求處理模塊收到請(qǐng)求后,會(huì)先去實(shí)例管理模塊查詢是否有可用實(shí)例。如無可用實(shí)例,則去資源調(diào)度模塊中申請(qǐng)擴(kuò)容。資源調(diào)度模塊會(huì)創(chuàng)建新的實(shí)例加入資源池。此時(shí),實(shí)例管理模塊會(huì)對(duì)新的實(shí)例進(jìn)行初始化操作(創(chuàng)建運(yùn)行環(huán)境、加載業(yè)務(wù)代碼等)。初始化完畢后,新實(shí)例會(huì)執(zhí)行分配到的請(qǐng)求,運(yùn)行用戶代碼并返回結(jié)果。
分析請(qǐng)求的處理流程可知,因?yàn)镕aaS平臺(tái)屏蔽了許多底層的調(diào)度、擴(kuò)縮容策略,所以內(nèi)部的請(qǐng)求處理鏈路較長(zhǎng)。尤其是在業(yè)務(wù)請(qǐng)求突增的情況下,需要通過資源調(diào)度模塊分配實(shí)例,并且對(duì)實(shí)例進(jìn)行初始化。這一系列處理流程太久,就會(huì)造成“冷啟動(dòng)”的問題,即首次請(qǐng)求到達(dá)FaaS平臺(tái)延時(shí)過長(zhǎng)。關(guān)于“冷啟動(dòng)”的成因、現(xiàn)狀和優(yōu)化措施,本書會(huì)在第3章詳細(xì)說明。
- Implementing VMware Horizon 7(Second Edition)
- C和C++安全編碼(原書第2版)
- Apache Mahout Clustering Designs
- Haxe Game Development Essentials
- D3.js 4.x Data Visualization(Third Edition)
- Keras深度學(xué)習(xí)實(shí)戰(zhàn)
- Python機(jī)器學(xué)習(xí)算法: 原理、實(shí)現(xiàn)與案例
- MySQL入門很輕松(微課超值版)
- Quantum Computing and Blockchain in Business
- Essential C++(中文版)
- R語言數(shù)據(jù)可視化:科技圖表繪制
- Visual C++從入門到精通(第2版)
- Redmine Cookbook
- Yii2 By Example
- 虛擬現(xiàn)實(shí)建模與編程(SketchUp+OSG開發(fā)技術(shù))