函数计算
阿里云函数计算(Function Compute)是为开发者提供的全托管的无服务器执行环境。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源包括服务器 CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡等。
优点
可靠性
代码和配置存放在OSS中,自动多重冗余备份。
可扩展性
毫秒级别实时弹性伸缩和动态负载均衡。
安全性
沙箱运行在阿里云企业级别安全环境里。
多租户运行是服务器级别隔离机制。
提供多种服务授权和子主账号来保证访问安全。
成本
按执行付费,在业务请求波谷期费用低廉。
上行流量免费。
无需运维人员和托管费用。
阿里云产品内部数据传输无流量费用。
易用性
内置打通多款阿里云的产品,产品之间的连接只需要控制台简单配置就可以使用。
自动伸缩和负载均衡。
沙箱执行环境,无需配置。
触发条件简单,入口多。
产品详情
代码管理
您可以把代码上传到函数计算并运行代码,函数计算提供多种代码管理方式:
通过控制台编辑代码,这种方式适用于没有外部依赖的业务代码,直接在控制台上编辑代码。
将所有依赖和代码打包成ZIP或者jar 包 并上传至函数计算,系统会自动抽取入口函数并执行。
把代码上传到对象存储(OSS)里,并在函数中指定代码所在 Bucket和文件,系统将自动下载函数代码并运行。
支持多开发环境
函数计算支持多种开发环境。目前已支持的语言包括:Python 2.7 & 3.6、Node.js 6.10、Java 8等,后面会持续发布新的开发语言环境。
自动伸缩
函数计算是毫秒级别的实时弹性伸缩,完全根据请求量扩容或缩容。动态负载均衡将请求分发至后端近乎无限的函数实例上,完全无需任何手动配置和操作,满足并发量从 0 到成千上万的不同场景。
事件触发
支持设置多种触发器来决定代码何时运行,在满足触发器条件(Event)时,代码自动开始运行,并根据请求自动调度基础设施资源实现自动伸缩和回收,提高计算效率。
监控和日志
函数计算提供精细的日志记录,您可方便地查看函数的运行状况,并对代码进行调试、测试;支持相关的监控指标上报,帮助您快速了解函数的整体运行概况,同时您还可自定义函数执行的监控指标,对函数进行更深入、更广泛的监控。
业务模板
函数计算内置了大量业务模板和示例代码,您基于函数模板可以快速创建对应的函数服务,如网络爬虫,图像自动分类,访问阿里云的对象存储OSS,表格存储,日志服务,API网关等。
毫秒的计费方式
函数计算计量最小单位是毫秒,您只需为提供的请求以及运行您的代码所需的计算时间付费。账单以 100 毫秒的增量计费,从而能经济高效且轻松地从每天几个请求自动扩展到每秒数千个请求。
自定义运行资源
函数计算提供了按照内存大小来分配资源,您选择您想执行的内存数量,其他资源按同比例分配 CPU、网络带宽和磁盘 I/O等。
功能
VPN网关(VPN Gateway)是一款基于Internet,通过加密通道将企业数据中心和阿里云专有网络(Virtual Private Cloud)安全可靠连接起来的服务。
阿里云VPN网关支持IPSec加密协议,可满足绝大多数VPN连接的需求。
注意:阿里云VPN网关在国家相关政策法规内提供服务,不提供访问Internet功能。
定价
阿里云函数计算采用按需付费的方式,费用由以下三部分构成。其中,公网流量费用是可选的,只有您的函数里使用公网进行数据传输时,才会产生这部分费用。
计费项说明
总费用 = 调用次数费用 + 执行时间费用 + 公网流量费用(可选)
每月免费额度
每月的免费额度是子主账户共同使用。
调用次数:每月前100万次调用免费。
执行时间:每月前400000GB-秒费用免费。
调用次数费用
调用次数是您所有函数调用总次数。
单价:0.2 $/百万次
执行时间费用
执行时间从您的代码开始执行的时间开始算起到其返回或终止为止,计量的粒度是100毫秒。时间的价格取决于您给函数分配的内存量。
单价:0.00001668 $/GB-秒 (0.000001668 $/GB-100毫秒)
公网流量费用
如果您在函数计算里使用了公网进行数据传输,使用的公网流量将按照阿里云ECS的公网流量价格进行计费。详情价格请参考相关文档。
每月免费额度速算表
| 内存(MB) | 每个月的免费套餐秒数 |
| 128 | 3200000 |
| 192 | 2133333 |
| 256 | 1600000 |
| 320 | 1280000 |
| 384 | 1066667 |
| 448 | 914286 |
| 512 | 800000 |
| 576 | 711111 |
| 640 | 640000 |
| 704 | 581818 |
| 768 | 533333 |
| 832 | 492308 |
| 896 | 457143 |
| 960 | 426667 |
| 1024 | 400000 |
| 1088 | 376471 |
| 1152 | 355556 |
| 1216 | 336842 |
| 1280 | 320000 |
| 1344 | 304762 |
| 1408 | 290909 |
| 1472 | 278261 |
| 1536 | 266667 |
场景
媒资内容分析处理场景
事件触发机制,便捷构建完整数据处理链路 通过对象存储上传事件可以触发多个函数,完成转码、元数据抽取等功能。通过事件触发机制,您能够快速整合不同服务,构建一个弹性、高可用的视频后端系统。
弹性、高可用的视频后端系统,并且只为实际消耗的资源付费。
采用分布式系统架构和自主研发高性能缓存软件,稳定高效。
Severless后端服务
采用函数服务构建灵活拓展架构
可以使用 函数计算和 API网关 构建后端,以验证和处理 API 请求。采用函数服务构建灵活拓展架构,轻松创造丰富、个性化的应用程序体验。
实现毫秒级别的实时弹性伸缩和动态负载均衡,帮助您削峰填谷,从容应对突发访问。
个云产品集成的事件触发机制,衔接诸多场景的计算需求。
IoT消息实时处理
实时数据流,通过函数计算分类处理写入后端 您可以使用函数计算高效的处理实时流数据。例如,实时过滤、聚合、分析IoT设备产生的数据,并将产生的结构化数据保存到数据库中。
能够解决
实现毫秒级别的实时弹性伸缩和动态负载均衡,帮助您削峰填谷,从容应对突发访问
多个云产品集成的事件触发机制,衔接诸多场景的计算需求。
使用入门
函数计算是一个事件驱动的全托管计算服务,您编写代码上传到函数计算,然后通过SDK或者RESTful API来触发执行函数,同时您也可以通过云产品的事件来触发执行函数,例如OSS的ObjectCreated/ObjectRemoved等事件。函数计算和多款云产品打通,例如对象存储(OSS)、日志服务、API网关、表格存储等。
① 开发者编写代码,目前支持Java、NodeJS、Python多个版本等语言环境。
② 把代码上传到函数计算上,通过API或者SDK上传,也可以通过控制台页面上传上传,还可以通过命令行工具Fcli上传。
③ 通过API&SDK来触发函数计算执行,同样也可以通过云产品的事件源来触发函数计算执行。
④ 函数计算在执行过程中,会根据用户请请求量动态扩容函数计算来保证请求峰值的执行,这个过程对用户是透明无感知的。
⑤ 函数执行结束后,可以通过账单来查看执行费用,根据函数的实际执行时间按量计费,收费粒度精确到100ms。
资源
这些资源可以帮助您了解阿里云 函数计算 的工作原理。
以下是相关资源的链接。
相关服务
常见问题
1. 你们只支持Node.js,我用C++写的程序怎么运行?
我们会根据用户需求不断拓展支持的语言种类。当前我们支持 Node.js,Python。Java 也会在近期支持。如果您的程序是用我们还未支持的语言实现的,您可以采用以下做法: 看看是否能方便的用我们支持的语言改写。Node.js,Python 等语言包含了非常丰富的类库,开发效率很高。 将 C/C++ 等程序编译为可执行文件,通过 fork 等系统调用的方式运行可执行文件。 将 C/C++ 模块编译为 shared library,在 Python 等语言中通过 binding 的方式调用。
2. 现在 docker 这么火,为什么你们不支持用户自定义 docker 镜像?
实际上支持用户自定义镜像本身不是特别难,难的是支持特别大的自定义镜像。为了保证实时伸缩,系统必须在很短的时间内将容器启动。如果用户自定义的镜像特别大,下载镜像的时间可能就长达几分钟,这样的性能损失很难接受。我们希望您能使用微服务的开发方式,将逻辑解耦,每个函数的功能明确。这样函数代码一般不会有特别复杂的依赖,更容易构建。
3. 函数计算的运行环境中所依赖的包如何自动安装?
函数计算要求您上传的代码包中包含了所有的依赖。不同的语言包管理机制不同,例如在 Node.js 中,您可以使用 npm 将依赖的包安装到代码目录中并打包上传。您可以使用我们的命令行工具 fcli 安装依赖并打包。具体过程请参考我们的示例。 函数运行。
4. 如果我程序要产生很大一个文件,或者需要一个比较大的空间,我什么地方能申请到?
您的函数在运行时有512MB的临时存储空间。如果还不够用,请考虑用流式的方式处理数据,通常这样会更加高效。这里是一个示例,通过流式的方式,将一个函数从原来消耗1G内存,运行几分钟,优化到消耗256MB内存,运行10秒钟。如果仍然不能解决您的问题,请联系我们。
5. 在程序运行过程中,实际使用了多少内存,我从哪些接口能获取到?
函数调用的返回信息中会包含最大内存消耗等信息。您也可以从性能监控指标中查看连续一段时间的函数运行资源消耗情况。
6. 函数可以相互调用吗?
函数可以相互调用。由于函数可能运行在不同的机器上,所以是通过RPC的方式远程调用。您可以使用我们的 Invoke API 调用指定函数。
7. 我的函数如果出现死循环,我怎么杀掉函数进程?
死循环可以分为两种:1) 单个函数运行逻辑出现死循环。2)多个函数调用出现无限递归,无法中止的情况。例如函数 A 调用 B,B 又调用 A。情况1比较容易,函数超时后,系统会自动中止函数,您会收到超时错误,但不会有财务损失。情况2比较麻烦,对系统来说,会认为这种调用是合法的。此时需要您通过函数级别的指标监控报警。此外,我们在用户粒度上设置了函数的最大并发度,确保您的费用消耗是可控的。
8. 你们一个用户下的最大并发度只有100,所以我构建的服务每秒最多只能处理100个请求?这也太小了吧。
每秒处理请求数(qps)和最大并发度有关系,但二者不是一个概念。您可以用下面的公式来估计:每秒请求数 * 请求处理时间(秒) = 最大并发度。例如,假设您预期每秒10000个请求,平均每个请求处理时间为1秒,那么所需的最大并发度为10000;如果平均每个请求处理时间为10毫秒,那么所需的最大并发度是10000 * 0.01秒 = 100。细节信息请查阅我们的文档。此外,最大并发度的目的是对用户的保护,防止用户的费用失控,例如上面提到的函数相互调用无限递归而无法中止的例子。如果默认的值不够,您可以联系我们调整成您期望的值。
9. 我的执行环境是否是独立安全的?怎么来保障?
确保安全是函数计算最重要的目标。我们在产品和系统设计的每个方面都把安全作为最高优先级的目标。您的程序在函数计算环境中运行的隔离保护和阿里云的ECS是同一级别,即我们是在虚拟机级别隔离运行,而非容器。此外我们还在网络,数据,代码,防DDos攻击等方面做了完备的保护,确保您的信息安全。
10.函数返回后,执行环境也会随之释放吗?我能复用上一次调用缓存的资源/状态吗?
函数运行在容器的环境里。返回后,容器不会立即释放。只有在一段时间内(取决于系统的调度算法,通常在几分钟到几十分钟),该容器都没有收到任何请求,才会被释放。如果有持续的请求,可以认为函数是常驻的。因此,您可以通过全局变量等方式缓存资源来优化性能。但是,您的程序正确性不能依赖缓存一直可用这个假设。例如,当出现容器/机器宕机等情况,缓存的数据就不再有效。
11.程序运行过程中产生的日志我如何批量下载?
如果您的日志保存在日志服务的 LogStore 中,您可以通过日志服务的 API 查询和下载相关内容。
12.函数调用正常,为什么在监控页面看不到调用次数等指标?
请检查您使用的账户是否是子账户,是否具备云监控的只读权限。