在构建应用时,开发者通常需要执行许多其他服务器管理任务才能部署代码,例如定义处理和存储资源、修补、负载均衡等。所有这些额外内容都会导致预配时间较长,增加运营开销,最终降低开发团队的工作效率。
无服务器计算旨在为开发者提供不可见的“无服务器”体验,让开发者无需考虑服务器或应用可能需要运行的任何内容。服务提供商会在后台完成所有工作,确保您有足够的资源来执行代码并满足相关要求,而无需为闲置容量付费。
您可以将无服务器想像成给您家供水。您可以自己钻井,测试水质,安装并维护将水引入房屋所需的所有外部管道。或者,您也可以连接自己城市的主要供水系统。只需转动水龙头,即可随时按需获取所需水量,供水公司每月都会向您发送确切的用水量账单。
同样,云服务提供商会自动启动执行无服务器应用所需的基础设施资源和运行时环境,并在执行完毕后自动缩减至零。通常,您需要根据执行期间的资源付费。但是,这可能因服务和供应商而异。
但是,其他类型的云计算不是以随用随付的方式提供按需资源吗?诚然,基础设施即服务 (IaaS) 和平台即服务 (PaaS) 等云服务模式也支持用户按需访问计算资源。
不过,即使您未使用,分配给您的云基础设施仍会保持启用状态。您还要负责扩缩服务器容量,或者配置您的应用以根据用户需求进行扩缩。
另一方面,无服务器架构是由事件驱动的。在这种模式下,提供商仅在事件触发代码运行时才向您提供资源,并且会根据请求即时自动扩缩。
在无服务器云计算中,通常有两种类型的服务:函数即服务 (FaaS) 和后端即服务 (BaaS)。
FaaS 提供执行应用逻辑以响应请求所需的计算资源。这些逻辑片段(或函数)在完全由云服务提供商管理的容器中运行。无服务器应用通常拆分为单个函数,执行一项操作来响应某个事件。
BaaS 提供 Web 应用或移动应用即服务的完整后端功能,例如身份验证服务、数据库管理、云端存储、推送通知和托管。有了 BaaS,您再也无需管理服务器、容器或虚拟机。
在开发阶段,“无服务器”这一术语通常用于描述 FaaS 产品。但请务必注意,从技术上讲,FaaS 是无服务器技术的一部分。无服务器计算包括任何类型的服务,这些服务无需最终用户管理服务器、配置、扩缩和结算。可能包括数据库、存储、事件流、消息传递和 API 网关。
一般情况下,无服务器计算仍然主要用于简单的短期任务。最常见的一些无服务器计算示例包括:
采用无服务器技术的开发者专注于编写代码和优化业务逻辑,而无需担心预配、管理或扩缩基础设施。
无服务器架构本身可以扩缩。与其他类型的云计算中需要微调规则的自动扩缩不同,无服务器自动扩缩是即时的,并且可以缩小到零。
无服务器价格模式通常根据实际用量和执行函数所需的时间收费。您也无需为空闲容量付费,这有助于降低运行和管理您自己的服务器所产生的运营成本。
借助无服务器技术,DevOps 团队无需花费时间来定义集成、测试、交付或部署代码所需的任何基础设施。只需编写代码并将其部署到生产环境中即可。
无服务器环境支持任何语言或框架,让团队能够以他们最熟悉的语言或使用框架(Go、Python、Java、Node.js、.NET 等)进行开发。
无服务器计算的最大缺点之一是它仍然是一项相对较新的技术。因此,它尚不适合所有潜在用例。
此外,无服务器的短暂性质及其缩减至零的能力使其不适合某些类型的应用。它并非用于长时间执行代码,并且无法始终为具有严格低延迟要求的应用提供服务,例如金融服务应用。
最后但同样重要的一点是,将对所有计算资源的管理工作移交给第三方提供商的优势可能也会带来一些不利因素。虽然这样可以腾出时间来专注于编写代码,但迁移到新的云服务提供商可能也会非常困难。此外,您也无法了解自己的服务的运行位置或方式,并且对扩缩方式、运行何种类型的硬件代码以及灾难恢复情况的控制也有限。
尽管如此,无服务器计算仍有很多值得期待的方面,尤其是对于那些希望帮助开发者提高工作效率并寻找更简单、更经济高效的方式来构建云端应用的组织。
此外,随着无服务器计算的不断发展,当前存在的一些弱点也将逐渐得到解决。特别是,在无服务器的开源实现方面做了大量工作,并寻找方法来使云服务更加开放,使解决方案可移植到不同的平台和环境。