常见工业FaaS平台

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 自Serverless这个概念被提出,从不为人知到广为人知已经经历了数年的历程,在这个过程中有一众人对Serverless架构充满信心和期待,但是也有一部分人对其抱有怀疑态度,但是无论如何Serverless架构都在飞速的发展,并且被更多人所接受,被更多厂商所重视。在Serverless架构中,计算能力通常是由FaaS平台提供,在众多的FaaS平台或产品中,有以AWS Lambda、Google Cloud Functions、阿里云函数计算等为代表的工业化产品

自Serverless这个概念被提出,从不为人知到广为人知已经经历了数年的历程,在这个过程中有一众人对Serverless架构充满信心和期待,但是也有一部分人对其抱有怀疑态度,但是无论如何Serverless架构都在飞速的发展,并且被更多人所接受,被更多厂商所重视。在Serverless架构中,计算能力通常是由FaaS平台提供,在众多的FaaS平台或产品中,有以AWS Lambda、Google Cloud Functions、阿里云函数计算等为代表的工业化产品。典型FaaS Hosted Platform可以在《CNCF Cloud Native Interactive Landscape》的Serverless标签下查看得到:


AWS Lambda
2014年Amazon发布了AWS Lambda,也正是Amazon发布的AWS Lambda,让“Serverless”这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系结构,所以可以认为AWS Lambda在诸多FaaS平台中有着里程碑意义,具有领导地位。
AWS Lambda 是一项无服务器计算服务,可运行代码来响应事件并自动管理底层计算资源。您可以使用 AWS Lambda 通过自定义逻辑来扩展其他 AWS 服务,或创建按 AWS 规模、性能和安全性运行的后端服务。AWS Lambda 可以自动运行代码来响应多个事件,例如,通过 Amazon API Gateway 发送的 HTTP 请求、Amazon S3 存储桶中的对象修改、Amazon DynamoDB 中的表更新以及 AWS Step Functions 中的状态转换。Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预配置和自动扩展、代码和安全补丁部署以及代码监控和记录。通过 AWS Lambda,无需预置或管理服务器即可运行代码。在使用过程中只需按使用的计算时间付费(代码未运行时不产生费用)。借助 Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且完全无需管理。只需上传代码,Lambda 会处理运行和扩展高可用性代码所需的一切工作。Lambda在官网对其产品的特性总结词为:用自定义逻辑扩展其他 AWS 服务、构建自定义后端服务、自备代码、完全自动化的管理、内置容错能力、自动扩展、运行代码以响应 Amazon CloudFront 请求、编排多个函数、集成化安全模型、按使用费用、灵活的资源模型。
AWS Lambda的执行机制是Runtime,目前支持Go、.Net、Node.JS、Python、Ruby等在内的多种编程语言,相对于其他工业Serverless平台,可以说Lambda支持的语言是最多的,同时其支持自定义运行时、容器镜像等,相对其他平台而言,AWS的Lambda。代码上传层面,用户可以通过在线编辑,ZIP压缩包以及S3存储等上传代码,或者修改编辑代码。另外Lambda的运行超时时间最大可设置为900秒,开发者工具拥有CLI、WebIDE以及VS插件、Eclipse插件等,拥有AWS Step Funtions作为编排能力。


相对于其他平台而言,AWS Lambda的函数管理页面有一个比较特色化的设计,那就是Designer(函数概览),Designer可以直观的显示用户的函数及其上游和下游资源。用户可以使用它跳转到触发器、目标和层配置。
众所周知,一个FaaS平台的灵活性和可完成功能的广度是和其触发器有着不可分割的关系,在AWS的Lambda中,支持包括Amazon Kinesis、Amazon DynamoDB、Amazon Simple Queue Service、Amazon Simple Notification Service、Amazon Simple Email Service、Amazon S3、Amazon Cognito、AWS CloudFormation、Amazon CloudWatch Logs、Amazon CloudWatch Events、AWS CodeCommit、Scheduled Events (powered by Amazon CloudWatch Events)、AWS Config、Amazon Alexa 、Amazon Lex、Amazon API Gateway、AWS IoT Button、Amazon CloudFront、Amazon Kinesis Data Firehose等数十种触发器。
而在可观测性上,AWS Lambda拥有非常完善的监控中心(CloudWatch 指标以及CloudWatch Logs Insights),不仅仅可以观测到Invocations、Errors、DeadLetterErrors、Duration、Throttles、IteratorAge、ConcurrentExecutions、UnreservedConcurrentExecution等指标,也可以通过Lambda Insights查看到请求详情,性能指标等(包括Tracing等),而相对AWS Lambda而言,国内的云厂商中,目前阿里云的函数计算,也同样提供了类似的,相对完备的可观测能力。
在开发者工具层面上,AWS Lambda不仅仅拥有自身的AWS SAM CLI,也有用着Serverless Framework、Serverless Devs等众多产品为其提供的开发者工具,这里开发者可以快速的开发项目,快速部署、自动化运维等。同样,也有一众创业公司针对AWS Lambda提供更多更有趣的开发者工具,例如Stackery就为AWS Lambda提供一种更简单、更方便、更新奇,类似于LowCode模式的开发者工具。


Google Cloud Functions
从2008年的Google App Engine开始,Google一直在慢慢地添加不同的“无服务器计算”选项,并且提供各种消息传递和数据透明组合。目前Google Cloud Function采用Runtime作为执行机制,支持Node.JS、Java以及Python等语言。用户可以通过直接上传代码、对象存储、云代码库、CLI等方法对代码进行部署、发布、以及更新升级。函数超时时间最大为540秒,具有自动伸缩能力,开发者工具包括CLI命令行工具以及WebIDE等。


相对于AWS Lambda而言,Google Cloud Functions可能在触发器数量上、可观测性上、运行时的种类上等层面有所欠缺,但是Google Cloud Functions凭借Google自身的强大技术支撑与自身的产品广度,也是让Google Cloud Functions极具特色,例如与Firebase结合后的Cloud Functions for Firebase,使用者可以利用它自动运行后端代码来响应 Firebase 功能和 HTTPS 请求触发的事件。
在触发器层面,Google Cloud Functions支持9种触发器: HTTP 触发器、Cloud Pub/Sub 触发器、Cloud Storage 触发器、直接触发器、Cloud Firestore 触发器、Google Analytics for Firebase 触发器、Firebase 实时数据库触发器、Firebase 身份验证触发器、使用 Stackdriver 的第二方触发器、Cloud Scheduler 触发器。
在运行时层面,Google Cloud Functions支持Go、.Net Core、Java、Node.js、Python、Ruby等6种语言的累计十余种版本。
值得一提的是,Google在Serverless开源事业上,有着里程碑的贡献了Kubernetes和Knative。
Kubernetes(也简称为K8S)是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡,之所以说它的开源对Serverless的发展有着里程碑的意义,是因为很多工业级FaaS产品和开源的FaaS产品,就是基于Kubernetes来建设的,所以可以认为没有Kubernetes,那么我们将会失去很多有趣的FaaS平台或者项目;而Knative则可以认为是Kubernetes的一个Serverless方向的更具体的表现,Knative 是谷歌牵头发起的 Serverless 项目,其定位为基于 Kubernetes 的 Serverless 解决方案,旨在标准化 Serverless,简化其学习成本。Knative 是以 Kubernetes 的一组自定义资源类型(CRD)的方式来安装的,因此只需使用几个 YAML 文件就可以轻松地开始使用 Knative 了。这也意味着,在本地或者托管云服务上,任何可以运行 Kubernetes 的地方都可以运行 Knative 和用户的代码。Kubernetes的重要价值和意义,绝不止于Serverless,Knative项目也绝对不只是一个优秀的Serverless项目开源,这两个产品的出现,对Serverless的发展有着极具创新的推动力,对云原声乃至云计算的发展都有着里程碑的价值和意义。
Azure Functions
Azure Functions 是用于在云中轻松运行小段代码或“函数”的一个解决方案。 用户可以只编写解决现有问题所需的代码,而无需担心要运行该代码的整个应用程序或基础结构。 Functions 可使开发更有效率,并可以使用自己所选的开发语言,例如 C#、F#、Node.js、Java 或 PHP。 只需为代码运行的时间付费,并可信任 Azure 会根据需要进行调整。 使用 Azure Functions 可以在 Azure 上开发无服务器应用程序。
Functions 是一个理想的解决方案,用于处理数据、集成系统、使用物联网 (IoT) 以及生成简单的 API 和微服务。 对于以下任务请考虑使用 Functions:例如,图像或订单处理、文件维护,或者要按计划运行的任何任务。
目前为止,Azure Functions支持多种触发器:
HTTPTrigger - 使用 HTTP 请求触发执行代码。
TimerTrigger - 按预定义的计划执行清除或其他批处理任务。
CosmosDBTrigger - 在 NoSQL 数据库中以集合形式添加或更新 Azure Cosmos DB 文档时,对这些文档进行处理。
BlobTrigger - Azure 存储 blob 添加到容器时,处理这些 blob。 可以使用此函数调整图像大小。
QueueTrigger - 当消息到达 Azure 存储队列时,响应这些消息。
EventHubTrigger - 响应传送到 Azure 事件中心的事件。 在应用程序检测、用户体验或工作流处理以及物联网 (IoT) 方案中特别有用。
ServiceBusQueueTrigger - 通过侦听消息队列将代码连接到其他 Azure 服务或本地服务。
ServiceBusTopicTrigger - 通过订阅主题将代码连接到其他 Azure 服务或本地服务。
Azure Functions 可与各种 Azure 和第三方服务集成。 这些服务可以触发函数开始执行,或者可用作代码的输入和输出。 Azure Functions 支持以下服务集成:
Azure Cosmos DB
Azure 事件中心
Azure 通知中心
Azure 服务总线(队列和主题)
Azure 存储(blob、队列和表)
本地(使用服务总线)
值得一提的是,Azure Functions的Runtime目前已经开源:


阿里云函数计算
阿里云的FaaS平台叫做函数计算(Function Compute),同样是一个事件驱动的全托管 Serverless 计算服务,使用者无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,并以弹性、可靠的方式运行代码,并提供日志查询、性能监控和报警等功能。
函数计算以事件驱动的方式连接其他服务。借助这些方式,使用者可以构建弹性的、可靠的以及安全的应用和服务,甚至在数天内就能完成一套多媒体数据处理后端服务。当事件源触发事件时,阿里云函数计算会自动调用关联的函数处理事件。例如,对象存储(OSS)在新对象创建或删除事件(ObjectCreated或ObjectRemoved)时会自动触发函数处理。或者API网关在收到HTTP请求时自动触发函数处理请求。此外,函数还可以由日志服务或者表格存储等其他阿里云服务触发。


阿里云函数计算可以通OSS上传代码、直接代码包上传,文件夹上传,以及在线编辑,并且支持Node.js、Python、PHP、.Net Core、Java等众多语言的十余个Runtime,同时支持自定义运行时以及自定义镜像,在自定义运行时中,默认集成了Rust、Ruby、Dart、TypeScript、Go、F#、Lua等近十种常见编程语言的环境;在自定义景象上,阿里云函数计算可谓是“领导者梯队”的存在,在2020年下半年,即率先推出Custom Container Runtime,众所周知,在云原生时代容器镜像已经逐渐变成了软件部署和开发的标准工具,阿里云函数计算为了简化开发者体验、提升开发和交付效率,特提供了Custom Container Runtime。开发者将容器镜像作为函数的交付物,通过HTTP协议和函数计算系统交互。使用Custom Container Runtime可以做到低成本迁移,无需修改代码或是重新编译二进制、共享对象(*.so),保持开发和线上环境一致;解压前镜像大小最大支持1 GB,避免代码和依赖分离,简化分发和部署;容器镜像天然的分层缓存,提高代码上传和拉取效率;标准可复现的第三方库引用、分享、构建、代码上传、存储和版本管理,丰富的开源生态CI/CD交付体验。
在触发器层面,阿里云函数计算拥有对象存储触发器、API网关触发器、日志服务触发器、MNS触发器、定时触发器、表格存储触发器、消息队列Kafka版Connector触发器、IoT触发器、云监控触发器、HTTP触发器、CDN触发器以及事件总线EventBridge触发器等十余个触发器,可以满足绝大部分事件触发的诉求。值得一提的是阿里云函数计算的HTTP触发器,HTTP触发器通过发送HTTP请求触发函数执行,主要适用于快速构建Web服务等场景。HTTP触发器支持HEAD、POST、PUT、GET和DELETE方式触发函数。相较于API网关触发器,HTTP触发器简化了开发人员的学习成本和调试过程,帮助开发人员快速使用函数计算搭建Web service和API;支持选择您熟悉的HTTP测试工具验证函数计算侧的功能和性能;减少请求处理环节,HTTP触发器支持更高效的请求、响应格式,不需要编码或解码成JSON格式,性能更优;方便对接其他支持Webhook回调的服务,例如CDN回源、MNS等;可以认为阿里云的HTTP触发器的存在,可以让传统的Web迁移到函数计算变得更加简单,改造成本更加低,再加上阿里云函数计算的Custom Container Runtime加持,可以让绝大部分的传统Web应用极低的改造成本,即可体验到Serverless架构带来的优势,甚至可以做到0改造上Serverless,为了协助更多用户快速迁移传统Web应用,阿里云函数计算拥有应用中心可以快速在线迁移:


用户只需要根据自己的框架所需要的Runtime类型,即可完成传统的Web框架快速上Serverless架构的工作。
除了丰富的运行环境以及触发器之外,阿里云函数计算还拥有完善的监控告警服务,包括调用次数、成功次数、失败次数等基本信息,也包括调用链追踪以及调用分析等相关能力。在开发者工具层面,阿里云有Fcli、VScode插件以及Funcruft等开发者工具,可以通过这些工具,完成阿里云函数计算的开发、调试、测试、运维、管理等相关工作。同时阿里云也开源了多云的Serverless开发者工具Serverless Devs,其主打“让使用者像使用手机一样使用Serverless”心智,并将其定位在“可以在Serverless项目的全生命周期中发挥作用”,Serverless Devs与其他工具的核心差异点在于,其拥有相对完整的行为描述以及可视化的Yaml编写工具,同时Serverless Devs也拥有完善的社区形态:


阿里云Serverless相关产品是非常丰富的,除了函数计算之外,还有:
Serverless 应用引擎(Serverless App Engine,简称 SAE),实现了Serverless 架构 + 微服务架构的完美融合,真正按需使用、按量计费,节省闲置计算资源,同时免去 IaaS 运维,有效提升开发运维效率。SAE 支持 Spring Cloud、Dubbo 等流行的微服务架构,支持控制台、Jenkins、云效、插件等部署方式。除了微服务应用外,用户还可以还能通过 Docker 镜像部署任何语言的应用;
Serverless 工作流(Serverless Workflow,原函数工作流)是一个用来协调多个分布式任务执行的全托管 Serverless 云服务,致力于简化开发和运行业务流程所需要的任务协调、状态管理以及错误处理等繁琐工作,让用户聚焦业务逻辑开发。用户可以用顺序、分支、并行等方式来编排分布式任务,服务会按照设定好的顺序可靠地协调任务执行,跟踪每个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。
除了产品维度的广泛,阿里云函数计算在功能维度上也是非常广泛的,阿里云函数计算也是非常大胆的率先支持了硬盘挂载,性能实例,容器镜像等一系列功能;在市场份额上,尤其是国内的市场份额上,阿里云Serverless相关产品也是处于领先地位,在《CNCF Cloud Native Survey China 2019》中,阿里云以超45%的份额引领国内市场:在中国信息通信研究院发布的《2020年中国云原生用户调查报告》中,阿里云Serverless用户占比66%。



华为云函数工作流
华为云的FaaS产品名字是函数工作流(FunctionGraph),和其他厂商的FaaS平台一样是一项基于事件驱动的函数托管计算服务。通过函数工作流,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。


华为云函数工作流在代码上传和编辑部分支持在线编辑、上传压缩包、Jar包以及通过对象存储部署等多种方式;在运行时支持部分支持了Node.js、Python、Java、Go、C#、PHP等六种语言的十余个版本的Runtime,同时还支持自定义运行时。在触发器部分,华为云函数工作流支持包括同步触发和异步触发在内的SMN触发器、DMS触发器、APIG触发器、OBS触发器、DIS触发器、TIMER触发器、LTS触发器、CTS触发器、DDS触发器、Kafka触发器等十余款触发器,足够满足绝大部分的事件触发场景。
腾讯云云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助用户在无需购买和管理服务器的情况下运行代码。用户只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。
用户可以通过上传代码使用腾讯云云函数,云函数提供多种代码管理方式:通过控制台编辑代码,这种方式适用于没有外部依赖的业务代码,直接在控制台上编辑代码。上传代码 ZIP 包,将所有依赖和代码打包成 ZIP 并上传至腾讯云云函数,平台将自动抽取入口函数并执行。通过 COS 管理代码 ZIP 包,将所有依赖和代码打包成 ZIP 并上传至腾讯云对象存储,并在云函数中指定代码所在 Bucket 和 文件对象,平台将自动下载函数代码。


云函数支持多种开发环境,您可以选择适合您自身的开发语言,完成函数编写。目前已支持的Runtime包括:Python、Node.js、Java、Php、Go以及自定义运行时等。 云函数支持毫秒级别的实时弹性伸缩,完全根据请求量扩容或缩容。动态负载均衡将请求分发至后端近乎无限的函数实例上,完全无需任何手动配置和操作,满足并发量从 0 到成千上万的不同场景。云函数支持设置多种触发器来决定代码何时运行,在满足触发器条件(Event)时,代码自动开始运行,并根据请求自动调度基础设施资源实现自动伸缩和回收,提高计算效率。目前支持以下触发器:
对象存储 COS触发:支持在特定的 COS Bucket 操作文件上传或文件删除等事件时触发云函数,可以对文件进行更多操作。例如:在图片上传到特定 Bucket 时,对其进行压缩或裁剪以适应不同分辨率的移动终端。
定时触发:支持定时触发函数,助力用户构造更加灵活的自动化控制系统。
CMQ 主题队列触发:由 CMQ Topic 主题队列内的消息触发,利用 CMQ 消息队列解耦事件,可以帮助用户和更多应用完成联动。
Ckafka 消息队列触发:由 Ckafka Topic 主题队列内的消息触发,对消息进行处理,可以帮助用户实现日志聚合、消息存储等。
API 网关触发:支持 API 网关中的 API 配置后端为云函数,在 API 接收到客户端请求时,触发云函数,并将处理结果作为 API 响应返回给客户端。 最后腾讯云云函数提供精细的日志记录,您可方便地查看函数的运行状况,并对代码进行调试、测试和审计;支持相关的监控指标上报,帮助您快速了解函数的整体运行概况,同时您还可自定义云函数的监控指标,对云函数进行更深入、更广泛的监控。
近年来,腾讯云云函数的发展速度还是蛮快的,虽然在部分产品能力上和上层的Serverless平台有一定的差距,但是腾讯云的Serverless产品也绝对算是第一梯队的产品了。值得一提的是,腾讯云Serverless在和Serverless Framework合作时候,在工具侧的发展,具有非常实质性的突破,尤其是用户体验,以及社区生态。


相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
18天前
|
人工智能 Serverless API
在函数计算上部署专属的Agent平台
Agent及Agent平台的相关概念和应用价值已经在《智能体(Agent)平台介绍》 文章进行了介绍,接下来我们要进行实际的操作,在阿里云函数计算上快速获取专属的Agent平台-AgentCraft
83241 7
在函数计算上部署专属的Agent平台
|
18天前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
18天前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
8189 132
|
18天前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
为了帮助用户高效率、低成本应对企业级复杂场景,函数计算团队正式推出 Stable Diffusion API Serverless 版解决方案,通过使用该方案,用户可以充分利用 Stable Diffusion +Serverless 技术优势快速开发上线 AI 绘画应用,期待为广大开发者 AI 绘画创业及变现提供思路。
87340 4
|
18天前
|
前端开发 JavaScript 小程序
亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序
亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序
57 0
|
18天前
|
机器学习/深度学习 运维 安全
阿里云 ACK One Serverless Argo 助力深势科技构建高效任务平台
阿里云 ACK One Serverless Argo 助力深势科技构建高效任务平台
101222 8
|
18天前
|
运维 中间件 Java
淘宝权益玩法平台的Serverless化实践
淘宝权益玩法平台的Serverless化实践
234 0
|
9月前
|
关系型数据库 MySQL Serverless
使用函数计算挂载NAS并搭建照片管理平台
本场景主要介绍如何基于函数计算、数据库RDS和文件存储NAS一键部署相册应用。
754 0
|
11月前
|
监控 Cloud Native Oracle
Serverless是什么?如何使用?有哪些优势?国内外有哪些Serverless平台?
Serverless 是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供, Serverless computing(无服务器运算,又被称为函数即服务 Function-as-a-Service,缩写为 FaaS),以 Amazon Lambda 为典型服务。
|
缓存 运维 监控
《2023云原生实战案例集》——04 互联网——网易云音乐 基于函数计算FC创建音视频算法处理平台
《2023云原生实战案例集》——04 互联网——网易云音乐 基于函数计算FC创建音视频算法处理平台