什么是无服务器计算?

网络安全 / 2025-02-04 11:35:08

无服务器计算是一种云模型,开发人员无需购买、管理或维护服务器即可编写和运行代码。尽管名为无服务器计算,但它仍然涉及服务器,但所有底层基础设施(服务器、操作系统、虚拟机和容器)均由云服务提供商管理。用户通常按使用量付费,这通常可以节省成本。在本文中,我们将探讨无服务器计算、其工作原理以及其优缺点。

什么是无服务器计算?

无服务器计算是一种云计算模型,它使软件工程师能够构建和运行应用程序,而无需担心配置、扩展、保护和管理后端。在无服务器模型中,服务器配置和维护的责任在于云提供商,他们根据需要管理和启动所需的计算基础设施(服务器、数据库和容器)。无服务器和基础设施即服务 (IaaS) 是云的组成部分。

无服务器是否意味着没有服务器?

与名称所暗示的相反,“无服务器”一词并不意味着不使用服务器。相反,服务器是托管无服务器服务不可或缺的一部分!

“无服务器”是指客户团队不关心服务器。这与传统的 IaaS 模式形成鲜明对比,在传统模式下,企业购买并管理服务器容量。相反,企业的 DevOps 团队可以专注于编写应用代码并将其打包到供应商的容器中,而不必担心服务器。

关键无服务器功能

部署在无服务器架构中的应用程序具有多种特性:无主机、弹性、事件驱动、短暂和无状态。让我们来看看这些术语的含义。

  • 无主机:开发人员无需将应用程序托管在传统服务器上,而是将应用程序代码打包到容器中并直接部署。无需服务器,企业就不必担心传统服务器环境带来的高昂设置和运营成本以及工作量。
  • 弹性:由于开发人员无需配置服务器,因此他们不受服务器容量的限制,因此资源可以几乎无限地增加或减少。这使得企业能够根据底线需求轻松扩展其系统。
  • 事件驱动:代码运行、资源分配和扩展都基于事件(例如 HTTP 调用或队列)。无论数量多少,事件都是实时生成和使用的。
  • 短暂:函数的生命周期很短;它们只会在触发它们的事件所需的时间内持续存在。由于函数部署在容器中,因此容器及其内部的所有资源也都是短暂的。这是一个很大的优势,因为短暂函数减少了攻击面。攻击者通常需要一定程度的持久性才能成功进行攻击,但无服务器短暂计算使攻击变得更加困难,因为攻击媒介会与函数和容器一起被摧毁。
  • 无状态:无服务器应用不存储状态(来自先前交互和容器的数据)。每个新调用或请求都是独立的,将由任何可用服务器上的新容器处理。这意味着您可以方便地水平扩展实例,而不必担心任何已保存的状态会压倒应用功能。

这些特性使无服务器模型在现代软件开发中非常有用。由于主机抽象、几乎无限的水平扩展、高数据和流量速度以及减少的攻击面,无服务器计算是多种用例的理想选择。

无服务器如何工作?

让我们更详细地研究无服务器计算所涉及的六个阶段,以便从开发人员和提供商的角度了解它的工作原理。

步骤 1:上传应用代码

此过程始于无服务器提供商提供仪表板和预构建的后端元素,以便高效运行其无服务器应用。开发人员编写应用代码,其中包括指定应用如何响应各种查询的命令。然后,开发人员将代码上传到服务提供商的帐户。

例如,假设您想构建一个无服务器游戏应用程序。您将在服务提供商处创建一个无服务器帐户,并在提供商提供的预打包模板中编写应用程序代码。代码将包含命令,指定当用户单击特定游戏角色(例如赛车)或请求单人游戏而非多人游戏时应用程序应该做什么。代码将编写在一个文件中,例如 Go 或 Node.js,您的应用程序和云基础架构在其中定义并存储为代码。然后,您将打开命令行界面 (CLI) 并将打包的应用程序(包括代码、事件源和 API 网关)上传到您的帐户。

第 2 步:定义事件触发器

上传应用代码后,开发人员可以定义事件触发器。事件是“if-then”对象,其中包含有关如何以及何时触发应用代码的信息,例如队列、HTTP 请求、GET 请求和 API 调用。

当无服务器应用程序检测到队列消息时,它会轮询队列、读取消息并触发应用程序代码。根据服务提供商的不同,您可以将单个应用程序配置为由多个事件触发。

例如,您可以将游戏应用配置为在检测到应用内购买请求时使用消息队列触发应用代码。您还可以在用户尝试获取其得分历史记录时使用 GET 请求触发应用代码。GET 请求构造客户端响应,这对于生成得分历史记录和银行交易历史记录等元素非常重要。

步骤3:拦截用户请求

软件接收用户请求并根据预定义的事件触发器触发应用程序。让我们考虑 HTTP 请求事件类型。假设用户发起 HTTP 请求;软件拦截该请求并触发应用程序。

回到游戏应用程序示例,为了使消息队列和 GET 请求按指定方式运行,软件或负载均衡器必须首先拦截用户请求并确定请求类型(例如,应用内购买或分数历史记录),然后通过触发应用程序代码进行响应。

步骤 4:启动资源

一旦应用程序被触发,它就会将事件传递给云提供商,云提供商会启动所需数量的容器并分配满足用户请求所需的资源。

假设您的游戏应用的流量在 15,000 到 110,000 之间。目前有 20,000 个用户,用户发出各种请求 - 进行购买、选择角色、选择功能和查看记分牌 - 每个请求都构成一个微服务。随着流量的增加,提供商确保及时启动资源以响应不断增加的请求数量。提供商还会启动运行每个微服务所需的容器。

步骤 5:提供客户端查询响应

然后,容器从数据存储中提取请求的信息并将其发送到 API 网关。从那里,它被转发到网页,为用户提供查询响应。

此时,您的游戏应用的用户(请求其得分历史记录、尝试开始新游戏或进行应用内购买)的请求都会得到满足。

步骤 6:流量减少时减少资源

所有请求都得到处理后,所有容器及其数据都将被删除,当新事件触发应用程序代码时(例如,检测到传入请求时),它们将再次启动。这称为零扩展(容器缩放到零),是自动扩展的一个子集。

您可以向无服务器架构提供指标,以便根据游戏应用上的用户数量变化来增加或减少资源。例如,您可以使用每个容器的平均请求数或传入请求的平均处理时间等指标。

无服务器架构中的服务类型

无服务器架构由各种服务类型组成,包括 FaaS、CaaS、边缘计算和 DbaaS,它们由上面讨论的无服务器功能统一起来。

  • 功能即服务 (FAA): 函数即服务 (FaaS)是一种事件驱动的无服务器计算架构,其中应用程序被部署为由事件触发的函数。
  • 云端即服务 (CaaS): 无服务器容器即服务 (CaaS)是一种模型,用户使用服务提供商的 API 或 Web 门户运行容器,而提供商代表他们管理容器和底层基础设施。
  • 无服务器边缘计算:在无服务器边缘计算中,计算资源和执行发生在边缘,即在地理位置上靠近最终用户。
  • DBaaS:无服务器数据库即服务 (DBaaS)是一种完全托管的数据库,可通过明确定义的API 网关向应用程序提供数据。无服务器 DBaaS 可按需分配和旋转计算/存储资源。

无服务器计算与 IaaS

无服务器计算和基础设施即服务 (IaaS) 都是著名的云计算模型,主要区别在于扩展机制和成本效益。让我们在下表中仔细看看它们。

无服务器计算的好处

无服务器加速应用程序部署,消除配置和管理云资源的压力,并减少云浪费。

  • 减少操作:监控和维护操作可能会拖累开发人员,从而降低生产力。无服务器抽象了这一点,使 DevOps 工程师可以专注于其他关键任务。
  • 改进的资源管理:无服务器可根据云供应商和企业用户自动扩展到零个或一个实例。自动扩展可确保不会浪费任何资源,节省的资源可以得到更好的投资。
  • 节省成本:无服务器大大降低了企业的总拥有成本 (TCO),因为他们不必担心设置自己的服务器。
  • 更快的 TTM:与传统的云计算模型不同,部署可能需要数月,而在无服务器中,软件代码只需单击几下即可执行和交付,因为基础设施部署和管理已经完成。团队可以在创纪录的时间内构建、测试、修补和发布应用程序。
  • 高可用性:许多无服务器云供应商提供具有 SLA 的高可用性,使企业用户能够以最少的配置和监控实现最佳可用性。与传统云模型相比,这可能会带来更好的最终用户体验 (UX) 和更高的客户转化率。

无服务器计算的缺点

虽然好处颇多,但外包服务器管理也可能存在一些缺点。

  • 供应商锁定:无服务器会造成对云供应商的依赖。遗憾的是,更换供应商可能令人望而生畏,因为不同供应商提供的产品和服务交付方式往往各不相同。要解决这个问题,请选择能够为您的用例提供所需性能级别和功能的供应商,包括与关键第三方工具的集成。例如,如果您使用的是无服务器数据库,那么与第三方数据分层和流式传输工具(如 Apache Kafka)的集成是关键。
  • 延迟:大多数无服务器服务都支持零扩展。但是,在零扩展时部署的技术堆栈会带来延迟挑战,即冷启动。冷启动是指第一个请求到达(在扩展至零之后)与处理该请求所需的基础设施启动之间的时间延迟。由于网页加载时间以毫秒为单位,因此长达 1-2 秒的冷启动可能会让最终用户感到沮丧,从而转向您的竞争对手。您可以通过选择提供极低冷启动(例如 0.5 毫秒)的供应商来避免这种情况,并为可能不适合零扩展的用例(例如股票交易应用程序)提供保暖策略。
  • 调试和故障排除的复杂性:无服务器采用事件驱动的临时架构,无法为 DevOps 团队提供其应用程序的整体视图。这会使识别性能瓶颈或安全事件的来源变得繁琐乏味。DevOps 团队可以采用分布式跟踪来简化故障排除和调试。企业还可以选择信誉良好的服务提供商,实施安全编码实践,并监控和记录前端活动,以最大限度地降低性能下降和安全事故的风险。

结论

无服务器架构,即云服务提供商承担服务器安装和维护的角色,为医疗、金融、电子商务和技术服务等各个行业的企业用户带来了诸多好处。它减少了工程团队的维护任务。

信息来源:https://gcore.com/learning/what-is-serverless-computing/