您可能听说过SaaS,您可能听说过PaaS和IaaS,但您听说过函数即服务 (FaaS) 吗?
FaaS市场正在快速增长。根据Allied Market Research的数据,2018年市场价值30.1亿美元 。预计到2026年,这一数字将增长到240亿美元——这意味着该行业将从2020年到2026年以29.7%的复合年增长率 (CAGR) 增长。
看看这种增长,可以肯定地说FaaS是一件大事。
但什么是FaaS,它是如何工作的?为了帮助您回答这些问题,本文将介绍FaaS的基础知识、人们应该(和不应该)使用FaaS的原因,以及全球FaaS市场的状况。
什么是函数即服务 (FaaS)?
函数即服务 (FaaS) 是一种云计算形式,可帮助开发人员更好地工作,无需他们维护应用程序基础架构。当开发人员利用FaaS时,他们使用FaaS平台为他们构建、运行和监督应用程序包。
在这一点上,您可能会认为FaaS听起来像无服务器计算 ——它确实如此。无服务器计算允许开发人员将管理数据库、API网关、存储、消息传递和其他基础设施外包给第三方提供商。FaaS 是一种无服务器计算。
无服务器计算的工作原理(来源: iviewlabs)
尽管这可能是您第一次阅读有关FaaS的内容,但您可能已经在野外遇到过它。许多流行的程序和应用程序都使用FaaS——比如亚马逊的Alexa。
如果您熟悉Alexa,就会知道您可以通过构建“技能”来扩展Alexa的函数。与应用程序一样,技能让Alexa在其基本配置之外做事。诸如检查应用中的通知、开始新聊天或播放自定义音频之类的事情。
亚马逊通过AWS Lambda运行Alexa的所有技能。构建新技能时,您将其创建为通过AWS Lambda部署的函数。AWS Lambda然后为您运行该函数并处理安全和数据库管理等基础设施问题。
那么,FaaS是如何一步一步工作的呢?让我们接下来介绍一下。
FaaS是如何工作的?
要了解FaaS,您需要了解两个关键术语:
- “单体架构” = 独立于其他应用程序运行的独立应用程序。这些应用程序在内部管理用户界面、业务函数和数据界面。单体架构代码依赖于其他代码片段。
- “微服务架构” =处理一些小任务的一段代码。这些微服务是独立的(尽管它们一起构成了整个应用程序)。
下图显示了单体架构和微服务架构的不同之处:
单体架构与微服务架构(来源: BMC)
当您执行或更新函数时,您可以看到微服务和单体架构在实践中的主要区别。使用单体架构,整个程序立即执行函数(例如更新应用程序)。使用微服务架构,您可以独立执行微服务函数。
FaaS是帮助微服务架构工作的东西。
当你执行每一个新的微服务函数时,你只需要创建函数。然后,您的FaaS提供者获取该函数,运行它,并从那时起处理该函数的管理。
由于FaaS是一种可以根据您的输入工作的工具,因此请务必注意每个FaaS函数应该只负责一项任务。该任务然后在其触发器被激活时运行。例如,生成用户收据副本的函数只有在用户按下“下载收据”时才会起作用。
FaaS使用“事件驱动的执行模型”,这意味着您的函数仅在触发时才会激活。同样,它们不会在后台运行。
那么,FaaS还能做什么呢?
FaaS包括哪些服务?
尽管所有提供商都不同,但FaaS提供商通常会提供以下服务:
- 身份验证服务。这些处理程序用户的登录和身份验证过程。
- 数据库服务。这些帮助您在数据库中归档信息,以便您的程序可以使用它。FaaS提供商为您管理一些数据库维护。
- 文件存储。FaaS提供商可以为您的应用程序存储数据和文件,因此您无需将其托管在您自己的服务器上。
- 报告。FaaS提供商可以监视您的程序中的错误或安全威胁 ,并在他们发现问题时提醒您。
总体而言,这些服务可帮助开发人员更智能地工作。接下来让我们介绍 FaaS 的优点。
FaaS模型的优点
使用FaaS,开发人员无需担心基础架构或部署——只需编写应用程序逻辑。因此,在当前实施时,FaaS可以大大减少构建和部署程序所需的时间。
使用FaaS构建和部署也更容易。一次配置时间只需几秒钟而不是几小时。您也不限于特定的语言或资源。FaaS提供商可以运行大多数语言的代码,您可以使用提供商提供的缓存和数据库来加快构建过程。
FaaS模型具有很强的可扩展性,容量规划要容易得多。如果您需要更多资源,您可以简单地参考您的 FaaS 提供商的说明来升级您的使用。许多 FaaS 提供商提供水平扩展,这意味着如果您的使用高峰,提供商将简单地为您提供额外的资源来应对高峰。
此外,您无需担心维护、灾难恢复 (DR) 或安全性。
最后,FaaS非常高效。提供商只对您使用的资源收费,因此您为 FaaS 支付的费用可能远低于为您自己的硬件支付的费用。同样,您的函数不会在后台运行,而是处于空闲状态。您也不需要为它们闲置付费。
那么,FaaS是全能型的吗?不完全的。
FaaS模型的缺点
FaaS模型消除了与程序开发相关的一些最大挑战,但它也要求您大幅限制您的控制。您无法对代码使用的服务器、安全性或数据库做出很多决定。相反,这取决于您的提供商。
同样,调试通常会更难一些,因为您无法完全控制系统。测试也很困难,因为FaaS代码并不总是能顺利地转换到测试环境中。
此外,您必须遵守FaaS供应商的严格要求。FaaS函数只能完成一项操作,因此如果您不习惯这一点,则需要更改您和您的团队编写代码的方式。同样,您可能需要重写现有应用程序中的代码以使其适合FaaS部署——因此FaaS通常比旧程序更适合新程序。
最后,选择FaaS通常意味着长期致力于单一供应商。在构建程序时,您会使用提供商的系统和要求。自然,更换供应商可能需要您重做一些工作并可能中断您的函数。
优点与缺点
优点 | 缺点 |
更快地部署代码配置需要几毫秒 任何语言的代码 自动灾难恢复 (DR) 成本效益 可扩展 | 失去对服务器的控制调试更难 测试需要更长的时间 你被锁定在你的供应商 您必须编写适合FaaS的代码 |
FaaS与SaaS、PaaS和IaaS
既然您对FaaS有了更多了解,您可能想知道它与其他任何即服务 (XaaS) 选项(如IaaS、SaaS和PaaS)之间的关系。
IaaS、PaaS和FaaS服务具有相似的目的:它们帮助公司更便宜、更有效地管理应用程序。但是,每个选项都提供不同的东西。
基础设施即服务 (IaaS) 允许您出租计算能力(如RAM和CPU)。使用IaaS,您仍然需要在内部管理一些应用程序函数(如安全性)。
平台即服务 (PaaS) 允许您出租硬件和软件工具来构建您的应用程序。一个常见的例子是AWS Elastic Beanstalk。
与IaaS和PaaS不同,FaaS允许您租用空间来独立运行函数。此函数使其更具可扩展性。
以下是这三者如何不同工作的简短摘要:
FaaS与IaaS和PaaS有何不同(来源: thenewstack.io)
软件即服务 (SaaS) 不适合应用程序或程序构建。相反,它允许您租用应用程序,这样您就不需要在内部构建它们。有数以千计的SaaS选项可用——从数据分析工具到WordPress SEO插件。
市场规模、份额和领先供应商
FaaS的发展反映了组织开发新项目的方式的整体转变。
在过去的几十年中,开发人员将大型系统创建为多年项目。如今,许多组织都倾向于采用开发运营 (DevOps) 方法进行开发。DevOps优先考虑不断开发和一点一点地改进程序。
DevOps的工作原理(来源: Atlassian)
同样,组织越来越多地使用云服务来使事情变得更安全、更高效。据甲骨文称,组织很快将 在云中存储600倍以上的敏感数据。
您可以从Statista的7,164名高管收集的数据中看到这一趋势。从2019年到2021年,单一公共或私有云服务的使用下降,大多数组织采用了多种云解决方案。
云技术的使用(来源: Statista)
云计算方面的投资也在增长。Statista对全球数百家大型企业的另一项研究表明,83% 的受访公司每年在公共云计算上的投资超过120万美元。这个数字高于2019年的50%。
人们正在转向FaaS,因为它具有前瞻性和可扩展性。同样,它提供了更高的生产力和性能、更快的应用程序上市时间以及更经济高效的方式来制作新程序。
这些优势吸引了许多行业,包括银行业组织(或“BFSI”组织)、消费品和零售、娱乐、电信、信息和技术支持服务 (ITES)、医疗保健和制造业。以下是每个行业对FaaS市场的贡献:
哪些行业使用FaaS(来源: MarketsandMarkets)
与SaaS不同,组织没有成千上万的FaaS供应商可供选择。绝大多数FaaS使用主要参与者提供的解决方案,包括AWS Lambda、Azure Functions、IBM Cloud Functions、Google Cloud Functions、阿里云和Cloudflare Workers。
我们现在将介绍这些提供程序中的每一个。
AWS Lambda
AWS Lambda于2014年11月由Amazon推出,是一种非常流行的FaaS工具。截至2021年第四季度,33%的云用户使用AWS服务。
AWS Lambda
AWS Lambda为许多编程语言提供原生支持,包括Node.js、C#、Python、Ruby、Go、Java和Powershell。正如我们在“什么是功能即服务 (FaaS)?”中提到的那样 Alexa将AWS Lambda用于技能。
特点和功能:
- 连接到其他AWS工具
- 使用Amazon CloudWatch监控程序的性能
- 超过200种与SaaS工具的集成
- 您可以部署docker容器(AWS在2020年12月推出了此功能)
优点:
- 您可以使用Lambda API或Amazon API网关构建自己的后端
- 您可以将函数部署为容器映像
- 您可以使用Amazon RDS代理连接到关系数据库
- 您可以选择为每个函数分配多少内存
缺点:
- 如果您还没有使用AWS,那么设置它需要花费大量时间和精力
Microsoft Azure Functions
Microsoft Azure Functions是Microsoft Azure的一项功能,Microsoft于2010年2月首次推出“Windows Azure”。Azure Functions允许您通过FaaS执行事件驱动的代码。截至2021年第四季度,21%的云用户使用Azure。
Microsoft Azure Functions
特点和功能:
- 您可以将您的函数连接到Azure逻辑应用中的250多个连接器
- 支持JavaScript、C#、F#、Powershell、PHP、 Python和Java
- 为新用户提供许多教程
- 帮助您通过Azure Application Insights分析您的程序
优点:
- Azure Functions使用集成的编程模型
- 非常适合使用DevOps的团队
- 多个计划可用
缺点:
- Azure Functions不支持Node.js或Ruby
Google Cloud Functions
Google Cloud是仅次于AWS和Azure的第三大最受欢迎的云计算解决方案。目前市场占有率为10%。Google Cloud Functions是Google Cloud的一项FaaS函数,该服务提供100多种产品以供广泛使用。
Google Cloud
特点和功能:
- 调试和日志记录集成到Google Cloud Functions(通过CloudTrace和CloudDebugger)
- 您使用来自Google Assistant、Google Cloud、Firebase或任何使用HTTP的应用程序的触发器
- Google Cloud Functions与许多Google合作伙伴集成
优点:
- 那些想要多云或混合功能的人可以使用它
- 它是开源的,因此您可以根据需要轻松迁移到另一个FaaS平台
- 非常容易使用
- Google 为新用户提供了许多免费资源
缺点:
- Google Cloud Function基于容器的服务不如其他FaaS提供商先进
IBM Cloud
IBM Cloud来自IBM在2013年6月购买的公共云平台SoftLayer。IBM将该平台转变为Bluemix,并于2014年7月将其作为PaaS工具推出。此后,IBM将该服务重新命名为IBM Cloud,并将其功能扩展到FaaS。
IBM Cloud
截至2021年第四季度,4%的云用户使用过IBM Cloud。它在Apache OpenWhisk生态系统上运行。
特点和功能:
- 您可以搜索视频内容
- 您可以通过IBM Watson API将您的程序连接到其他程序
- IBM为一些常见任务提供了预构建的函数
- 支持Node.js、Python、Swift、PHP、Go、Ruby、Java和.NET Core
优点:
- 非常适合构建移动应用程序
- 易于学习使用
- 通过IBM Cloud Monitoring监控您的应用程序
缺点:
- 将函数的内存时间限制为10分钟或2048MB
阿里云
阿里云并不像其他云计算选项那样广为人知,但它仍然拥有6%的可观市场份额。阿里云由阿里巴巴于2008年推出,面向在线业务和使用阿里巴巴其他服务的用户。
阿里云
FaaS是阿里云的产品之一,此外还有内容交付网络 (CDN)、数据存储和大数据处理。
特点和功能:
- 与阿里巴巴的其他计算服务集成
- 灾难证明,因为阿里巴巴在多个区域的集群上托管功能
- 视频转码
- 人工智能推理
- 支持Node.js、Python、Java、PHP和C#
优点:
- 为不需要运行太多代码的人提供免费选项
- 高度可扩展
- 您可以使用多种类型的触发器
缺点:
- 将函数从阿里巴巴转移到另一个FaaS提供商可能很困难
Cloudflare Workers
Cloudflare Workers由Cloudflare运行,是一个FaaS系统,适合新开发人员和希望几乎立即运行代码的人员。Cloudflare Workers提供免费计划和可扩展的定价。
Cloudflare Workers
特点和功能:
- 支持JavaScript、C++、Rust和C
- 您可以将图像、PDF和其他文件存储在Cloudflare Workers上以部署为静态资产
- 灾难证明,因为Cloudflare Workers使用全球服务器网络
- 与其他Cloudflare产品集成
优点:
- 它比许多其他FaaS选项便宜
- 新开发人员很容易学会使用
- 你可以很快开始
- Cloudflare提供详细的教程和资源,可帮助您构建应用程序
缺点:
- Cloudflare Workers不如其他选项强大,更适合那些拥有小规模项目的人
Faas最佳实践
是的,FaaS是一种技术,但它也是开发人员在进行程序和应用程序开发时需要采用的一种思维方式。
要充分利用FaaS,请遵循以下最佳实践:
- 记住FaaS的局限性。 FaaS并不适用于所有程序,如果您尝试使用FaaS创建一个对FaaS不友好的程序,则会花费您的时间、精力和金钱。
- 仅在FaaS上运行单动作函数。如果您运行具有多个操作的函数,则会破坏FaaS函数在隔离环境中的最佳工作状态。这种中断会减慢您的应用程序并降低效率。
- 不要运行具有依赖关系的函数。 依赖关系会在以后产生错误和可伸缩性问题。
- 仔细观察你的加载时间。您的加载时间来自需要大量内存的库或函数。较长的加载时间会减慢您的程序并最终让用户感到沮丧。
- 减少您使用的关系数据库管理系统 (RDBMS) 连接的数量。这些连接将增加函数工作所需的时间,并在您的程序中引入故障点。
您需要FaaS吗?
FaaS对某些人来说是一种创新和改变游戏规则的技术,但它并不适合所有人。
从FaaS中获得最大收益的组织愿意使用微服务架构构建程序,其中每个函数只做一件事。这些函数应该独立工作——如果它们相互依赖,你会遇到可伸缩性问题。
如果您想构建一个具有单体架构或函数相互借鉴的应用程序,FaaS可能无法正常工作。同样,如果您不想长期致力于单一供应商,FaaS可能是一个短视的选择。
当然,您仍然可以在没有FaaS的情况下利用云技术。例如,您可以投资PaaS或IaaS,将应用程序的一些函数外包给云。此选项将为您提供云计算的一些成本和效率优势,但您无需在FaaS模型的限制内构建程序。
或者,如果您不需要构建一个高度利基或专业化的程序,请考虑投资SaaS工具。一些SaaS工具甚至是开源的,因此您可以根据需要调整现有工具。
小结
FaaS不是技术问题或新趋势。这是一种可扩展的技术,您应该期望在未来十年内看到更多。
解释FaaS有时似乎很困难,但FaaS只是一种服务,它允许开发人员使用由其他人维护的基础设施编写和运行代码。您经常使用的许多服务(例如 Alexa)都使用FaaS。常见的FaaS供应商包括IBM Cloud Functions、AWS Lambda、阿里云、Google Cloud Functions和Microsoft Azure Functions。
虽然FaaS对某些企业非常有效,但它并不适合所有人。FaaS最适合运行执行单一函数的隔离、无状态代码。