邊緣函數(EdgeRoutine,簡稱ER)是一項基于Serverless架構的服務,它允許開發者編寫JavaScript代碼并在阿里云全球邊緣節點上部署和執行,支持ES6語法和標準的Web Service Worker API。通過這種技術,用戶的請求可以直接在離用戶最近的邊緣節點上得到響應處理,從而顯著減少延遲、提高響應速度,并實現更低時延的計算體驗。
開通說明
邊緣函數目前是Beta功能,僅面向部分客戶開放。如果您的DCDN日常帶寬峰值大于500 Mbps,可以填寫信息申請開通。給您造成不便敬請諒解,面向所有客戶開放的時間點敬請留意官網動態。
邊緣函數的優勢
全球部署,就近調度,超低延遲:邊緣函數與常見的函數計算、彈性計算等云計算服務不同的是,您無需再局限地將函數部署在指定的單個地域(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域名。 |