什么是边缘函数

边缘函数(EdgeRoutine,简称ER)是一项基于Serverless架构的服务,它允许开发者编写JavaScript代码并在阿里云全球边缘节点上部署和执行,支持ES6语法和标准的Web Service Worker API。通过这种技术,用户的请求可以直接在离用户最近的边缘节点上得到响应处理,从而显著减少延迟、提高响应速度,并实现更低时延的计算体验。

image

开通说明

边缘函数目前是Beta功能,仅面向部分客户开放。如果您的CDN日常带宽峰值大于500 Mbps,可以填写信息申请开通。给您造成不便敬请谅解,面向所有客户开放的时间点敬请留意官网动态

边缘函数的优势

  • 全球部署,就近调度,超低延迟:边缘函数与常见的函数计算、弹性计算等云计算服务不同的是,您无需再局限地将函数部署在指定的单个地域(Region)上。边缘函数运行在遍布全球的边缘节点上,客户端的请求将被自动调度至距离最近的边缘节点上,触发边缘函数的代码执行,对请求进行处理并返回结果给客户端。边缘函数可以显著降低客户端请求的响应时间,让您获得低延迟的计算体验。

  • 自动扩容,按量付费:阿里云在全球拥有超过3200+个边缘节点,巨大的边缘节点网络天然具备弹性扩容的特点。当一个区域的客户端请求数量突增,这些请求将被由近及远地调度至有充足计算资源的边缘节点处理,扩容和调度自动化完成。边缘函数按函数的调用次数按量计费,没有请求调用时不会产生费用。

  • Serverless模式,简单易用:使用边缘函数时,您也无需关心底层服务器的CPU、内存、网络、操作系统等基础设施,您可以专注业务代码的开发,只需将代码通过控制台或OpenAPI上传即可完成应用部署。Serverless的开发模式可以有效地降低您的开发运维成本。

工作原理

image
  • 无ER的纯CDN请求:1.客户端发起请求到边缘节点网关→2.边缘节点查找缓存,命中缓存则响应给客户端→3.缓存未命中则回源。

  • 有ER后的CDN请求:1.客户端发起请求到边缘节点网关→4.请求被边缘函数接管并执行您的JS代码→通过fetch请求访问缓存并回源(箭头5或者箭头3)或访问其他公网服务(箭头6)。

    说明

    如上图所示,边缘函数ER的执行位置在网关后,因此您在控制台上配置的CDN域名配置(例如HTTPS配置、访问控制、性能优化、缓存配置等)均会继续生效。

基本概念

  • 函数:边缘函数(EdgeRoutine,简称ER)是阿里云在边缘节点提供的JavaScript代码运行环境,可以执行您上传的JavaScript代码。使用ER产品时,您需要先创建函数(Routine),一个函数由两个部分组成:配置(包含函数的名称、描述、可用的CPU内存规格、允许访问该函数的域名白名单等)和JS代码(即您上传的JavaScript代码脚本)。

    image
  • 版本:函数(Routine)支持版本管理。您开发函数的过程中,JS代码必定是不断修改更新的,当某一个阶段的代码修改和测试完成后,您可以将该时刻的代码快照生成一个代码版本。当您发布函数时,您需要选择其中一个代码版本进行发布。系统为您提供版本回溯和管理历史代码能力。每个版本匹配一个版本号,版本号由系统自动生成。

    image
  • 环境:边缘函数提供测试环境、生产环境、灰度环境满足您开发测试和部署的不同需求:

    image
    • 测试环境:测试环境是一个供您测试代码的独立边缘节点,测试环境模拟生产环境但与生产环境隔离,您在测试环境修改函数的配置或代码不会影响生产环境。测试环境需要根据页面提供的测试环境IP配置Host后才可访问。

    • 生产环境:生产环境也称线上环境,由遍布全球的大量边缘节点组成。当您在测试环境完成代码测试后,即可发布至生产环境。(上图仅为示例说明,边缘函数将根据您的请求规模自动增减分配的节点,具体节点的区域分布以实际为准)。

    • 灰度环境:将代码或配置的变更直接发布至所有的线上节点(生产环境)是有一定的风险的,如果您的代码或配置中存在失误,可能将影响您的所有用户。如果您的业务规模较大、对发布的风险控制敏感,可使用灰度环境逐步地扩大发布范围。灰度环境概念较为复杂,建议您按需学习后使用。更多信息,请参见灰度环境(选配)

  • 域名:您创建函数并发布代码后,需要用域名做为函数的入口供客户端请求访问。目前边缘函数只支持接入阿里云CDN的加速域名做为函数入口,您可以在CDN域名的配置中关联边缘函数。

    image
  • 边缘节点:边缘是相对中心化的部署方式而言的,边缘节点即指CDN节点,都是指客户端请求访问的最近节点。

使用限制

功能

限制

说明

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域名。