什么是无服务器?
无服务器是一种云应用开发和执行模型,利用该模型,开发人员可以轻松构建和运行代码,而无需管理服务器,也无需为空闲的云基础架构付费
抽象的黑色和蓝色图像
什么是无服务器?

无服务器是一种云应用开发和执行模型,利用该模型,开发人员可以轻松构建和运行应用代码,而无需置备或管理服务器或后端基础架构。

无服务器可以让开发人员将全部精力都集中于编写最出色的前端应用代码和业务逻辑。 所有开发人员只需要编写应用代码,并将其部署到由云服务提供商管理的容器中。 云提供商负责其余工作,包括置备运行代码所需的云基础架构,以及根据需要缩放基础架构。 云提供商还负责所有例行的基础架构管理和维护工作,例如操作系统更新和补丁、安全管理、容量规划、系统监控等。

同样重要的是:使用无服务器时,开发人员无需为空闲容量付费。 云供应商在代码执行时快速启动并置备所需的计算资源,并在执行停止时快速停止计算资源(称为"缩放到零")。 计费时间从执行开始起至执行停止;通常,定价依据执行时间和所需资源确定。

无服务器并不表示“没有服务器”

尽管名称如此,但无服务器计算中肯定有服务器。 “无服务器”描述的是开发人员对于这些服务器的体验,他们感受不到这些服务器的存在,不会看到、管理服务器或以任何方式与服务器互动。

目前,所有主要的云服务提供商都提供无服务器平台,包括 Amazon Web Services (AWS Lambda)、Microsoft Azure (Azure Functions)、Google Cloud (Google Cloud Functions) 和 IBM Cloud (IBM Cloud Code Engine)。 微服务容器与无服务器计算一起构成了云原生应用开发的核心技术“铁三角”。      

无服务器不仅仅是 FaaS

功能即服务(简称 FaaS)是一种云计算服务,支持开发人员运行代码或容器以响应特定事件或请求,而无需指定或管理运行代码所需的基础架构。

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

  • 无服务器数据库和存储:数据库(SQL 和 NoSQL)和存储(尤其是对象存储)是数据层的基础。 这些技术的无服务器方法指的是从置备具有明确定义的容量、连接和查询限制的“实例”,转变为可随基础架构和定价的需求线性缩放的模型。

  • 事件流和消息传递:无服务器架构非常适合用于事件驱动型工作负载和流处理型工作负载,尤其是开源 Apache Kafka  事件流平台。

  • API 网关:API 网关充当 Web 操作的代理,提供 HTTP 方法路由、客户 ID 和密码、速率限制、CORS,可查看 API 使用情况和响应日志,还包含 API 共享策略。

IBM 的 Ashher Syed 详细介绍了无服务器和无服务器技术栈 (6:37):

无服务器与 PaaS、容器和虚拟机

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

  • 置备时间:无服务器的置备时间以毫秒计,其他模式则以分钟或小时计。

     

  • 管理负担:无服务器没有任何管理负担,相比之下,PaaS、容器和虚拟机的管理负担则分别为较轻、中等和较重。

     

  • 维护:无服务器架构 100% 由提供商管理。 PaaS 也是如此;但容器和虚拟机需要大量维护工作,包括更新/管理操作系统、容器映像、连接等。

     

  • 缩放:自动缩放(包括自动收缩到零)是无服务器的固有特性,可即时实现。 其他模式也提供自动缩放功能,但速度缓慢,需要仔细调整自动缩放规则,并且无法收缩到零。

     

  • 容量规划:无服务器不需要任何容量规划。 其他模式则需要结合使用某种程度的自动缩放和某种程度的容量规划。

     

  • 无状态:这是无服务器的固有特性,这意味着可扩展性不成问题;状态以外部服务或资源的形式保持。 PaaS、容器和虚拟机可利用 HTTP,长时间保持开放的套接字或连接,并且可在内存中保存两次调用之间的状态。

     

  • 高可用性 (HA) 和灾难恢复 (DR):两者都是无服务器的固有特性,无需额外的工作和成本。 其他模式需要额外的成本和管理工作。 对于虚拟机和容器,可以自动重新启动基础架构。

  • 资源利用率:无服务器的效率可达到 100%,因为不会出现空闲容量,仅在请求时才调用资源。 所有其他模式至少具有一定程度的空闲容量。

     

  • 计费颗粒度和节省情况:无服务器以 100 毫秒为单位进行计量。 PaaS、容器和虚拟机通常按小时或分钟计量。

无服务器、Kubernetes 和 Knative

Kubernetes 是开源容器编排平台,用于自动部署、管理和扩展容器。 Kubernetes 的自动化功能极大地简化了基于容器的应用的开发。

无服务器应用通常部署在容器中。 如果没有将 Kubernetes 与特定云提供商的无服务器平台集成的专用软件,Kubernetes 自身无法运行无服务器应用。

Knative 为 Kubernetes 提供了无服务器框架。 它是 Kubernetes 的开源扩展功能,支持任何容器在运行 Kubernetes 的任何云平台上作为无服务器工作负载运行,无论该容器是基于无服务器功能构建的,还是基于某些其他应用代码(例如,微服务)构建的。 Knative 的工作是将代码抽象出来,并为无处理器的执行处理网络路由、事件触发器和自动缩放。

Knative 对开发人员来说是透明的,他们只需像平常一样使用 Kubernetes 构建容器,其余的任务交由交给 Knative 完成,Knative 将容器作为无服务器工作负载运行。

了解有关 Knative 的更多信息

无服务器的优点和缺点

优点

综上所述,毫无疑问,无服务器计算可为开发人员和企业开发团队带来大量技术和业务方面的优势。

提高开发人员的生产力: 如上所述,无服务器可以让开发团队专注于编写代码,而无需管理基础架构。 它使开发人员有更多时间创新和优化前端应用功能和业务逻辑。

仅为执行付费:从发出请求时开始计量,执行结束时停止计量。 将此模式与基础架构即服务 (IaaS) 计算模式进行对比可以发现,在 IaaS 模式中,客户要为运行应用所需的物理服务器、虚拟机 (VM) 和其他资源付费,而且付费周期从他们置备这些资源开始,直到明确停用资源时为止。

可使用任何语言开发: 无服务器是一种多语言环境,支持开发人员采用自己感觉顺手的任何语言或任何框架(Java、Python、JavaScript、node.js)编写代码。

简化开发/DevOps 周期。 无服务器简化了部署,从更广泛的层面来说,简化了 DevOps,因为开发人员不必再花时间定义所需的基础架构,以集成、测试、交付代码以及将代码构建部署到生产环境。 

以经济实惠的方式提高性能。 对于某些工作负载来说,比如困难的并行处理、流处理、某些数据处理任务,无服务器计算相较于其他形式的计算速度更快,也更经济实惠。

使用情况透明。 无服务器平台对于系统和用户时间几乎完全透明,并且可以系统地汇总使用情况信息。

开发和 IT 专业人士还分享了无服务器计算的其他具体优点。 可使用以下互动式工具 (PDF, 1.8 MB) 探索这些优点:

 

无服务器用例

鉴于无服务器架构具有一系列独特的特性和优点,因此非常适合微服务、移动后端以及数据和事件流处理等方面的用例。

无服务器和微服务

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

API 后端

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

要实际体验 API 后端,请尝试教程“无服务器 Web 应用和 API”。

数据处理

无服务器计算非常适合处理结构化文本、音频、图像和视频数据,执行以下任务:数据扩充、转换、验证、清理;PDF 处理;音频标准化;图像处理(旋转、锐化、降噪、缩略图生成);光学字符识别 (OCR);以及视频转码。 要了解详细的图像处理用例,请阅读“SiteSpirit 如何以 10% 的成本将速度提升 10 倍”。

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

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

要获取详细示例,请阅读“相较于本地计算机,Monte Carlo 模拟如何在无服务器架构上将运行速度提升 160 倍”。

流处理工作负载

通过结合使用管理 Apache Kafka、FaaS 以及数据库/存储,为数据管道和流应用的实时构建提供强大的基础。 这些架构非常适合处理各种数据流采集(用于验证、清理、扩充、转换),包括物联网传感器数据、应用日志数据、金融市场数据和(来自其他数据源的)业务数据流。

无服务器的常见应用

在最近的 IBM 调研中,IT 专业人士表示他们在一系列广泛的应用中使用无服务器,包括客户关系管理 (CRM)、分析和商业智能、财务等应用领域。

 

教程:无服务器计算入门

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

解决方案
IBM Cloud Code Engine

在完全管理的容器运行时中运行容器、应用代码或批处理作业

探索 IBM Cloud Code Engine
IBM Cloud Satellite

在来自任何云供应商的本地、边缘计算和公有云环境中,以一致方式部署和运行应用

探索 IBM Cloud Satellite
IBM Cloudant

适用于超大规模、富有弹性而且全球可用的应用的数据层,基于开源 Apache CouchDB

探索 IBM Cloudant
资源 企业中的无服务器,2021

新研究阐述了有关无服务器计算在现实世界中所面临机遇和挑战的见解。

IBM Cloud Code Engine 简介

在这个完全管理的无服务器平台上运行所有容器化工作负载,包括 Web 应用、微服务和批处理作业,这不仅仅是出于功能的考虑,还涉及其他诸多优势。

再次畅享云

详细了解 IBM Cloud Code Engine 及其带来的优势。

采取下一步行动

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

立即探索 IBM Cloud Code Engine