邊緣函數(shù)
邊緣函數(shù)(EdgeRoutine,簡稱ER)是一項(xiàng)基于Serverless架構(gòu)的服務(wù),它允許開發(fā)者編寫JavaScript代碼并在阿里云全球邊緣節(jié)點(diǎn)上部署和執(zhí)行,支持ES6語法和標(biāo)準(zhǔn)的Web Service Worker API。通過這種技術(shù),用戶的請求可以直接在離用戶最近的邊緣節(jié)點(diǎn)上得到響應(yīng)處理,從而顯著減少延遲、提高響應(yīng)速度,并實(shí)現(xiàn)更低時(shí)延的計(jì)算體驗(yàn)。
邊緣函數(shù)的優(yōu)勢
全球部署,就近調(diào)度,超低延遲:邊緣函數(shù)與常見的函數(shù)計(jì)算、彈性計(jì)算等云計(jì)算服務(wù)不同的是,您無需再局限地將函數(shù)部署在指定的單個(gè)地域(Region)上。邊緣函數(shù)運(yùn)行在遍布全球的邊緣節(jié)點(diǎn)上,客戶端的請求將被自動(dòng)調(diào)度至距離最近的邊緣節(jié)點(diǎn)上,觸發(fā)邊緣函數(shù)的代碼執(zhí)行,對請求進(jìn)行處理并返回結(jié)果給客戶端。邊緣函數(shù)可以顯著降低客戶端請求的響應(yīng)時(shí)間,讓您獲得低延遲的計(jì)算體驗(yàn)。
自動(dòng)擴(kuò)容,按量付費(fèi):阿里云在全球擁有超過3200+個(gè)邊緣節(jié)點(diǎn),巨大的邊緣節(jié)點(diǎn)網(wǎng)絡(luò)天然具備彈性擴(kuò)容的特點(diǎn)。當(dāng)一個(gè)區(qū)域的客戶端請求數(shù)量突增,這些請求將被由近及遠(yuǎn)地調(diào)度至有充足計(jì)算資源的邊緣節(jié)點(diǎn)處理,擴(kuò)容和調(diào)度自動(dòng)化完成。邊緣函數(shù)按函數(shù)的調(diào)用次數(shù)按量計(jì)費(fèi),沒有請求調(diào)用時(shí)不會(huì)產(chǎn)生費(fèi)用。
Serverless模式,簡單易用:使用邊緣函數(shù)時(shí),您也無需關(guān)心底層服務(wù)器的CPU、內(nèi)存、網(wǎng)絡(luò)、操作系統(tǒng)等基礎(chǔ)設(shè)施,您可以專注業(yè)務(wù)代碼的開發(fā),只需將代碼通過控制臺(tái)或OpenAPI上傳即可完成應(yīng)用部署。Serverless的開發(fā)模式可以有效地降低您的開發(fā)運(yùn)維成本。
工作原理
普通ESA請求:1.客戶端發(fā)起請求到邊緣節(jié)點(diǎn)網(wǎng)關(guān)→2.邊緣節(jié)點(diǎn)查找緩存,命中緩存則響應(yīng)給客戶端→3.緩存未命中則回源。
邊緣函數(shù)請求:1.客戶端發(fā)起請求到邊緣節(jié)點(diǎn)網(wǎng)關(guān)→4.請求被邊緣函數(shù)接管并執(zhí)行您的JS代碼→通過fetch請求訪問緩存并回源(箭頭5或者箭頭3)或訪問其他公網(wǎng)服務(wù)(箭頭6)。
說明如上圖所示,邊緣函數(shù)ER的執(zhí)行位置在網(wǎng)關(guān)后,因此您在控制臺(tái)上配置的ESA域名配置(例如HTTPS配置、訪問控制、性能優(yōu)化、緩存配置等)均會(huì)繼續(xù)生效。
基本概念
函數(shù):邊緣函數(shù)(EdgeRoutine,簡稱ER)是阿里云在邊緣節(jié)點(diǎn)提供的JavaScript代碼運(yùn)行環(huán)境,可以執(zhí)行您上傳的JavaScript代碼。使用ER產(chǎn)品時(shí),您需要先創(chuàng)建函數(shù)(Routine),一個(gè)函數(shù)由兩個(gè)部分組成:配置(包含函數(shù)的名稱、描述、可用的CPU內(nèi)存規(guī)格等)和JS代碼(即您上傳的JavaScript代碼腳本)。
版本:函數(shù)(Routine)支持版本管理。您開發(fā)函數(shù)的過程中,JS代碼必定是不斷修改更新的,當(dāng)某一個(gè)階段的代碼修改和測試完成后,您可以將該時(shí)刻的代碼快照生成一個(gè)代碼版本。當(dāng)您發(fā)布函數(shù)時(shí),您需要選擇其中一個(gè)代碼版本進(jìn)行發(fā)布。系統(tǒng)為您提供版本回溯和管理歷史代碼能力。每個(gè)版本匹配一個(gè)版本號,版本號由系統(tǒng)自動(dòng)生成。
環(huán)境:邊緣函數(shù)提供測試環(huán)境、生產(chǎn)環(huán)境、灰度環(huán)境滿足您開發(fā)測試和部署的不同需求:
測試環(huán)境:測試環(huán)境是一個(gè)供您測試代碼的獨(dú)立邊緣節(jié)點(diǎn),測試環(huán)境模擬生產(chǎn)環(huán)境但與生產(chǎn)環(huán)境隔離,您在測試環(huán)境修改函數(shù)的配置或代碼不會(huì)影響生產(chǎn)環(huán)境。測試環(huán)境需要根據(jù)頁面提供的測試環(huán)境IP配置Host后才可訪問。
生產(chǎn)環(huán)境:生產(chǎn)環(huán)境也稱線上環(huán)境,由遍布全球的大量邊緣節(jié)點(diǎn)組成。當(dāng)您在測試環(huán)境完成代碼測試后,即可發(fā)布至生產(chǎn)環(huán)境。(上圖僅為示例說明,邊緣函數(shù)將根據(jù)您的請求規(guī)模自動(dòng)增減分配的節(jié)點(diǎn),具體節(jié)點(diǎn)的區(qū)域分布以實(shí)際為準(zhǔn))。
觸發(fā)器:函數(shù)的調(diào)用方式。目前支持域名綁定和函數(shù)路由兩種觸發(fā)方式,您可以通過綁定域名將某個(gè)域名流量全部轉(zhuǎn)發(fā)至函數(shù),或者通過函數(shù)路由的方式將某個(gè)域名的部分流量轉(zhuǎn)發(fā)至函數(shù),具體請參見配置觸發(fā)器。
使用限制
功能 | 限制 | 說明 |
CPU時(shí)間 | 5ms、50ms、100ms | ER單次執(zhí)行分配的CPU時(shí)間片(等待I/O不算作CPU時(shí)間),提供了5ms、50ms、100ms三種規(guī)格供您選擇。 |
內(nèi)存 | 128 MB | 單個(gè)域名在單臺(tái)機(jī)器上的內(nèi)存大小,同域名的所有請求共享該內(nèi)容。如:某臺(tái)物理機(jī)上的JavaScript內(nèi)存沙盒同時(shí)使用不能超過128 MB。 |
實(shí)時(shí)間(RT) | 120秒 | ER單次執(zhí)行的響應(yīng)時(shí)間不能超過120秒(等待I/O也算作RT時(shí)間)。 |
等待時(shí)間 | 10秒 | 網(wǎng)關(guān)等待ER的時(shí)間,如果ER在10秒內(nèi)仍不返回任何數(shù)據(jù),則網(wǎng)關(guān)會(huì)主動(dòng)斷開連接,向客戶端返回504狀態(tài)碼。 |
代碼包大小 | 4 MB | 每個(gè)函數(shù)的JavaScript代碼文件大小上限。 |
子請求數(shù)量 | 4個(gè) | ER單次執(zhí)行允許fetch的請求數(shù)量。 |
開發(fā)語言 | JavaScript(ES6語法) | 目前僅支持JS,您需要有JavaScript編程能力。 |
函數(shù)數(shù)量 | 50個(gè) | 每個(gè)阿里云賬號最多創(chuàng)建50個(gè)函數(shù)。 |
版本數(shù)量 | 10個(gè) | 每個(gè)函數(shù)最多保存10個(gè)正式版本。 |