函数拆分

  1. 成本
    • 云函数的收费:调用次数公网流量占用资源时间(最贵)
  2. 复用
    • 组件化
  3. 性能
    • 对于非串行的功能,拆分成多个函数可以提高并发性

调用方式

同步、异步、编排(具有调度和管理的语义)

image-20240409121245256

同步

需要注意调用延迟超时带来的费用成本

直接调用

使用云厂商提供的 SDK,调用指定的函数,实现直接调用

1
2
3
4
5
6
7
8
import fc2
client = fc2.Client(
endpoint='<Your Endpoint>',
accessKeyID='<Your AccessKeyID>',
accessKeySecret='<Your AccessKeySecret>')

// 同步调用
client.invoke_function('service_name', 'function_name')

网关调用

  1. 通过 API 网关调用函数,借助 API 网关来达到限流等功能
  2. 两个功能模块之间的调用,可以选择网关调用,而业务内部的函数调用,选择直接调用

借助触发器

  1. 在 FaaS 平台构建好函数HTTP 触发器,在自身平台通过 HTTP 请求来使用函数计算

异步

直接异步调用

  1. 通过 SDK 调用,指定是否为异步调用
  2. 函数会立马返回,不会关心被调用函数的执行情况,由平台保证可靠地执行
  3. 优劣
    • 优点 - 增大并发 + 节省成本
    • 确定 - 不实时
1
2
// 异步调用函数。
client.invoke_function('service_name', 'function_name', headers = {'x-fc-invocation-type': 'Async'})

异步策略配置

  1. 云厂商让用户快速实现对函数的处理结果、异常等方面的再次处理而提供的能力
  2. 配置最大重试次数
  3. 依据成功或者失败,调用其它云函数、消息队列等

借助介质触发

函数计算 -> 胶水语言

image-20240410000327474

编排

Serverless 工作流适合用于解决复杂、执行流程长、有状态、多步骤的、并发聚合的业务流程

image-20240410000921150

  1. Serverless 工作流,可以通过顺序分支并行的方式来协调一个或多个分布式任务
    • 分布式任务可以是函数服务应用等形式
  2. 适用场景
    • 流程
    • 事务型业务流程
    • 并发型业务流程
    • 需要状态全链路检测的场景
      • Serverless 工作流配备了可观测、执行记录等可视化功能