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