<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 通通透透看無(wú)服務(wù)器計算:由來(lái)、場(chǎng)景和問(wèn)題

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

發(fā)布人:天翼云開(kāi)發(fā)者 時(shí)間:2023-03-20 來(lái)源:工程師 發(fā)布文章

本文分享自天翼云開(kāi)發(fā)者社區@《通通透透看無(wú)服務(wù)器計算:由來(lái)、場(chǎng)景和問(wèn)題》,作者: 我是小朋友

鏈接:

https://www.ctyun.cn/developer/article/358337908473993?track=|cp:cz_bk|tgdy:wenzhang|ttjh:bokeshequ|key:bw303|pf:PC

 

一、 無(wú)服務(wù)器(Serverless)計算是什么

image.png 

云計算涌現出很多改變傳統IT架構和運維方式的新技術(shù),比如虛擬機、容器、微服務(wù),無(wú)論這些技術(shù)應用在哪些場(chǎng)景,降低成本、提升效率是云服務(wù)永恒的主題。過(guò)去十年來(lái),我們已經(jīng)把應用和環(huán)境中很多通用的部分變成了服務(wù)。Serverless的出現,帶來(lái)了跨越式變革。Serverless把主機管理、操作系統管理、資源分配、擴容,甚至是應用邏輯的全部組件都外包出去,把它們看作某種形式的商品——廠(chǎng)商提供服務(wù),我們掏錢(qián)購買(mǎi)。過(guò)去是“構建一個(gè)框架運行在一臺服務(wù)器上,對多個(gè)事件進(jìn)行響應”,Serverless則變?yōu)椤皹嫿ɑ蚴褂靡粋€(gè)微服務(wù)或微功能來(lái)響應一個(gè)事件”,做到當訪(fǎng)問(wèn)時(shí),調入相關(guān)資源開(kāi)始運行,運行完成后,卸載所有開(kāi)銷(xiāo),真正做到按需按次計費。這是云計算向縱深發(fā)展的一種自然而然的過(guò)程。

 

Serverless是一種構建和管理基于微服務(wù)架構的完整流程,允許你在服務(wù)部署級別而不是服務(wù)器部署級別來(lái)管理你的應用部署。它與傳統架構的不同之處在于,完全由第三方管理,由事件觸發(fā),存在于無(wú)狀態(tài)(Stateless)、暫存(可能只存在于一次調用的過(guò)程中)計算容器內。構建無(wú)服務(wù)器應用程序意味著(zhù)開(kāi)發(fā)者可以專(zhuān)注在產(chǎn)品代碼上,而無(wú)須管理和操作云端或本地的服務(wù)器或運行時(shí)。Serverless真正做到了部署應用無(wú)需涉及基礎設施的建設,自動(dòng)構建、部署和啟動(dòng)服務(wù)。

 

國內外的各大云廠(chǎng)商 Amazon、微軟、Google、IBM、阿里云、騰訊云、華為云相繼推出Serverless產(chǎn)品,Serverless也從概念、愿景逐步走向落地,在各企業(yè)、公司應用開(kāi)來(lái)。

 

二、 理解Serverless技術(shù)---FaaS和BaaS

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

Serverless涵蓋了很多技術(shù),分為兩類(lèi):FaaS和BaaS。

1)Function-as-a-Service (FaaS)

? 小段代碼,按需執?,按需擴展,無(wú)需管理任何基礎實(shí)施相關(guān)的部分。

? 事件驅動(dòng)型計算。函數被事件觸發(fā)或者被HTTP請求調用。

2)Backend-as-a-Service (BaaS)

? 第三方基于A(yíng)PI的服務(wù),實(shí)現應用開(kāi)發(fā)中的基礎功能模塊。

? 這些API像服務(wù)一樣,自動(dòng)擴展,無(wú)需管理。

 

1.Faas

FaaS意在無(wú)須自行管理服務(wù)器系統或自己的服務(wù)器應用程序,即可直接運行后端代碼。其中所指的服務(wù)器應用程序,是該技術(shù)與容器和PaaS(平臺即服務(wù))等其他現代化架構最大的差異。


FaaS可以取代一些服務(wù)處理服務(wù)器(可能是物理計算機,但絕對需要運行某種應用程序),這樣不僅不需要自行供應服務(wù)器,也不需要全時(shí)運行應用程序。


FaaS產(chǎn)品不要求必須使用特定框架或庫進(jìn)行開(kāi)發(fā)。在語(yǔ)言和環(huán)境方面,FaaS函數就是常規的應用程序。例如AWS Lambda的函數可以通過(guò)Javascript、Python以及任何JVM語(yǔ)言(Java、Clojure、Scala)等實(shí)現。然而Lambda函數也可以執行任何捆綁有所需部署構件的進(jìn)程,因此可以使用任何語(yǔ)言,只要能編譯為Unix進(jìn)程即可。FaaS函數在架構方面確實(shí)存在一定的局限,尤其是在狀態(tài)和執行時(shí)間方面。


在遷往FaaS的過(guò)程中,唯一需要修改的代碼是“主方法/啟動(dòng)”代碼,其中可能需要刪除頂級消息處理程序的相關(guān)代碼(“消息監聽(tīng)器接口”的實(shí)現),但這可能只需要更改方法簽名即可。在FaaS的世界中,代碼的其余所有部分(例如向數據庫執行寫(xiě)入的代碼)無(wú)須任何變化。


相比傳統系統,部署方法會(huì )有較大變化 – 將代碼上傳至FaaS供應商,其他事情均可由供應商完成。目前這種方式通常意味著(zhù)需要上傳代碼的全新定義(例如上傳zip或JAR文件),隨后調用一個(gè)專(zhuān)有API發(fā)起更新過(guò)程。


FaaS中的函數可以通過(guò)供應商定義的事件類(lèi)型觸發(fā)。對于亞馬遜AWS,此類(lèi)觸發(fā)事件可以包括S3(文件)更新、時(shí)間(計劃任務(wù)),以及加入消息總線(xiàn)的消息(例如Kinesis)。通常你的函數需要通過(guò)參數指定自己需要綁定到的事件源。


大部分供應商還允許函數作為對傳入Http請求的響應來(lái)觸發(fā),通常這類(lèi)請求來(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)域通用的遠程組件(而不是進(jìn)程內的庫)來(lái)提供服務(wù)。理解BaaS,需要搞清楚它與PaaS的區別。

首先BaaS并非PaaS,它們的區別在于:PaaS需要參與應用的生命周期管理,BaaS則僅僅提供應用依賴(lài)的第三方服務(wù)。典型的PaaS平臺需要提供手段讓開(kāi)發(fā)者部署和配置應用,例如自動(dòng)將應用部署到Tomcat容器中,并管理應用的生命周期。BaaS不包含這些內容,BaaS只以API的方式提供應用依賴(lài)的后端服務(wù),例如數據庫和對象存儲。BaaS可以是公共云服務(wù)商提供的,也可以是第三方廠(chǎng)商提供的。其次從功能上講,BaaS可以看作PaaS的一個(gè)子集,即提供第三方依賴(lài)組件的部分。

 

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

 

三、 無(wú)服務(wù)器(Serverless)計算如何工作?

與使用虛擬機或一些底層的技術(shù)來(lái)部署和管理應用程序相比,無(wú)服務(wù)器計算提供了一種更高級別的抽象。因為它們有不同的抽象和“觸發(fā)器”的集合。


拿計算來(lái)講,這種抽象有一個(gè)特定函數和抽象的觸發(fā)器,它通常是一個(gè)事件。以數據庫為例,這種抽象也許是一個(gè)表,而觸發(fā)器相當于表的查詢(xún)或搜索,或者通過(guò)在表中做一些事情而生成的事件。


比如一款手機游戲,允許用戶(hù)在不同的平臺上為全球頂級玩家使用高分數表。當請求此信息時(shí),請求從應用程序到API接口。API接口或許會(huì )觸發(fā)AWS的Lambda函數,或者無(wú)服務(wù)器函數,這些函數再從數據庫表中獲取到數據流,返回包含前五名分數的一定格式的數據。


一旦構建完成,應用程序的功能就可以在基于移動(dòng)和基于 Web 的游戲版本中重用。

這跟設置服務(wù)器不同,不是必須要有Amazon EC2實(shí)例或服務(wù)器,然后等待請求。環(huán)境由事件觸發(fā),而響應事件所需的邏輯只在響應時(shí)執行。這意味著(zhù),運行函數的資源只有在函數運行時(shí)被創(chuàng )建,產(chǎn)生一種非常高效的方法來(lái)構建應用程序。

 

四、 無(wú)服務(wù)器(Serverless)適用于哪些場(chǎng)景?

image.png 

在現階段,Serverless主要應用在以下幾個(gè)場(chǎng)景。首先在Web及移動(dòng)端服務(wù)中,可以整合API網(wǎng)關(guān)和Serverles服務(wù)構建Web及移動(dòng)后端,幫助開(kāi)發(fā)者構建可彈性擴展、高可用的移動(dòng)或 Web后端應用服務(wù)。在IoT場(chǎng)景下可高效的處理實(shí)時(shí)流數據,由設備產(chǎn)生海量的實(shí)時(shí)信息流數據,通過(guò)Serverles服務(wù)分類(lèi)處理并寫(xiě)入后端處理。另外在實(shí)時(shí)媒體資訊內容處理場(chǎng)景里,用戶(hù)上傳的音視頻到對象存儲OBS,通過(guò)上傳事件觸發(fā)多個(gè)函數,分別完成高清轉碼、音頻轉碼等功能,滿(mǎn)足用戶(hù)對實(shí)時(shí)性和并發(fā)能力的高要求。無(wú)服務(wù)器計算還適合于任何事件驅動(dòng)的各種不同的用例,這包括物聯(lián)網(wǎng),移動(dòng)應用,基于網(wǎng)絡(luò )的應用程序和聊天機器人等。這里簡(jiǎn)單說(shuō)兩個(gè)場(chǎng)景,方便大家思考。


場(chǎng)景一:應用負載有顯著(zhù)的波峰波谷

Serverless 應用成功與否的評判標準并不是公司規模的大小,而是其業(yè)務(wù)背后的具體技術(shù)問(wèn)題,比如業(yè)務(wù)波峰波谷明顯,如何實(shí)現削峰填谷。一個(gè)公司的業(yè)務(wù)負載具有波峰波谷時(shí),機器資源要按照峰值需求預估;而在波谷時(shí)期機器利用率則明顯下降,因為不能進(jìn)行資源復用而導致浪費。

 

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

 

場(chǎng)景二:典型用例 - 基于事件的數據處理

視頻處理的后端系統,常見(jiàn)功能需求如下:視頻轉碼、抽取數據、人臉識別等,這些均為通用計算任務(wù),可由函數計算執行。


開(kāi)發(fā)者需要自己寫(xiě)出實(shí)現邏輯,再將任務(wù)按照控制流連接起來(lái),每個(gè)任務(wù)的具體執行由云廠(chǎng)商來(lái)負責。如此,開(kāi)發(fā)變得更便捷,并且構建的系統天然高可用、實(shí)時(shí)彈性伸縮,用戶(hù)不需要關(guān)心機器層面問(wèn)題。

 

五、Serverless 的問(wèn)題

對于企業(yè)來(lái)說(shuō),支持Serverless計算的平臺可以節省大量時(shí)間和成本,同時(shí)可以釋放員工,讓開(kāi)發(fā)者得以開(kāi)展更有價(jià)值的工作,而不是管理基礎設施。另一方面可以提高敏捷度,更快速地推出新應用和新服務(wù),進(jìn)而提高客戶(hù)滿(mǎn)意度。但是Serverless不是完美的,它也存在一些問(wèn)題,需要慎重應用在生產(chǎn)環(huán)境。


1、不適合長(cháng)時(shí)間運行應用

Serverless 在請求到來(lái)時(shí)才運行。這意味著(zhù),當應用不運行的時(shí)候就會(huì )進(jìn)入 “休眠狀態(tài)”,下次當請求來(lái)臨時(shí),應用將會(huì )需要一個(gè)啟動(dòng)時(shí)間,即冷啟動(dòng)時(shí)間。如果你的應用需要一直長(cháng)期不間斷的運行、處理大量的請求,那么你可能就不適合采用 Serverless 架構。如果你通過(guò) CRON 的方式或者 CloudWatch 來(lái)定期喚醒應用,又會(huì )比較消耗資源。這就需要我們對它做優(yōu)化,如果頻繁調用,這個(gè)資源將會(huì )常駐內存,第一次冷啟之后,就可以一直服務(wù),直到一段時(shí)間內沒(méi)有新的調用請求進(jìn)來(lái),則會(huì )轉入“休眠”狀態(tài),甚至被回收,從而不消耗任何資源。


2、完全依賴(lài)于第三方服務(wù)

當你所在的企業(yè)云環(huán)境已經(jīng)有大量的基礎設施的時(shí)候,Serverless 對于你來(lái)說(shuō),并不是一個(gè)好東西。當我們采用某云服務(wù)廠(chǎng)商的 Serverless 架構時(shí),我們就和該服務(wù)供應商綁定了,那么我們再將服務(wù)遷到別的云服務(wù)商上就沒(méi)有那么容易了。

 

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

 

3、缺乏調試和開(kāi)發(fā)工具

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

 

每次你調試的時(shí)候,你需要一遍又一遍地上傳代碼。而每次上傳的時(shí)候,你就好像是在部署服務(wù)器,并不能總是快速地定位出問(wèn)題在哪。后來(lái),找了一個(gè)類(lèi)似于 log4j 這樣的可以分級別記錄日志的 Node.js 庫 winston。它可以支持 error、warn、info、verbose、debug、silly 六個(gè)不同級別的日志,再結合大數據進(jìn)行日志分析過(guò)濾,才能快速定位問(wèn)題。


4、構建復雜

Serverless 很便宜,但是這并不意味著(zhù)它很簡(jiǎn)單。AWS Lambda的 CloudFormation配置是如此的復雜,并且難以閱讀及編寫(xiě)(JSON 格式),雖然CloudFomation提供了Template模板,但想要使用它的話(huà),需要創(chuàng )建一個(gè)Stack,在Stack中指定你要使用的Template,然后aws才會(huì )按照Template中的定義來(lái)創(chuàng )建及初始化資源。

 

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

 

六、總結

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

 

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

 

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

————————————————

版權聲明:本文為CSDN博主「weixin_34124939」的原創(chuàng )文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_34124939/article/details/85017690

 


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 服務(wù)器

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>