Module 03 · Serverless Overview
Serverless Pros and Cons无服务器计算的优劣势对比
Serverless 计算的益处 (Pros)
Serverless Computing(无服务器计算)将大部分工作转交给云提供商,带来了诸多益处:
- 降低成本:云提供商管理基础设施,无需基础设施设置和维护,从而降低了成本。您只按请求次数付费(Pay-per-request),不为闲置资源付费。
- 高可用性与容错能力:云提供商确保了可靠性,内置高可用性(High Availability)和容错能力(Fault Tolerance)。
- 开发人员专注于业务逻辑:开发人员可以将精力集中在应用程序上,编写高质量的代码。
- 资源利用率高:应用仅在需要时运行部分功能,避免了资源浪费。例如,身份验证服务只在被调用时才启动。
- 快速运行时间:函数在毫秒级运行,远快于容器(秒级)或虚拟机(分钟级)。
- 开发便捷性:许多云提供商包含内置的 IDE(集成开发环境),加快了开发、部署和更新速度。
- 语言支持与生态:可以使用任何流行的编程语言进行开发;有大量的第三方支持可用于身份验证、数据库等后端服务。
- 加快上市速度:组织能专注于核心业务,比竞争对手更快地发布产品。
- 创新与实验:支持更多的创新和实验。
- 绿色计算:无需管理基础设施,实现了绿色计算(greener computing)。
Serverless 计算的局限性 (Cons)
Serverless Computing 并非适用于所有情况,存在以下限制:
- 成本效益受限:对于长时间运行的进程(long-running processes),按使用量付费的模式效益会降低,传统环境可能更具成本效益。
- 供应商锁定(Vendor Lock-in):对云提供商的技术和环境依赖,导致供应商锁定风险。
- 冷启动(Cold Start):如果函数在长时间间隔后收到请求,应用必须重启所有进程,这被称为冷启动,会增加函数运行时间。
- 延迟(Latency):Serverless 延迟对于时间关键型应用(time-critical applications),如银行、医疗保健或边缘应用是不可接受的。
- 安全与调试复杂性:
- 安全顾虑:攻击面从端点转向源代码,且受限于云提供商的安全实现。
- 监控与调试:在分布式系统中本就复杂;由于无法在本地系统模仿 BaaS 环境,测试完整功能和调试应用问题非常困难。
- 语言支持受限:语言支持取决于云提供商,您被限制在使用云提供商支持的语言。
- 无法优化服务器:由于对服务器没有控制权,无法进行利用率或性能优化。
- 无状态持久性:Serverless 是无状态的,前一次运行的状态在下次调用同一函数时不会保留。
- 解决方案:由于本地缓存仅持续数小时,最好包含 Redis 或 Memcached 等低延迟外部缓存。
Serverless、容器和传统计算对比
1. Serverless vs. 容器 (Containers)
💡 核心建议:先尝试 Serverless,如果需要,再转向容器。两者并非互斥,可以结合使用。
Serverless 的优势 / 容器的劣势


| 特性 | Serverless 优势 | 容器劣势 |
|---|---|---|
| 成本 | 更具成本效益(按用量付费)。 | |
| 可伸缩性 | 完全由云提供商处理。 | |
| 基础设施管理 | 云提供商管理所有基础设施。 | |
| 部署时间 | 毫秒级。 | 秒级。 |
| 上市速度 | 更快,组织可专注于核心业务。 |
容器的优势 / Serverless 的劣势


| 特性 | 容器优势 | Serverless 劣势 |
|---|---|---|
| 本地测试 | 在本地或云中更容易测试。 | 本地测试困难,特别是 BaaS 环境。 |
| 可移植性 | 更容易移植(OS、语言、提供商无关)。 | 供应商锁定风险。 |
| 延迟 | 延迟非常低,适合时间关键型工作负载。 | 冷启动和网络延迟可能不可接受。 |
| 运行时长 | 适合长时间运行的应用(无时间限制)。 | 不适合长时间运行(按次计费,成本可能增加)。 |
| 配置控制 | 可以配置应用和资源。 | 无法控制或优化服务器。 |
| 语言支持 | 支持任何语言。 | 语言支持依赖于云提供商。 |
2. Serverless vs. 传统计算 (Traditional Computing)
Serverless 的优势 / 传统计算的劣势

| 特性 | Serverless 优势 | 传统计算劣势 |
|---|---|---|
| 开发者焦点 | 开发者专注于编写高质量代码。 | Dev/Ops 团队需设置和维护整个基础设施。 |
| 成本 | 更具成本效益(按用量付费)。 | 成本高昂,且需资本投资。 |
| 可伸缩性 | 完全由云提供商处理。 | 需手动规划和实施伸缩性。 |
| 集成 | 应用程序内可获得库和集成。 |
传统计算的优势 / Serverless 的劣势

| 特性 | 传统计算优势 | Serverless 劣势 |
|---|---|---|
| 数据控制 | 数据完全在您的控制之下。 | 数据存储和持久性依赖 BaaS 服务。 |
| 网络 | 通过常规 IP 地址访问代码,无需设置私有 API。 | 需要配置 API。 |
| 安全性 | 只需在组织网络边界内实施安全。 | 攻击面增加,且安全依赖提供商。 |
| 供应商锁定 | 很少出现供应商锁定(Vendor lock-in)。 | 存在供应商锁定风险。 |
最终总结
- 传统计算需要您设置和维护基础设施。
- Serverless Computing 使开发团队能够专注于编写高质量代码。
- Serverless 提供了内置的高可用性和容错能力、更快的函数运行时间和按请求付费等优势。
- Serverless 的限制包括时间关键型应用的不可接受延迟、复杂的监控和调试以及无状态持久性。
- Serverless 和容器并非互斥,它们在混合解决方案中表现最佳。