溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

通通透透看無(wú)服務(wù)器計(jì)算:由來(lái)、場(chǎng)景和問(wèn)題

發(fā)布時(shí)間:2020-07-25 00:00:49 來(lái)源:網(wǎng)絡(luò) 閱讀:2610 作者:xjsunjie 欄目:云計(jì)算

一、 無(wú)服務(wù)器(Serverless)計(jì)算是什么
通通透透看無(wú)服務(wù)器計(jì)算:由來(lái)、場(chǎng)景和問(wèn)題
云計(jì)算涌現(xiàn)出很多改變傳統(tǒng)IT架構(gòu)和運(yùn)維方式的新技術(shù),比如虛擬機(jī)、容器、微服務(wù),無(wú)論這些技術(shù)應(yīng)用在哪些場(chǎng)景,降低成本、提升效率是云服務(wù)永恒的主題。過(guò)去十年來(lái),我們已經(jīng)把應(yīng)用和環(huán)境中很多通用的部分變成了服務(wù)。Serverless的出現(xiàn),帶來(lái)了跨越式變革。Serverless把主機(jī)管理、操作系統(tǒng)管理、資源分配、擴(kuò)容,甚至是應(yīng)用邏輯的全部組件都外包出去,把它們看作某種形式的商品——廠商提供服務(wù),我們掏錢(qián)購(gòu)買(mǎi)。過(guò)去是“構(gòu)建一個(gè)框架運(yùn)行在一臺(tái)服務(wù)器上,對(duì)多個(gè)事件進(jìn)行響應(yīng)”,Serverless則變?yōu)椤皹?gòu)建或使用一個(gè)微服務(wù)或微功能來(lái)響應(yīng)一個(gè)事件”,做到當(dāng)訪問(wèn)時(shí),調(diào)入相關(guān)資源開(kāi)始運(yùn)行,運(yùn)行完成后,卸載所有開(kāi)銷(xiāo),真正做到按需按次計(jì)費(fèi)。這是云計(jì)算向縱深發(fā)展的一種自然而然的過(guò)程。
Serverless是一種構(gòu)建和管理基于微服務(wù)架構(gòu)的完整流程,允許你在服務(wù)部署級(jí)別而不是服務(wù)器部署級(jí)別來(lái)管理你的應(yīng)用部署。它與傳統(tǒng)架構(gòu)的不同之處在于,完全由第三方管理,由事件觸發(fā),存在于無(wú)狀態(tài)(Stateless)、暫存(可能只存在于一次調(diào)用的過(guò)程中)計(jì)算容器內(nèi)。構(gòu)建無(wú)服務(wù)器應(yīng)用程序意味著開(kāi)發(fā)者可以專注在產(chǎn)品代碼上,而無(wú)須管理和操作云端或本地的服務(wù)器或運(yùn)行時(shí)。Serverless真正做到了部署應(yīng)用無(wú)需涉及基礎(chǔ)設(shè)施的建設(shè),自動(dòng)構(gòu)建、部署和啟動(dòng)服務(wù)。
國(guó)內(nèi)外的各大云廠商 Amazon、微軟、Google、IBM、阿里云、騰訊云、華為云相繼推出Serverless產(chǎn)品,Serverless也從概念、愿景逐步走向落地,在各企業(yè)、公司應(yīng)用開(kāi)來(lái)。

二、 理解Serverless技術(shù)---FaaS和BaaS
Serverless由開(kāi)發(fā)者實(shí)現(xiàn)的服務(wù)端邏輯運(yùn)行在無(wú)狀態(tài)的計(jì)算容器中,它由事件觸發(fā), 完全被第三方管理,其業(yè)務(wù)層面的狀態(tài)則被開(kāi)發(fā)者使用的數(shù)據(jù)庫(kù)和存儲(chǔ)資源所記錄。
Serverless涵蓋了很多技術(shù),分為兩類(lèi):FaaS和BaaS。
1)Function-as-a-Service (FaaS)
? 小段代碼,按需執(zhí)?,按需擴(kuò)展,無(wú)需管理任何基礎(chǔ)實(shí)施相關(guān)的部分。
? 事件驅(qū)動(dòng)型計(jì)算。函數(shù)被事件觸發(fā)或者被HTTP請(qǐng)求調(diào)用。
2)Backend-as-a-Service (BaaS)
? 第三方基于API的服務(wù),實(shí)現(xiàn)應(yīng)用開(kāi)發(fā)中的基礎(chǔ)功能模塊。
? 這些API像服務(wù)一樣,自動(dòng)擴(kuò)展,無(wú)需管理。

1.Faas
FaaS意在無(wú)須自行管理服務(wù)器系統(tǒng)或自己的服務(wù)器應(yīng)用程序,即可直接運(yùn)行后端代碼。其中所指的服務(wù)器應(yīng)用程序,是該技術(shù)與容器和PaaS(平臺(tái)即服務(wù))等其他現(xiàn)代化架構(gòu)最大的差異。
FaaS可以取代一些服務(wù)處理服務(wù)器(可能是物理計(jì)算機(jī),但絕對(duì)需要運(yùn)行某種應(yīng)用程序),這樣不僅不需要自行供應(yīng)服務(wù)器,也不需要全時(shí)運(yùn)行應(yīng)用程序。
FaaS產(chǎn)品不要求必須使用特定框架或庫(kù)進(jìn)行開(kāi)發(fā)。在語(yǔ)言和環(huán)境方面,F(xiàn)aaS函數(shù)就是常規(guī)的應(yīng)用程序。例如AWS Lambda的函數(shù)可以通過(guò)Javascript、Python以及任何JVM語(yǔ)言(Java、Clojure、Scala)等實(shí)現(xiàn)。然而Lambda函數(shù)也可以執(zhí)行任何捆綁有所需部署構(gòu)件的進(jìn)程,因此可以使用任何語(yǔ)言,只要能編譯為Unix進(jìn)程即可。FaaS函數(shù)在架構(gòu)方面確實(shí)存在一定的局限,尤其是在狀態(tài)和執(zhí)行時(shí)間方面。
在遷往FaaS的過(guò)程中,唯一需要修改的代碼是“主方法/啟動(dòng)”代碼,其中可能需要?jiǎng)h除頂級(jí)消息處理程序的相關(guān)代碼(“消息監(jiān)聽(tīng)器接口”的實(shí)現(xiàn)),但這可能只需要更改方法簽名即可。在FaaS的世界中,代碼的其余所有部分(例如向數(shù)據(jù)庫(kù)執(zhí)行寫(xiě)入的代碼)無(wú)須任何變化。
相比傳統(tǒng)系統(tǒng),部署方法會(huì)有較大變化 – 將代碼上傳至FaaS供應(yīng)商,其他事情均可由供應(yīng)商完成。目前這種方式通常意味著需要上傳代碼的全新定義(例如上傳zip或JAR文件),隨后調(diào)用一個(gè)專有API發(fā)起更新過(guò)程。
FaaS中的函數(shù)可以通過(guò)供應(yīng)商定義的事件類(lèi)型觸發(fā)。對(duì)于亞馬遜AWS,此類(lèi)觸發(fā)事件可以包括S3(文件)更新、時(shí)間(計(jì)劃任務(wù)),以及加入消息總線的消息(例如Kinesis)。通常你的函數(shù)需要通過(guò)參數(shù)指定自己需要綁定到的事件源。
大部分供應(yīng)商還允許函數(shù)作為對(duì)傳入Http請(qǐng)求的響應(yīng)來(lái)觸發(fā),通常這類(lèi)請(qǐng)求來(lái)自某種該類(lèi)型的API網(wǎng)關(guān)(例如AWS API網(wǎng)關(guān)、Webtask)。

2.Baas
BaaS(Backend as a Service,后端即服務(wù))是指我們不再編寫(xiě)或管理所有服務(wù)端組件,可以使用領(lǐng)域通用的遠(yuǎn)程組件(而不是進(jìn)程內(nèi)的庫(kù))來(lái)提供服務(wù)。理解BaaS,需要搞清楚它與PaaS的區(qū)別。
首先BaaS并非PaaS,它們的區(qū)別在于:PaaS需要參與應(yīng)用的生命周期管理,BaaS則僅僅提供應(yīng)用依賴的第三方服務(wù)。典型的PaaS平臺(tái)需要提供手段讓開(kāi)發(fā)者部署和配置應(yīng)用,例如自動(dòng)將應(yīng)用部署到Tomcat容器中,并管理應(yīng)用的生命周期。BaaS不包含這些內(nèi)容,BaaS只以API的方式提供應(yīng)用依賴的后端服務(wù),例如數(shù)據(jù)庫(kù)和對(duì)象存儲(chǔ)。BaaS可以是公共云服務(wù)商提供的,也可以是第三方廠商提供的。其次從功能上講,BaaS可以看作PaaS的一個(gè)子集,即提供第三方依賴組件的部分。

BaaS服務(wù)還允許我們依賴其他人已經(jīng)實(shí)現(xiàn)的應(yīng)用邏輯。對(duì)于這點(diǎn),認(rèn)證就是一個(gè)很好的例子。很多應(yīng)用都要自己編寫(xiě)實(shí)現(xiàn)注冊(cè)、登錄、密碼管理等邏輯的代碼,而對(duì)于不同的應(yīng)用這些代碼往往大同小異。完全可以把這些重復(fù)性的工作提取出來(lái),再做成外部服務(wù),而這正是Auth0和Amazon Cognito等產(chǎn)品的目標(biāo)。它們能實(shí)現(xiàn)全面的認(rèn)證和用戶管理,開(kāi)發(fā)團(tuán)隊(duì)再也不用自己編寫(xiě)或者管理實(shí)現(xiàn)這些功能的代碼。

三、 無(wú)服務(wù)器(Serverless)計(jì)算如何工作?
與使用虛擬機(jī)或一些底層的技術(shù)來(lái)部署和管理應(yīng)用程序相比,無(wú)服務(wù)器計(jì)算提供了一種更高級(jí)別的抽象。因?yàn)樗鼈冇胁煌某橄蠛汀坝|發(fā)器”的集合。
拿計(jì)算來(lái)講,這種抽象有一個(gè)特定函數(shù)和抽象的觸發(fā)器,它通常是一個(gè)事件。以數(shù)據(jù)庫(kù)為例,這種抽象也許是一個(gè)表,而觸發(fā)器相當(dāng)于表的查詢或搜索,或者通過(guò)在表中做一些事情而生成的事件。
比如一款手機(jī)游戲,允許用戶在不同的平臺(tái)上為全球頂級(jí)玩家使用高分?jǐn)?shù)表。當(dāng)請(qǐng)求此信息時(shí),請(qǐng)求從應(yīng)用程序到API接口。API接口或許會(huì)觸發(fā)AWS的Lambda函數(shù),或者無(wú)服務(wù)器函數(shù),這些函數(shù)再?gòu)臄?shù)據(jù)庫(kù)表中獲取到數(shù)據(jù)流,返回包含前五名分?jǐn)?shù)的一定格式的數(shù)據(jù)。
一旦構(gòu)建完成,應(yīng)用程序的功能就可以在基于移動(dòng)和基于 Web 的游戲版本中重用。
這跟設(shè)置服務(wù)器不同,不是必須要有Amazon EC2實(shí)例或服務(wù)器,然后等待請(qǐng)求。環(huán)境由事件觸發(fā),而響應(yīng)事件所需的邏輯只在響應(yīng)時(shí)執(zhí)行。這意味著,運(yùn)行函數(shù)的資源只有在函數(shù)運(yùn)行時(shí)被創(chuàng)建,產(chǎn)生一種非常高效的方法來(lái)構(gòu)建應(yīng)用程序。

四、 無(wú)服務(wù)器(Serverless)適用于哪些場(chǎng)景?
通通透透看無(wú)服務(wù)器計(jì)算:由來(lái)、場(chǎng)景和問(wèn)題
在現(xiàn)階段,Serverless主要應(yīng)用在以下幾個(gè)場(chǎng)景。首先在Web及移動(dòng)端服務(wù)中,可以整合API網(wǎng)關(guān)和Serverles服務(wù)構(gòu)建Web及移動(dòng)后端,幫助開(kāi)發(fā)者構(gòu)建可彈性擴(kuò)展、高可用的移動(dòng)或 Web后端應(yīng)用服務(wù)。在IoT場(chǎng)景下可高效的處理實(shí)時(shí)流數(shù)據(jù),由設(shè)備產(chǎn)生海量的實(shí)時(shí)信息流數(shù)據(jù),通過(guò)Serverles服務(wù)分類(lèi)處理并寫(xiě)入后端處理。另外在實(shí)時(shí)媒體資訊內(nèi)容處理場(chǎng)景里,用戶上傳的音視頻到對(duì)象存儲(chǔ)OBS,通過(guò)上傳事件觸發(fā)多個(gè)函數(shù),分別完成高清轉(zhuǎn)碼、音頻轉(zhuǎn)碼等功能,滿足用戶對(duì)實(shí)時(shí)性和并發(fā)能力的高要求。無(wú)服務(wù)器計(jì)算還適合于任何事件驅(qū)動(dòng)的各種不同的用例,這包括物聯(lián)網(wǎng),移動(dòng)應(yīng)用,基于網(wǎng)絡(luò)的應(yīng)用程序和聊天機(jī)器人等。這里簡(jiǎn)單說(shuō)兩個(gè)場(chǎng)景,方便大家思考。
場(chǎng)景一:應(yīng)用負(fù)載有顯著的波峰波谷
Serverless 應(yīng)用成功與否的評(píng)判標(biāo)準(zhǔn)并不是公司規(guī)模的大小,而是其業(yè)務(wù)背后的具體技術(shù)問(wèn)題,比如業(yè)務(wù)波峰波谷明顯,如何實(shí)現(xiàn)削峰填谷。一個(gè)公司的業(yè)務(wù)負(fù)載具有波峰波谷時(shí),機(jī)器資源要按照峰值需求預(yù)估;而在波谷時(shí)期機(jī)器利用率則明顯下降,因?yàn)椴荒苓M(jìn)行資源復(fù)用而導(dǎo)致浪費(fèi)。

業(yè)界普遍共識(shí)是,當(dāng)自有機(jī)器的利用率小于 30%,使用 Serverless 后會(huì)有顯著的效率提升。對(duì)于云服務(wù)廠商,在具備了足夠多的用戶之后,各種波峰波谷疊加后平穩(wěn)化,聚合之后資源復(fù)用性更高。比如,外賣(mài)企業(yè)負(fù)載高峰是在用餐時(shí)期,安防行業(yè)的負(fù)載高峰則是夜間,這是受各個(gè)企業(yè)業(yè)務(wù)定位所限的;而對(duì)于一個(gè)成熟的云服務(wù)廠商,如果其平臺(tái)足夠大,用戶足夠多,是不應(yīng)該有明顯的波峰波谷現(xiàn)象的。

場(chǎng)景二:典型用例 - 基于事件的數(shù)據(jù)處理
視頻處理的后端系統(tǒng),常見(jiàn)功能需求如下:視頻轉(zhuǎn)碼、抽取數(shù)據(jù)、人臉識(shí)別等,這些均為通用計(jì)算任務(wù),可由函數(shù)計(jì)算執(zhí)行。
開(kāi)發(fā)者需要自己寫(xiě)出實(shí)現(xiàn)邏輯,再將任務(wù)按照控制流連接起來(lái),每個(gè)任務(wù)的具體執(zhí)行由云廠商來(lái)負(fù)責(zé)。如此,開(kāi)發(fā)變得更便捷,并且構(gòu)建的系統(tǒng)天然高可用、實(shí)時(shí)彈性伸縮,用戶不需要關(guān)心機(jī)器層面問(wèn)題。

五、Serverless 的問(wèn)題
對(duì)于企業(yè)來(lái)說(shuō),支持Serverless計(jì)算的平臺(tái)可以節(jié)省大量時(shí)間和成本,同時(shí)可以釋放員工,讓開(kāi)發(fā)者得以開(kāi)展更有價(jià)值的工作,而不是管理基礎(chǔ)設(shè)施。另一方面可以提高敏捷度,更快速地推出新應(yīng)用和新服務(wù),進(jìn)而提高客戶滿意度。但是Serverless不是完美的,它也存在一些問(wèn)題,需要慎重應(yīng)用在生產(chǎn)環(huán)境。
1、不適合長(zhǎng)時(shí)間運(yùn)行應(yīng)用
Serverless 在請(qǐng)求到來(lái)時(shí)才運(yùn)行。這意味著,當(dāng)應(yīng)用不運(yùn)行的時(shí)候就會(huì)進(jìn)入 “休眠狀態(tài)”,下次當(dāng)請(qǐng)求來(lái)臨時(shí),應(yīng)用將會(huì)需要一個(gè)啟動(dòng)時(shí)間,即冷啟動(dòng)時(shí)間。如果你的應(yīng)用需要一直長(zhǎng)期不間斷的運(yùn)行、處理大量的請(qǐng)求,那么你可能就不適合采用 Serverless 架構(gòu)。如果你通過(guò) CRON 的方式或者 CloudWatch 來(lái)定期喚醒應(yīng)用,又會(huì)比較消耗資源。這就需要我們對(duì)它做優(yōu)化,如果頻繁調(diào)用,這個(gè)資源將會(huì)常駐內(nèi)存,第一次冷啟之后,就可以一直服務(wù),直到一段時(shí)間內(nèi)沒(méi)有新的調(diào)用請(qǐng)求進(jìn)來(lái),則會(huì)轉(zhuǎn)入“休眠”狀態(tài),甚至被回收,從而不消耗任何資源。
2、完全依賴于第三方服務(wù)
當(dāng)你所在的企業(yè)云環(huán)境已經(jīng)有大量的基礎(chǔ)設(shè)施的時(shí)候,Serverless 對(duì)于你來(lái)說(shuō),并不是一個(gè)好東西。當(dāng)我們采用某云服務(wù)廠商的 Serverless 架構(gòu)時(shí),我們就和該服務(wù)供應(yīng)商綁定了,那么我們?cè)賹⒎?wù)遷到別的云服務(wù)商上就沒(méi)有那么容易了。

我們需要修改一下系列的底層代碼,能采取的應(yīng)對(duì)方案,便是建立隔離層。這意味著,在設(shè)計(jì)應(yīng)用的時(shí)候,就需要隔離 API 網(wǎng)關(guān)、隔離數(shù)據(jù)庫(kù)層,考慮到市面上還沒(méi)有成熟的 ORM 工具,讓你既支持Firebase,又支持 DynamoDB等等。這些也將帶給我們一些額外的成本,可能帶來(lái)的問(wèn)題會(huì)比解決的問(wèn)題多。

3、缺乏調(diào)試和開(kāi)發(fā)工具
當(dāng)我使用 Serverless Framework 的時(shí)候,遇到了這樣的問(wèn)題:缺乏調(diào)試和開(kāi)發(fā)工具。后來(lái),我發(fā)現(xiàn)了 serverless-offline、dynamodb-local 等一系列插件之后,問(wèn)題有一些改善。然而,對(duì)于日志系統(tǒng)來(lái)說(shuō),這仍然是一個(gè)艱巨的挑戰(zhàn)。

每次你調(diào)試的時(shí)候,你需要一遍又一遍地上傳代碼。而每次上傳的時(shí)候,你就好像是在部署服務(wù)器,并不能總是快速地定位出問(wèn)題在哪。后來(lái),找了一個(gè)類(lèi)似于 log4j 這樣的可以分級(jí)別記錄日志的 Node.js 庫(kù) winston。它可以支持 error、warn、info、verbose、debug、silly 六個(gè)不同級(jí)別的日志,再結(jié)合大數(shù)據(jù)進(jìn)行日志分析過(guò)濾,才能快速定位問(wèn)題。
4、構(gòu)建復(fù)雜
Serverless 很便宜,但是這并不意味著它很簡(jiǎn)單。AWS Lambda的 CloudFormation配置是如此的復(fù)雜,并且難以閱讀及編寫(xiě)(JSON 格式),雖然CloudFomation提供了Template模板,但想要使用它的話,需要?jiǎng)?chuàng)建一個(gè)Stack,在Stack中指定你要使用的Template,然后aws才會(huì)按照Template中的定義來(lái)創(chuàng)建及初始化資源。

而Serverless Framework的配置更加簡(jiǎn)單,采用的是 YAML 格式。在部署的時(shí)候,Serverless Framework 會(huì)根據(jù)我們的配置生成 CloudFormation 配置。然而這也并非是一個(gè)真正用于生產(chǎn)的配置,真實(shí)的應(yīng)用場(chǎng)景遠(yuǎn)遠(yuǎn)比這復(fù)雜。

六、總結(jié)
云計(jì)算經(jīng)過(guò)這么多年的發(fā)展,逐漸進(jìn)化到用戶僅需關(guān)注業(yè)務(wù)和所需的資源。比如,通過(guò)K8S這類(lèi)編排工具,用戶只要關(guān)注自己的計(jì)算和需要的資源(CPU、內(nèi)存等)就行了,不需要操心到機(jī)器這一層。

Serverless架構(gòu)讓人們不再操心運(yùn)行所需的資源,只需關(guān)注自己的業(yè)務(wù)邏輯,并且為實(shí)際消耗的資源付費(fèi)??梢哉f(shuō),隨著Serverless架構(gòu)的興起,真正的云計(jì)算時(shí)代才算到來(lái)了。

任何新概念新技術(shù)的落地,本質(zhì)上都是要和具體業(yè)務(wù)去結(jié)合,去真正解決具體問(wèn)題。雖然Serverless很多地方不成熟,亟待完善。不過(guò)Serverless自身的優(yōu)越特性,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),吸引力是巨大的。相信隨著技術(shù)的飛速發(fā)展,Serverless在未來(lái)還有無(wú)限可能!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI