邊緣函數(EdgeRoutine,簡稱ER)是一項基於Serverless架構的服務,它允許開發人員編寫JavaScript代碼並在阿里雲全球邊緣節點上部署和執行,支援ES6文法和標準的Web Service Worker API。通過這種技術,使用者的請求可以直接在離使用者最近的邊緣節點上得到響應處理,從而顯著減少延遲、提高響應速度,並實現更低時延的計算體驗。
開通說明
邊緣函數目前是Beta功能,僅面向部分客戶開放。如果您的DCDN日常頻寬峰值大於500 Mbps,可以提交工單申請開通。給您造成不便敬請諒解,面向所有客戶開放的時間點敬請留意官網動態。
邊緣函數的優勢
全球部署,就近調度,超低延遲:邊緣函數與常見的Function Compute、彈性計算等雲端運算服務不同的是,您無需再局限地將函數部署在指定的單個地區(Region)上。邊緣函數運行在遍布全球的邊緣節點上,用戶端的請求將被自動調度至距離最近的邊緣節點上,觸發邊緣函數的代碼執行,對請求進行處理並返回結果給用戶端。邊緣函數可以顯著降低用戶端請求的回應時間,讓您獲得低延遲的計算體驗。
自動擴容,隨用隨付:阿里雲在全球擁有超過3200+個邊緣節點,巨大的邊緣節點網路天然具備彈性擴容的特點。當一個地區的用戶端請求數量突增,這些請求將被由近及遠地調度至有充足計算資源的邊緣節點處理,擴容和調度自動化完成。邊緣函數按函數的調用次數隨用隨付,沒有請求調用時不會產生費用。
Serverless模式,簡單易用:使用邊緣函數時,您也無需關心底層伺服器的CPU、記憶體、網路、作業系統等基礎設施,您可以專註業務代碼的開發,只需將代碼通過控制台或OpenAPI上傳即可完成應用部署。Serverless的開發模式可以有效地降低您的開發營運成本。
工作原理
無ER的純DCDN請求:1.用戶端發起請求到邊緣節點網關→2.邊緣節點尋找緩衝,命中緩衝則響應給用戶端→3.緩衝未命中則回源。
有ER後的DCDN請求:1.用戶端發起請求到邊緣節點網關→4.請求被邊緣函數接管並執行您的JS代碼→通過fetch請求訪問緩衝並回源(箭頭5或者箭頭3)或訪問其他公網服務(箭頭6)。
說明如上圖所示,邊緣函數ER的執行位置在網關後,因此您在控制台上配置的DCDN網域名稱配置(例如HTTPS配置、存取控制、效能最佳化、緩衝配置等)均會繼續生效。
基本概念
函數:邊緣函數(EdgeRoutine,簡稱ER)是阿里雲在邊緣節點提供的JavaScript代碼運行環境,可以執行您上傳的JavaScript代碼。使用ER產品時,您需要先建立函數(Routine),一個函數由兩個部分組成:配置(包含函數的名稱、描述、可用的CPU記憶體規格、允許訪問該函數的網域名稱白名單等)和JS代碼(即您上傳的JavaScript代碼指令碼)。
版本:函數(Routine)支援版本管理。您開發函數的過程中,JS代碼必定是不斷修改更新的,當某一個階段的代碼修改和測試完成後,您可以將該時刻的代碼快照產生一個代碼版本。當您發布函數時,您需要選擇其中一個代碼版本進行發布。系統為您提供版本回溯和管理歷史代碼能力。每個版本匹配一個版本號碼,版本號碼由系統自動產生。
環境:邊緣函數提供測試環境、生產環境、灰階環境滿足您開發測試和部署的不同需求:
測試環境:測試環境是一個供您測試代碼的獨立邊緣節點,測試環境類比生產環境但與生產環境隔離,您在測試環境修改函數的配置或代碼不會影響生產環境。測試環境需要根據頁面提供的測試環境IP配置Host後才可訪問。
生產環境:生產環境也稱線上環境,由遍布全球的大量邊緣節點群組成。當您在測試環境完成代碼測試後,即可發布至生產環境。(上圖僅為樣本說明,邊緣函數將根據您的請求規模自動增減分配的節點,具體節點的地區分布以實際為準)。
灰階環境:將代碼或配置的變更直接發布至所有的線上節點(生產環境)是有一定的風險的,如果您的代碼或配置中存在失誤,可能將影響您的所有使用者。如果您的業務規模較大、對發布的風險控制敏感,可使用灰階環境逐步地擴大發布範圍。灰階環境概念較為複雜,建議您按需學習後使用。更多資訊,請參見灰階環境(選配)。
網域名稱:您建立函數並發布代碼後,需要用網域名稱做為函數的入口供用戶端請求訪問。目前邊緣函數只支援接入阿里雲DCDN的加速網域名稱做為函數入口,您可以在DCDN網域名稱的配置中關聯邊緣函數。
邊緣節點:邊緣是相對中心化的部署方式而言的,邊緣節點即指DCDN節點,都是指用戶端請求訪問的最近節點。
使用限制
功能 | 限制 | 說明 |
CPU時間 | 5ms、50ms、100ms | ER單次執行分配的CPU時間片(等待I/O不算作CPU時間),提供了5ms、50ms、100ms三種規格供您選擇。更多資訊,請參見計費說明。 |
記憶體 | 128 MB | 單個網域名稱在單台機器上的記憶體大小,同網域名稱的所有請求共用該內容。如:某台物理機上的JavaScript記憶體沙箱同時使用不能超過128 MB。 |
即時間(RT) | 120秒 | ER單次執行的回應時間不能超過120秒(等待I/O也算作RT時間)。 |
等待時間 | 10秒 | 網關等待ER的時間,如果ER在10秒內仍不返回任何資料,則網關會主動中斷連線,向用戶端返回504狀態代碼。 |
程式碼封裝大小 | 4 MB | 每個函數的JavaScript代碼檔案大小上限。 |
子請求數量 | 4個 | 在一次邊緣函數的執行過程中,最多允許發起fetch請求的數量。 |
開發語言 | JavaScript(ES6文法) | 目前僅支援JS,您需要有JavaScript編程能力。 |
函數數量 | 50個 | 每個阿里雲帳號最多建立50個函數。 |
版本數量 | 10個 | 每個函數最多儲存10個正式版本。 |
支援協議 | 僅支援HTTPS協議 | 不支援WebSocket協議和TCP/UDP協議接入。 |
子請求 | 無 | 暫不支援在ER內部fetch請求另一個ER網域名稱。 |