官术网_书友最值得收藏!

3.4 冷啟動(dòng)優(yōu)化

“冷啟動(dòng)”這個(gè)現(xiàn)象常用于第一次執(zhí)行操作,它在我們的生活中并不陌生,例如在第一次炒菜時(shí)需要熱油、開汽車時(shí)需要等待汽車發(fā)動(dòng)、在TCP第一次連接時(shí)需要三次握手等,可以說萬事萬物皆有冷啟動(dòng)。而在FaaS平臺(tái)中,冷啟動(dòng)是不可忽視的一個(gè)特性,也是各大云服務(wù)商進(jìn)行優(yōu)化的主要方向。所謂“冷啟動(dòng)”,就是第一次部署函數(shù),運(yùn)行實(shí)例時(shí),由于FaaS平臺(tái)需要?jiǎng)?chuàng)建實(shí)例、部署網(wǎng)絡(luò),會(huì)有秒級(jí)別的較高延時(shí)。由于本地函數(shù)并不存在冷啟動(dòng)的概念,而云端函數(shù)的資源分配造成的冷啟動(dòng)則可能導(dǎo)致函數(shù)超時(shí),對(duì)FaaS平臺(tái)上的業(yè)務(wù)不夠友好。因此,了解冷啟動(dòng)產(chǎn)生的原因以及優(yōu)化措施,可以更好地理解FaaS平臺(tái)原理,并進(jìn)行有針對(duì)性的優(yōu)化。

3.4.1 冷啟動(dòng)的產(chǎn)生

函數(shù)冷啟動(dòng)指的是FaaS函數(shù)在啟動(dòng)過程中的代碼下載、啟動(dòng)實(shí)例、初始化運(yùn)行時(shí)及用戶代碼等環(huán)節(jié)。

具體而言,F(xiàn)aaS函數(shù)在接收請(qǐng)求且沒有空閑實(shí)例時(shí),平臺(tái)需要啟動(dòng)新的并發(fā)實(shí)例處理事件,該過程中并發(fā)實(shí)例創(chuàng)建業(yè)務(wù)代碼初始化引起的耗時(shí)都可以稱為函數(shù)的冷啟動(dòng)耗時(shí)。

冷啟動(dòng)是怎樣出現(xiàn)的呢?我們用一張圖形象地展示在創(chuàng)建函數(shù)時(shí),平臺(tái)和用戶分別負(fù)責(zé)哪些操作,從而分析冷啟動(dòng)的發(fā)生原理,如圖3-4所示。

040-1

圖3-4 冷啟動(dòng)的產(chǎn)生原因

根據(jù)上述執(zhí)行流程可以看出,函數(shù)實(shí)例的啟動(dòng)過程主要分為兩部分。

第一部分是啟動(dòng)函數(shù)實(shí)例,包含資源調(diào)度、下載客戶提交的函數(shù)代碼、啟動(dòng)初始化運(yùn)行環(huán)境、加載運(yùn)行代碼。這一部分產(chǎn)生的耗時(shí)也叫作冷啟動(dòng)時(shí)間,主要由FaaS平臺(tái)調(diào)度、執(zhí)行和優(yōu)化。

第二部分是函數(shù)的執(zhí)行階段,包含初始化代碼、執(zhí)行函數(shù)然后結(jié)束、退出執(zhí)行環(huán)境。函數(shù)執(zhí)行階段主要由用戶控制,根據(jù)業(yè)務(wù)及實(shí)現(xiàn)方式的不同,初始化和執(zhí)行時(shí)間也不同,用戶可以自行對(duì)這部分時(shí)間進(jìn)行優(yōu)化。

如圖3-5所示,公有云FaaS平臺(tái)上的冷啟動(dòng)主要分為以下幾個(gè)過程。

041-1

圖3-5 FaaS平臺(tái)冷啟動(dòng)過程

  • 創(chuàng)建虛擬機(jī)或容器:根據(jù)用戶選擇的配置,F(xiàn)aaS平臺(tái)需要?jiǎng)?chuàng)建對(duì)應(yīng)的運(yùn)行環(huán)境。在不進(jìn)行優(yōu)化的情況下,該過程的平均耗時(shí)在秒級(jí)別,遇到極端情況時(shí)(需要?jiǎng)?chuàng)建新虛擬機(jī)或容器)甚至可能達(dá)到分鐘級(jí)別。
  • 函數(shù)代碼包下載:該過程主要為運(yùn)行環(huán)境加載用戶的業(yè)務(wù)代碼,代碼包一般從對(duì)象存儲(chǔ)等服務(wù)中獲取,因此代碼下載速度取決于業(yè)務(wù)代碼包的大小,代碼包較大時(shí)也會(huì)達(dá)到秒級(jí)別的耗時(shí)。
  • 打通VPC(Virtual Private Cloud)等網(wǎng)絡(luò)配置:FaaS平臺(tái)不僅承擔(dān)計(jì)算任務(wù),當(dāng)函數(shù)和其他資源,如外網(wǎng)服務(wù)、數(shù)據(jù)庫(kù)等服務(wù)進(jìn)行交互時(shí),需要考慮打通私有網(wǎng)絡(luò)和公網(wǎng),這一步通常需要秒級(jí)別實(shí)現(xiàn)。

3.4.2 平臺(tái)側(cè)冷啟動(dòng)的優(yōu)化

各大云廠商針對(duì)冷啟動(dòng)提供了各種優(yōu)化策略,主要涉及以下三個(gè)方面。

1. 創(chuàng)建虛擬機(jī)和容器階段

在該階段,由于公有云平臺(tái)的虛擬機(jī)調(diào)度系統(tǒng)需要滿足更廣泛的需求,難以針對(duì)FaaS場(chǎng)景做定制優(yōu)化,因此各廠商相繼推出了適用于FaaS平臺(tái)的輕量級(jí)虛擬化系統(tǒng)(Micro VM),例如AWS Firecracker、Kata Container等。這些輕量級(jí)虛擬化系統(tǒng)主要針對(duì)鏡像和驅(qū)動(dòng)做了裁剪,使其更加輕量。此外,該系統(tǒng)將虛擬機(jī)的內(nèi)存、設(shè)備狀態(tài)等信息存儲(chǔ)到共享內(nèi)存,通過提前創(chuàng)建虛擬機(jī)模板文件,實(shí)現(xiàn)了極速啟動(dòng)和部署。

2. 代碼包下載階段

為了加速代碼下載的速度,各云廠商通過代碼緩存方案,將同賬戶下的代碼緩存在本地節(jié)點(diǎn)作為一級(jí)緩存,多個(gè)可用區(qū)的代碼也會(huì)作為二級(jí)緩存。

3. 打通網(wǎng)絡(luò)配置階段

在網(wǎng)絡(luò)配置階段,云廠商通過抽取網(wǎng)絡(luò)轉(zhuǎn)發(fā)層,將彈性網(wǎng)卡(Elastic Network Interface,ENI)綁定在轉(zhuǎn)發(fā)層上,既可以復(fù)用網(wǎng)卡,又能降低綁定時(shí)間,提供高可用的架構(gòu)。

雖然以上解決方案可以有效減少冷啟動(dòng)的概率,但依然難以100%避免冷啟動(dòng),因此各商業(yè)化平臺(tái)也提供了一些可配置的預(yù)留實(shí)例策略,通過提供常駐實(shí)例,降低服務(wù)延時(shí)。相信隨著技術(shù)的持續(xù)進(jìn)步,冷啟動(dòng)的問題將被更好地解決。

3.4.3 用戶側(cè)冷啟動(dòng)的規(guī)避

當(dāng)前主流的冷啟動(dòng)規(guī)避方式為預(yù)置并發(fā)實(shí)例。從原理上講,主要是通過預(yù)留實(shí)例的方式,有效規(guī)避冷啟動(dòng)的產(chǎn)生。但這也需要用戶根據(jù)業(yè)務(wù)的具體場(chǎng)景,對(duì)不同函數(shù)的并發(fā)量進(jìn)行預(yù)測(cè)、規(guī)劃及合理分配。根據(jù)主流云廠商的產(chǎn)品限制,在對(duì)并發(fā)實(shí)例進(jìn)行配置時(shí),需要注意以下幾點(diǎn)。

  • 預(yù)置并發(fā)不支持$ LATEST最新版本,僅支持已發(fā)布的穩(wěn)定版本。
  • 可供配置的預(yù)置并發(fā)總數(shù)有限,一般會(huì)為賬戶/函數(shù)維度提供一個(gè)預(yù)置額度,需要用戶根據(jù)賬號(hào)下不同函數(shù)的使用情況進(jìn)行合理分配。
  • 由于預(yù)置并發(fā)需要額外的資源分配,因此計(jì)費(fèi)方式可能有所不同。
  • 并發(fā)實(shí)例處理完時(shí)間請(qǐng)求后,不會(huì)被立刻回收,而是會(huì)繼續(xù)執(zhí)行一段時(shí)間,以便于實(shí)例的復(fù)用。
主站蜘蛛池模板: 邹平县| 镇远县| 来凤县| 西城区| 南汇区| 万源市| 宁德市| 星座| 垣曲县| 登封市| 息烽县| 湘阴县| 鄄城县| 和龙市| 同江市| 邓州市| 六安市| 留坝县| 孟津县| 三门峡市| 烟台市| 新邵县| 澄城县| 定州市| 页游| 图片| 同德县| 永定县| 大安市| 大足县| 嘉义县| 满洲里市| 连平县| 平山县| 泗洪县| 武平县| 高陵县| 会同县| 新和县| 连山| 百色市|