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

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

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

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

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

無需服務(wù)器管理

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

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

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

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

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

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

快速部署和更新

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

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

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

因?yàn)閼?yīng)用程序未托管在源站,所以它的代碼可以在任何地方運(yùn)行。因此,根據(jù)所使用的供應(yīng)商,應(yīng)用程序函數(shù)可能在接近最終用戶的服務(wù)器上運(yùn)行。這減少了等待時間,因?yàn)閬碜杂脩舻恼埱蟛辉俦仨氁恢眰鬟f到源站。Cloudflare Workers支持這種無服務(wù)器延遲縮減。

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

測試和調(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是一個沙箱,可幫助減少測試和調(diào)試中的摩擦。

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

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

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

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

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

性能可能會受到影響

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

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

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

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

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

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

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

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

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

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

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

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Cloudflare,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多