发布日期: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 之外,这些服务还包括数据库和存储、应用程序编程接口 (API) 网关和事件驱动型架构。
API 网关可充当 Web 应用程序操作的代理,并提供 HTTP 方法路由、客户端 ID 和密钥、速率限制、CORS、查看 API 使用情况、查看响应日志以及 API 共享策略。
无服务器架构非常适合事件驱动型工作负载和流处理工作负载,而其中最著名的便是开源 Apache Kafka 事件流平台。
自动化无服务器函数是无状态的,旨在处理单个事件。这些功能已经成为事件驱动架构 (EDA) 的重要组成部分 - 围绕事件的发布、捕获、处理和存储构建的软件设计模型。在 EDA 框架中,事件生产者(例如,微服务、API、IoT 设备)向事件消费者发送实时事件通知,激活特定的处理例程。例如,当 Netflix 发布新的原创剧集时,多个 EDA 服务处于待命状态等待发布通知,这会触发级联更新以通知用户。许多其他基于面向用户的 Web 和移动应用程序的公司,例如 Uber、DoorDash、Instacart,都依赖事件驱动的架构。
由于无服务器、平台即服务 (PaaS)、容器和虚拟机 (VM) 在云应用程序开发和计算生态系统方面都发挥着至关重要的作用,所以比较无服务器和其他模式在某些关键属性方面的差异很有帮助。
Kubernetes 是一个开源容器编排平台,可自动执行容器部署、管理和扩展。其自动化功能极大地简化了容器化的应用程序的开发。
无服务器应用程序通常部署在容器中。但是 Kubernetes 只能通过将 Kubernetes 与特定云供应商的无服务器平台集成的专用软件独立运行无服务器应用程序。
Knative 是 Kubernetes 的开源扩展,提供无服务器框架。它使任何容器都能够在运行 Kubernetes 的任何云平台上作为无服务器工作负载运行,无论该容器是围绕无服务器功能还是其他应用程序代码(例如微服务)构建的。Knative 的工作原理是将代码抽象出来,处理网络路由、事件触发器和自动缩放,以实现无服务器执行。
Knative 对开发人员是透明的。他们使用 Kubernetes 构建容器,然后 Knative 完成剩下的工作,并将容器作为无服务器工作负载运行。
无服务器计算可为个人开发人员和企业开发团队提供众多技术优点和业务优点:
虽然无服务器有很多优点,但也有必要考虑一些缺点:
虽然 CSP 提供安全措施来管理无服务器应用程序,但客户还负责根据共享责任模型保护应用程序代码和数据。无服务器的基于云的安全措施包括自动化安全策略和解决方案,如安全信息和事件管理 (SIEM)、身份和访问管理 (IAM) 以及威胁检测和响应。
遵循 DevSecOps 实践有助于开发团队保护无服务器技术的安全。DevSecOps 是 Development、Security 和 Operations 的缩写,是一种应用程序开发实践,可在软件开发生命周期的每个阶段(从初始设计到集成、测试、交付和部署)自动集成安全性和安全实践。
与传统的本地数据中心环境不同,无服务器计算模型可以帮助组织减少能源消耗,并减少 IT 运营的碳足迹。
此外,无服务器模式允许公司通过仅使用所需资源并为其付费来提升资源效率,优化排放。此功能可减少在空闲或多余进程上浪费的能量。
鉴于其独特的属性和优势,无服务器架构最适合涉及微服务、移动后端以及数据和事件流处理的用例。
目前,无服务器最常见的用例是支持微服务架构。微服务模式专注于创建小型服务,这些服务执行单一任务并使用 API 相互通信。虽然也可以使用 PaaS 或容器来构建和运行微服务,但无服务器因其代码量少、固有的自动缩放、快速配置以及不对空闲容量计费的定价模式等特性,发展势头强劲。
无服务器平台中的任意操作(或功能)均可转换为 HTTP 端点,以供 Web 客户端随时使用。为 Web 启用这些操作时,它们被称为 Web 操作。可将 Web 操作组合为功能齐全的 API,并通过 API 网关提供额外的安全性、OAuth3 支持、速率限制和自定义域支持。
Open Liberty InstantOn4 采用一种新颖的方法来支持无服务器应用程序的快速启动。借助 InstantOn,您可以在应用程序构建期间对正在运行的 Java 应用程序进程设置检查点,然后在生产中恢复该检查点。恢复速度很快(约数十毫秒),这使其成为无服务器的理想选择。由于 InstantOn 是现有应用程序的检查点,因此恢复后的行为是相同的,包括同样出色的吞吐量性能。此过程使组织能够采用无服务器来开发新的云原生应用程序,并提供了将无服务器引入现有企业的机会。
无服务器非常适合围绕数据丰富、转换、验证和清理等任务处理结构化文本、音频、图像和视频数据。开发人员还可以将其用于 PDF 处理、音频规范化、图像处理(旋转、锐化、降噪、缩略图生成)、光学字符识别 (OCR) 和视频转码。
任何困难的并行任务都是无服务器运行时的绝佳用例,每个可并行化的任务都会产生一次操作调用。此类任务的例子包括数据搜索和处理(特别是 Cloud Object Storage)、MapReduce 操作和网络抓取、业务流程自动化、超参数调优、蒙特卡罗模拟以及基因组处理。
将托管的 Apache Kafka 与 FaaS 和数据库或存储相结合,为实时构建数据管道和流媒体应用程序提供了坚实的基础。这些架构非常适合处理各种数据流采集(用于验证、清理、扩充、转换),包括 IoT 传感器数据、应用程序日志数据、金融市场数据和业务数据流(来自其他数据源)。
无服务器支持当今许多最常见的应用程序,包括客户关系管理 (CRM)、高性能计算 (HPC)、大数据分析、业务流程自动化、视频流、游戏、远程医疗、数字商务、聊天机器人创建等。
可通过以下教程拓展您的无服务器计算技能:
在完全托管的“容器运行时”中运行容器、应用程序代码或批处理任务。
无论是部署、构建新的云原生应用程序、重构现有应用程序或重塑平台,Cloud Pak for Applications (CP4Apps) 都能满足您的需求。
涵括各种本地、边缘计算和公有云环境,并可从任何云供应商协调一致地部署和运行应用程序。
超大规模、具有弹性且全局可用的应用程序的数据层,基于开源 Apache CouchDB
监控无服务器应用和服务,以优化性能、可用性和安全性。
(所有链接均为 ibm.com 外部链接)
1 全球无服务器架构市场报告,SkyQuest,2024 年 3 月
2 Why The Future Of Software And Apps Is Serverless,ReadWrite,2012 年 10 月
3 关于 OAuth 2.0,OAuth
4 使用 Open Liberty InstantOn 加快容器化应用程序的启动,Open Liberty