为什么要使用无服务器计算?| 无服务器的优缺点

无服务器计算为 Web 开发人员带来了许多好处,包括可扩展性、更快的上市时间和更低的费用。但是,在某些情况下,这些好处可能会被其他问题所抵消。

学习目标

阅读本文后,您将能够:

  • 了解无服务器架构的优缺点
  • 了解谁应该使用无服务器架构

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

为什么要使用无服务器计算?

与传统的基于云或以服务器为中心的基础设施相比,无服务器计算具有诸多优势。对于许多开发人员而言,无服务器架构以更低的成本提供了更大的可扩展性、更大的灵活性以及更快的发布时间。借助无服务器体系结构,开发人员无需担心购买、供应和管理后端服务器的事宜。但是,无服务器计算并不是所有 Web 应用程序开发人员的灵丹妙药。

无服务器计算的工作原理

无服务器计算是一种体系结构,供应商可在其中提供客户所需的后端服务。要了解有关无服务器计算的更多信息,请参阅什么是无服务器计算?

无服务器计算的优势是什么?

无需服务器管理

尽管“无服务器”计算实际上是在服务器上进行的,但开发人员无需管理服务器 - 它们由供应商管理。这可以减少 DevOps 中的必要投资,从而降低支出,还可以使开发人员专注于创建和扩展应用程序,而不受服务器容量的限制。

开发人员仅对其使用的服务器空间付费,因此降低了成本

与“按需付费”电话计划一样,开发人员仅需为使用量付费。仅当无服务器应用程序需要后端函数时,代码才会运行,并且代码会根据需要自动扩展。调配是动态、精确、实时的。一些服务的精确度极高,以至于费用细分到 100 毫秒的增量。相比之下,在传统的“全套服务器”架构中,开发人员必须预先计划所需的服务器容量,然后购买容量,而不管最终是否会用上。

无服务器架构本身具有可扩展性

想象一下,如果邮局可以以某种方式神奇地随意增减邮递卡车,随着邮件数量的增加(例如,在母亲节之前)扩大车队的规模,并在需要减少送货次数的时候缩小车队,会多么成本高效。从本质上讲,无服务器应用程序就起到这样的作用。

使用无服务器基础设施构建的应用程序将随着用户群的增加或使用量的增加而自动扩展。如果一个函数需要在多个实例中运行,则供应商的服务器将根据需要启动、运行并结束,并且通常使用容器。(如果该函数最近运行过,它的启动速度会更快——请参阅下文“性能可能受到影响”。)因此,无服务器应用程序能够处理异常大量的请求,也能够处理来自单个用户的单个请求。具有固定服务器空间量的传统结构化应用程序可能会因使用量的突然增加而不堪重负。

快速部署和更新

使用无服务器基础设施,无需将代码发布到服务器或进行任何后端配置即可发布应用程序的有效版本。开发人员可以非常快速地上传少量代码并发布新产品。他们可以一次上传全部代码,也可以一次上传一个函数,因为应用程序不是单个的单体堆栈,而是供应商提供的函数的集合。

这也使得开发人员可以快速更新、修补、修复或向应用程序添加新功能。不必对整个应用程序进行更改;开发人员可以一次更新一个函数。

代码可以在更接近最终用户的位置运行,从而减少延迟

因为应用程序未托管在源站服务器上,所以它的代码可以在任何地方运行。因此,根据所使用的供应商,应用程序函数可能在接近最终用户的服务器上运行。这减少了等待时间,因为来自用户的请求不再必须一直传递到源站服务器。Cloudflare Workers 支持这种无服务器延迟缩减。

无服务器计算有什么缺点?

测试和调试变得更具挑战性

复制无服务器环境以查看代码在部署后将如何实际执行是非常困难的。调试更加复杂,因为开发人员无法查看后端流程,并且因为应用程序被分解为较小的独立函数。Cloudflare Workers Playground 是一个沙箱,可帮助减少测试和调试中的摩擦

无服务器计算会引入新的安全问题

当供应商运行整个后端时,可能无法完全审查其安全性,这对于处理个人或敏感数据的应用程序尤其成问题。

因为公司没有分配到自己的离散物理服务器,所以无服务器提供商在任何给定时间通常是在单个服务器上运行来自多个客户的代码。与其他方共享机械的问题称为“多租户”问题——想想几家公司试图同时租赁一个办公室工作并在其中工作会是什么情况。多租户可能会影响应用程序性能,如果多租户服务器配置不正确,可能会导致数据泄露。对于沙盒能够正常运行并且具有足够强大的基础设施的网络,多租户几乎没有影响。例如,Cloudflare 运行的 15 Tbps 网络具有足够的额外容量来缓解服务降级,并且 Cloudflare 托管的所有无服务器功能都在自己的沙箱中运行(通过 Chrome V8 引擎)。

无服务器架构不用于长时间运行的进程

这限制了可以在无服务器架构中经济高效地运行的应用程序的种类。由于无服务器提供商针对为代码的运行时间收费,因此与传统应用程序相比,在无服务器基础设施中运行具有长时间运行进程的应用程序可能会产生更高费用。

性能可能会受到影响

因为无服务器代码不是一直在运行,所以在使用时可能需要“启动”。此启动时间可能会降低性能。但是,如果经常使用一段代码,则无服务器提供商将使其保持激活状态 - 对此现成代码的请求称为“热启动”。对一段时间未使用的代码的请求称为“冷启动”。

Cloudflare Workers 通过使用 Chrome V8 引擎,在很大程度上避免了冷启动问题,该引擎在大多数情况下能够在 5 毫秒内启动并运行 JavaScript 代码。如果代码已经在运行,则响应时间不到一毫秒。详细了解不同服务器平台的性能

存在供应商锁定风险

允许一个供应商为应用程序提供所有后端服务将不可避免地增加对该供应商的依赖。在一家供应商处建立无服务器体系结构可能会导致在必要时难以切换供应商,尤其是每个供应商提供的功能和工作流程都略有不同。(Cloudflare Workers 易于迁移,因为它们是用 JavaScript 编写的,并且是根据广泛使用的 Service Worker API 编写的。)

谁应该使用无服务器架构?

希望缩短上市时间并构建可快速扩展或更新的轻便、灵活应用程序的开发人员可能会从无服务器计算中受益匪浅。

如果应用程序使用量不一致,高峰时段与很少甚至没有流量的时间交替出现,则无服务器体系结构将减少应用程序的成本。对于此类应用程序,购买一台或多台连续运行且始终可用(即使未使用时)的服务器或服务器块可能浪费资源。无服务器设置将在需要时立即响应,并且在不用时不会产生成本。

此外,想要将某些或全部应用程序函数放到最终用户附近以缩短延迟的开发人员,将至少需要部分无服务器的体系结构,因为这样做需要将某些进程移出源站。

开发人员应在何时避免使用无服务器架构?

从成本角度和系统体系结构角度来看,在某些情况下,使用自行管理或作为服务提供的专用服务器更为有意义。例如,具有相当恒定、可预测的工作负载的大型应用程序可能需要传统设置,在这种情况下,传统设置产生的成本可能会更低廉。

另外,将遗留应用程序迁移到具有完全不同的体系结构的新基础设施可能会非常困难。

Cloudflare 如何帮助开发人员构建无服务器架构?

Cloudflare Workers 使开发人员能够编写 JavaScript 函数并将其部署在 Cloudflare 网络边缘。这样就可以在尽可能靠近最终用户的无服务器架构中运行应用程序代码,从而最大程度地减少延迟。