Coursera 笔记

Module 03 · Serverless Overview

Serverless Pros and Cons无服务器计算的优劣势对比

Coursera ↗

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 和容器并非互斥,它们在混合解决方案中表现最佳。