函数计算3.0评测:更强大的功能,更简单的操作,更出色的性价比

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 函数计算3.0版是一个全托管Serverless计算服务的重大升级版本,它具有更高的弹性,更少的复杂性,更多的灵活性和更好的成本效益。它采用了统一的处理程序签名,消除了服务概念,并支持自定义域名,使函数成为一级实体,便于管理和运维。此版本还改进了函数执行引擎,支持新的计量模式和自定义运行时,并增加了更多种类的触发器类型,使用户可以更加方便地使用云服务和调试。

前言

函数计算

函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务,无需管理服务器等基础设施,只需编写代码并上传,函数计算会准备好计算资源,并以弹性、可靠的方式运行您的代码。

产品架构

image.png

产品链接https://www.aliyun.com/product/fc?spm=5176.21213303.J_4VYgf18xNlTAyFFbOuOQe.147.5fbc2f3dhbWF75&scm=20140722.X_data-a33205846d1bebd52063._.V_1

产品优势

  • 高效免运维:聚焦业务逻辑开发,无需关心服务器购买、自动伸缩等运维操作。

  • 弹性高可用:预留实例系统不自动回收,可长驻不销毁,消除冷启动带来的延时毛刺。

  • 按需低成本:按量付费模型按实际使用计算资源计费,资源利用率高。

  • 稳定高可靠:函数计算分布式集群化部署,支持多可用区

image.png

产品功能

丰富的触发器类型:函数计算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版是产品的一个重大升级版本,在函数管理、函数执行引擎、自定义域名、函数授权及弹性伸缩规则方面进行了多项改进,旨在为用户提供极简的产品体验。

函数管理变化

  1. 移除服务概念,函数成为一级实体,角色、日志和VPC等直接在函数级别配置。

  2. 版本和别名直接作用在函数级别,可以对函数进行独立的版本控制。

第一点,在函数计算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,
    }))

函数执行引擎变化

  1. 统一请求处理程序(Handler)签名,HTTP请求和事件请求处理程序统一。具体信息,请参见HTTP Trigger行为变化。

  2. 标准运行时(Runtime)不再支持单实例多并发功能,Custom Runtime仍然支持单实例多并发功能。

  3. 函数实例生命周期不再支持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和控制台操作界面,针对用户原有的服务和函数,也能够兼容。兼容的规则如下:

image.png

除去上述功能的变化外,另外一个最大的好消息就是降价了!,而且是大幅降价性价比更高了!!!

image.png

体验函数计算——基于函数计算实现AI推理

开通函数计算和日志服务

在使用函数计算前,需要开通函数计算服务。

使用自己的阿里云账号登录阿里云控制台,然后进入函数计算产品详情页。

image.png

也可以选择领用免费试用版。(https://developer.aliyun.com/topic/serverless2023?spm=a2c6h.27063436.J_6978680750.2.61f74f46jVRKT9)

image.png

安装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

image.png

安装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控制台

image.png

选择【文件系统】 > 【文件系统列表】。选择资源所在地域,找到资源信息栏中的NAS文件系统ID对应的文件系统,单击【更多】 > 【添加挂载点】。

image.png

下载项目代码

安装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'

image.png

将依赖文件上传到NAS

执行以下命令初始化NAS。

fun nas init

查看本地NAS的目录位置。

fun nas info

image.png

执行以下命令安装相关依赖。

fun install -v

image.png

将本地NAS目录同步到阿里云NAS存储中。

fun nas sync

image.png

部署到函数计算平台

执行以下操作将函数部署到函数计算平台:

fun deploy -y

执行结果如下图所示,图中19176540-18576685985*.test.functioncompute.com为函数计算平台分配的临时域名,有效期10天,每天有1000次的调用限制。

image.png

测试预测服务

部署完成后,等待30秒钟左右,在浏览器打开临时域名,如下图所示。

image.png

上传一张猫或狗的图片。

image.png

单击【Predict】按钮,查看预测识别结果。

image.png

总体评估

在体验过程中是否得到足的产品内引导以及文档帮助?如果没有,还欠缺什么部分?

就我个人而言,在使用产品过程中,我确实得到了足够多的产品内部引导和文档帮助。

产品的用户界面设计得相当直观,我在初次使用时就能很快找到我的方式。我发现许多关键功能都有详细的说明,这让我可以更容易地理解和使用这些功能。此外,我也发现产品的在线帮助系统包含了大量有用的信息,我可以在需要的时候轻松查找。

然而,虽然我总体上对产品的文档和指导感到满意,但我认为还有一些地方可以改进。例如,对于某些更高级或复杂的功能,我认为应该提供更多的示例和解释,以便于用户更好地理解如何正确使用它们。另外,我还注意到有些错误消息并不清晰,很难确定问题出在哪里,我希望看到的是更为详细且易懂的错误信息。

产品功能是否满足预期?(如兼容性升级、函数管理、版本/别名管理、流量管理、代码开发等方面)

从兼容性升级的角度来看,函数计算3.0表现得相当出色。它可以很好地支持各种不同的编程语言和框架,这意味着无论选择何种技术栈,都可以轻松地在函数计算中构建应用程序。此外,升级过程也非常顺畅,我没有遇到任何可能导致数据丢失或破坏的问题。

其次,关于函数管理方面,我觉得函数计算3.0做得非常好。在主界面上,可以清楚地看到所有的函数列表,而且每个函数的状态都一目了然。我还可以方便地创建、编辑和删除函数,这对我来说非常重要,因为有时候我可能需要频繁地修改和更新我的应用程序。

再来说说版本/别名管理。函数计算3.0允许创建多个版本的函数,并为每个版本指定一个别名,这样就可以很容易地跟踪和比较不同版本的表现。有时当我想要回滚到某个旧版本,只需要简单地切换一下别名即可,这个功能非常实用。

在流量管理方面,函数计算3.0也提供了很多选项。可以自由地设置流量分配的比例,这对于A/B测试和灰度发布特别有用。而且,还可以随时查看每个函数的实时流量情况,这对性能监控非常有帮助。

最后,谈到代码开发,函数计算3.0提供了一个完整的集成开发环境,我可以直接在浏览器中编写和调试代码。这对于远程工作或者在没有安装IDE的电脑上开发都非常方便。

总的来说,我可以说函数计算3.0在所有重要的方面都满足了我的预期,甚至在某些方面超出了我的期望。它的强大功能和易用性使其成为构建无服务器应用程序的理想选择。

针对业务场景,您觉得该产品还有哪些可以改进地方或更多的功能?

我认为该产品在以下三个方面可以有一些可以改进的地方。

  1. 提供更多的预置模板和例子。虽然现有的模板已经涵盖了大多数基本应用场景,但是对于一些较为特殊的业务场景,例如机器学习、大数据处理等等,仍然缺乏足够的支持。如果能提供更多这样的模板,那么用户就能更容易地搭建自己的解决方案。

  2. 提供更丰富的日志管理和分析工具。虽然目前已经有了一些基础的日志功能,但是在面对大规模和复杂的生产环境时,往往无法满足需求。如果能够添加更多的自定义规则和报警机制,那么用户就能够更有效地监测和诊断可能出现的问题。

  3. 提供更多的与其他云服务的集成。尽管目前已经有了一些与阿里云其他产品的集成,但是我发现在某些情况下,与其他第三方云服务的集成仍然不够完善。如果能够提供更多的API和插件,那么用户就能够更方便地连接和整合他们所需要的各种云服务。

函数计算产品与其他产品联动组合的体验以及可能,比如oss触发fc、kafka触发fc、alb触发fc等

如果能于其他阿里云产品的联动组合能力,确实可以使得函数计算具备更大的灵活性和适应性。下面大概提三点:

  1. OSS触发FC。当我们在OSS上创建或修改文件时,可以通过配置OSS对象生命周期策略来触发对应的函数,而无需写任何代码。这种自动化的文件处理方式极大地方便了我们的日常操作,提高了工作效率。

  2. Kafka触发FC。当我们有大量的流式数据需要实时处理时,我们可以将Kafka作为消息队列,将数据分发给多个函数进行处理。这种方式可以有效地提升我们的处理能力和响应速度。

  3. ALB触发FC。我们可以在ALB上配置URL映射规则,将请求转发给对应的函数进行处理。这种方式使得我们的应用程序能够更容易地扩展和维护。

除了上述的联动组合外,也还有许多其他的联动方式可以去探索和实践。

函数计算3.0和其他阿里云产品的联动组合确实提供了无限的可能性。通过巧妙地组合和利用这些产品,可以打造出高效、灵活、易于维护的云计算解决方案。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
26天前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
3月前
|
人工智能 机器人 Serverless
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
魔搭大模型一键部署到阿里云函数计算,GPU 闲置计费功能可大幅降低开销
583 2
|
4月前
|
弹性计算 数据可视化 Serverless
函数计算FC3.0评测|2.0的蜕变
函数计算FC3.0评测|2.0的蜕变
120221 18
|
1月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
26天前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
2月前
|
关系型数据库 MySQL Serverless
《开发者评测》之PolarDB MySQL 版 Serverless评测活动获奖名单
PolarDB MySQL 版 Serverless评测最优奖、潜力奖、争优奖获奖名单正式公布!
|
3月前
|
人工智能 Serverless API
函数计算部署AI艺术字应用,生成新春文字头像
基于 Stable Diffusion Serverless API 解决方案搭建 AI 文字生成应用,支持并发出图。
113472 9
|
3月前
|
关系型数据库 MySQL Serverless
评测报告:阿里云 PolarDB MySQL 版 Serverless 能力
本次评测全面评估了阿里云 PolarDB MySQL 版的 Serverless 能力,包括资源弹升速度、资源伸缩广度、稳定性、颗粒度、自动启停以及全局数据强一致性。结果显示,PolarDB 在这些维度上均表现出色,能够快速响应负载变化、灵活调整资源配置、保证业务连续性和稳定性,同时精细控制成本。与同类型产品相比,PolarDB 在多方面具有优势。我们建议阿里云继续优化资源调度算法、拓展边缘场景支持,并加强与生态伙伴的合作,以进一步提升产品竞争力和用户满意度。
|
4月前
|
弹性计算 Serverless Python
在阿里云函数计算中,由于没有提供远程登录实例的功能
在阿里云函数计算中,由于没有提供远程登录实例的功能
90 1
|
4月前
|
Serverless 开发者
《开发者评测》之函数计算 FC 3.0 获奖名单
函数计算 FC 3.0评测最优奖、潜力奖、争优奖获奖名单正式公布!
272 0