前言
函数计算
函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务,无需管理服务器等基础设施,只需编写代码并上传,函数计算会准备好计算资源,并以弹性、可靠的方式运行您的代码。
产品架构:
产品优势:
高效免运维:聚焦业务逻辑开发,无需关心服务器购买、自动伸缩等运维操作。
弹性高可用:预留实例系统不自动回收,可长驻不销毁,消除冷启动带来的延时毛刺。
按需低成本:按量付费模型按实际使用计算资源计费,资源利用率高。
稳定高可靠:函数计算分布式集群化部署,支持多可用区
产品功能:
丰富的触发器类型:函数计算FC通过触发器与事件源进行关联,关联后的事件源,会在事件产生时以同步或异步的方式触发函数执行,并将变更事件作为入参传递给入口函数。
按照触发器集成方式,函数计算支持的触发器分为以下三类:
双向集成触发器:您既可以在函数计算,又可以在事件源端配置触发器。
单向集成触发器:目前只支持在事件源端配置触发器。
云产品事件触发器:支持在函数计算配置触发器,同时支持在事件总线EventBridge创建函数触发规则,无需在事件源端配置。
从函数调用方式的角度,触发器又可以分为同步调用触发器和异步调用触发器,两种调用方式的区别如下所示。更多信息,请参见同步调用。
同步调用:事件被函数处理后直接返回结果。例如,使用控制台调用函数属于同步调用。
异步调用:事件在写入到函数计算内部队列后返回结果,函数计算系统会保证该消息被可靠地处理。
多种编程语言:无服务器计算模式支持当前主流的编程语言与自定义运行时。运行时提供针对不同语言的、在执行环境中运行的环境。运行时作为函数计算和函数之间的接力员,传递函数调用的事件(event)、上下文信息(context)和响应。可以使用函数计算提供的运行时或构建自己的运行时,还可以自行构建容器镜像。
Custom Runtime
事件请求处理程序:PHP,Go,Node.js,Python,Ruby,C++,TypeScript,Powershell,Lua,Dart,Rust
HTTP请求处理程序:Python,C++,Spring Boot,F#
Custom Container
事件请求处理程序:Python,C++,Node.js
HTTP请求处理程序:Spring Boot,C++,.NET Core
便捷的开发工具:便捷的开发工具帮助您流畅地在本地开发调试部署。
Funcraft:Funcraft 是一个用于支持 Serverless 应用部署的工具,支持资源创建、本地调试、在线安装第三方依赖等。
fcli:fcli 是函数计算的命令行工具,帮助您便捷地管理函数计算中的资源。
Serverless Devs:Serverless Devs 是一个开源开放的 Serverless 开发者平台,通过该平台,开发者可以一键体验多云 Serverless 产品,极速部署 Serverless 项目。
VSCode 插件:基于 VSCode 的开发调试部署工具,可以快速创建、调试、运行、部署函数。
Midway Serverless:是一个用于构建 Node.js 云函数的 Serverless 框架,可以帮您在云原生时代更专注于产品开发,降低维护成本。
云开发平台:面向开发者和中小企业打造的一站式、全云端的开发平台,打开浏览器就可以开发、调试、上线,所测即所得。
丰富的资源类型:丰富的资源类型提供更好的无服务器计算性能。
预留实例:允许您自行控制实例的分配和释放,长驻的执行环境彻底消除实例冷启动带来的延时毛刺。
按量实例:根据请求数系统动态分配执行环境,轻松应对业务洪峰。
多样的实例类型:函数计算FC提供弹性实例和GPU实例两种实例类型。
弹性实例:函数计算的基本实例,适用于突发流量和计算密集等各种场景。
GPU实例:基于Ampere以及Turing架构的GPU实例。主要适用于音视频、AI人工智能和图像处理等场景。
灵活的计量模式:函数计算FC提供了丰富的计量模式,帮助您在不同场景下获得显著的成本优势。
按量付费模型:按实际使用计算资源计费,不占用计算资源则不计费,资源利用率高。
资源包模型:购买预付费(包年包月)资源包单价更低,可以抵扣实际消耗的计算力。组合使用按量付费模式和预付费(包年包月)模式将有效降低成本。
函数计算3.0
函数计算3.0版是产品的一个重大升级版本,在函数管理、函数执行引擎、自定义域名、函数授权及弹性伸缩规则方面进行了多项改进,旨在为用户提供极简的产品体验。
函数管理变化
移除服务概念,函数成为一级实体,角色、日志和VPC等直接在函数级别配置。
版本和别名直接作用在函数级别,可以对函数进行独立的版本控制。
第一点,在函数计算3.0版中,可以直接创建函数,不需要先创建服务。原服务级别的配置例如角色、日志配置、VPC配置等,直接在函数级别配置,这一步简化了太多了,实在是方便!
第二点是在函数级别发布版本和创建别名可以直接作用于函数级别,更加方便管理和运维。(示例代码如下:)
resp, err := client.PublishFunctionVersion(&funcName,
new(fc.PublishFunctionVersionRequest).SetBody(&fc.PublishVersionInput{
Description: tea.String("version desc"),
}))
aliasName := "my-alias"
routingConfig := map[string]*float32{
"2": tea.Float32(float32(0.05)),
}
resp, err := client.CreateAlias(&funcName, new(fc.CreateAliasRequest).
SetBody(&fc.CreateAliasInput{
AliasName: &aliasName,
VersionId: tea.String("1"),
AdditionalVersionWeight: routingConfig,
}))
函数执行引擎变化
统一请求处理程序(Handler)签名,HTTP请求和事件请求处理程序统一。具体信息,请参见HTTP Trigger行为变化。
标准运行时(Runtime)不再支持单实例多并发功能,Custom Runtime仍然支持单实例多并发功能。
函数实例生命周期不再支持PreFreeze回调方法。
第一点,在函数计算3.0版中,处理事件请求和处理HTTP请求的函数入口统一。(示例代码如下:)
def handler(event, context):
return 'hello fc'
对于HTTP Trigger调用,即通过HTTP Trigger的URL访问的请求或者通过自定义域名访问的请求,函数计算会将HTTP请求转换成event,同时将函数的响应转换成HTTP响应。
请求event示例如下:
{
"version": "v1",
"rawPath": "/my/path",
"httpMethod": "POST",
"headers": {
"header1": "value1,value2",
"header2": "value2"
},
"queryParameters": {
"param1": "value1,value2",
"param2": "value2"
},
"body": "hello from client",
"isBase64Encoded": false,
"requestContext": {
"accountId": "12345678",
"domainName": "my-domain.com",
"domainPrefix": "prefix",
"requestId": "abcd-efgh",
"time": "2023-09-01T14:17:23+08:00",
"timeEpoch": 1693549043255,
"http": {
"method": "GET",
"path": "/my/path",
"protocol": "http",
"sourceIP": "39.40.41.42",
"userAgent": "go-sdk/1.0"
}
}
}
HTTP响应示例如下:
def handler(event, context):
return {
'body': 'hello FC',
'headers': {
'my-custom-header': 'foo'
},
'statusCode': 400
}
以上代码将被转换成如下的HTTP响应:
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
My-Custom-Header: foo
X-Fc-Request-Id: 64e866c9-69902fbc525fd10989e7299c
Date: Fri, 25 Aug 2023 10:18:06 GMT
Content-Length: 8
hello FC
第二点,标准运行时(Runtime)不再支持单实例多并发功能,Custom Runtime仍然支持单实例多并发功能。
第三点是函数实例生命周期不再支持PreFreeze回调方法。
自定义域名变化
自定义域名不再依赖HTTP Trigger,可以直接引流到对应的函数。
函数授权变化
在使用函数计算提供的日志、VPC、异步调用目标服务等功能时,函数计算需要访问其他的云服务。例如配置函数日志时,用户需要授权函数计算对指定日志Logstore的写入权限,函数计算才能够将函数日志写入到用户的Logstore。原来这个授权是通过服务角色进行授权,服务角色一方面用于函数计算访问其他的云服务,另一方面也用于函数执行时用户代码访问其他云服务。这样可能会导致服务角色的权限过大的问题。
在函数计算3.0版,函数计算支持了服务关联角色(SLR),专门用于授权函数计算访问其他的云服务,而用户代码访问其他云服务,则由函数角色来授权,用户可以根据函数的需要,细粒度地控制函数角色的授权。
在用户一次性授权后,在函数计算3.0版创建的函数,默认将使用服务关联角色(SLR)。函数不需要配置角色即可使用日志、VPC、异步调用目标服务等功能。
弹性伸缩规则变化
按量实例伸缩控制功能升级为函数并发度管理,可以限制预留实例和按量实例的总并发度。
总的来说,函数计算3.0有以上5大点优化或者说是改动,除去这些之外,对比原有的2.0,函数计算3.0版提供了一套全新的API和控制台操作界面,针对用户原有的服务和函数,也能够兼容。兼容的规则如下:
除去上述功能的变化外,另外一个最大的好消息就是降价了!,而且是大幅降价!性价比更高了!!!
体验函数计算——基于函数计算实现AI推理
开通函数计算和日志服务
在使用函数计算前,需要开通函数计算服务。
使用自己的阿里云账号登录阿里云控制台,然后进入函数计算产品详情页。
也可以选择领用免费试用版。(https://developer.aliyun.com/topic/serverless2023?spm=a2c6h.27063436.J_6978680750.2.61f74f46jVRKT9)
安装Fun工具
Fun 是一个用于支持Serverless应用部署的工具,能帮助您便捷地管理函数计算、API 网关和日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建和部署操作。
将Fun的安装包下载到本地。请将下面的FUN_VERSION变量的值设置为最新版本号,最新版本号请参见Releases。
FUN_VERSION="v3.6.1"
curl -o fun-linux.zip https://gosspublic.alicdn.com/fun/fun-$FUN_VERSION-linux.zip
安装解压工具unzip,并使用unzip将下载的Fun安装包解压到当前目录。
yum -y install unzip
unzip fun-linux.zip
将解压出来的可执行文件移动到系统路径。
mv fun-*-linux /usr/local/bin/fun
配置Fun关联的阿里云账号和调用SDK的超时时间等信息。
fun config
安装Docker
安装Docker的依赖库。
yum install -y yum-utils device-mapper-persistent-data lvm2
添加docker-ce的软件源信息。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce。
yum makecache fast
yum -y install docker-ce
启动Docker服务。
systemctl start docker
创建NAS文件系统挂载点
搜索NAS,然后单击【文件存储NAS】,登录NAS控制台
选择【文件系统】 > 【文件系统列表】。选择资源所在地域,找到资源信息栏中的NAS文件系统ID对应的文件系统,单击【更多】 > 【添加挂载点】。
下载项目代码
安装Git工具并使用Git克隆项目代码到本地(如果克隆失败可以先在网站上打开该地址,然后进行安装)
yum -y install git
git clone https://github.com/awesome-fc/cat-dog-classify.git
编辑项目中FUN的部署模板文件template.yml,修改日志服务项目名称和NAS存储挂载配置。
使用vim打开模板文件
cd cat-dog-classify
vim template.yml
输入以下命令全局替换日志服务项目名称。
:%s/log-ai-pro/log-ai-test/g
修改NAS挂载配置。默认auto方式将会自动创建NAS文件系统,这里我们修改填写为平台预创建好的NAS文件系统的信息。
VpcConfig:
VpcId: 'vpc-uf6u8*****zf1r4'
VSwitchIds: [ 'vsw-uf6******038fy' ]
SecurityGroupId: 'sg-uf6e******w6qz'
NasConfig:
UserId: 10003
GroupId: 10003
MountPoints:
- ServerAddr: '33****u83.cn-shanghai.nas.aliyuncs.com:/'
MountDir: '/mnt/auto'
将依赖文件上传到NAS
执行以下命令初始化NAS。
fun nas init
查看本地NAS的目录位置。
fun nas info
执行以下命令安装相关依赖。
fun install -v
将本地NAS目录同步到阿里云NAS存储中。
fun nas sync
部署到函数计算平台
执行以下操作将函数部署到函数计算平台:
fun deploy -y
执行结果如下图所示,图中19176540-18576685985*.test.functioncompute.com为函数计算平台分配的临时域名,有效期10天,每天有1000次的调用限制。
测试预测服务
部署完成后,等待30秒钟左右,在浏览器打开临时域名,如下图所示。
上传一张猫或狗的图片。
单击【Predict】按钮,查看预测识别结果。
总体评估
在体验过程中是否得到足的产品内引导以及文档帮助?如果没有,还欠缺什么部分?
就我个人而言,在使用产品过程中,我确实得到了足够多的产品内部引导和文档帮助。
产品的用户界面设计得相当直观,我在初次使用时就能很快找到我的方式。我发现许多关键功能都有详细的说明,这让我可以更容易地理解和使用这些功能。此外,我也发现产品的在线帮助系统包含了大量有用的信息,我可以在需要的时候轻松查找。
然而,虽然我总体上对产品的文档和指导感到满意,但我认为还有一些地方可以改进。例如,对于某些更高级或复杂的功能,我认为应该提供更多的示例和解释,以便于用户更好地理解如何正确使用它们。另外,我还注意到有些错误消息并不清晰,很难确定问题出在哪里,我希望看到的是更为详细且易懂的错误信息。
产品功能是否满足预期?(如兼容性升级、函数管理、版本/别名管理、流量管理、代码开发等方面)
从兼容性升级的角度来看,函数计算3.0表现得相当出色。它可以很好地支持各种不同的编程语言和框架,这意味着无论选择何种技术栈,都可以轻松地在函数计算中构建应用程序。此外,升级过程也非常顺畅,我没有遇到任何可能导致数据丢失或破坏的问题。
其次,关于函数管理方面,我觉得函数计算3.0做得非常好。在主界面上,可以清楚地看到所有的函数列表,而且每个函数的状态都一目了然。我还可以方便地创建、编辑和删除函数,这对我来说非常重要,因为有时候我可能需要频繁地修改和更新我的应用程序。
再来说说版本/别名管理。函数计算3.0允许创建多个版本的函数,并为每个版本指定一个别名,这样就可以很容易地跟踪和比较不同版本的表现。有时当我想要回滚到某个旧版本,只需要简单地切换一下别名即可,这个功能非常实用。
在流量管理方面,函数计算3.0也提供了很多选项。可以自由地设置流量分配的比例,这对于A/B测试和灰度发布特别有用。而且,还可以随时查看每个函数的实时流量情况,这对性能监控非常有帮助。
最后,谈到代码开发,函数计算3.0提供了一个完整的集成开发环境,我可以直接在浏览器中编写和调试代码。这对于远程工作或者在没有安装IDE的电脑上开发都非常方便。
总的来说,我可以说函数计算3.0在所有重要的方面都满足了我的预期,甚至在某些方面超出了我的期望。它的强大功能和易用性使其成为构建无服务器应用程序的理想选择。
针对业务场景,您觉得该产品还有哪些可以改进地方或更多的功能?
我认为该产品在以下三个方面可以有一些可以改进的地方。
提供更多的预置模板和例子。虽然现有的模板已经涵盖了大多数基本应用场景,但是对于一些较为特殊的业务场景,例如机器学习、大数据处理等等,仍然缺乏足够的支持。如果能提供更多这样的模板,那么用户就能更容易地搭建自己的解决方案。
提供更丰富的日志管理和分析工具。虽然目前已经有了一些基础的日志功能,但是在面对大规模和复杂的生产环境时,往往无法满足需求。如果能够添加更多的自定义规则和报警机制,那么用户就能够更有效地监测和诊断可能出现的问题。
提供更多的与其他云服务的集成。尽管目前已经有了一些与阿里云其他产品的集成,但是我发现在某些情况下,与其他第三方云服务的集成仍然不够完善。如果能够提供更多的API和插件,那么用户就能够更方便地连接和整合他们所需要的各种云服务。
函数计算产品与其他产品联动组合的体验以及可能,比如oss触发fc、kafka触发fc、alb触发fc等
如果能于其他阿里云产品的联动组合能力,确实可以使得函数计算具备更大的灵活性和适应性。下面大概提三点:
OSS触发FC。当我们在OSS上创建或修改文件时,可以通过配置OSS对象生命周期策略来触发对应的函数,而无需写任何代码。这种自动化的文件处理方式极大地方便了我们的日常操作,提高了工作效率。
Kafka触发FC。当我们有大量的流式数据需要实时处理时,我们可以将Kafka作为消息队列,将数据分发给多个函数进行处理。这种方式可以有效地提升我们的处理能力和响应速度。
ALB触发FC。我们可以在ALB上配置URL映射规则,将请求转发给对应的函数进行处理。这种方式使得我们的应用程序能够更容易地扩展和维护。
除了上述的联动组合外,也还有许多其他的联动方式可以去探索和实践。
函数计算3.0和其他阿里云产品的联动组合确实提供了无限的可能性。通过巧妙地组合和利用这些产品,可以打造出高效、灵活、易于维护的云计算解决方案。