什么是无服务架构?
无服务器架构是一种基于云的方法,它使开发人员能够部署代码,而无需担心基础设施。
它通过抽象化部署的复杂性,通常由第三方云提供商为您管理底层硬件和软件。
本篇文章将对无服务器的含义、其在开发实践中的作用以及一些实际应用进行高级别的概述。
无服务器架构说明
关于无服务器架构的一个常见误解是应用程序不使用服务器。事实并非如此。因为基础设施由云提供商管理,所以单个服务器的概念被取消了。
把它想象成把数据存储在云端而不是电脑上;数据仍然存储在物理硬件上,只是不是你自己的。
无服务器是指与您合作的云服务提供商代表您运行物理服务器并分配资源。代码运行的方式和地点则从您这里抽象出来,由云提供商处理。
无服务器架构可大大缩短产品上市时间,因为您只需花费更少的时间建立基础设施,而更多的时间则用于构建。
无服务器架构和微服务有时也会被混为一谈,虽然微服务通常采用无服务器方法进行部署,但并不要求它们必须是无服务器的。
DevOps 团队喜欢采用无服务器架构,因为无服务器架构通常还支持自动扩展。当您的应用程序收到大量流量时,系统会自动扩展以满足需求。
当需求下降时,系统会自动缩小规模,并可完全停止运行,从而在闲置时节省大量成本。
相比之下,采用传统方法时,您必须预先部署所有基础设施,这需要付出经济和时间成本。此外,这还需要专家。这种不灵活性意味着,即使在不使用的情况下,您也要为始终运行的基础设施付费。
无服务器架构如何运行?
无服务器架构的核心是允许在云中执行系统,而无需管理底层基础设施。这可以是一个完整的后端系统,例如,一个您可以连接并运行查询的数据库,其中的硬件由您代为管理。
无服务器计算与功能即服务(FaaS)相辅相成,后者是指在云中部署和执行一个独立的代码片段。最流行的 FaaS 是亚马逊的 AWS Lambda 或微软的 Azure functions。
无服务器功能是由事件驱动的,从网站到物联网和智能家居设备,任何事物都可以触发它。每个事件都会启动对函数的调用,而函数则在后台提供基础设施并运行代码。
配置基础设施所需的时间称为 “冷启动”。
在无服务器架构中,您只需为所使用的服务付费。
例如,您想创建一个应用程序接口。传统上,这需要在一个 API 网关后面的服务器上运行 API,该 API 网关将始终运行并接受请求。与此同时,如果使用无服务器架构运行相同的应用程序接口,则每个组件都将作为单独的功能部署。
每次有人提出请求,提供商都会按需向您收取处理该请求的特定代码的执行费用。
从开发人员的角度来看,无服务器架构和无服务器功能意味着将复杂的问题分解成可以单独部署的较小的业务逻辑单元。这让团队和个人可以并行工作。
无服务器架构的优势
使用无服务器架构有几个好处。其中最重要的三点包括无故障扩展能力、降低成本和易用性。让我们逐一详细探讨。
降低成本
如前所述,对于传统架构,您需要预先考虑最大负载。只有当您的应用程序接口持续处于负载状态时,这种方法才具有成本效益。
但是,如果您的应用程序接口很少被调用,您就可以通过自动缩放降低成本。
易于使用
无服务器架构能让开发人员的生活更轻松,因为您可以专注于业务需求,而不必担心基础设施。
此外,任何基础架构配置都与代码一起存储在配置文件中,从而简化了部署,并让其他开发人员了解他们的代码是如何运行的。
无服务器架构的挑战
无服务器架构会带来一些挑战。让我们来探讨几个问题。
安全风险
由于没有基础设施需要管理,安全风险与传统应用不同。如果配置不当,无服务器功能很容易受到拒绝服务攻击。
这是因为攻击者可以利用自动可扩展性,多次调用该功能,让你支付大笔账单。
供应商锁定
无服务器和云计算的好处在于,您不必亲自管理基础设施。不过,这样做的代价是与第三方云计算提供商紧密相连。
这限制了您从一个提供商转移到另一个提供商的能力,因为许多无服务器工具都是为云供应商定制的。
幸运的是,供应商们正联合起来,在WinterGC中解决这一缺陷,力求创建一个更统一的 API 表面,让所有 JavaScript 开发人员都能使用,而不受运行时的限制。
运行时间受限和冷启动
无服务器功能的运行时间通常有限制。大多数情况下,上限为 10 到 15 分钟。这使得它们不适合长时间运行的任务。
此外,如果无服务器功能没有定期保持激活状态,它们可能会被取消配置,从而需要再次冷启动。如果在取消配置后收到请求,获得响应所需的时间就是通常的时间加上冷启动时间。这会对延迟和性能造成影响。
并行处理
当函数被多次并行调用时,可能会导致节流。您的基础架构可能无法再为请求提供服务,也无法从故障状态中恢复。
无服务器使用案例
从智能家居设备到聊天机器人,无服务器架构有很多使用案例。本节重点介绍几种使用案例。
以下所有用例都非常适合无服务器架构,因为它们都遵循事件、操作和扩展流程。在执行孤立的操作之前,它们都以触发事件(功能的入口点)开始。
当每个用例的需求增加时,就可以通过运行更多的功能实例来轻松扩展,以满足需求。
自动扩展网站和应用程序接口
利用无服务器应用程序,您可以根据需要启动网站或应用程序接口功能的任意多个实例,并在网络流量减弱时立即缩小规模。
您只需为云提供商提供的服务付费,从而最大限度地减少对服务器负担过重和崩溃的担忧,并为最终用户提供更加一致的体验。
多媒体处理
云服务的强大功能使您能够整合媒体处理功能。
例如,如果贵组织允许使用信用卡支付,则可以集成实时图像识别 API,让客户上传信用卡照片并立即提取其信息。
总结
无服务器架构减轻了开发团队的基础设施工作量,让他们有更多时间改进和完善用户体验。
这种架构还能降低成本,因为您只需支付实际运行时间的费用,而且由于云提供商能够启动同一进程的多个实例来满足需求,因此几乎可以实现无限扩展。