尽管 PaaS 和无服务器计算均不需要开发人员进行后端管理,但有多个因素可以区分这两种模型,如可扩展性、定价和在网络边缘进行部署的能力等。
阅读本文后,您将能够:
复制文章链接
无服务器计算和平台即服务(PaaS)后端架构都使整个后端对开发人员不可见,因此有一定的相似性。但是,也有几个重要差别能区分这两种架构,而且大多数用例在其中一种用例中效果最佳,而不是两者皆一样。PaaS 与无服务器之间的主要差异在于可扩展性、定价、启动时间、工具,以及能否部署到网络边缘。
无服务器应用程序可以即时、自动和按需扩展,无需开发人员或供应商进行任何额外配置。它们天生可以扩展。相反,尽管开发人员可以对 PaaS 托管的应用程序进行编程,以根据用户需求进行扩展和收缩,但这并不是 PaaS 固有的功能,开发人员将必须进行一定数量的预测才能正确扩展。
无服务器计算可以比作从自来水管取水,其中水代表了计算能力。现代家庭中的自来水可以随时打开,并可以产生所需的水量。PaaS 更像是使用饮水机和桶装水送水服务。尽管仍然能获取所需数量的饮用水,但不如打开水龙头那样简便;一旦需求增加,消费者必须要求供应商提高供应量。这两种情况下都是由他人处理“后端”(将水净化,并送入建筑物等),但只有自来水可以精确、按需和实时增减数量。
无服务器架构能够通过按要求扩充应用程序功能的新实例来快速扩展。也可在不再需要时或运行了设定的时限后,通过关闭功能来快速缩减。实际上,无服务器 Web 应用程序能够一直缩减到无活动状态,然后在几秒或几毫秒内再次启动以响应事件。基于 PaaS 构建的应用程序无法以这样的速度或程度进行缩放。
继续以水作比喻,使用自来水的消费者依据确切用水量支付水费。同样,无服务器计费极为精确,开发人员仅支付实际使用量的费用。一些无服务器供应商只向开发人员收取其功能确切运行时长的费用,对于各项功能的每个单独实例可以精确到几分之一秒。其他提供商则按照请求数来收费。
使用饮水机和桶装水送水服务的消费者也只为实际用量付费,但以桶数而不是公升数来计费。同样,一些 PaaS 供应商只向开发人员收取其应用程序使用量的费用。但是,计费的准确性不如无服务器。其他 PaaS 供应商则为其服务收取固定的月费。开发人员通常能够自定义要付费的计算能力的大小。但是,这是事先决定的,不能实时响应使用量的增减。
这种差异并不一定意味着无服务器架构总是更加便宜。就像自来水管不断流水会迅速增加费用,如果 Web 应用程序的使用量持续较高并且波动不大,那么使用服务器计算来运行会变得非常昂贵。
如上所述,一旦有事件触发应用程序功能,无服务器应用程序几乎能在瞬间变为活动状态。PaaS 构建的应用程序可以快速启动和运行,但不如无服务器应用程序那样轻巧,而且需要更长的时间才能启动和运行。为了避免用户角度的延迟,PaaS 应用程序必须至少有某些功能在大多数时间或一直保持运行。
一般而言,PaaS 供应商会为开发人员提供更多工具来构建和管理其应用程序,包括用于测试和调试的工具。无服务器应用程序不会在指定的机器上运行(不论是虚拟机还是其他类型),并且无服务器功能无论如何都应以相同状态运行,因此无服务器供应商可能会提供一些工具,但不会提供用于构建和测试应用程序的完整环境。
无服务器代码不会在特定的服务器上运行,可以在互联网的任何部分上的任意位置上运行;因此,无服务器应用程序可以部署到网络边缘非常靠近最终用户的位置,从而大大减少延迟。例如,Service Workers 和 Cloudflare Workers 就是在用户附近运行的服务器功能(请参阅无服务器 JavaScript 如何工作?)。
从开发人员的角度来看,PaaS 中没有服务器。但是,就代码的托管位置而言,PaaS 与无服务器计算依然不同。PaaS 供应商要么利用其他供应商的 IaaS(基础设施即服务)产品,要么拥有自己的物理数据中心。这样的结果是,在云平台上构建的应用程序有可能仅在某些指定的机器上运行,导致开发人员无法通过在边缘运行代码来优化其应用程序的性能。