近年来,云原生应用已成为许多企业构建可扩展应用的首选标准。在众多云技术的进步中,无服务器架构脱颖而出,成为一种变革性的方法。易用性和效率是现代应用开发中最令人向往的特性,而无服务器架构提供了这些。这使得无服务器架构成为云服务提供商和用户的游戏规则改变者。
对于希望采用这种方法构建应用的公司,主要的云服务提供商提供了多种无服务器解决方案。在本文中,我们将探讨这种架构的特点、优势和挑战,以及一些使用场景。本文以 AWS 为例来探讨这些概念,但这些概念同样适用于所有主要的云服务提供商。
无服务器(Serverless)
无服务器并不意味着没有服务器。它只是意味着这些服务的底层基础设施由云服务提供商管理。这使得架构师和开发人员可以在不担心管理基础设施的情况下设计和构建应用。这类似于使用共享出行应用 Uber:当你需要出行时,你不必担心拥有或维护一辆车。Uber 负责这一切,而你只需专注于到达目的地,并为出行付费。
无服务器架构提供了许多使其适合并吸引众多使用场景的优势。以下是一些关键优势:
自动扩展
无服务器架构的最大优势之一是它天生支持扩展。云服务提供商负责繁重的工作,提供近乎无限的开箱即用的扩展能力。例如,如果一个使用无服务器技术构建的应用突然流行起来,工具或服务会自动扩展以满足应用的需求。我们无需在半夜醒来添加服务器或其他资源。
专注于创新
由于不再需要管理服务器,你可以专注于构建应用,为应用增长添加功能。对于任何规模的企业——无论是小型、中型还是大型——这种方法都有助于专注于真正重要的事情——业务增长。
成本效益
在传统的服务器模型中,你通常会为未使用的资源付费,因为这些资源是预先购买的,即使它们未被使用也需要管理。无服务器通过转向按使用付费的模式改变了这一点。在大多数情况下,你只需为你实际使用的资源付费。如果你构建的应用没有立即获得关注,你的成本将极低,就像只为一次会议付费,而不是一整年。随着应用流量的增长,成本也会相应增长。
更快的上市时间
使用无服务器框架,你可以比传统服务器模型更快地构建和部署应用。当应用准备就绪时,可以使用无服务器资源轻松部署。你无需花费时间管理服务器,而是可以专注于开发和添加新功能,以更快的速度推出它们。
减少运维工作
由于云服务提供商管理基础设施,用户无需担心配置、维护、扩展或处理安全补丁和漏洞。
无服务器框架具有灵活性,可以应用于多种使用场景。无论是构建 Web 应用还是处理实时数据,它们都能为这些场景提供所需的可扩展性和效率。
使用 AWS 无服务器服务(AWS Serverless)构建 Web 服务 API
在讨论了无服务器架构的优势之后,让我们来看一些实际的例子。在本节中,我们将使用 AWS 无服务器资源创建一个简单的后端 Web 应用。
上述后端应用设计包含三层,为 Web 应用提供 API。部署到 AWS 后,网关端点可用于 API 调用。当用户调用 API 时,请求通过 API 网关路由到相应的 Lambda 函数。对于每个 API 请求,Lambda 函数被触发,并访问 DynamoDB 以存储和检索数据。这种设计是一种精简且成本效益高的解决方案,能够随着需求增长自动扩展,是构建低开销 API 的理想选择。这种设计中的各个组件能够很好地集成在一起,提供灵活性。
这个架构中有两大主要组件——计算和存储。
无服务器计算
无服务器计算改变了云原生应用和服务的构建与部署方式。它承诺了一种真正的按使用付费模式,以毫秒级的粒度运行,不会浪费任何资源。由于其简单性和经济优势,这种方法广受欢迎,许多云服务提供商都支持这些能力。
使用无服务器计算的最简单方式是向平台提供按需执行的代码。这种方法促成了函数即服务(FaaS)平台的兴起,专注于允许小段代码(以函数形式表示)在有限时间内运行。这些函数由 HTTP 请求、存储变更、消息或通知等事件触发。由于这些函数在代码执行完成后会停止运行,因此它们不会保留任何持久状态。为了维护状态或持久化数据,它们会使用像 DynamoDB 这样提供持久存储能力的服务。
AWS Lambda 能够根据需求进行扩展。例如,在 2024 年的 Prime Day,AWS Lambda 处理了超过 1.3 万亿次调用。这种能力对于应对流量的突然激增至关重要。
无服务器存储
在无服务器计算生态系统中,无服务器存储指的是能够自动扩展且无需用户管理基础设施的云存储解决方案。这些服务具备多种能力,包括按需扩展、高可用性以及按使用付费。例如,DynamoDB 是一种完全托管的无服务器 NoSQL 数据库,专为处理键值对和文档数据模型而设计。它为需要在任何规模下保持一致性能的应用程序而构建,提供个位数毫秒级的延迟,并且能够与其他许多服务无缝集成。
主要的云服务提供商提供了多种无服务器存储选项,以满足特定需求,例如 S3、ElastiCache、Aurora 等。
其他使用场景
在上一节中,我们讨论了如何利用无服务器架构构建 Web 应用的后端 API。还有许多其他使用场景可以从无服务器架构中受益。其中一些使用场景包括:
数据处理
让我们再探讨一个例子,说明如何利用无服务器架构基于数据存储中的数据变更通知服务。例如,在一个电商平台中,假设在创建订单时需要通知多个服务。在 AWS 生态系统中,订单创建后可以存储在 DynamoDB 中。为了通知其他服务,可以基于此存储事件触发多个事件。
通过 DynamoDB 流,当事件发生时可以触发一个 Lambda 函数。该 Lambda 函数随后可以将变更事件推送到 SNS(简单通知服务)。SNS 作为通知服务,向对这些事件感兴趣的多个其他服务发送通知。
实时文件处理
在许多应用中,用户会上传需要存储、调整大小、转换为不同格式并进行分析的图像。我们可以通过以下方式使用 AWS 无服务器架构实现这一功能。当图像被上传时,它会被推送至配置为触发事件以调用 Lambda 函数的 S3 存储桶。Lambda 函数可以处理图像,将元数据存储在 DynamoDB 中,并将调整大小后的图像存储在另一个 S3 存储桶中。这种可扩展的架构可用于处理数百万张图像,而无需管理任何基础设施或进行任何人工干预。
无服务器的挑战
无服务器架构提供了许多优势,但也带来了一些需要解决的挑战。
冷启动
当无服务器函数被调用时,平台需要创建、初始化并运行一个新的容器来执行代码。这个过程称为冷启动,可能会在工作流中引入额外的延迟。通过保持函数处于活跃状态或使用预留并发等技术,可以帮助减少这种延迟。
监控与调试
由于可能存在大量的调用,监控和调试可能会变得复杂。在高负载的应用程序中识别和调试问题可能会很有挑战性。建议配置 AWS CloudWatch 等工具用于指标、日志和警报,以解决这些问题。
尽管无服务器架构能够自动扩展,但必须优化资源配置以防止瓶颈。合理的资源配置和实施成本优化策略是至关重要的。
总结
无服务器架构是向由无服务器计算和存储支持的云原生应用开发迈出的重要一步。它被广泛应用于多种类型的应用程序中,包括事件驱动的工作流、数据处理、文件处理和大数据分析。由于其可扩展性、敏捷性和高可用性,无服务器架构已成为各种规模企业的可靠选择。
原文标题:From Zero to Scale With AWS Serverless,作者: Ravi Laudya