目录
前言:了解无服务serverless
链接: serverless.
用户群 :开发者
优势 :开发者不需要购置服务器,只需要关注自己所开发的代码,在平台上发布,代码只在运行时收费
无服务serverless:以函数为扩展单位,虚拟化运行时环境(Runtime)。是现有计算资源的最小单位,具有完全自动、一键部署、高度可扩展等特点,是轻量级服务部署非常好的选择。
一、各大厂商的无服务计算平台介绍
1. 亚马逊 AWS Lambda
链接: AWS Lambda官网.
链接: AWS Lambda开发人员指南.
链接: AWS Lambda入门操作指南.
链接: AWS Lambda常见问题.
AWS Lambda 关键产品功能:
-
用自定义逻辑扩展其他 AWS 服务
AWS Lambda 可使您将自定义逻辑添加到 Amazon S3 存储桶和 Amazon DynamoDB 表之类的 AWS 资源中,从而在数据进入云中或通过云迁移时将计算应用于数据。
AWS Lambda 的入门很简单。首先,您可以通过上传您的代码(或在 Lambda 控制台中适当构建代码)并选择内存、超时时间和 AWS Identity and Access Management (IAM) 角色来创建函数。然后,您可以指定 AWS 资源来触发该函数,资源可以是特定的 particular Amazon S3 存储桶、Amazon DynamoDB 表或 Amazon Kinesis 流。当资源发生改变时,Lambda 将视需要执行您的函数并启动和管理计算资源,从而与传入请求保持联系。 -
构建自定义后端服务
您可以使用 AWS Lambda 来为您的应用程序创建新的后端服务,这些应用程序使用通过 Amazon API Gateway 构建的 Lambda API 或自定义 API 端点按需触发。通过使用 Lambda 处理自定义事件而不是在客户端上对其提供服务,您可以避免客户端平台变化、减少电池耗尽情况并启用更简单的更新。 -
自备代码
使用 AWS Lambda,不需要了解任何新语言、工具或框架。您可以使用任何第三方库,甚至是本机库。您还可以将任何代码(框架、软件开发工具包、库等)打包为 Lambda Layer,并在多个函数之间轻松进行管理和共享。Lambda 原生支持 Java、Go、PowerShell、Node.js、C#、Python 和 Ruby 代码,并提供 Runtime API,允许您使用任何其他编程语言来编写函数。 -
完全自动化的管理
AWS Lambda 管理所有的基础设施,以将您的代码放在可用性高的容错型基础设施上运行,从而使您能够专注于构建有差别后端服务。使用 Lambda,您不必在补丁发布时更新底层操作系统,或随着使用量的增加而为调整大小或添加新服务器担心。AWS Lambda 无缝部署您的代码、执行所有的管理、维护和安全补丁操作,并通过 Amazon CloudWatch 提供内置记录和监控。 -
内置容错能力
Lambda 具有内置容错能力。AWS Lambda 可在各区域中跨过多个可用区维护计算容量,从而帮助保护您的代码使其免受单个机器或数据中心实施的加粗样式故障。AWS Lambda 及该服务上运行的函数都提供可预测且可靠的运行性能。AWS Lambda 旨在为服务本身及其运行的函数提供高可用性。没有维护时段或计划停机时间。 -
自动扩展
AWS Lambda 只在需要时调用您的代码,并能自动扩展以支持传入请求的速率,无需您配置任何内容。您的代码可处理的请求数量无限制。AWS Lambda 通常在事件发生后的几毫秒内开始运行您的代码,并且由于 Lambda 可自动扩展,随着事件频率的提高,会一直保持高性能。由于您的代码是无状态的,Lambda 可以在需要时尽可能多地启动实例,而不会发生冗长的部署和配置延迟。 -
连接到关系数据库
使用 Amazon RDS 代理可充分利用关系数据库的完全托管连接池。RDS 代理可高效地管理与关系数据库的数千个并发数据库连接,使用户能够轻松构建需要与关系数据库进行交互的高度可扩展、安全、基于 Lambda 的无服务器应用程序。当前,RDS 代理提供对 MySQL 和 Aurora 的支持。您可以通过 Amazon RDS 控制台或 AWS Lambda 控制台将 RDS 代理用于无服务器应用程序。 -
精细的性能控制
预配置并发使您能够更好地控制无服务器应用程序的性能。启用后,预配置并发将使函数保持初始化状态,并准备好以两位数毫秒为单位进行响应。对于使用 AWS Lambda 构建的需要更好地控制函数启动时间的任何应用程序,预配置并发都是理想选择。您可以轻松配置应用程序所需的适当并发量。您可以在需求量高时增加并发量,或在需求减少时降低并发量,或者完全关闭它。无需更改代码即可利用预配置并发。预配置并发是一种有效的方法,可以根据需要在延迟敏感型应用程序中实现一致的性能,而无需管理计算资源。 -
运行代码以响应 Amazon CloudFront 请求
借助 Lambda@Edge,AWS Lambda 可以在全球的 AWS 站点运行您的代码来响应 Amazon CloudFront 事件,例如发往或来自源服务器和查看器的内容请求。这样更易于以低延迟为您的最终用户分发更加丰富、更加个性化的内容。了解更多 » -
编排多个函数
您可以通过使用 AWS Step Functions 构建工作流来协调多个 AWS Lambda 函数,用于复杂或长时间运行的任务。通过 Step Functions,您可以定义使用顺序、并行、分支和错误处理步骤来触发 Lambda 函数集合的工作流。借助 Step Functions 和 Lambda,您可以为应用程序和后端构建有状态、长时间运行的进程。 -
集成化安全模型
AWS Lambda 可使您的代码通过其内置的 AWS 开发工具包以及与 AWS Identity and Access Management (IAM) 的集成来安全访问其他 AWS 服务。默认情况下,AWS Lambda 在 VPC 中运行您的代码。您还可以选择配置 AWS Lambda 以访问您自己的 VPC 之后的数据,从而利用自定义安全组和网络访问控制列表,向 VPC 中的资源提供对 Lambda 功能的访问权限。
AWS Lambda 符合 SOC、HIPAA、PCI、ISO 的要求。有关 Lambda 认证和合规性就绪性的最新信息,请参阅范围内的全部服务。
- 只需按实际使用量付费
对于 AWS Lambda,您需要按执行持续时间(而不是服务器单元)付费。使用 Lambda 函数时,您只需为提供的请求以及运行您的代码所需的计算时间付费。账单以 100 毫秒的增量计费,从而能经济高效且轻松地从每天几个请求自动扩展到每秒数千个请求。对于预配置并发,您需要为配置的并发量以及配置所用的时间付费。为您的函数启用预配置并发并执行它时,您还需要为请求和执行持续时间付费。要了解有关定价的更多信息,请访问 AWS Lambda 定价。 - 灵活的资源模型
您选择您想分配到您的函数中的内存数量,然后 AWS Lambda 按比例分配 CPU 功率、网络带宽和磁盘 I/O。
2. 谷歌Google Cloud Functions
链接: Google Cloud Functions入门使用文档.
Google Cloud Functions关键产品功能:
- 不必预配、管理或升级服务器
- 根据负载自动扩容
- 可简化涉及不同编程语言的复杂应用开发
- 集成式监控、日志记录和分布式跟踪记录
- 基于最小权限原则的角色和函数级别的内置安全性
- 适用于混合云和多云端方案的关键网络功能
主要功能
-
简化开发者体验,提高开发速度
Cloud Functions 提供简单直观的开发者体验。您只需编写代码,让 Google Cloud 为您处理运营基础架构。通过编写和运行响应事件的小段代码更快地进行开发。通过触发器连接到 Google Cloud 或第三方云端服务,简化极具挑战性的编排问题。 -
用多少、付多少
您只需为函数运行的时间付费,计费时间向上舍入至最接近的 0.1 秒。如果您的函数闲置,则不需要支付任何费用。Cloud Functions 函数自动增减运行实例来响应事件。 -
采用开源技术,避免供应商锁定
使用开源 FaaS(函数即服务)框架,在多种环境中运行函数,避免被锁定至特定供应商。受支持的环境包括 Cloud Functions、本地开发环境、本地环境、Cloud Run、Cloud Run for Anthos 和其他基于 Knative 的服务器环境。
3.微软Microsoft Azure
链接: Microsoft Azure官网.
链接: Microsoft Azure Functions无服务器技术文档.
链接: Microsoft Azure Durable Functions无服务器技术文档.
Azure Functions 的一些主要功能包括:
- 无服务器应用程序:使用 Functions,可在 Microsoft Azure 上开发无服务器应用程序。
- 语言选择:使用所选的 C#、Java、JavaScript、Python 和 PowerShell 编写函数。
- 按使用付费定价模型:仅为运行代码所用的时间付费。 请参阅定价部分中的使用托管计划选项。
- 自带依赖项:Functions 支持 NuGet 和 NPM,允许你访问你喜欢的库。
- 集成的安全性:使用 OAuth 提供程序(如 Azure Active Directory、Facebook、Google、Twitter 和 Microsoft 帐户)保护 HTTP 触发的函数。
- 简化的集成:轻松与 Azure 服务和软件即服务 (SaaS) 产品/服务进行集成。
- 灵活开发:直接在门户中编写函数代码,或者通过 GitHub、Azure DevOps Services 和其他受支持的开发工具设置持续集成和部署代码。
- 有状态无服务器体系结构:使用 Durable Functions 协调无服务器应用程序。
- 开放源代码:Functions 运行时是开源的, 可在 GitHub 上找到.
Durable Functions介绍:
- Durable Functions 是 Azure Functions 的一个扩展,可用于在无服务器计算环境中编写有状态函数。 在该扩展中,可以通过编写业务流程协调程序函数和有状态实体并使用 Azure Functions 编程模型编写实体函数,来定义有状态工作流。 在幕后,该扩展可以管理状态、检查点和重启,使你可以专注于业务逻辑。
- 应用程序模式
Durable Functions 的主要用例是简化无服务器应用程序中出现的复杂的有状态协调要求。 以下部分介绍可受益于 Durable Functions 的典型应用程序模式:
1.函数链
2.扇出/扇入
3.异步 HTTP API
4.Monitoring
5.人机交互
6.聚合器(有状态实体)
4.IBM Cloud Functions —IBM Bluemix/OpenWhisk
IBM Cloud Functions 功能
-
开放式生态系统
IBM Cloud Functions 提供了对 Apache OpenWhisk 生态系统的访问,在此生态系统中,任何人都可以将其操作代码作为构建块添加到扩展存储库中。 -
加速并简化开发
IBM Cloud Functions 可加快应用开发,使开发人员能够快速构建应用并执行操作序列来响应由事件驱动的环境。 -
利用认知服务的优势
IBM Cloud Functions 通过在事件触发器操作工作流程中轻松访问 IBM Watson® API,对工作流程固有的应用数据进行认知分析。 -
按实际使用量付费
它十分简单:仅为实际使用量(而非预分配的容量)付费。只有在您构造更多大量使用 OpenWhisk 的解决方案时,或者在需要扩展现有解决方案以支持更多负载时,成本才会增加。
6.阿里云函数计算
链接: 阿里云函数计算官网.
链接: 阿里云函数计算文档.
链接: 阿里云函数计算常见问题.
产品优势
-
高效免运维
使用函数计算时,用户只需聚焦于业务逻辑的开发,编写最重要的 “核心代码”,不再需要关心服务器购买、负载均衡、自动伸缩等运维操作,极大地降低了服务搭建的复杂性,有效提升开发和迭代的速度。 -
弹性高可用
函数计算根据请求量自动进行弹性扩容,无需任何手动配置,毫秒级调度计算资源,轻松应对业务洪峰。
预留实例功能彻底消除实例冷启动带来的延时毛刺,提供极致性能,为在线应用迁移至函数计算扫清障碍! -
按需低成本
函数计算提供了丰富的计量模式,帮助您在不同场景获得显著成本优势。
后付费模型按实际使用计算资源计费,不占用计算资源则不计费,资源利用率高达 100% ! 预付费模型根据业务负载估算提前预购计算力,单价更低!组合使用后付费和预付费方式将有效降低成本。 -
稳定高可靠
函数计算分布式集群化部署,支持多可用区。
如果某个可用区因自然灾害或电力故障导致瘫痪,函数计算会迅速切换到同区域其他可用区的基础设施运行函数,确保服务高可用。
7. 腾讯云 云函数SCF(Serverless Cloud Function)
链接: 腾讯云 SCF官网.
链接: 腾讯云 SCF文档.
链接: 腾讯云 Serverless —git.
Serverless 虽然是下一代云计算服务形态的趋势,但目前该服务模式并不能完全实现企业复杂的业务系统。其主要有以下几方面的原因:
- 性能问题。例如同步业务的冷启动延时、高并发的函数实例扩缩容,大规模业务下函数实例的集群管理等。
- 缺乏成熟的开发者生态。例如,企业和研发若采用无服务,需要用监控、Debug 调试、以及DevOps 等上下游的支持。
- 学习门槛高。一方面用户需要按照云函数的逻辑对存量业务进行改造,另一方面 Event 数据模型对于 Web 场景不友好,用户更习惯于直接基于 HTTP Request、Response 编写业务代码。
针对目前行业遇到的问题,腾讯云持续探索研究,并发布了下一代无服务器计算平台:腾讯云 Serverless 2.0。
Serverless 2.0 除了解决以上所述的问题之外,还关注用户从本地开发、代码调试、到业务的持续集成、上线运维等整个软件开发生命周期。围绕 Serverless 产品,腾讯云构建了全面的开发支持、DevOps、运维监控等能力,协助用户可以更好的向 Serverless 架构迁移,使用 Serverless 承载起企业核心业务奠定基石。
腾讯云云函数功能特性
- 更简单的开发体验:HTTP 函数
- 核心业务框架快速迁移:服务型函数
- Low Latency、不限制运行时长
- 完整的开发、调试、DevOps、监控工具
8.华为云 FunctionGraph
链接: 华为云 函数工作流FunctionGraph 官网.
链接: 华为云 函数工作流FunctionGraph 开发指南.
函数工作流(FunctionGraph)是华为云提供的一款无服务器(Serverless)计算服务,无服务器计算是一种托管服务,服务提供商会实时为用户分配充足的资源,而不需要预留专用的服务器或容量,真正按实际使用付费。华为无服务器计算包含函数和工作流两个功能模块,分别实现函数计算和函数编排的功能。
功能描述:
-
函数管理
提供控制台管理函数 -
灵活规格
支持多种语言编写函数,函数内存使用可以有128M-1.5G多种规格 -
弹性伸缩
根据租户并发请求的多少自动增加和减少函数运行实例 -
高可用
实例出现问题,系统会自动调度新的函数处理请求 -
事件触发
支持设置多种触发器来决定函数何时运行 -
指标和日志
提供调用函数调的监控指标和运行日志采集和展示,方便用户查看函数运行状态
二、各大厂商支持的语言类型
语言 | AWS | Azure | IBM | 阿里云 | 腾讯云 | 华为云 | |
---|---|---|---|---|---|---|---|
Nodejs | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
java | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
python | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Ruby | ✔ | ✔ | |||||
Go | ✔ | ✔ | ✔ | ✔ | ✔ | ||
C# | ✔ | ✔ | ✔ | ✔ | |||
PowerShell | ✔ | ✔ | |||||
F# | ✔ | ||||||
JavaScript | ✔ | ✔ | |||||
PHP | ✔ | ✔ | ✔ | ✔ |
三、各大厂商支持的函数类型
类型 | AWS | Azure | IBM | 阿里云 | 腾讯云 | 华为云 | |
---|---|---|---|---|---|---|---|
无状态函数 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
有状态函数 | ✔ |
四、各大厂商支持的价格定位
类型 | AWS | Azure | IBM | 阿里云 | 腾讯云 | 华为云 | |
---|---|---|---|---|---|---|---|
价格 | AWS. | Google. | Azure. | IBM. | 阿里云. | 腾讯云. | 华为云. |
五、开源项目
1. Fission
- 介绍:
Fission是Kubernetes上无服务器功能的框架。
用任何语言编写short-lived的函数,并将它们映射到HTTP请求(或其他事件触发器)。
一个命令即可立即部署功能。没有要构建的容器,也没有要管理的Docker注册表。
- 优势:
1、专注于代码,而不是管道
Fission使开发人员可以轻松地运行代码功能,同时自动完成幕后配置Kubernetes微服务概念的繁琐工作。
2、只需编写您的代码函数,Fission将使其在Kubernetes上运行。
便携式:可在任何地方运行类似Lambda的服务
Fission是Apache许可下的开源软件。
Fission可在任何地方的Kubernetes群集上工作:在您的笔记本电脑上,任何公共云中或在私有数据中心中。
编写应用程序即可灵活地将其部署到任何地方。
3、可扩展和可定制
Fission可扩展到任何编程语言(今天支持Python,NodeJS,Go,C#,PHP)。
默认情况下,它会提取容器,但是如果需要,您可以构建自己的容器。
其他的开源项目
有一些 FaaS 相关的开源项目,并不是提供 FaaS 平台运行环境,所以上面没有列出来。
- LambCI: 基于 AWS Lambda 的持续集成工具。
- Serverless:纯开发工具,和云平台以及开源的 FaaS 平台整合,方便开发者把自己的 Function 部署到不同的云平台。目的是通过代码框架来弥合不同的 FaaS 提供方的差异。
- aws-lambda-go-shim: 让 AWS Lambda 支持 go function。思路是通过 c 给 python 写个扩展,然后通过 cgo 和 go 整合起来。
- Apex: 打包部署和管理 AWS Lambda。
- StackStorm 准确的说它不是 FaaS,而是事件驱动的自动化运维工具。但本质上二者的目标是一致的。
- Leveros 目标是通过 Docker 打造一个面向 serverless 微服务的云平台,并且试图将服务间的 RPC 调用透明化。
- Stdlib 试图打造基于 FaaS 微服务的标准库,并提供一个 Function 的注册仓库。
-----持续更新总结