什么是无服务器计算?

无服务器定义

无服务器计算是一种云计算模型,使开发人员能够在由云提供商管理并按需提供的服务器上构建和运行代码。 无服务器计算使开发人员无需管理后端基础设施,并为公司提供可扩展且灵活的环境。借助无服务器计算,云提供商可以通过根据需要向上或向下扩展来配置基础设施以满足需求,并通过执行任何例行维护、更新、修补和安全监控来管理基础设施。

无服务器计算并不意味着不涉及服务器。相反,无服务器意味着基础设施管理已外包给云提供商。这就是无服务器监控的优势和挑战所在。公司可以将资源集中在业务逻辑上,但代价是减少对后端发生的事情的控制和可见性。

无服务器与 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 将 Ops 从 DevOps 中移除。CI/CD 将自动化引入应用程序开发中。CI 指的是持续集成,CD 指的是持续部署或持续交付。通过将后端监控外包给云提供商,无服务器环境有助于敏捷应用程序开发,因为开发人员可以自动化开发管道中的部分内容,并将更少的时间用于担心部署的影响。
  • 自动扩展
    • 无服务器天生具有可扩展性。它会自动向上或向下扩展以满足需求。无服务器环境仅在调用函数时才启动容器。因此,它会自动响应使用量的增加或减少。
  • 自我修复
    • 无服务器应用程序可以编程为在错误发生时自动识别和修复错误。这种功能提高了应用程序的弹性和可用性。

无服务器应用程序如何工作?

无服务器同时使用后端即服务 (BaaS) 和函数即服务 (FaaS) 来满足请求。整个环境是事件驱动的,这意味着事件会触发响应,例如身份验证或函数。

无服务器的 FaaS 部分处理用户请求或事件。请求在应用程序性能接口 (API) 网关中处理,然后网关调用函数。反过来,函数与数据库通信。这一系列活动代表一个应用程序任务。在无服务器环境中,应用程序是模块化的,因为任务被编程为独立的函数。

开发人员编写无服务器应用程序代码,这些代码按需部署在容器中。云提供商将在正在运行的服务器上执行函数,或启动新服务器来执行函数。

无服务器为开发人员提供了极大的灵活性,因为它是无状态的,这意味着所有调用都是独立的。不会存储来自先前交互的数据。无服务器仅在需要时使用资源。一旦不再需要某个函数,则部署该代码的容器就会消失。这有助于无服务器为开发人员提供的灵活性。

无服务器应用程序中的其他注意事项

  • 当函数首次调用或在一段时间不活动后调用时,可能会发生**冷启动**。这可能会导致一些延迟。
  • 云提供商确定可以同时运行的函数数量。这就是**并发限制**。
  • **超时**是指云提供商在终止函数之前分配给函数的时间量。

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

无服务器技术非常重要,因为它通过实现自动扩展提供了显著的业务优势,并使开发人员能够提高工作效率并更快地交付应用程序。因此,它是一种具有成本效益的技术:它使开发人员能够专注于生产而不是运营,并且作为一种基于消费的模型,减轻了运行和管理物理服务器的成本。

无服务器技术已经存在了十多年。2014 年,AWS 推出了其第一个 FaaS,AWS Lambda。谷歌有 Google Cloud Functions,而微软有 Azure Functions。由于大多数企业都依赖云计算,因此无服务器技术是业务运营的代名词。因此,随着云提供商的角色对企业变得至关重要,无服务器技术也是如此。

无服务器函数的优势

无服务器函数为开发人员和客户提供了许多好处。

  • **成本效益高:**云提供商以基于消费的模型提供无服务器,仅对您使用的资源和函数收费。由于无服务器的无状态特性(如果容器未使用,它就会消失),因此不存在空闲时间。因此,您永远不会为闲置时间付费。这对成本效益产生了巨大的影响。
  • **可扩展性:**无服务器使您能够根据需要向上或向下扩展,因为它采用事件驱动的架构。如果需求增加,云提供商可以通过根据需要启动更多资源来实现扩展。他们为您运行和管理这些资源,以便您可以专注于发展。
  • **减少开销:**借助无服务器函数,云提供商承担了基础架构的管理和监控工作。这意味着您可以将管理成本和人力资源卸载给云提供商,并将您的资源重新分配给开发和部署。
  • **性能和可用性:**作为事件驱动的环境,无服务器提高了性能,因为它从不使用不必要的资源。这也意味着资源可以根据需要获得。云提供商使您能够通过在需要时启动服务器和容器来根据需要进行扩展,因此您永远不必担心服务器或存储可用性。
  • **开发人员生产力:**开发人员从无服务器函数中受益,因为云提供商承担了 DevOps 的运营部分。这使开发人员可以腾出时间专注于编写代码。无服务器环境通过在开发管道中实现 CI/CD 自动化来提高开发敏捷性和生产力。

无服务器计算的挑战是什么?

尽管无服务器计算具有成本效益和加速开发的明显优势,但它也面临着一系列挑战。一些无服务器计算的缺点包括

  • **供应商锁定:**无服务器的性质意味着您必须依赖单个云提供商进行代码部署。因此,开发人员被迫接受供应商提供的模型。提供商规定了资源使用情况,例如并发限制。由于这些原因,供应商锁定可能意味着缺乏灵活性。
  • **从代码角度进行监控和调试:**由于云提供商管理基础架构,因此您几乎无法了解运营的后端。因此,如果没有专用的无服务器监控工具,就很难监控无服务器环境。无服务器环境的事件驱动架构也意味着识别、重新创建和纠正错误可能是一项挑战。
  • **延迟:**由于无服务器环境中应用程序的无状态特性,当函数首次调用或长时间不活动后调用时,可能会发生延迟。延迟也可能由于超时或同时运行的函数过多而发生。在这种情况下,提供商可能会终止其中一个函数,从而导致故障。在用户端,这会导致延迟。
  • **有限的定制和控制:**由于无服务器提供商管理底层基础架构,因此对环境的定制和控制可能会受到限制,例如可用的运行时版本、内存分配和执行时间限制。
  • **安全问题:**虽然无服务器计算减少了攻击面,但它也可能引入新的安全风险。开发人员需要注意与第三方服务、函数级权限和应用程序代码中的漏洞相关的风险。
  • **无状态性:**无服务器函数是无状态的,这意味着它们在调用之间不保留任何数据。这可能会使管理应用程序状态变得困难,需要开发人员依赖外部存储或数据库来维护状态。
  • **成本可预测性:**尽管无服务器计算可以节省成本,但很难预测成本,因为成本取决于调用次数、内存和执行时间等因素。意外的使用高峰可能会导致成本增加。
  • **与现有系统的集成:**将无服务器函数与现有系统和架构集成可能具有挑战性,尤其是在处理遗留应用程序或复杂系统时。
  • **学习曲线:**采用无服务器计算需要开发人员学习新的概念、工具和最佳实践,这会增加开发过程的复杂性。

无服务器计算用例

无服务器计算提供的优势,包括可扩展性和减少的管理,使其非常适合多种用例。

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

使用 Elastic 探索可观察性

无服务器与传统架构

无服务器和传统架构之间的主要区别在于,贵公司的 IT 团队不运行或管理物理服务器。这被卸载到云提供商。

传统上,企业会使用裸机 (BM) 服务器来运行应用程序。这需要时间和资源来采购硬件,并需要物理位置来安装、供电和冷却。BM 需要安装、安装和配置硬件。IT 团队还承担着耗时的职责,例如配置代码部署环境、安装操作系统以及维护和管理服务器。

BM 服务器已经发展成为虚拟机 (VM)。公司仍然需要安装和配置硬件,但可以从多台机器在同一硬件上运行中获益。这意味着可以更好地利用计算资源。技术团队可以通过虚拟机管理程序部署多台服务器,并且与 BM 一样,团队必须安装操作系统并确保维护和管理。操作系统的安装通过使用虚拟机模板和自动化工具实现自动化。

容器是从虚拟机发展而来的。容器是允许应用程序在给定操作系统环境中运行的代码包,这使得它们具有可移植性。与虚拟机不同,容器都在相同的操作系统和容器运行时上运行,并且它们的计算资源在内核用户空间中划分。这极大地简化了这些服务的管理,因为需要管理的操作系统更少。容器通过 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 处理其无服务器函数。
  • 无状态:无状态是指应用程序、协议或进程的一种计算特性,它们独立处理操作。例如,无服务器计算本质上是无状态的,这意味着在调用之间不保留任何数据。