Cloudflare:為什么要使用無服務(wù)器計(jì)算?

來源: Cloudflare
作者:Cloudflare
時(shí)間:2021-02-24
17498
與傳統(tǒng)的基于云或以服務(wù)器為中心的基礎(chǔ)設(shè)施相比,無服務(wù)器計(jì)算具有諸多優(yōu)勢(shì)。對(duì)于許多開發(fā)人員而言,無服務(wù)器架構(gòu)以更低的成本提供了更大的可擴(kuò)展性、更大的靈活性以及更快的發(fā)布時(shí)間。借助無服務(wù)器體系結(jié)構(gòu),開發(fā)人員無需擔(dān)心購(gòu)買、供應(yīng)和管理后端服務(wù)器的事宜。但是,無服務(wù)器計(jì)算并不是所有 Web 應(yīng)用程序開發(fā)人員的靈丹妙藥。

sam-moqadam-hMQKDpchGK8-unsplash.jpg

為什么要使用無服務(wù)器計(jì)算?

與傳統(tǒng)的基于云或以服務(wù)器為中心的基礎(chǔ)設(shè)施相比,無服務(wù)器計(jì)算具有諸多優(yōu)勢(shì)。對(duì)于許多開發(fā)人員而言,無服務(wù)器架構(gòu)以更低的成本提供了更大的可擴(kuò)展性、更大的靈活性以及更快的發(fā)布時(shí)間。借助無服務(wù)器體系結(jié)構(gòu),開發(fā)人員無需擔(dān)心購(gòu)買、供應(yīng)和管理后端服務(wù)器的事宜。但是,無服務(wù)器計(jì)算并不是所有Web應(yīng)用程序開發(fā)人員的靈丹妙藥。

無服務(wù)器計(jì)算的工作原理

無服務(wù)器計(jì)算是一種體系結(jié)構(gòu),供應(yīng)商可在其中提供客戶所需的后端服務(wù)。要了解有關(guān)無服務(wù)器計(jì)算的更多信息,請(qǐng)參閱什么是無服務(wù)器計(jì)算?

無服務(wù)器計(jì)算的優(yōu)勢(shì)是什么?

無需服務(wù)器管理

盡管“無服務(wù)器”計(jì)算實(shí)際上是在服務(wù)器上進(jìn)行的,但開發(fā)人員無需管理服務(wù)器-它們由供應(yīng)商管理。這可以減少DevOps中的必要投資,從而降低支出,還可以使開發(fā)人員專注于創(chuàng)建和擴(kuò)展應(yīng)用程序,而不受服務(wù)器容量的限制。

開發(fā)人員僅對(duì)其使用的服務(wù)器空間付費(fèi),因此降低了成本

與“按需付費(fèi)”電話計(jì)劃一樣,開發(fā)人員僅需為使用量付費(fèi)。僅當(dāng)無服務(wù)器應(yīng)用程序需要后端函數(shù)時(shí),代碼才會(huì)運(yùn)行,并且代碼會(huì)根據(jù)需要自動(dòng)擴(kuò)展。調(diào)配是動(dòng)態(tài)、精確、實(shí)時(shí)的。一些服務(wù)的精確度極高,以至于費(fèi)用細(xì)分到100毫秒的增量。相比之下,在傳統(tǒng)的“全套服務(wù)器”架構(gòu)中,開發(fā)人員必須預(yù)先計(jì)劃所需的服務(wù)器容量,然后購(gòu)買容量,而不管最終是否會(huì)用上。

無服務(wù)器架構(gòu)本身具有可擴(kuò)展性

想象一下,如果郵局可以以某種方式神奇地隨意增減郵遞卡車,隨著郵件數(shù)量的增加(例如,在母親節(jié)之前)擴(kuò)大車隊(duì)的規(guī)模,并在需要減少送貨次數(shù)的時(shí)候縮小車隊(duì),會(huì)多么成本高效。從本質(zhì)上講,無服務(wù)器應(yīng)用程序就起到這樣的作用。

使用無服務(wù)器基礎(chǔ)設(shè)施構(gòu)建的應(yīng)用程序?qū)㈦S著用戶群的增加或使用量的增加而自動(dòng)擴(kuò)展。如果一個(gè)函數(shù)需要在多個(gè)實(shí)例中運(yùn)行,則供應(yīng)商的服務(wù)器將根據(jù)需要啟動(dòng)、運(yùn)行并結(jié)束,并且通常使用容器(如果這些函數(shù)最近運(yùn)行過,它們的啟動(dòng)速度會(huì)更快-請(qǐng)參閱下文“性能可能受到影響”)。因此,無服務(wù)器應(yīng)用程序能夠處理異常大量的請(qǐng)求,也能夠處理來自單個(gè)用戶的單個(gè)請(qǐng)求。具有固定服務(wù)器空間量的傳統(tǒng)結(jié)構(gòu)化應(yīng)用程序可能會(huì)因使用量的突然增加而不堪重負(fù)。

快速部署和更新

使用無服務(wù)器基礎(chǔ)設(shè)施,無需將代碼發(fā)布到服務(wù)器或進(jìn)行任何后端配置即可發(fā)布應(yīng)用程序的有效版本。開發(fā)人員可以非??焖俚厣蟼魃倭看a并發(fā)布新產(chǎn)品。他們可以一次上傳全部代碼,也可以一次上傳一個(gè)函數(shù),因?yàn)閼?yīng)用程序不是單個(gè)的單體堆棧,而是供應(yīng)商提供的函數(shù)的集合。

這也使得開發(fā)人員可以快速更新、修補(bǔ)、修復(fù)或向應(yīng)用程序添加新功能。不必對(duì)整個(gè)應(yīng)用程序進(jìn)行更改;開發(fā)人員可以一次更新一個(gè)函數(shù)。

代碼可以在更接近最終用戶的位置運(yùn)行,從而減少延遲

因?yàn)閼?yīng)用程序未托管在源站,所以它的代碼可以在任何地方運(yùn)行。因此,根據(jù)所使用的供應(yīng)商,應(yīng)用程序函數(shù)可能在接近最終用戶的服務(wù)器上運(yùn)行。這減少了等待時(shí)間,因?yàn)閬碜杂脩舻恼?qǐng)求不再必須一直傳遞到源站。Cloudflare Workers支持這種無服務(wù)器延遲縮減。

無服務(wù)器計(jì)算有什么缺點(diǎn)?

測(cè)試和調(diào)試變得更具挑戰(zhàn)性

復(fù)制無服務(wù)器環(huán)境以查看代碼在部署后將如何實(shí)際執(zhí)行是非常困難的。調(diào)試更加復(fù)雜,因?yàn)殚_發(fā)人員無法查看后端流程,并且因?yàn)閼?yīng)用程序被分解為較小的獨(dú)立函數(shù)。Cloudflare Workers Playground是一個(gè)沙箱,可幫助減少測(cè)試和調(diào)試中的摩擦。

無服務(wù)器計(jì)算會(huì)引入新的安全問題

當(dāng)供應(yīng)商運(yùn)行整個(gè)后端時(shí),可能無法完全審查其安全性,這對(duì)于處理個(gè)人或敏感數(shù)據(jù)的應(yīng)用程序尤其成問題。

因?yàn)楣緵]有分配到自己的離散物理服務(wù)器,所以無服務(wù)器提供商在任何給定時(shí)間通常是在單個(gè)服務(wù)器上運(yùn)行來自多個(gè)客戶的代碼。與其他方共享機(jī)械的問題稱為“多租戶”問題-想想幾家公司試圖同時(shí)租賃一個(gè)辦公室工作并在其中工作會(huì)是什么情況。多租戶可能會(huì)影響應(yīng)用程序性能,如果多租戶服務(wù)器配置不正確,可能會(huì)導(dǎo)致數(shù)據(jù)泄露。對(duì)于沙盒能夠正常運(yùn)行并且具有足夠強(qiáng)大的基礎(chǔ)設(shè)施的網(wǎng)絡(luò),多租戶幾乎沒有影響。例如,Cloudflare運(yùn)行的15 Tbps網(wǎng)絡(luò)具有足夠的額外容量來緩解服務(wù)降級(jí),并且Cloudflare托管的所有無服務(wù)器功能都在自己的沙箱中運(yùn)行(通過Chrome V8引擎)。

無服務(wù)器架構(gòu)不用于長(zhǎng)時(shí)間運(yùn)行的進(jìn)程

這限制了可以在無服務(wù)器架構(gòu)中經(jīng)濟(jì)高效地運(yùn)行的應(yīng)用程序的種類。由于無服務(wù)器提供商針對(duì)為代碼的運(yùn)行時(shí)間收費(fèi),因此與傳統(tǒng)應(yīng)用程序相比,在無服務(wù)器基礎(chǔ)設(shè)施中運(yùn)行具有長(zhǎng)時(shí)間運(yùn)行進(jìn)程的應(yīng)用程序可能會(huì)產(chǎn)生更高費(fèi)用。

性能可能會(huì)受到影響

因?yàn)闊o服務(wù)器代碼不是一直在運(yùn)行,所以在使用時(shí)可能需要“啟動(dòng)”。此啟動(dòng)時(shí)間可能會(huì)降低性能。但是,如果經(jīng)常使用一段代碼,則無服務(wù)器提供商將使其保持激活狀態(tài)-對(duì)此現(xiàn)成代碼的請(qǐng)求稱為“熱啟動(dòng)”。對(duì)一段時(shí)間未使用的代碼的請(qǐng)求稱為“冷啟動(dòng)”。

Cloudflare Workers通過使用Chrome V8引擎,在很大程度上避免了冷啟動(dòng)問題,該引擎在大多數(shù)情況下能夠在5毫秒內(nèi)啟動(dòng)并運(yùn)行JavaScript代碼。如果代碼已經(jīng)在運(yùn)行,則響應(yīng)時(shí)間不到一毫秒。

存在供應(yīng)商鎖定風(fēng)險(xiǎn)

允許一個(gè)供應(yīng)商為應(yīng)用程序提供所有后端服務(wù)將不可避免地增加對(duì)該供應(yīng)商的依賴。在一家供應(yīng)商處建立無服務(wù)器體系結(jié)構(gòu)可能會(huì)導(dǎo)致在必要時(shí)難以切換供應(yīng)商,尤其是每個(gè)供應(yīng)商提供的功能和工作流程都略有不同。(Cloudflare Workers易于遷移,因?yàn)樗鼈兪怯肑avaScript編寫的,并且是根據(jù)廣泛使用的Service Worker API編寫的。)

誰(shuí)應(yīng)該使用無服務(wù)器架構(gòu)?

希望縮短上市時(shí)間并構(gòu)建可快速擴(kuò)展或更新的輕便、靈活應(yīng)用程序的開發(fā)人員可能會(huì)從無服務(wù)器計(jì)算中受益匪淺。

如果應(yīng)用程序使用量不一致,高峰時(shí)段與很少甚至沒有流量的時(shí)間交替出現(xiàn),則無服務(wù)器體系結(jié)構(gòu)將減少應(yīng)用程序的成本。對(duì)于此類應(yīng)用程序,購(gòu)買一臺(tái)或多臺(tái)連續(xù)運(yùn)行且始終可用(即使未使用時(shí))的服務(wù)器或服務(wù)器塊可能浪費(fèi)資源。無服務(wù)器設(shè)置將在需要時(shí)立即響應(yīng),并且在不用時(shí)不會(huì)產(chǎn)生成本。

此外,想要將某些或全部應(yīng)用程序函數(shù)放到最終用戶附近以縮短延遲的開發(fā)人員,將至少需要部分無服務(wù)器的體系結(jié)構(gòu),因?yàn)檫@樣做需要將某些進(jìn)程移出源站。

開發(fā)人員應(yīng)在何時(shí)避免使用無服務(wù)器架構(gòu)?

從成本角度和系統(tǒng)體系結(jié)構(gòu)角度來看,在某些情況下,使用自行管理或作為服務(wù)提供的專用服務(wù)器更為有意義。例如,具有相當(dāng)恒定、可預(yù)測(cè)的工作負(fù)載的大型應(yīng)用程序可能需要傳統(tǒng)設(shè)置,在這種情況下,傳統(tǒng)設(shè)置產(chǎn)生的成本可能會(huì)更低廉。

另外,將遺留應(yīng)用程序遷移到具有完全不同的體系結(jié)構(gòu)的新基礎(chǔ)設(shè)施可能會(huì)非常困難。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Cloudflare,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家