边缘函数(EdgeRoutine,简称ER)是一项基于Serverless架构的服务,它允许开发者编写JavaScript代码并在阿里云全球边缘节点上部署和执行,支持ES6语法和标准的Web Service Worker API。通过这种技术,用户的请求可以直接在离用户最近的边缘节点上得到响应处理,从而显著减少延迟、提高响应速度,并实现更低时延的计算体验。
开通说明
边缘函数目前是Beta功能,仅面向部分客户开放。如果您的CDN日常带宽峰值大于500 Mbps,可以提交工单申请开通。给您造成不便敬请谅解,面向所有客户开放的时间点敬请留意官网动态。
边缘函数的优势
全球部署,就近调度,超低延迟:边缘函数与常见的函数计算、弹性计算等云计算服务不同的是,您无需再局限地将函数部署在指定的单个地域(Region)上。边缘函数运行在遍布全球的边缘节点上,客户端的请求将被自动调度至距离最近的边缘节点上,触发边缘函数的代码执行,对请求进行处理并返回结果给客户端。边缘函数可以显著降低客户端请求的响应时间,让您获得低延迟的计算体验。
自动扩容,按量付费:阿里云在全球拥有超过3200+个边缘节点,巨大的边缘节点网络天然具备弹性扩容的特点。当一个区域的客户端请求数量突增,这些请求将被由近及远地调度至有充足计算资源的边缘节点处理,扩容和调度自动化完成。边缘函数按函数的调用次数按量计费,没有请求调用时不会产生费用。
Serverless模式,简单易用:使用边缘函数时,您也无需关心底层服务器的CPU、内存、网络、操作系统等基础设施,您可以专注业务代码的开发,只需将代码通过控制台或OpenAPI上传即可完成应用部署。Serverless的开发模式可以有效地降低您的开发运维成本。
工作原理
无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代码脚本)。
版本:函数(Routine)支持版本管理。您开发函数的过程中,JS代码必定是不断修改更新的,当某一个阶段的代码修改和测试完成后,您可以将该时刻的代码快照生成一个代码版本。当您发布函数时,您需要选择其中一个代码版本进行发布。系统为您提供版本回溯和管理历史代码能力。每个版本匹配一个版本号,版本号由系统自动生成。
环境:边缘函数提供测试环境、生产环境、灰度环境满足您开发测试和部署的不同需求:
测试环境:测试环境是一个供您测试代码的独立边缘节点,测试环境模拟生产环境但与生产环境隔离,您在测试环境修改函数的配置或代码不会影响生产环境。测试环境需要根据页面提供的测试环境IP配置Host后才可访问。
生产环境:生产环境也称线上环境,由遍布全球的大量边缘节点组成。当您在测试环境完成代码测试后,即可发布至生产环境。(上图仅为示例说明,边缘函数将根据您的请求规模自动增减分配的节点,具体节点的区域分布以实际为准)。
灰度环境:将代码或配置的变更直接发布至所有的线上节点(生产环境)是有一定的风险的,如果您的代码或配置中存在失误,可能将影响您的所有用户。如果您的业务规模较大、对发布的风险控制敏感,可使用灰度环境逐步地扩大发布范围。灰度环境概念较为复杂,建议您按需学习后使用。更多信息,请参见灰度环境(选配)。
域名:您创建函数并发布代码后,需要用域名做为函数的入口供客户端请求访问。目前边缘函数只支持接入阿里云CDN的加速域名做为函数入口,您可以在CDN域名的配置中关联边缘函数。
边缘节点:边缘是相对中心化的部署方式而言的,边缘节点即指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域名。 |