什么是无服务器计算?
无服务器定义
无服务器计算是一种云计算模型,它使开发人员能够在由云提供商管理并按需提供的服务器上构建和运行代码。 无服务器计算使开发人员摆脱了后端基础设施管理,并为公司提供了可扩展且灵活的环境。通过无服务器计算,云提供商通过根据需要向上或向下扩展来配置基础设施以满足需求,并通过执行任何例行维护、更新、修补和安全监控来管理基础设施。
无服务器计算并不意味着没有服务器参与。相反,无服务器意味着基础设施管理已外包给云提供商。这就是 无服务器监控的优点和挑战的原因。公司可以将资源集中在业务逻辑上,但代价是对后端发生的事情的控制和可见性降低。
无服务器与 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 中解放出来。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 作业:无服务器函数可用于计划任务并在特定时间间隔运行它们,例如夜间备份、报表生成或数据同步。
- 聊天机器人和虚拟助手:无服务器函数可用于创建处理和响应用户输入的聊天机器人或虚拟助手,并与消息传递平台和自然语言处理服务集成。
- 物联网数据处理:无服务器计算可以处理和分析物联网设备生成的数据,从而支持实时监控、异常检测和数据聚合。
无服务器架构与传统架构
无服务器架构与传统架构的主要区别在于,您公司的 IT 团队不运行或管理物理服务器。这被外包给了云提供商。
传统上,企业会使用裸机 (BM) 服务器来运行应用程序。这需要时间和资源来采购硬件和安装硬件的物理位置,为其供电和散热。BM 需要对硬件进行安装、安装和配置。IT 团队还承担配置代码部署环境、安装操作系统以及维护和管理服务器等耗时的责任。
BM 服务器已演变为虚拟机 (VM)。公司仍然必须安装和配置硬件,但可以受益于多个机器可以在同一硬件上运行的事实。这意味着可以更好地利用计算资源。技术团队可以通过虚拟机监控程序部署多个服务器,并且与 BM 一样,团队必须安装操作系统并确保维护和管理。操作系统的安装通过使用 VM 模板和自动化工具进行自动化。
容器是从虚拟机演变而来的。容器是代码包,允许应用程序在给定的操作系统环境中运行,从而使其具有可移植性。与虚拟机不同,容器都运行在相同的操作系统和容器运行时上,它们的计算资源在内核用户空间中进行划分。这大大简化了这些服务的管理,因为需要管理的操作系统更少。容器通过 Kubernetes 等平台实现自动化,这些平台提供了部署容器的灵活性,使其具有可移植性,并且可以根据需要轻松部署和销毁。
无服务器架构使 IT 团队能够专注于代码编写和部署,因为所有基础设施管理都已卸载到云提供商。
Elastic 的无服务器计算的未来
随着云技术的不断发展,无服务器计算也将不断发展。提供商已经开始通过添加部件来改进无服务器计算,使其方便用于通用业务工作负载。
关于无服务器技术的常见问题
什么是无服务器?
无服务器是一种云计算模型,其中云提供商负责配置和管理底层基础设施,以便客户端可以专注于前端开发。无服务器由 FaaS 和 BaaS 组成。这两项服务协同工作,提供一个灵活的环境,使开发人员能够快速部署代码。
无服务器计算的例子是什么?
终端用户正在浏览客户端的网站。通过这样做,他们与两个无服务器功能(BaaS 和 FaaS)进行交互。为了继续浏览,用户输入他们的信息。无服务器环境的 BaaS 部分执行用户身份验证。用户继续浏览网站并进行购买。这是一个事件。此事件由网关 API 处理,该 API 调用一个函数来发送收据电子邮件。为此,云提供商启动一个包含应用程序代码的容器并执行该任务。这就是 FaaS。
为什么叫无服务器?
无服务器是一个用词不当的说法,它描述了一种云计算环境,其中云提供商负责配置和管理运行客户端应用程序所需的服务器。客户端没有服务器——他们付费给云提供商使用他们的服务器。
无服务器术语表
- API 网关:应用程序编程接口 (API) 网关是一个通信链路,它读取请求并将其路由到后端服务。然后,它将后端数据转换为前端的用户。
- BaaS:后端即服务是一种云计算模型,它使用内置软件来提供用户身份验证或数据存储等服务。它是无服务器的一个子集。
- 云计算:云计算是指云环境原生的计算模型。在云中发生的任何类型的计算都被称为云计算。
- 云原生:云原生是指专门为云构建的任何应用程序或服务。它考虑了云环境的可扩展性和弹性。
- 冷启动:当函数第一次被调用或在一段时间不活动后被调用时,会发生冷启动。这是云提供商第一次启动容器来完成该函数。
- 容器:容器是轻量级、可移植且自给自足的代码包,其中包含它们的依赖项,允许它们在不同的计算环境中一致地运行。
- 事件驱动架构:事件驱动架构是一种软件架构模型,它使用事件(请求、状态更改、更新)来触发服务之间的通信。事件驱动是一种编程方法,而不是一种编程语言。
- FaaS:函数即服务是一种事件驱动的云计算模型,它允许开发人员构建和运行前端,而无需管理后端基础设施。
- 微服务:微服务是一种软件架构模型,其中软件被分解为单独的服务。这些服务通过 API 进行通信,从而实现开发灵活性。
- 多云:多云是指多个云,例如 Google Cloud、AWS 和 Microsoft Azure。大多数公司都是多云的,这意味着它们同时使用多个云提供商的服务。例如,一家公司使用 Google Office 套件进行电子邮件,并使用 AWS Lambda 进行无服务器功能。
- 无状态:无状态是指应用程序、协议或进程独立处理操作的计算特性。例如,无服务器计算本质上是无状态的,这意味着在调用之间不会保留数据。