Coursera 笔记

Module 03 · Serverless Overview

Introduction to the FaaS Model功能即服务(FaaS)模型简介

Coursera ↗

什么是 FaaS?

FaaS (Function-as-a-Service,功能即服务) 是一种云计算服务类型,它允许您执行代码以响应事件,而无需处理通常与构建和启动微服务应用程序相关的复杂基础设施。

FaaS 的核心特征

FaaS 是 Serverless Computing 的一个子集,具有以下特点:

  • 应用创建: 以多个函数的形式创建应用程序,其中函数是使用任何编程语言编写的一段软件。
  • 部署环境: 可部署在混合云以及本地环境(on-premises environments)。
  • 状态管理: 它是无状态(stateless)的,但可以通过使用外部缓存来维护状态。
  • 性能与伸缩:
    • 函数在毫秒级执行。
    • 以并行方式处理单个请求,因此可以即时(instantaneously)伸缩。
  • 架构: 它是轻量级的,使用解耦架构机制。
  • 计费模式: 按运行函数所花费的时间计费,而不是按服务器实例大小计费。

FaaS 模型的益处与优势

使用 FaaS 模型可以实现以下优势:

  • 基础设施解耦: 您可以将服务器划分为可以自动且独立伸缩的函数,从而无需管理基础设施。
    • 这使得您可以专注于应用程序代码,从而缩短产品上市时间(time-to-market)。
  • 成本效益:这是 FaaS 模型的最大好处之一。
    • 您只在发生动作时付费。当动作完成后,一切停止运行——没有代码运行、没有服务器空闲,也就没有成本产生。
  • 即时伸缩性: 由于函数是无状态、小型且独立的代码片段,它们可以根据需要自动、独立、即时地进行伸缩。如果需求下降,它们也会自动缩减。
  • 高可用性(HA): FaaS 提供了固有的高可用性,因为它分布在多个区域和可用区,并且可以无需增量成本进行部署。

Serverless 堆栈的组成

一个 Serverless 堆栈由三个主要组件组成 :

  1. 功能即服务 (FaaS)
  2. 后端即服务 (BaaS)
  3. API 网关

Serverless 堆栈的工作流程

  1. 请求接收: 事件请求从不同渠道(如 HTTP 请求、来自 GitHub 或 Docker Hub 等仓库的 Webhook、以及计划作业)接收。
  2. API 网关: 这些请求通过 API 网关,网关识别并将它们转发给各自的函数(FaaS)。
  3. 函数处理: 函数处理这些请求。如果需要,请求会进一步导向 后端服务 (BaaS)(如文件和对象存储、块存储、通知服务等)进行进一步处理和/或存储。
  4. 响应返回: 输出或响应随后通过 FaaS 组件和 API 网关发送回客户端。

实际应用示例:图像处理

场景: 上传个人资料图片到网站,网站需要该图片的缩略图。

  1. 用户操作: 用户选择个人资料照片。
  2. 上传存储: 图像被上传到对象存储桶。
  3. 触发函数: 此事件触发一个 FaaS 函数(例如 IBM Cloud function)。
  4. 函数处理: 该函数处理原始照片并创建缩略图。
  5. 存储结果: 函数将缩略图图像存储回对象存储,供网站访问。

FaaS 的原则与最佳实践

  • 单一职责: FaaS 函数应设计为响应一个事件执行单一工作。
    • 确保您的代码范围有限、高效且轻量级,以便函数加载和执行迅速。
  • 函数隔离: FaaS 的价值在于函数的隔离。
    • 函数过多会增加您的成本,并消除函数隔离的价值。
  • 最小化依赖: 使用过多的第三方库可能会减慢函数的初始化速度,并使其更难伸缩。

FaaS 平台选择

市场上有许多 FaaS 平台可供选择。

托管 FaaS 平台(Managed FaaS Providers)

  • Amazon: AWS Lambda
  • Google: Google Cloud Functions
  • Microsoft: Azure Functions
  • IBM: Cloud Functions
  • Red Hat: OpenShift Cloud Functions
  • 其他: Netlify, Oracle, Twilio 等。

自我管理 FaaS 平台(Self-managed FaaS Choices)

如果您不想依赖第三方托管平台,还有许多自我管理的选择:

  • Fission: Kubernetes 上的无服务器功能框架。
  • Fn Project: 容器原生的无服务器平台。
  • Knative: 基于 Kubernetes 的平台,用于构建、部署和管理无服务器工作负载。
  • OpenFaaS: 允许您将任何 Linux 或 Windows 进程转换为函数。

总结

  • FaaS 是一种云计算服务,允许您在无需复杂基础设施的情况下,执行代码以响应事件。
  • FaaS 是 Serverless Computing 的子集,它以多个函数的形式创建应用程序。
  • FaaS 可部署在混合云和本地环境中。
  • FaaS 按函数运行时间计费,而不是按服务器实例大小计费。
  • 一个 Serverless 堆栈由 FaaS、BaaS 和 API 网关组成。
  • 市场上有多种托管和自我管理的 FaaS 平台可供选择。