Serverless 计算与传统基于服务器的模型的主要区别在于基础设施的管理方式、应用程序的扩展方式以及成本的结构方式。在传统设置中,开发人员需要配置和维护服务器(物理机或虚拟机)来托管应用程序。这包括配置操作系统、应用安全补丁以及通过手动或自动扩展规则来管理可伸缩性等任务。例如,在 AWS EC2 实例上运行 Web 应用程序需要设置服务器、安装依赖项以及处理负载均衡。Serverless 将这种责任转移到云提供商:开发人员编写代码(通常是单用途函数),这些代码会响应事件运行,而提供商管理底层基础设施。例如,AWS Lambda 会在函数被触发时(例如,通过 HTTP 请求)自动配置资源,并在空闲时关闭它们,从而无需直接管理服务器。
在运营上,Serverless 降低了开销,但引入了权衡。传统模型需要持续的资源分配——例如,即使在流量较低的时期,也要 24/7 支付 EC2 实例的费用。Serverless 遵循按执行付费的模型,其中成本与请求数量和计算时间相关联(例如,每百万个 Lambda 请求支付 0.20 美元,外加每 GB-秒内存使用量支付 0.00001667 美元)。对于零星的工作负载,这可以节省成本,但大规模使用时可能会变得昂贵。此外,Serverless 平台会强制执行限制,例如最大执行时长(例如,Lambda 为 15 分钟),这使得它们不适合长时间运行的任务。传统的服务器在这方面提供了更大的灵活性,因为开发人员可以控制运行时环境,并且可以托管需要持久存储的有状态应用程序(例如,数据库),而 Serverless 通常会避免这些,而是采用无状态、事件驱动的设计。
用例进一步突出了两者之间的差异。Serverless 非常适合事件驱动的工作负载,例如处理文件上传、处理 API 请求或运行计划任务(例如,将图像上传到 S3 时调整图像大小的函数)。传统的服务器更适合具有稳定流量、低延迟要求(避免 Serverless “冷启动”)或需要完全环境控制的复杂架构的应用程序(例如,具有特定依赖项的自定义软件)。例如,高流量的电子商务网站可能会使用 EC2 实例来构建其结账系统,以保持一致的性能,同时使用 Lambda 处理辅助任务,例如发送订单确认电子邮件。两者之间的选择取决于工作负载模式、成本考虑因素以及对基础设施控制与运营简便性的需求。