什么是无服务器计算?

无服务器的定义

无服务器计算是一个云计算模型,支持开发人员在由云服务提供商托管并可按需使用的服务器上构建和运行代码。无服务器计算能够将开发人员从后端的基础架构管理工作中解放出来,并为公司提供可扩展的灵活环境。借助无服务器计算,云服务提供商会通过按需缩放规模对基础架构进行配置以满足需求,并通过执行任何例行维护、更新、补丁安装和安全监测对基础架构进行管理。

无服务器计算并非指不用服务器。相反,无服务器指的是基础架构管理工作已经外包给了云服务提供商。无服务器监测的优点和挑战也都因此而产生。公司可以将他们的资源专注于业务逻辑,但需要付出的代价是对后端发生的事情缺少了掌控感和可见性。

无服务器与 FaaS 的对比

功能即服务 (FaaS) 指这样的计算服务:将后端基础架构管理工作转移出去,以便专注于构建和运行前端代码。无服务器和 FaaS 经常可以互换使用,但 FaaS 具体指的是它为开发人员提供的代码执行能力。作为事件驱动型架构,FaaS 是无服务器的一个子领域,仅仅是无服务器提供的服务之一

无服务器服务同时还包含无服务器存储和数据库、事件流式传输和消息传递,以及 API 门户。

无服务器与 BaaS 的对比

后端即服务 (BaaS) 和 FaaS 类似,也是无服务器的一个子领域。BaaS 是一个云计算模型,能够支持开发人员专注于前端。BaaS 针对常见的后端活动(例如用户身份验证、推送通知、云存储和数据库管理)提供即时可用的软件。

无服务器可以与 FaaS 和 BaaS 搭配使用。

无服务器与 SaaS 的对比

软件即服务 (SaaS) 指这样的计算服务:提供商通过互联网向公司提供许可并交付即时可用的软件应用程序。无服务器计算为开发人员提供了一个可扩展的灵活基础架构,让他们可以构建和部署应用程序,而无需担心服务器管理问题。

那么,什么是无服务器监测?

无服务器计算的事件驱动型架构和第三方基础架构也要求使用专用的监测解决方案。无服务器监测解决方案可以帮助企业获得有关其整个运营过程的可见性,是所有无服务器模型的重要组成部分。

无服务器架构的关键组成部分是什么?

无服务器架构有多个关键组成部分,这使得其有异于传统的基础架构模型。

  • 云服务提供商发挥着重要作用:
    • 云服务提供商是无服务器环境的关键,因为他们负责管理基础架构。在传统的架构计算模型中,您的 IT 团队通常都需要付出大量的时间和精力来完成服务器的运行和管理任务。如果使用无服务器,云服务提供商会担负这一职责,从而解放了您的开发人员。云服务提供商会对服务器、数据库和存储进行配置。
  • 事件驱动型编程:
    • 无服务器是由事件触发的,而不是由轮询触发的。无服务器环境是一个事件驱动型架构 (EDA)。事件指环境中发生的任何状态改变,例如用户端请求。这些事件会调用由开发人员为触发任务而编写的功能。
  • 基于触发的任务:
    • 无服务器仅会在被功能触发(通过事件进行调用)后才会执行任务。因此,无服务器只有在被调用时才会使用所需的资源。
  • 异步编程:
    • 事件驱动型架构和无服务器的无状态性质支持异步编程。无状态意味着在交互之间并没有数据被存储下来。所以,可以同时执行多项任务,而无需等待一项任务完成后再执行另一项任务。异步编程的可能性还为开发人员在编写和测试新代码时提供了灵活性。部署速度会提高。
  • RESTful 风格的 API:
    • 无服务器会通过使用 RESTful 风格的 API 在 Web 服务之间进行通信。REST 指表现层状态转换。API 指应用程序编程接口。作为无状态架构环境,无服务器会使用 RESTful 风格的 API 来转换客户端(后端)资源或向通过 HTTP 提出请求的用户表示这些资源。
  • DevOps (CI/CD):
    • 无服务器使得开发人员可以借助 CI/CD 免于完成 DevOps 中的 Ops 部分。CI/CD 将自动化引入了应用程序的开发过程。CI 指持续集成,CD 指持续部署或持续交付。由于将后端监测外包给了云服务提供商,无服务器环境有益于敏捷应用程序开发,因为开发人员可将开发管道中的部分工作进行自动化,并不再花那么多时间去担心部署的影响。
  • 自动扩展:
    • 无服务器本质上是可扩展。它能自动缩放规模以满足需求。无服务器环境只有在功能被调用时才会快速部署容器。因此,它能自动应对使用率上升或下降的情况。
  • 自我修复:
    • 您可以编写无服务器应用程序来在发生错误时自动进行识别和修复。这类功能能够改善应用程序的弹性并提高其可用性。

无服务器应用程序是如何运行的?

无服务器会同时使用后端即服务 (BaaS) 和功能即服务 (FaaS) 来完成请求。环境作为一个整体是由事件驱动的,这意味着事件会触发响应,例如身份验证或功能。

无服务器的 FaaS 部分用于处理用户请求或事件。请求会在应用程序编程接口 (API) 门户进行处理,然后会调用功能。相应地,功能会与数据库进行通信。这一系列活动表示单个应用程序任务。在无服务器环境中,应用程序是模块化的,因为任务都被编写成了单独的功能。

开发人员编写无服务器应用程序代码,这些代码会按需部署到容器中。云服务提供商要么在正在运行的服务器上执行此功能,要么快速部署新服务器来执行此功能。

因为无服务器没有状态,意味着所有调用都是独立的,所以它为开发人员提供了巨大的灵活性。不会存储来自之前交互的数据。无服务器仅会按需使用资源。一旦不再需要某个功能,代码所部署到的容器就会消失。这进一步增强了无服务器为开发人员提供的灵活性。

有关无服务器应用程序的更多考量:

  • 首次调用功能或者长时间不活动后调用功能时,会发生冷启动。这会造成一些延迟。
  • 云服务提供商会确定可同时运行的功能的数量。这称作并发限制
  • 超时指云服务提供商在功能终止之前为功能分配的时长。

无服务器技术为什么很重要?

无服务器技术之所以很重要,是因为它能通过自动缩放规模带来巨大商业效益,还允许开发人员提高工作效率并更快地交付应用程序。所以,这是一种具有成本效益的技术:它能为开发人员赋能,让他们专注于生产,而不是运维;而且作为一个基于使用量的模型,它可以降低运行和管理实体服务器的成本。

无服务器技术已经出现十多年了。2014 年,AWS 推出了其首款 FaaS:AWS Lambda。Google 推出了 Google Cloud Functions,而 Microsoft 则推出了 Azure Functions。由于大部分企业都依赖云计算,所以无服务器技术是业务运营的同义词。因此,随着云服务提供商的作用对企业变得至为关键,无服务器技术也变得至为关键。

无服务器功能的优点

无服务器为开发人员和客户等各方都提供了大量优势。

  • 具有成本效益:云服务提供商提供无服务器时会采用基于使用量的模型,仅针对您使用的资源和功能向您收费。由于无服务器的无状态性质(如果容器未在使用,它就会消失),所以没有闲置时间。所以您也永远无需为闲置时间付费。这能够大幅提高成本效益。
  • 扩展:由于无服务器采用事件驱动型架构,它能够让您按需缩放规模。如果需求增加,云服务提供商可按需要快速配置更多资源,支持您扩展规模。云服务提供商会为您运行和管理这些资源,所以您可以专注于业务成长。
  • 减少开销:通过无服务器功能,云服务提供商负责管理和监测您的基础架构。这意味着您可以将管理所需的成本和人力资源转移给云服务提供商,并将您的资源重新分配到开发和部署。
  • 性能和可用性:作为一个事件驱动型环境,无服务器能够提高性能,因为它从来不使用无必要的资源。这还意味着资源是按需提供的。云服务提供商通过在需要时快速配置服务器和容器,支持您按需进行扩展,所以您永远也不用担心服务器和存储的可用性。
  • 开发人员的工作效率:开发人员会受益于无服务器功能,因为云服务提供商承担了 DevOps 中运维的那部分工作。这解放了开发人员,让他们专注于编写代码。无服务器环境通过支持开发管道中的 CI/CD 自动化,推动实现开发敏捷并提高工作效率。

无服务计算会带来什么挑战?

尽管在成本效益和加速开发方面拥有明显优势,但是无服务器计算也带来了一系列挑战。无服务器计算的部分劣势包括:

  • 供应商锁定:无服务器性质意味着您针对代码部署要选择单一云服务提供商。所以,开发人员被迫接受供应商提供的模型。这家供应商会规定资源使用方法,例如并发限制。出于这些原因,供应商锁定可能意味着缺少灵活性。
  • 从代码视角看待监测和故障排查:由于云服务提供商管理基础架构,您对运维的后端基本没有或完全没有可见性。因此,您很难在没有专有无服务器监测工具的条件下对无服务器环境进行监测。无服务器环境的事件驱动型架构还意味着识别、重现和更正故障会是个难题。
  • 延迟:鉴于无服务器环境中应用程序的无状态性质,首次调用功能或者长时间不活动后调用功能时会出现延迟。出现超时时,或者系统同时运行过多功能时,也会发生延迟。在这种情况下,云服务提供商可能会强行终止某项功能,导致故障。在用户端,这会导致延迟。
  • 自定义和控制能力有限:由于无服务器服务提供商管理底层基础架构,在环境的自定义和控制能力方面可能会有限制,例如可用运行时版本、内存分配和执行时间限制。
  • 安全顾虑:虽然无服务器计算能够减少攻击面,但它也引入了新的安全风险。开发人员需要了解与第三方服务相关的风险、功能级许可,以及应用程序代码中的漏洞。
  • 无状态:无服务器功能是无状态的,意味着它们不会保留调用之间的任何数据。这会让开发人员很难管理应用程序状态,要求开发人员依赖外部存储或数据库来维护状态。
  • 成本可预测性:尽管无服务器计算具有成本效益,但您很难预测成本,因为成本取决于诸如调用次数、内存和执行时间等因素。意料之外的使用量激增会导致成本增加。
  • 与既有系统的集成:将无服务器功能与既有系统和架构相集成是一项很有挑战性的工作,尤其是涉及旧有应用程序或复杂系统时。
  • 学习曲线:采用无服务器计算要求开发人员学习新概念、工具和最佳实践,这会加大开发过程的复杂性。

无服务器计算的用例

无服务器计算提供的优势(包括可扩展性,以及减少管理员工作)使得它适用于多种用例。

  • Web 应用程序开发:无服务器计算十分适用于 Web 应用程序开发,因为开发人员能够快速在此环境中进行测试。云服务提供商采用基于使用量的模型,这意味着在无服务器环境中进行 Web 应用程序开发也更节省成本。您只需为所使用的资源付费,无需投入时间或人力去管理基础架构。这让您的开发人员能够专注于前端。诸如数据库、API 门户以及事件驱动型架构 (EDA) 等无服务器服务支持开发人员通过单纯编写代码来构建 Web 应用程序。
  • 数据处理和分析:无服务器特别适用于结构化的文本、音频、图像和视频数据。无服务器支持您处理和分析不同的大型数据集。和任何传统的计算模型类似,无服务器环境也包含大量孤岛式数据集。开发人员可以编写应用程序将来自全部商业渠道的数据采集到单一数据库中并进行处理。无服务器计算是处理大量数据的理想之选,例如 ETL(提取、转换、加载)操作、日志分析或数据验证,因为它可以水平扩展以处理所需的工作负载。
  • API 和微服务:无服务器功能可用来快速构建和部署 API 和微服务,支持开发人员专注于编写应用程序逻辑,而无需担心基础架构管理。
  • 实时文件处理:无服务器功能可在文件被上传到云存储服务时实时对其进行处理,支持调整图像大小、视频转码和文本提取。
  • 事件驱动型工作流:无服务器计算可用来构建事件驱动型工作流,以响应特定事件,例如数据库中的变更、物联网设备的数据流,或者来自消息队列的消息。
  • 排定的任务和 cron 作业:无服务器功能可用来按照特定间隔排定和运行任务,例如夜间备份、报告生成或者数据同步。
  • 聊天机器人和虚拟助手:无服务器功能可用来创建聊天机器人和虚拟助手,以处理和响应用户输入,与消息传递平台和自然语言处理服务进行集成。
  • 物联网数据处理:无服务器计算可处理和分析由物联网设备生成的数据,支持实时监测、异常检测和数据聚合。

借助 Elastic 探索可观测性

无服务器与传统架构的对比

无服务器与传统架构的主要区别在于贵公司的 IT 团队不运行也不管理实体服务器。这些工作被转移给了云服务提供商。

传统上,企业需要使用裸金属 (BM) 服务器来运行应用程序。这需要大量时间和资源,因为您需要购买硬件,需要拥有实体位置来安装这些硬件,还得为这些硬件供电和降温。BM 要求对硬件进行装架、安装和配置。IT 团队也需要完成很多耗时的工作,包括为代码部署配置环境、安装运维系统,以及维护和管理服务器。

BM 服务器已发展为虚拟机 (VM)。公司虽然仍必须安装和配置硬件,但可通过在同一硬件上运行多台机器而受益。这意味着计算资源的利用率更高。技术团队可以通过管理程序部署多个服务器,而且和 BM 类似,团队必须安装操作系统并确保进行维护和管理。借助 VM 模板和自动化工具,操作系统的安装可自动完成。

容器由 VM 发展而来。容器是允许应用程序在给定操作环境中运行的代码包,使应用程序具有可携性。与 VM 不同,容器都在同一操作系统内运行,而且容器运行时间以及其计算资源都在内核用户空间中进行划分。因为要管理的操作系统减少了,所以这能够大幅简化这些服务的管理。容器会通过诸如 Kubernetes 等平台实现自动化,这些平台为在何处部署容器提供了灵活性,使得容器具有可携性并且可以根据需要轻松进行部署和销毁。

无服务器架构会解放 IT 团队,让他们专注于代码编写和部署,因为所有基础架构管理工作都转移给了云服务提供商。

通过 Elastic 探索无服务器计算的未来

随着云技术的继续发展,无服务器计算也会发展。服务提供商已经开始改进无服务器计算,他们所采取的做法是添加组件让无服务器能够更便捷地用于常规业务工作负载。

借助 Elastic 探索无服务器监测

无服务器技术常见问答

什么是无服务器?

无服务器是一种云计算模型,云服务提供商会在此模型中配置和管理底层基础架构,以便他们的客户能够专注于前端开发。无服务器由 FaaS 和 BaaS 构成。这两项服务共同协作,以打造灵活的环境来支持开发人员快速部署代码。

可以举个无服务器计算的示例吗?

终端上的一个用户正在浏览客户的网站。用户这么做的同时,就是在同时和两个无服务器功能进行交互,分别是 BaaS 和 FaaS。为了继续浏览,用户输入了他们的信息。无服务器环境的 BaaS 部分会执行用户身份验证。用户继续浏览网站并完成了购买。这是一个事件。这一事件由网关 API 进行处理,此网关 API 会调用一项功能以发送收据电子邮件。为了实现这一点,云服务提供商会快速部署一个容器,此容器拥有应用程序代码并执行任务。这就是 FaaS。

它为什么被称作无服务器?

无服务器是一个误称,它描述的是这样一个云计算环境:云服务提供商会在此环境内配置和管理所需的服务器以运行客户的应用程序。客户没有服务器,客户向云服务提供商付费来使用他们的服务器。

无服务器词汇表

  • API 网关:应用程序编程接口 (API) 是一个通信链接,该链接会读取请求并将请求发送到后端服务。然后它会转化后端数据并提供给前端的用户。
  • BaaS:后端即服务是一种云计算模型,会使用已构建的软件来提供诸如身份验证或数据存储等服务。它是无服务器的一个子领域。
  • 云计算:云计算指云环境中原生的计算模型。在云端发生的任何类型的计算都可以称作云计算。
  • 云原生:云原生指专门针对云而构建的任何应用程序或服务。它考虑到了云环境的可扩展性和弹性。
  • 冷启动:首次调用功能或者长时间不活动后调用功能时,会发生冷启动。这是云服务提供商第一次快速部署容器来履行功能。
  • 容器:容器是轻型、便携、独立的代码包,且带有依赖关系,这使得容器能够跨不同的计算环境一致地运行。
  • 事件驱动型架构:事件驱动型架构是一个软件架构模型,会使用事件(请求、状态变化、更新)来触发服务间的通信。事件驱动是一种编程方法,不是一种编程语言。
  • FaaS:功能即服务是一种事件驱动型云计算模型,可允许开发人员在无需管理后端基础架构的条件下构建和运行前端。
  • 微服务:微服务是一种软件架构模型,在此模型内,软件会被细分成单独的服务。这些服务通过 API 进行通信并支持实现开发灵活性。
  • 多云:多云指多项云服务,例如 Google Cloud、AWS 和 Microsoft Azure。大部分公司都是多云,即他们同时使用多家云服务提供商的服务。例如,一家公司使用 Google Office 套件来收发电子邮件,使用 AWS Lambda 来实现无服务器功能。
  • 无状态:无服务器指应用程序、协议和进程的一个计算特征,其可独立处理操作。例如,无服务器计算本质上是无状态,即意味着不会在调用之间保存数据。