溫馨提示×

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

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

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

發(fā)布時(shí)間:2021-12-16 11:50:49 來(lái)源:億速云 閱讀:121 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

基本概念

1. 服務(wù)

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

服務(wù)是函數(shù)計(jì)算資源管理的單位,同一個(gè)服務(wù)下有很多函數(shù),這些函數(shù)共享服務(wù)的網(wǎng)絡(luò)配置、權(quán)限配置、存儲(chǔ)配置、日志配置。

服務(wù)可以對(duì)應(yīng)成一個(gè)“應(yīng)用”,這個(gè)應(yīng)用由很多函數(shù)共同組成,這些函數(shù)具有相同的訪問(wèn)權(quán)限、網(wǎng)絡(luò)配置,日志也記錄到相同的 logstore。這些函數(shù)本身的配置可以各不相同,比如同一服務(wù)下有的函數(shù)內(nèi)存是 3G,有的函數(shù)內(nèi)存是 512M,有些函數(shù)用  Python 寫,有些函數(shù)用 Node.js 寫。

當(dāng)然,如果應(yīng)用比較復(fù)雜,同一個(gè)應(yīng)用也可以對(duì)應(yīng)多個(gè)服務(wù),這里沒(méi)有強(qiáng)綁定關(guān)系。

1)服務(wù)配置

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

服務(wù)的幾個(gè)核心配置:

**日志配置:**開發(fā)者的代碼在函數(shù)計(jì)算平臺(tái)運(yùn)行,如何查看函數(shù)運(yùn)行產(chǎn)生的日志呢?在Server 化的開發(fā)方式中,日志都打到統(tǒng)一的文件中,通過(guò) Logstash/Fluentd 這種日志收集工具收集到 ElasticSearch 中,并通過(guò) Kibana 這種可視化工具查看日志及指標(biāo)。但是在函數(shù)計(jì)算中,運(yùn)行代碼的機(jī)器由函數(shù)計(jì)算動(dòng)態(tài)分配,開發(fā)者無(wú)法自己收集日志,函數(shù)計(jì)算需要幫助開發(fā)者投遞日志。日志配置就是起到這個(gè)作用,配置 LogConfig 設(shè)置日志服務(wù)的 Project 和 Logstore,函數(shù)計(jì)算會(huì)將函數(shù)運(yùn)行中產(chǎn)生的日志投遞到開發(fā)者的 Logstore 里。

但是為了成功投遞日志,單單配置 Logtore 還不夠,函數(shù)計(jì)算是沒(méi)有權(quán)限向開發(fā)者的 Logstore 投遞日志的,需要用戶授予函數(shù)計(jì)算向指定的 Logstore 寫數(shù)據(jù)的權(quán)限,有了這個(gè)授權(quán)后,函數(shù)計(jì)算就可以名正言順地向開發(fā)者的 Logstore 投遞日志了。

**文件存儲(chǔ)配置:**函數(shù)計(jì)算中每個(gè)函數(shù)都是獨(dú)立的,在不同的執(zhí)行環(huán)境中執(zhí)行,如果用戶有一些公共文件希望多個(gè)函數(shù)共享怎么辦呢?在傳統(tǒng) Server 化的開發(fā)方式中,好辦,將公共文件放到磁盤就好了,各個(gè)都去磁盤的同一位置讀取,函數(shù)計(jì)算中的機(jī)器是函數(shù)計(jì)算動(dòng)態(tài)分配的,開發(fā)者無(wú)法事先將文件存入磁盤,那怎么辦呢?可以掛載 NAS,在服務(wù)中掛載 NAS 后,函數(shù)就可以像訪問(wèn)本地文件系統(tǒng)一樣訪問(wèn) NAS 上的文件了。

**網(wǎng)絡(luò)配置:**網(wǎng)絡(luò)配置顧名思義就是設(shè)置函數(shù)的網(wǎng)絡(luò)訪問(wèn)能力,主要有兩種,一個(gè)是函數(shù)中是否可以訪問(wèn)公網(wǎng),這是個(gè)布爾型的開關(guān),默認(rèn)是開啟的,如果不需要訪問(wèn)公網(wǎng)可以關(guān)閉開關(guān)。另一個(gè)是函數(shù)是否可以訪問(wèn)指定 VPC,VPC 是專有網(wǎng)絡(luò),專有網(wǎng)絡(luò)內(nèi)的數(shù)據(jù)比較機(jī)密,是不能通過(guò)公共互聯(lián)網(wǎng)訪問(wèn)的。如果需要函數(shù)訪問(wèn) VPC 內(nèi)的資源,比如函數(shù)需要訪問(wèn) VPC 內(nèi)的 RDS,那就需要授予函數(shù)計(jì)算訪問(wèn)指定 VPC 的能力,原理是用戶授權(quán)賦予彈性網(wǎng)卡 ENI 訪問(wèn) VPC ,并將此 ENI 插入到 FC 中執(zhí)行用戶函數(shù)的機(jī)器上,從而使函數(shù)可以訪問(wèn) VPC 內(nèi)資源。

**權(quán)限:**函數(shù)計(jì)算是云原生的架構(gòu),與云上許多服務(wù)產(chǎn)生交互,阿里云有非常嚴(yán)格的權(quán)限限制,函數(shù)計(jì)算是沒(méi)有能力訪問(wèn)開發(fā)者的其他云資源的,當(dāng)開發(fā)者需要函數(shù)計(jì)算訪問(wèn)其他云服務(wù)的時(shí)候就需要顯示授予函數(shù)計(jì)算權(quán)限。

權(quán)限主要有兩個(gè)應(yīng)用場(chǎng)景:一個(gè)是授予函數(shù)計(jì)算訪問(wèn)其他服務(wù)的權(quán)限,比如剛才提到的授權(quán)函數(shù)計(jì)算訪問(wèn)開發(fā)者的日志服務(wù)、授權(quán)函數(shù)計(jì)算創(chuàng)建 ENI。另一個(gè)是授權(quán)函數(shù)可以訪問(wèn)開發(fā)者的云資源,這個(gè)是什么呢?舉個(gè)例子,函數(shù)中需要訪問(wèn) OSS 獲取對(duì)象,但是又不想暴露 AK,那怎么辦呢?開發(fā)者可以配置服務(wù)中的 Role 有訪問(wèn) OSS 的權(quán)限,函數(shù)執(zhí)行過(guò)程中,函數(shù)計(jì)算會(huì) assumeRole 生成一個(gè)臨時(shí) AK ,并將這個(gè) AK 存儲(chǔ)到函數(shù)的上下文 context.credentials 里,開發(fā)者在代碼中使用context.credentials.access_key_id/context.credentials.access_key_secret/context.credentials.security_token  去創(chuàng)建 OSS Client 就可以了。

2. 函數(shù)

“函數(shù)計(jì)算”中函數(shù)可謂是核心概念,函數(shù)是管理、運(yùn)行的基本單元,一個(gè)函數(shù)通常由一系列配置與可運(yùn)行代碼包組成。

1)函數(shù)配置

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

函數(shù)的配置如上圖所示:

  • Runtime 是函數(shù)運(yùn)行時(shí)的環(huán)境類型:函數(shù)計(jì)算目前支持 Node.js/Python/Java/C#/PHP 等開發(fā)環(huán)境,同時(shí)也支持 Custom Runtime 自定義運(yùn)行時(shí);

  • Code 是函數(shù)代碼包:函數(shù)計(jì)算的后端是只認(rèn)代碼包的,各個(gè)開發(fā)工具會(huì)自動(dòng)幫您打包。比如您可以直接在控制臺(tái)上編寫代碼,控制臺(tái)會(huì)自動(dòng)為您打包創(chuàng)建/更新函數(shù),您可以在本地編寫/調(diào)試函數(shù),通過(guò)命令行工具 Funcraft 部署到函數(shù)計(jì)算,F(xiàn)uncraft 也會(huì)幫您打包;

  • Handler 是入口函數(shù):您在代碼包中寫了好多函數(shù),那函數(shù)計(jì)算到底從哪里開始執(zhí)行呢,就從您指定的入口函數(shù)開始執(zhí)行;

  • Timeout 是函數(shù)超時(shí)時(shí)間:如果函數(shù)執(zhí)行超過(guò)這個(gè)時(shí)間,函數(shù)會(huì)被強(qiáng)制停止執(zhí)行;

  • MemorySize 是為函數(shù)分配的執(zhí)行環(huán)境內(nèi)存:目前取值范圍是 128M~3G,如果函數(shù)耗用內(nèi)存超過(guò)分配的內(nèi)存,會(huì) OOM;

  • Initializer 是初始化函數(shù):有什么用呢?之前我們介紹函數(shù)計(jì)算執(zhí)行環(huán)境的時(shí)候講到,函數(shù)計(jì)算會(huì)為函數(shù)分配執(zhí)行環(huán)境,第一次分配的時(shí)候會(huì)有冷啟動(dòng),當(dāng)前請(qǐng)求執(zhí)行完成后,函數(shù)計(jì)算也不會(huì)立即釋放,如果在一段時(shí)間內(nèi)有新的請(qǐng)求到達(dá)會(huì)復(fù)用這個(gè)執(zhí)行環(huán)境。Initializer 中的邏輯會(huì)在分配執(zhí)行環(huán)境后執(zhí)行,且保證同一個(gè)執(zhí)行環(huán)境執(zhí)行且只執(zhí)行一次,那就可以將一些建立連接、加載依賴等耗時(shí)的操作放到 Initializer 函數(shù)中執(zhí)行;

  • InitializerTimeout 就是 Initializer 函數(shù)的最大運(yùn)行時(shí)間。

3. 觸發(fā)器

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

往期課程中介紹了函數(shù)計(jì)算支持的豐富的事件源類型,在事件驅(qū)動(dòng)的計(jì)算模型中,事件源是事件的生產(chǎn)者,函數(shù)是事件的處理者,觸發(fā)器提供了一種集中、統(tǒng)一的方式來(lái)管理不同的事件源。當(dāng)事件發(fā)生時(shí),如果滿足觸發(fā)器定義的規(guī)則,事件源會(huì)自動(dòng)調(diào)用觸發(fā)器所對(duì)應(yīng)的函數(shù)。

典型的使用場(chǎng)景包括對(duì)上傳至 OSS 中的對(duì)象進(jìn)行處理,比如圖像處理、音視頻轉(zhuǎn)碼、OSS zip 包解壓,以及對(duì) SLS 中的日志進(jìn)行清洗、處理、轉(zhuǎn)存,在指定時(shí)間觸發(fā)函數(shù)執(zhí)行等等。

4. 版本 & 別名

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

上文介紹了服務(wù)、函數(shù)、觸發(fā)器,開發(fā)者就可以基于函數(shù)計(jì)算將應(yīng)用搭建起來(lái)了,但又有一個(gè)新問(wèn)題:**開發(fā)者有了新需求需要更新代碼,如何保證線上應(yīng)用不受影響,平滑迭代上線呢?**為了解決這個(gè)問(wèn)題,函數(shù)計(jì)算引入了版本和別名。

版本相當(dāng)于服務(wù)的快照,包括服務(wù)的配置、服務(wù)內(nèi)的函數(shù)代碼及函數(shù)配置。當(dāng)您開發(fā)和測(cè)試完成后,就發(fā)布一個(gè)版本,版本單調(diào)遞增,版本發(fā)布后,已發(fā)布的版本不能更改,您可以繼續(xù)在 Latest 版本上開發(fā)測(cè)試,不會(huì)影響已發(fā)布的版本。調(diào)用函數(shù)時(shí),只需要指定版本就可以調(diào)用指定版本的函數(shù)。

那新問(wèn)題又來(lái)了,版本名稱是函數(shù)計(jì)算指定的單調(diào)遞增的,每次發(fā)布版本,都會(huì)有一個(gè)新的版本,**那每次發(fā)完版本后,客戶端還要改代碼執(zhí)行最新的版本嗎?**為了解決這個(gè)問(wèn)題呢,我們引入了別名,別名就是指向特定服務(wù)版本的指針,發(fā)布后,只需要將別名指向發(fā)布的版本,再次發(fā)布后,再切換別名指向最新的版本,客戶端只需要指定別名就可以保證調(diào)用線上最新的代碼。同時(shí)別名支持灰度發(fā)布的功能,即有 10% 的流量指向最新版本,90% 理論指向老版本?;貪L也非常簡(jiǎn)單,只需要將別名指向之前的版本即可快速完成回滾。

開發(fā)流程

Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的

如上圖所示,開發(fā)者首先創(chuàng)建服務(wù),設(shè)置日志、權(quán)限等配置,然后創(chuàng)建函數(shù),在當(dāng)前版本(Latest 版本)下編寫代碼開發(fā)函數(shù),測(cè)試通過(guò)后發(fā)布版本,第一次發(fā)布的版本為版本 1,創(chuàng)建別名 prod 指向版本 1,就可以對(duì)外提供服務(wù)了。

客戶端調(diào)用函數(shù)的日志會(huì)記錄在開發(fā)者配置的 Logstore 里,函數(shù)計(jì)算提供完備的監(jiān)控圖表,應(yīng)用上線后,開發(fā)者可以通過(guò)監(jiān)控圖表和日志查看應(yīng)用的健康狀況。

當(dāng)開發(fā)者有新需求時(shí),繼續(xù)在 Latest 版本更改代碼開發(fā)函數(shù),測(cè)試通過(guò)后發(fā)布版本,這次發(fā)布的版本為版本 2,切換別名流量 10% 到版本 2,即可實(shí)現(xiàn)應(yīng)用的灰度發(fā)布,觀察一段時(shí)間沒(méi)有問(wèn)題,就可以切換 100% 的流量到版本 2 了。

以上就是Serverless 函數(shù)計(jì)算的開發(fā)與配置是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向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