发布日期:2024 年 6 月 10 日
撰稿人:Stephanie Susnjara、Ian Smalley

什么是无服务器计算?

无服务器计算是一种应用程序开发和执行模型,支持开发人员构建和运行应用程序代码,而无需配置或管理服务器或后端基础设施。

无服务器并不意味着“没有服务器”。 尽管名称如此,无服务器计算中的服务器是由云服务供应商 (CSP) 管理的。“无服务器”描述的是开发人员对于这些服务器的体验,他们感受不到这些服务器的存在,不会看到、管理服务器或以任何方式与服务器交互。

开发人员可以利用无服务器计算专注于编写最佳前端应用程序代码和业务逻辑。他们所需要做的就是编写应用程序代码,并将其部署到由 CSP 管理的容器中。

云供应商负责处理其余工作 - 提供运行代码所需的云基础设施,并根据需要扩展或收缩基础设施规模 - 还负责所有日常基础设施管理和维护工作,如操作系统更新和修补、安全管理、容量规划、系统监控等。

此外,开发人员无需为无服务器的闲置容量付费。执行代码时,云供应商会启动并按需配置所需的计算资源,并在执行停止时快速停止计数资源(称为“缩放到零”)。计费从执行开始,到执行停止时结束;定价通常会基于执行时间和所需资源。

基础设施即服务 (IaaS)平台即服务 (PaaS)功能即服务 (FaaS)软件即服务 (SaaS) 一起,无服务器已成为领先的云服务产品。根据 SkyQuest Technology 的报告,2022 年全球无服务器架构市场规模为 80.1 亿美元;从 2023 年到 2031 年,预计将从 98.4 亿美元增长到 508.6 亿美元1。目前,每个领先的云服务供应商都提供无服务器平台,包括 Amazon Web Services (AWS Lambda)、Microsoft Azure (Azure Functions)、Google Cloud (Google Cloud Functions) 和 IBM Cloud (IBM Cloud Code Engine)。

无服务器计算、微服务容器共同构成了云原生应用程序开发核心技术的三驾马车。

观看此视频详细了解无服务器和无服务器堆栈 (6:37)。

无服务器的起源

无服务器起源于 2008 年,当时 Google 发布了 Google App Engine (GAE),这是一个在 Google 管理的数据中心开发和托管 Web 应用程序的平台。借助 GAE,软件开发人员可以在 Google 云上创建和发布软件,而不必担心交由 Google 处理的修补或负载平衡等服务器管理任务。

“无服务器”一词首次出现在云计算专家 Ken Fromm 于 2012 年撰写的一篇技术文章中2。2014 年,Amazon 推出了首个无服务器平台 AWS Lambda。AWS Lambda 是一种 FaaS 模型,以 lambda 演算和编程中的函数命名,它使无服务器计算框架能够在无需服务器管理的情况下执行代码来响应事件,从而帮助无服务器计算框架获得大众市场的青睐,并在软件开发人员中快速采用。2016 年,Microsoft Azure Functions 和 Google Cloud Functions 推出了各自的无服务器平台。

当今无服务器平台市场的其他主要参与者包括 IBM® Cloud Code Engine、Oracle Cloud Infrastructure (OCI) Functions、Cloudflare Workers 和阿里云 Function Compute。

无服务器生态系统
无服务器和 FaaS

无服务器不仅仅是功能即服务 (FaaS) - 云计算服务,它使开发人员可以运行代码或容器来响应特定事件或请求,而无需指定或管理运行代码所需的基础架构。

FaaS 是无服务器的核心计算模型,两个术语通常可以互换使用。无服务器是完整的服务堆栈,可以响应特定的事件或请求,并在不再使用时缩放到零,其配置、管理和计费工作均由云供应商负责,无需开发人员处理。

除了 FaaS 之外,这些服务还包括数据库和存储、应用程序编程接口 (API) 网关和事件驱动型架构。

无服务器数据库和存储

数据库(SQL 和 NoSQL)和存储(尤其是对象存储)是构成数据层的基础。针对这些技术的无服务器方法涉及从配置具有已定义容量、连接与查询限制的“实例”,过渡到随基础设施与定价需求而线性缩放的模型。

API Gateway

API 网关可充当 Web 应用程序操作的代理,并提供 HTTP 方法路由、客户端 ID 和密钥、速率限制、CORS、查看 API 使用情况、查看响应日志以及 API 共享策略。

无服务器和事件驱动架构

无服务器架构非常适合事件驱动型工作负载和流处理工作负载,而其中最著名的便是开源 Apache Kafka 事件流平台。

自动化无服务器函数是无状态的,旨在处理单个事件。这些功能已经成为事件驱动架构 (EDA) 的重要组成部分 - 围绕事件的发布、捕获、处理和存储构建的软件设计模型。在 EDA 框架中,事件生产者(例如,微服务、API、IoT 设备)向事件消费者发送实时事件通知,激活特定的处理例程。例如,当 Netflix 发布新的原创剧集时,多个 EDA 服务处于待命状态等待发布通知,这会触发级联更新以通知用户。许多其他基于面向用户的 Web 和移动应用程序的公司,例如 Uber、DoorDash、Instacart,都依赖事件驱动的架构。

无服务器与 PaaS、容器和 VM

由于无服务器、平台即服务 (PaaS)、容器和虚拟机 (VM) 在云应用程序开发和计算生态系统方面都发挥着至关重要的作用,所以比较无服务器和其他模式在某些关键属性方面的差异很有帮助。

  • 配置时间:无服务器的配置时间以毫秒计,而其他模式则以分钟或小时计。
  • 管理负担:无服务器没有任何管理负担,相比之下,PaaS、容器和虚拟机的管理负担则分别为较轻、中等和较重。
  • 维护:无服务器架构 100% 由 CSP 管理。PaaS 也是如此,但容器和虚拟机需要大量维护,包括更新/管理操作系统、容器映像、连接等。
  • 缩放:自动缩放(包括自动缩放到零)是无服务器的固有特性,可即时实现。其他模式也提供自动缩放功能,但速度缓慢,需要仔细调整自动缩放规则,并且不能缩放到零。
  • 容量规划:无服务器无需进行容量规划。其他模式则需要混合使用一些自动可扩展性和一些容量规划。
  • 无状态:无服务器的固有特性,意味着缩放不成问题;状态在外部服务或资源中维护。PaaS、容器以及虚拟机可以利用 HTTP,长时间保持打开的套接字或连接,并在两次调用之间将状态存储在内存中。
  • 高可用性 (HA) 和灾难恢复 (DR):无服务器提供高可用性和灾难恢复,无需额外的工作或额外成本。其他模型需要额外的成本和管理工作。基础设施可以通过虚拟机和容器自动重启。
  • 资源利用率:无服务器是 100% 高效的,因为它没有闲置容量 - 只有在请求时才会调用。所有其他模型都或多或少地存在容量空闲情况。
  • 计费和节余:无服务器架构会以 100 毫秒为单位进行计费。PaaS、容器和 VM 则通常按小时或分钟来计费。
无服务器、Kubernetes 和 Knative

Kubernetes 是一个开源容器编排平台,可自动执行容器部署、管理和扩展。其自动化功能极大地简化了容器化的应用程序的开发。

无服务器应用程序通常部署在容器中。但是 Kubernetes 只能通过将 Kubernetes 与特定云供应商的无服务器平台集成的专用软件独立运行无服务器应用程序。

Knative 是 Kubernetes 的开源扩展,提供无服务器框架。它使任何容器都能够在运行 Kubernetes 的任何云平台上作为无服务器工作负载运行,无论该容器是围绕无服务器功能还是其他应用程序代码(例如微服务)构建的。Knative 的工作原理是将代码抽象出来,处理网络路由、事件触发器和自动缩放,以实现无服务器执行。

Knative 对开发人员是透明的。他们使用 Kubernetes 构建容器,然后 Knative 完成剩下的工作,并将容器作为无服务器工作负载运行。

无服务器的优缺点
优点

无服务器计算可为个人开发人员和企业开发团队提供众多技术优点和业务优点:

  • 提高开发人员的工作效率:如上所述,无服务器可以让开发团队专注于编写代码,而无需管理基础架构。它为开发人员提供了更多时间来创新和优化前端应用程序功能和业务逻辑。
  • 仅为执行付费:计量从发出请求时开始,并在执行完成时结束。将此与 IaaS 计算模型进行比较,在 IaaS 计算模型中,客户需要为运行应用程序所需的物理服务器、虚拟机和其他资源付费,从他们配置这些资源直到明确停用为止。
  • 使用任何语言进行开发:无服务器是一个多语言环境,使开发人员能够使用任何自己习惯的语言或框架(Java、Python、JavaScript、node.js)进行编码。
  • 简化开发/开发运维周期:无服务器简化了部署,从更广泛的层面上来说,简化了开发运维,因为开发人员不必再花时间定义所需的基础架构,以集成、测试、交付代码以及将代码各版本部署到生产环境中。
  • 经济高效的性能:对于某些工作负载来说(比如困难的并行处理、流处理、某些数据处理任务),无服务器计算相较于其他形式的计算速度更快,也更经济高效。
  • 降低延迟:在无服务器环境中,代码可以在更靠近最终用户的地方运行,从而降低延迟
  • 使用情况可见性:无服务器平台对于系统和用户时间近乎完全可见,并且可以系统地汇总使用情况信息。
缺点

虽然无服务器有很多优点,但也有必要考虑一些缺点:

  • 控制较少:在无服务器环境中,组织将服务器控制权移交给第三方 CSP,从而放弃对硬件和执行环境的管理。
  • 供应商锁定:每个服务供应商都提供与其他供应商不兼容的独特无服务器功能和特性。
  • 启动缓慢:也称为“冷启动”,启动缓慢会影响无服务器应用程序的性能和响应速度,尤其是在实时需求环境中。
  • 复杂的测试和调试:无服务器计算模型的调试可能更加复杂,因为开发人员缺乏对后端流程的可视性。
  • 运行长时间应用程序的成本较高:无服务器执行模式并非为长时间执行代码而设计。因此,长时间运行的进程可能比传统的专用服务器或 VM 环境成本更高。
无服务器和安全性

虽然 CSP 提供安全措施来管理无服务器应用程序,但客户还负责根据共享责任模型保护应用程序代码和数据。无服务器的基于云的安全措施包括自动化安全策略和解决方案,如安全信息和事件管理 (SIEM)、身份和访问管理 (IAM) 以及威胁检测和响应。

遵循 DevSecOps 实践有助于开发团队保护无服务器技术的安全。DevSecOps 是 Development、Security 和 Operations 的缩写,是一种应用程序开发实践,可在软件开发生命周期的每个阶段(从初始设计到集成、测试、交付和部署)自动集成安全性和安全实践。

无服务器和可持续性

与传统的本地数据中心环境不同,无服务器计算模型可以帮助组织减少能源消耗,并减少 IT 运营的碳足迹。

此外,无服务器模式允许公司通过仅使用所需资源并为其付费来提升资源效率,优化排放。此功能可减少在空闲或多余进程上浪费的能量。

无服务器用例

鉴于其独特的属性和优势,无服务器架构最适合涉及微服务、移动后端以及数据和事件流处理的用例。

无服务器和微服务

目前,无服务器最常见的用例是支持微服务架构。微服务模式专注于创建小型服务,这些服务执行单一任务并使用 API 相互通信。虽然也可以使用 PaaS 或容器来构建和运行微服务,但无服务器因其代码量少、固有的自动缩放、快速配置以及不对空闲容量计费的定价模式等特性,发展势头强劲。

API 后端

无服务器平台中的任意操作(或功能)均可转换为 HTTP 端点,以供 Web 客户端随时使用。为 Web 启用这些操作时,它们被称为 Web 操作。可将 Web 操作组合为功能齐全的 API,并通过 API 网关提供额外的安全性、OAuth3 支持、速率限制和自定义域支持。

Open Liberty InstantOn (CRIU)

Open Liberty InstantOn4 采用一种新颖的方法来支持无服务器应用程序的快速启动。借助 InstantOn,您可以在应用程序构建期间对正在运行的 Java 应用程序进程设置检查点,然后在生产中恢复该检查点。恢复速度很快(约数十毫秒),这使其成为无服务器的理想选择。由于 InstantOn 是现有应用程序的检查点,因此恢复后的行为是相同的,包括同样出色的吞吐量性能。此过程使组织能够采用无服务器来开发新的云原生应用程序,并提供了将无服务器引入现有企业的机会。

数据处理

无服务器非常适合围绕数据丰富、转换、验证和清理等任务处理结构化文本、音频、图像和视频数据。开发人员还可以将其用于 PDF 处理、音频规范化、图像处理(旋转、锐化、降噪、缩略图生成)、光学字符识别 (OCR) 和视频转码。

大规模并行计算和“映射”操作

任何困难的并行任务都是无服务器运行时的绝佳用例,每个可并行化的任务都会产生一次操作调用。此类任务的例子包括数据搜索和处理(特别是 Cloud Object Storage)、MapReduce 操作和网络抓取、业务流程自动化、超参数调优、蒙特卡罗模拟以及基因组处理。

流处理工作负载

将托管的 Apache Kafka 与 FaaS 和数据库或存储相结合,为实时构建数据管道和流媒体应用程序提供了坚实的基础。这些架构非常适合处理各种数据流采集(用于验证、清理、扩充、转换),包括 IoT 传感器数据、应用程序日志数据、金融市场数据和业务数据流(来自其他数据源)。

AI 和无服务器

无服务器提供运行人工智能 (AI)机器学习 (ML) 工作负载所需的自动化可扩展性,确保最佳性能并加速创新。

混合云和无服务器

无服务器计算支持混合云战略的方式为提供适应本地、公有云私有云边缘环境中波动的工作负载所需的敏捷性、灵活性和可扩展性。

无服务器的常见应用

无服务器支持当今许多最常见的应用程序,包括客户关系管理 (CRM)、高性能计算 (HPC)、大数据分析、业务流程自动化、视频流、游戏、远程医疗、数字商务、聊天机器人创建等。

教程:无服务器入门

可通过以下教程拓展您的无服务器计算技能:

  • IBM® Cloud Code Engine 入门访问我们的“Hello world”教程,亲身体验创建和部署 IBM Cloud Code Engine 应用程序有多容易。
  • 体验 Liberty InstantOn (CRIU)利用 IBM® WebSphere Liberty 优化云部署和提高运营效率,为您的组织带来新价值。Liberty InstantOn 展示了一种在不影响性能的情况下实现无服务器性能的更好方法。
  • 运行批处理任务了解如何使用 Code Engine 控制台运行批处理任务。一个任务运行可执行代码的一个或多个实例。与处理 HTTP 请求的应用程序不同,任务设计为运行一次后退出。
解决方案
IBM Cloud Code Engine

在完全托管的“容器运行时”中运行容器、应用程序代码或批处理任务。

探索 IBM Cloud Code Engine
IBM Cloud Pak for Applications

无论是部署、构建新的云原生应用程序、重构现有应用程序或重塑平台,Cloud Pak for Applications (CP4Apps) 都能满足您的需求。

深入了解 IBM Cloud Pak for Applications
IBM Cloud Satellite

涵括各种本地、边缘计算和公有云环境,并可从任何云供应商协调一致地部署和运行应用程序。

了解基于 5G 基础架构的 IBM Cloud Satellite
IBM Cloudant

超大规模、具有弹性且全局可用的应用程序的数据层,基于开源 Apache CouchDB

探索 IBM Cloudant
Instana® 无服务器监控

监控无服务器应用和服务,以优化性能、可用性和安全性。

深入了解 Instana 无服务器监控
采取后续步骤

无服务器计算以更简单、更经济高效的方式在云端构建和运行应用程序。了解有关 IBM Cloud Code Engine 的信息,这是个即用即付的无服务器平台,开发人员无需 Kubernetes 技能即可部署无服务器应用程序和工作流程。

深入了解 Cloud Code Engine
脚注

(所有链接均为 ibm.com 外部链接)

全球无服务器架构市场报告,SkyQuest,2024 年 3 月

Why The Future Of Software And Apps Is Serverless,ReadWrite,2012 年 10 月

3 关于 OAuth 2.0,OAuth

4 使用 Open Liberty InstantOn 加快容器化应用程序的启动,Open Liberty