为初学者了解无服务器计算

深入解析:无服务器计算的奥秘

当我们谈论“无服务器”计算时,许多人可能会误以为这种模式下完全不存在服务器来支持代码运行和其他开发任务。这其实是一种对概念的常见误解。

那么,在澄清了这个误解之后,你可能会好奇,“无服务器”这个名称背后的逻辑究竟是什么?

其实,“无服务器”的关键在于服务器的管理方式,而非真的“无服务器”。换句话说,虽然服务器依然存在,但其管理和维护则由云服务提供商负责,而非用户或开发者。

听起来有些复杂吗?

没关系,接下来我们将深入探讨无服务器的各个方面,并解释相关的专业术语,以消除你心中的疑惑。值得一提的是,无服务器技术正日益普及。据估计,无服务器市场规模到 2021 年将达到 77 亿美元,而 2016 年仅为 19 亿美元。

接下来,让我们一起详细了解无服务器,并探究其日益流行的原因。

什么是无服务器计算?

无服务器计算,或者称为serverless计算,是一种基于云的执行模式。在这种模式下,云服务提供商会按需提供计算资源,并且由他们而非客户或开发者来管理服务器。它结合了服务、策略和实践,旨在让开发者专注于代码逻辑,而不是服务器管理,从而简化云应用的构建过程。

从资源分配、容量规划、管理、配置、扩展,到补丁、更新、调度和维护,云服务提供商,如AWS或谷歌云平台,承担了管理常见基础设施的全部责任。这样,开发人员就可以将时间和精力投入到业务逻辑和应用程序的核心功能上。

这种无服务器计算架构不将计算资源存储在易失性内存中。相反,计算发生在非常短暂的时间片段内。这意味着,如果某个应用没有被使用,就不会为其分配任何资源。因此,你只需为实际使用的资源付费。

创建无服务器模型的主要目的在于简化代码部署流程。它也适用于微服务等传统架构。一旦部署完成,无服务器应用程序会根据需求自动扩展或收缩,快速响应用户请求。

无服务器计算采用事件驱动模型来确定扩展需求。因此,开发人员无需预测应用程序的使用情况来决定需要多少服务器或带宽。他们可以根据不断增长的需求申请更多的服务器和带宽,且无需提前预定。同时,也可以随时轻松缩减资源。

无服务器是如何发展起来的?

传统的系统在应用程序的开发和部署过程中,面临着与可扩展性和灵活性相关的挑战。随着对高质量应用程序以及快速上市时间的需求不断增长,对能够提供更高可扩展性和灵活性的系统的需求也应运而生,从而推动了云计算和无服务器模型的发展。

无服务器模型经历了不同的发展阶段,从单体服务到微服务,再到无服务器架构或函数即服务(FaaS)。

  • 单体架构是一种传统的软件开发方式。它是一个紧密耦合的模型,每个组件及其子组件共同编译或执行代码。如果某个服务出现故障,整个应用程序服务器及其运行的服务都可能崩溃。
  • 微服务架构是大型应用程序中独立部署的服务集合,每个服务负责执行特定功能。它支持快速大规模的应用程序交付,为开发人员提供了使用基础设施即服务(IaaS)和平台即服务(PaaS)的灵活性。然而,在这个模型中,如何选择PaaS和IaaS仍然是一个挑战。
  • 无服务器架构随着云计算的发展而兴起,提供了更高的可扩展性和业务敏捷性。它不使用IaaS和PaaS,而是采用FaaS和后端即服务(BaaS)。在这里,应用程序及其资源会根据需要部署。你无需管理服务器,并且在代码执行完毕后即可停止付费。

无服务器计算的特性

无服务器计算具有以下一些关键特性:

  • 大多数使用无服务器的应用程序都包含单一功能和小型代码单元。
  • 它仅按需运行代码,通常在无状态软件容器中,并根据需求进行无缝扩展。
  • 客户无需进行服务器管理。
  • 它具有基于事件的执行功能,一旦触发功能或收到执行请求的事件,就会创建一个计算环境。
  • 其扩展性非常灵活,可以轻松向上或向下扩展。一旦代码执行完毕,基础设施就会停止运行,从而节省成本。 同样,当函数持续运行时,可以根据需要无限放大。
  • 你可以使用托管的云服务来处理复杂任务,例如文件存储、队列、数据库等。

无服务器如何运作?

无服务器架构结合了两个核心理念:函数即服务(FaaS)和后端即服务(BaaS)。它更多地依赖于FaaS,FaaS允许云服务在不需要完全配置的实例的情况下执行代码。FaaS由云服务完全管理的无状态、事件驱动、可扩展的服务器端功能组成。

该模型让DevOps团队能够专注于编写业务逻辑代码。然后,他们定义一个可以触发函数的事件,例如HTTP请求,用于执行。云提供商执行该功能,并将结果发送到用户可以访问的应用程序。

因此,无服务器模型通过自动扩展、按需和即用即付的方式,提供了成本效益和便利性。这也是如今许多企业和DevOps团队转向无服务器的原因。

谁在使用无服务器?为什么要用?

无服务器是软件开发中一项新兴的技术,它消除了对未来基础设施管理和配置的需求。

它适用于:

  • 需要更高的可扩展性、灵活性以及更好的应用可测试性的组织。
  • 希望通过构建敏捷和高性能应用程序来缩短上市时间的开发人员。
  • 不需要服务器持续运行的公司。他们可以在需要时调用基于模块化的功能,从而节省成本。
  • 希望构建高效的云应用程序并简化云迁移的组织。
  • 寻找减少延迟、让用户更快访问某些功能或应用程序的开发人员。
  • 没有足够资源来处理IT基础设施维护和复杂性的公司,可以使用无服务器计算来自动化解决问题,无需自身维护。

一些著名的无服务器用户包括Slack、可口可乐、Netflix等。

由于其独特的特性,无服务器模型适用于各种场景,例如:

  • Web应用程序:你可以利用这种能够快速响应用户需求的模型来构建快速且可扩展的Web应用程序。它特别适合构建可以立即启动的无状态应用程序,以及可以满足不可预测且不频繁的用户需求高峰的应用程序。
  • API后端:在无服务器平台中,任何功能都可以轻松转换为HTTP端点,以供客户端使用。这些功能或操作在网络上启用时称为网络操作。一旦启用这些功能,将它们组装成一个完善的API就变得很容易。你还可以使用专业的API网关来实现更多的安全性、域名支持、速率限制和OAuth支持。
  • 微服务:无服务器广泛用于微服务模型,该模型专注于构建能够执行单一功能并使用API相互通信的小型服务。虽然可以使用软件容器和PaaS创建微服务,但无服务器效率更高。它有助于减少代码行,并提供快速配置、自动扩展和灵活的定价机制,在资源未使用时不会向客户收费。
  • 数据处理:无服务器非常适合处理包含视频、音频、图像和结构化文本的数据。它还适用于各种任务,如数据验证、转换、丰富、清理、音频标准化和PDF处理。你可以利用它进行图像处理,包括锐化、旋转、缩略图生成、降噪等。无服务器在数据处理中的其他应用还包括视频转码和光学字符识别(OCR)。
  • 流/批处理:你可以使用FaaS和Apache Kafka数据库创建强大的流应用程序和数据管道。无服务器模型适用于不同的流摄取场景,包括应用程序日志、物联网传感器、业务逻辑和金融市场数据。
  • 并行计算:无服务器非常适合与并行计算相关的任务,其中每个任务并行运行以执行特定操作。这可能包括数据搜索、处理、地图操作、网络抓取、基因组处理、超参数调整等。
  • 其他用途:无服务器还用于各种应用程序,如客户关系管理(CRM)、财务、聊天机器人以及商业智能和分析等。

注意:在某些情况下,无服务器可能不是理想的选择。例如,具有可预测和近乎恒定工作负载的大型应用程序可能从传统的系统架构中获益更多。他们可以选择托管或自行管理的专用服务器。此外,如果你的组织对遗留系统和应用程序进行了全面的传统设置,那么迁移到全新的不同架构可能成本高昂且具有挑战性。

无服务器计算的优缺点

任何事物都有两面性,无服务器架构也不例外。根据不同的角度,它既有优点也有缺点。因此,在做出决定之前,理解正反两方面的因素至关重要。

优势👍

以下是无服务器架构的一些优点:

成本效益

与购买或租用服务器相比,无服务器可以提供更高的成本效益。即使你不使用服务器,也需要为其资源付费。

无服务器采用按需付费模式,你只需为使用的资源付费。无服务器提供商只会对分配的内存和代码运行时间收费,而不会收取空闲时间费用。

因此,你将节省安装、许可、维护、修补和支持等任务的运营成本。由于无需管理硬件,你还可以节省人力成本。

可扩展性

无服务器系统提供了很高的可扩展性,你可以根据需要随时向上或向下扩展。因此,它们也被称为“弹性”系统。

开发人员无需专门花费时间来设置自动缩放系统或策略,也无需调整它们。你选择的云提供商会负责管理这些。此外,小型团队的开发人员也可以独立运行代码,无需依赖支持工程师或基础设施。

减少延迟

由于应用程序不托管在单个源服务器上,因此你可以从任何位置运行代码。如果你的云提供商支持,你可以在靠近最终用户的服务器上运行应用程序功能。因此,由于用户请求和服务器之间的距离缩短,延迟也会降低。

生产力

无服务器模型有助于提高开发人员的工作效率,因为他们无需处理服务器管理。此外,他们也不必直接在代码中处理HTTP请求或多线程。

这简化了后端开发,这归功于FaaS,其中暴露的代码是事件驱动的函数。所有这些都节省了开发人员的时间,他们可以将这些时间用于改进代码和应用程序。

更快的应用程序部署

使用无服务器,开发人员无需执行后端配置或将代码上传到服务器即可部署应用程序版本。他们还可以快速上传代码以发布新产品。

他们还可以灵活地一次部署代码或逐个部署,因为这不是一个单一的架构。此外,你可以快速修补、更新、添加功能或修复应用程序中的错误。

其他优点还包括:因按需服务器而降低能源消耗带来的绿色计算,通过内置集成更轻松地构建应用程序,以及更快的上市时间等等。

缺点👎

现在,让我们来看看无服务器计算的一些缺点:

性能

有时,与在专用服务器、软件容器或虚拟机(VM)上持续运行的代码相比,使用频率较低的无服务器代码可能会表现出更高的响应延迟。这是因为代码可能需要更多时间来重新启动,从而产生额外的延迟。

难以调试和测试

你需要了解代码在部署后的执行情况。为此,你需要在无服务器环境中对其进行测试,这具有挑战性。此外,由于开发人员无法看到每个后端进程,并且应用程序被分解为更小的功能,因此调试会变得更加复杂。

安全问题

新的和高级的网络安全问题正在不断增加。然而,我们无法完全了解或评估云提供商的安全性。因此,当他们使用存储在应用程序中的敏感数据来处理你的整个后端时,可能存在风险。

不适用于长时间运行的应用程序进程

无服务器具有成本效益,但并非适用于所有类型的应用程序。如果你的应用程序有长时间运行的进程,那么根据时间和分配的资源运行它的成本可能会非常高。此时,你可能需要选择继续使用专用服务器托管。

无服务器的其他缺点包括难以从一个供应商切换到另一个供应商以及隐私问题。

无服务器架构中的重要术语

不讨论一些关键术语,对无服务器的理解是不完整的。FaaS和BaaS是推动无服务器发展的两个最核心的概念。要构建一个无服务器系统,你还需要数据库、存储系统、技术堆栈、框架等等。接下来,我们将详细介绍它们。

函数即服务 (FaaS)

FaaS是无服务器的核心理念,其工作方式与其子集类似。这种事件驱动的代码执行模型(响应请求运行的应用程序)允许你编写部署在软件容器中的逻辑,按需执行,并由云平台管理。

与BaaS相比,FaaS为开发人员提供了更多创建自定义应用程序的控制权,而不需要依赖包含预制代码的库。

用于部署代码的软件容器是无状态的,以简化数据集成,并减少代码运行时间。此外,开发人员可以使用由云提供商通过API网关管理的FaaS,通过API调用无服务器应用程序。

后端即服务 (BaaS)

BaaS与FaaS类似,都需要第三方服务提供商。在这种模型中,云提供商会提供数据存储等后端服务,以帮助开发人员专注于编写前端代码。然而,BaaS应用程序可能不像无服务器应用程序那样是事件驱动的或在边缘运行的。

AWS Lambda是BaaS的一个典型例子。开发人员可以使用带有Lambda的容器来部署无服务器代码,Lambda提供了提交代码时需要遵循的指南。它还自动化了将代码输入软件容器的过程,并提供托管服务。

无服务器堆栈

与其他软件技术一样,无服务器架构也带有技术堆栈。它汇集了创建无服务器系统或应用程序所必需的各种组件。

无服务器堆栈包括:

  • 编程语言:开发人员用于编写代码的编程语言。 根据供应商的不同,你可以选择Java、JavaScript、Python、C#、Go、Node.js、F#等。
  • 无服务器框架:框架为代码提供了骨架或结构。有很多无服务器框架可供选择。它支持构建、打包和编译代码,最终进行云部署。无服务器框架加快了编码过程,并通过减少配置时间简化了扩展。无服务器框架的例子有Apex、AWS无服务器应用程序模型等。
  • 无服务器数据库:它们用于存储代码需要访问的数据。它们还需要与触发器的功能进行交互。这些数据库的行为类似于无服务器函数,但会无限期地存储数据。无服务器数据库的例子包括DynamoDB、Azure Cosmos DB、Aurora Serverless和Cloud Firestore。
  • 一组触发器:它们帮助启动代码执行,例如HTTP请求。
  • 软件容器:它们支持无服务器模型,并提供无需复杂性的容器化微服务。它们还可以用作代码的存储库,并在为桌面或iOS等多个平台编写代码时简化开发人员的工作。
  • API网关:它们充当网络操作的代理。它们提供HTTP路由、速率限制、查看API使用情况和响应日志、客户端ID等功能。

如何实现和优化无服务器模型?

转向无服务器会对你的应用程序、技术、成本、安全性和收益产生重大影响。

如果你是一家初创企业或小型企业,它可以缩短你的上市时间,并通过简化的测试、调试、收集反馈和处理问题等,帮助你快速推送更新,为用户提供完善的应用程序。

如果你是一个更大的组织,你将会体验到更多的好处,例如更大的可扩展性来满足用户需求,但这需要大量的成本投入。

因此,在开始之前,最好根据你的业务类型和需求,仔细评估无服务器的优缺点。如果你已经做好准备,请从以下几点开始:

  • 了解你的需求,并确定合适的无服务器技术堆栈。
  • 选择合适的无服务器供应商,如Google Cloud Functions、Azure Functions、AWS Lambda等。
  • 为你的团队提供强大的工具来监控系统性能和功能。关注请求总数、限制、错误计数、成功率、请求持续时间和延迟。

无服务器供应商

市场上有很多无服务器供应商或云提供商可供选择。以下是一些最主要的:

  • AWS Lambda:如果你已经在使用AWS服务,它是一个理想的选择。它集成了广泛的存储、流媒体和数据库服务。
  • Microsoft Azure Functions:如果你使用Visual Studio Code,可以考虑它。它可以与用于CI/CD的DevOps和Azure Pipelines无缝协作。它还支持用于有状态功能的持久功能,并提供集成的监控功能。
  • Google Cloud Functions:如果你正在使用Google服务,这是一个不错的选择。它支持JS、Go和Python应用程序,支持从Google Assistant或GCP触发功能,并提供内置的缩放功能。
  • IBM Cloud Functions:如果你想采用基于Apache OpenWhisk的无服务器模型,那么IBM Cloud Functions是一个理想的选择。它包括出色的性能监控,支持来自REST API或IBM云服务的事件触发,并与IBM的API网关集成以管理端点。
  • Knative:如果你在Kubernetes上运行服务,它是一个很好的选择。它得到了谷歌、红帽、IBM等公司的支持。
  • Cloudflare Workers:适用于需要高响应能力的应用程序,尤其是JavaScript应用程序。它支持用于数据存储的Workers KV,并支持用于编译和交付多种语言的WebAssembly。此外,它拥有由193个数据中心组成的分布式网络,能够改善延迟和响应能力。

结论:无服务器的未来

随着对高度可扩展应用程序的需求不断增长,无服务器计算也在不断发展。它还提供了云计算的许多优点,例如更便捷、更具成本效益、更高的生产力等等。

根据一项奥莱利调查,40%的受访者在采用无服务器架构的公司工作。

尽管无服务器仍然存在一些问题,例如冷启动、测试和调试等导致的延迟,但云提供商正在努力解决这些问题。很快,一种更完善的无服务器形式可能会出现,带来更多的好处并解决问题。因此,无服务器模型的普及和应用预计在未来会持续增长。

你可能还对以下内容感兴趣:无服务器计算成为新兴技术的 7 种方式