自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入理解Serverless架構(gòu)

云計(jì)算
隨著2014年AWS Lambda的發(fā)布和流行,近年來有關(guān)Serverless的話題和討論越來越頻繁。究竟什么是Serverless?為什么需要Serverless? Serverless是否意味著從此不再需要服務(wù)器了?Serverless究竟能為開發(fā)運(yùn)維帶來哪些便利呢?

隨著2014年AWS Lambda的發(fā)布和流行,近年來有關(guān)Serverless的話題和討論越來越頻繁。究竟什么是Serverless?為什么需要Serverless? Serverless是否意味著從此不再需要服務(wù)器了?Serverless究竟能為開發(fā)運(yùn)維帶來哪些便利呢?

[[215205]]

回溯本源

讓我們先來回顧一下常見的應(yīng)用服務(wù)開發(fā)上線流程。

一、直接使用物理設(shè)備

開發(fā)者將應(yīng)用程序開發(fā)測(cè)試完畢后,直接將程序和相關(guān)軟件部署在物理設(shè)備上。服務(wù)器直接使用物理機(jī)。這種方式將不可避免地需要大量人工運(yùn)維和重復(fù)勞動(dòng)。比方說,用戶數(shù)量逐漸增長(zhǎng)時(shí),我們需要擴(kuò)容物理設(shè)備以應(yīng)對(duì)更高的網(wǎng)站訪問壓力。這時(shí)候我們需要購(gòu)置更多的物理服務(wù)器,并且搬運(yùn)到機(jī)房的對(duì)應(yīng)機(jī)架機(jī)柜中。然后,我們需要手動(dòng)為新購(gòu)置的物理服務(wù)器安裝各種運(yùn)行軟件,填寫好配置文件,手動(dòng)部署啟動(dòng)好需要運(yùn)行的應(yīng)用程序。這些大量的重復(fù)運(yùn)維勞動(dòng)造成產(chǎn)品上線慢,迭代周期長(zhǎng)。其次,使用物理設(shè)備直接部署應(yīng)用程序?qū)?dǎo)致資源浪費(fèi)。如今的物理服務(wù)器的配置越來越強(qiáng)大,64核128G在今天看來也不過是普通配置。很難想象你買了一臺(tái)32核的物理機(jī),卻只想搭建個(gè)人博客。此外,電商行業(yè)經(jīng)常為了應(yīng)對(duì)促銷秒殺等活動(dòng)準(zhǔn)備大量的物理資源,然而在非促銷等流量低谷時(shí)段,大量物理資源處理閑置狀態(tài),不利于節(jié)約成本。

最后,為了解決資源浪費(fèi)的問題,我們很容易想到,可以將多個(gè)應(yīng)用程序部署在同一臺(tái)服務(wù)器上來充分利用資源。但由此又導(dǎo)致了新的麻煩,不同的應(yīng)用程序經(jīng)常會(huì)搶占CPU,磁盤IO,內(nèi)存,難以做到隔離資源,各行其是,互不干擾。

二、IaaS托管硬件

虛擬化技術(shù)的成熟直接解決了上述直接使用物理設(shè)備的幾個(gè)痛點(diǎn)。

首先,使用IaaS平臺(tái),服務(wù)器由物理機(jī)變成了虛擬機(jī)。申請(qǐng)服務(wù)器資源僅需要調(diào)用IaaS平臺(tái)的API或者點(diǎn)擊控制臺(tái)頁面就可以輕松完成。CPU個(gè)數(shù),內(nèi)存大小,網(wǎng)絡(luò)帶寬,存儲(chǔ)磁盤大小都可以按需指定,隨心所欲。虛擬機(jī)被玩壞了也不需要重裝系統(tǒng)修復(fù),刪除重建新虛擬機(jī)即可。擴(kuò)容服務(wù)器不再需要大量的重復(fù)人工運(yùn)維勞動(dòng),加速了產(chǎn)品上線和迭代。

其次,使用IaaS平臺(tái)一定程度上減輕了資源浪費(fèi)。在IaaS平臺(tái)上很容易申請(qǐng)和刪除虛擬機(jī),升降帶寬配置等操作,這樣當(dāng)業(yè)務(wù)低谷時(shí)段直接刪除多余的虛擬機(jī),降低帶寬購(gòu)買配額,就能節(jié)約不少成本。

最后,IaaS平臺(tái)解決了資源隔離的問題。不同虛擬機(jī)之間有獨(dú)立CPU,內(nèi)存,磁盤,網(wǎng)卡,不同虛擬機(jī)之間的程序不會(huì)進(jìn)行資源搶占。

然而,IaaS平臺(tái)僅僅為開發(fā)者做好了硬件托管的工作。開發(fā)者依然需要為虛擬機(jī)安裝操作系統(tǒng)和各種軟件,填寫配置并部署應(yīng)用;依然需要關(guān)注服務(wù)器,帶寬,存儲(chǔ)等資源的使用量和擴(kuò)容縮容。此外,IaaS平臺(tái)沒有完全解決資源浪費(fèi)的問題,實(shí)際上,大量虛擬機(jī)在日常運(yùn)行中依然存在超低負(fù)載運(yùn)行的情況。

三、 PaaS托管應(yīng)用

使用PaaS平臺(tái),開發(fā)者無需關(guān)注服務(wù)器的申請(qǐng)采購(gòu)、系統(tǒng)安裝和資源容量。PaaS服務(wù)提供商為開發(fā)者提供好了操作系統(tǒng)和開發(fā)環(huán)境以及支持的SDK和API,還能自動(dòng)調(diào)整資源來幫助應(yīng)用服務(wù)更好的應(yīng)對(duì)突發(fā)流量。有了PaaS平臺(tái),開發(fā)者僅僅需要把應(yīng)用開發(fā)好,然后在PaaS平臺(tái)完成服務(wù)部署,應(yīng)用服務(wù)即可上線。

相比IaaS平臺(tái),PaaS平臺(tái)能更加精準(zhǔn)地為應(yīng)用程序所消耗的資源計(jì)費(fèi)。IaaS平臺(tái)僅僅依據(jù)用戶申請(qǐng)的資源量,如CPU核心數(shù),網(wǎng)絡(luò)帶寬來計(jì)費(fèi),而不關(guān)注用戶是否實(shí)際真正充分使用到了其所申請(qǐng)到的資源。PaaS平臺(tái)則可以通過統(tǒng)計(jì)應(yīng)用程序所占用的CPU使用率和內(nèi)存使用率來做的更精準(zhǔn)的計(jì)費(fèi),甚至可以實(shí)現(xiàn)應(yīng)用層面的計(jì)費(fèi),比如服務(wù)響應(yīng)時(shí)間,或者應(yīng)用所消耗的事務(wù)。

1. 什么是Serverless?

Serverless指的是由開發(fā)者實(shí)現(xiàn)的服務(wù)端邏輯運(yùn)行在無狀態(tài)的計(jì)算容器中,它由事件觸發(fā), 完全被第三方管理,其業(yè)務(wù)層面的狀態(tài)則被開發(fā)者使用的數(shù)據(jù)庫(kù)和存儲(chǔ)資源所記錄。

以上圖為例,圖中上半部分描述的是互聯(lián)網(wǎng)應(yīng)用傳統(tǒng)架構(gòu)的模型:用戶客戶端APP與部署在服務(wù)器端的常駐進(jìn)程通信,服務(wù)端進(jìn)程處理該應(yīng)用的大部分業(yè)務(wù)邏輯流程。下半部分則描述了Serverless架構(gòu)模型。與傳統(tǒng)架構(gòu)模型最大的不同在于,互聯(lián)網(wǎng)應(yīng)用的大部分業(yè)務(wù)邏輯流程被轉(zhuǎn)移到客戶端上,客戶端通過調(diào)用第三方服務(wù)接口來完成諸如登錄、鑒權(quán)、讀取數(shù)據(jù)庫(kù)等通用業(yè)務(wù)場(chǎng)景;高度定制化的業(yè)務(wù)邏輯則通過調(diào)用第三方FaaS平臺(tái)執(zhí)行自定義代碼來完成。總體上看,Serverless架構(gòu)將傳統(tǒng)架構(gòu)中的服務(wù)器端的整串后臺(tái)流程拆分成在客戶端上執(zhí)行一個(gè)個(gè)第三方服務(wù)調(diào)用或FaaS調(diào)用。

回顧之前所述,無論是直接使用物理服務(wù)器設(shè)備部署程序,還是基于IaaS平臺(tái)托管硬件,或者使用PaaS平臺(tái)托管應(yīng)用,開發(fā)部署互聯(lián)網(wǎng)應(yīng)用都離不開傳統(tǒng)的客戶端-服務(wù)器模式,即客戶端向服務(wù)端發(fā)送請(qǐng)求,服務(wù)器運(yùn)行處理各種業(yè)務(wù)邏輯,并響應(yīng)來自客戶端的請(qǐng)求。至于物理機(jī),IaaS乃至PaaS,歸根結(jié)底只是服務(wù)器程序的部署模式不同。

而在Serverless架構(gòu)中,軟件開發(fā)者和運(yùn)維工程師們不在需要關(guān)心服務(wù)器的部署、架設(shè)、伸縮,這些問題交給云平臺(tái)商來解決,程序員們得以將精力投入用代碼來實(shí)現(xiàn)業(yè)務(wù)邏輯中,而不是管理服務(wù)器。Serverless并不意味著不再需要服務(wù)器了,只是服務(wù)器資源的申請(qǐng)、使用、調(diào)度、伸縮由云服務(wù)商自動(dòng)實(shí)現(xiàn),應(yīng)用開發(fā)者無需關(guān)心。

2. Serverless如何工作?

以一個(gè)簡(jiǎn)單需求為例,論壇網(wǎng)站需要對(duì)用戶上傳的圖片生成一個(gè)縮略圖。

我們使用UCloud的通用計(jì)算(UGC)來實(shí)現(xiàn)該功能。

如上圖所示,使用UGC實(shí)現(xiàn)這一功能操作步驟如下:

  • 用戶將縮略圖算法代碼打包推送到UGC算法倉(cāng)庫(kù)中;
  • 用戶從UFile中讀取原始圖片作為輸入數(shù)據(jù),調(diào)用UGC SubmitTask API,指定縮略圖算法;
  • UGC平臺(tái)執(zhí)行縮略圖轉(zhuǎn)換算法,將轉(zhuǎn)換后的縮略圖返回給用戶;
  • 用戶將得到的結(jié)果縮略圖存儲(chǔ)到UFile中。

整個(gè)過程中,開發(fā)者僅僅需要將縮略圖算法實(shí)現(xiàn)函數(shù)代碼鏡像提交到UGC算法倉(cāng)庫(kù)中,然后調(diào)用UGC的提交任務(wù)API,輸入源圖片數(shù)據(jù),即可獲得計(jì)算結(jié)果。

從以上過程可以總結(jié)出:使用Serverless,開發(fā)者無需考慮服務(wù)器細(xì)節(jié),只需要負(fù)責(zé)編寫發(fā)生某些事件后所需執(zhí)行的代碼。云供應(yīng)商將負(fù)責(zé)提供用于運(yùn)行這些代碼的服務(wù)器,并在必要時(shí)對(duì)服務(wù)器進(jìn)行縮放。執(zhí)行完畢后,承擔(dān)這些功能的容器會(huì)立刻停用,用戶只需為運(yùn)行代碼過程中所消耗的資源付費(fèi)。這種模式也被稱為做函數(shù)即服務(wù)(Function-as-a-Service,F(xiàn)aaS)。

3. 與非Serverless方案的對(duì)比

上述場(chǎng)景如果使用非Serverless方案,大體架構(gòu)如下:

該方案需要維護(hù)一組UHost服務(wù)集群,服務(wù)器中部署圖片縮略轉(zhuǎn)換程序。UHost的服務(wù)程序先從UFile中讀取源圖片,使用圖形庫(kù)將其轉(zhuǎn)換成縮略圖并再存回UFile中。相比之前的Serverless方案,有以下幾點(diǎn)對(duì)比:

  • 開發(fā)者需要關(guān)心服務(wù)器端程序開發(fā)設(shè)計(jì),將圖片處理程序部署成服務(wù)端程序,并購(gòu)置服務(wù)器部署并運(yùn)維管理這批UHost服務(wù)器。而使用UGC,開發(fā)者無需關(guān)注服務(wù)器端,只需要將圖形庫(kù)函數(shù)提交到UGC算法倉(cāng)庫(kù)中并調(diào)用UGC API完成計(jì)算任務(wù)即可。
  • UHost集群無法自動(dòng)為突發(fā)流量自動(dòng)伸縮擴(kuò)容,需要運(yùn)維工程師手動(dòng)購(gòu)置更多的UHost并部署上線擴(kuò)容。而UGC能根據(jù)突發(fā)的流量自動(dòng)伸縮,運(yùn)行更多的函數(shù)容器。
  • UHost服務(wù)器只要在運(yùn)行就必須為之付費(fèi),無論請(qǐng)求量和負(fù)載的高低。UGC只需要為實(shí)際的調(diào)用次數(shù)和函數(shù)實(shí)際執(zhí)行時(shí)間付費(fèi),真正實(shí)現(xiàn)了按需分配付費(fèi)。

4. Serverless相比PaaS的特點(diǎn)

相比PaaS,Serverless在以下幾個(gè)方面更具優(yōu)勢(shì):

  • 開發(fā)者無需關(guān)注服務(wù)器程序設(shè)計(jì),部署和運(yùn)維管理,開代碼重心從此轉(zhuǎn)移到調(diào)用方而非服務(wù)器端。
  • 更精細(xì)粒度的計(jì)費(fèi)模式,真正實(shí)現(xiàn)了按需付費(fèi)(Pay as you go)。使用PaaS托管應(yīng)用,只要將應(yīng)用部署上去,無論訪問量或者負(fù)載高低,都需要計(jì)費(fèi)。而使用Serverless,用戶僅僅需要為函數(shù)真正調(diào)用到的次數(shù)和執(zhí)行時(shí)間付費(fèi)。

4. 使用Serverless前,你需要了解的Serverless的適用場(chǎng)景特點(diǎn)

  • Serverless平臺(tái)運(yùn)行的是代碼函數(shù)的片段,而不是整個(gè)程序。例如生成縮略圖場(chǎng)景中,UGC僅僅運(yùn)行的是用圖形庫(kù)處理圖片這段代碼。
  • 代碼必須做徹底的無狀態(tài)改造。Serverless平臺(tái)會(huì)自動(dòng)為突發(fā)的流量自動(dòng)擴(kuò)展運(yùn)行函數(shù)代碼所需要的容器,但用戶代碼中無法得知其容器的部署環(huán)境情況。兩次不同的Serverless調(diào)用必須是非耦合無關(guān)聯(lián)的。
  • 用戶無需關(guān)注水平擴(kuò)展,Serverless平臺(tái)會(huì)自動(dòng)根據(jù)調(diào)用量擴(kuò)展運(yùn)行代碼所需要的容器,輕松做到高并發(fā)調(diào)用。
  • 僅僅需要上傳代碼文件或者代碼容器鏡像即可完成應(yīng)用部署。
  • 代碼運(yùn)行的生命周期非常短暫。通常Serverless服務(wù)商,會(huì)限制代碼的最大運(yùn)行時(shí)間,例如AWS Lambda為5分鐘。
  • 每次Serverless調(diào)用,Serverless平臺(tái)都會(huì)啟動(dòng)容器來運(yùn)行對(duì)應(yīng)代碼,調(diào)用結(jié)束后將容器銷毀。因?yàn)槿萜鲃?chuàng)建存在一定開銷,所以Serverless不太適合對(duì)延遲要求及其苛刻的場(chǎng)景。

5. 不是銀彈

Serveless架構(gòu)在某些場(chǎng)景下?lián)碛忻黠@的優(yōu)勢(shì),但它不是解決一切架構(gòu)問題的靈丹妙藥,更不是傳統(tǒng)架構(gòu)的革命者和替代者。架構(gòu)上說,Serverless更像是一種粘合劑。以下是一些常見的不適用Serverless的情況。

Serverless平臺(tái)需要為每次FaaS調(diào)用創(chuàng)建一個(gè)容器運(yùn)行對(duì)應(yīng)代碼。前面提到過,由于創(chuàng)建容器并初始化代碼運(yùn)行環(huán)境存在一定程度的開銷和延時(shí)(通常在10ms級(jí)),Serverless架構(gòu)難以勝任對(duì)延遲要求非??量痰膱?chǎng)景。

同樣的,由于啟動(dòng)容器進(jìn)程開銷較高,Serverless架構(gòu)難以應(yīng)對(duì)非常高的并發(fā)請(qǐng)求場(chǎng)景。通常云服務(wù)商會(huì)對(duì)用戶的并發(fā)調(diào)用數(shù)做限制,比如AWS Lambda是1000。

通常FaaS平臺(tái)會(huì)對(duì)代碼運(yùn)行時(shí)間做最大時(shí)間限制。如果你的代碼需要運(yùn)行較長(zhǎng)時(shí)間才能返回結(jié)果,需要慎重考慮使用Serverless。例如剛才提到的,AWS Lambda對(duì)代碼最大運(yùn)行時(shí)間限制為5分鐘。

由于代碼容器在Serverless平臺(tái)部署位置環(huán)境的不確定性,使用Serverless時(shí),我們必須對(duì)代碼做無狀態(tài)改造。如果你兩次調(diào)用存在關(guān)聯(lián)偶合,同樣請(qǐng)慎重考慮Serverless。

6. 其他主流公有云服務(wù)商Serverless產(chǎn)品

除了眾所周知的AWS Lambda,目前常見的Serverless產(chǎn)品還有前文提到的UCloud的通用計(jì)算 (UGC),官網(wǎng):https://www.ucloud.cn/site/product/ugc.html。

UCloud通用計(jì)算UGC具備以下特性:

  • 用戶無需關(guān)心計(jì)算資源的的交付部署,以用戶算法代碼為中心;計(jì)算資源服務(wù)化,用戶通過API使用計(jì)算資源;
  • 按需付費(fèi)(Pay As You Go)。用戶僅需要為實(shí)際消耗的計(jì)算資源付費(fèi);
  • 提供十萬核級(jí)的海量計(jì)算資源,輕松支持高并發(fā)計(jì)算任務(wù)請(qǐng)求,自動(dòng)實(shí)現(xiàn)資源分配和擴(kuò)展;
  • 具備高可用和跨可用區(qū)自動(dòng)容災(zāi)能力。

作為UCloud研發(fā)的分布式大規(guī)模并行計(jì)算服務(wù),UGC能夠充分利用UCloud多個(gè)區(qū)域內(nèi)的多個(gè)可用區(qū)的計(jì)算資源,提供基于UCloud云平臺(tái)的高可用性和高并發(fā)性,同時(shí)滿足圖片處理、機(jī)器學(xué)習(xí)、大數(shù)據(jù)處理、生物數(shù)據(jù)分析等領(lǐng)域的計(jì)算需求。

責(zé)任編輯:趙寧寧 來源: ucloud博客
相關(guān)推薦

2019-03-18 15:36:32

無服務(wù)器FaasServerless

2023-06-07 15:34:21

架構(gòu)層次結(jié)構(gòu)

2018-12-27 12:34:42

HadoopHDFS分布式系統(tǒng)

2018-04-16 11:04:23

HBaseRegion Serv數(shù)據(jù)庫(kù)

2022-01-14 12:28:18

架構(gòu)OpenFeign遠(yuǎn)程

2019-03-18 09:50:44

Nginx架構(gòu)服務(wù)器

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2021-09-03 09:55:43

架構(gòu)Yarn內(nèi)部

2023-01-16 18:32:15

架構(gòu)APNacos

2019-09-24 13:41:22

Hadoop面試分布式

2014-11-27 15:32:31

openstacknetworkovs

2021-09-10 07:31:54

AndroidAppStartup原理

2013-09-22 14:57:19

AtWood

2009-09-25 09:14:35

Hibernate日志

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2020-09-23 10:00:26

Redis數(shù)據(jù)庫(kù)命令

2017-01-10 08:48:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)