事件

  1. 事件为系统运行期间发生的动作或者发生的事情,而函数计算,提供了一种事件驱动的计算模型
  2. CloudEvents 期望通过一种通用的格式描述事件数据的规范,以提供跨服务、平台和系统的互操作性
  3. 国内云厂商的事件规范程度:在其中一家云产品上开发了函数,一般都需要进行简单的适配才能迁移
  4. CNCF Serverless 工作组针对函数工作流均定义了相关的格式规范原语
    • 单函数的事件触发
    • 多个简单函数通过异步调用的方式形成事件触发
    • 复杂场景下通过 WorkFlow 来进行编排的事件交互

触发器

概述

  1. 事件驱动连接上下游服务的关系组合称为触发器
  2. 函数计算由云函数触发器组成
  3. 触发器描述了一组关系规则,包括核心要素:事件源目标函数触发条件
    • 事件源:事件的生产者
    • 目标函数:事件的处理者
    • 触发条件:当触发条件满足时,就会通知函数计算引擎,调度对应的目标函数执行
  4. 触发器的元数据可以由服务方持久存储,也可以由函数托管平台服务方共同持有

image-20240305124731256

类型

集成原则

区别:事件源和事件的规则存储在哪里,以及从哪里触发

  1. 单向集成触发器
  2. 双向集成触发器
  3. 代理集成触发器

设计触发器的主要考虑:事件源函数计算上下游关系以及操作便捷度

调用方式

  1. 同步调用
    • 触发事件被函数计算处理后直接返回结果
  2. 异步调用
    • 触发事件请求函数计算后,函数计算服务返回一个接收成功的状态码,由函数计算来确保事件被可靠处理

实现

通过监听 MinIO 的事件动作(MinIO 存储对象的创建、访问、删除)来触发函数计算的执行

image-20240315092652171

  1. 用户在函数计算平台上对相关函数绑定自定义触发器,设定好事件源标识
  2. MinIO 发生动作,该动作关联唯一的 Bucket 下的一条路径,构成一次触发事件(Event
  3. 事件监听器(Event Monitor Server)作为 Deamon 进程持续运行,并捕获到该事件
  4. 事件监听器通过唯一标识(Action + Bucket + Path),从 MySQL 查询并获取相应的触发器(Trigger
  5. 事件监听器对获取到的触发器进行逐个触发,对远端云函数进行触发调用

由 MinIO 作为事件源服务方通知触发云函数的执行,关系信息存储在 MinIO,鉴权和规则存储在函数计算平台

  1. 关系创建:确定具体的触发关系
  2. 规则创建:确保触发源按照既定规则进行触发

事件绑定(MinIO 作为事件源,函数计算平台作为处理方)

  1. 请求 MinIO 接口,创建一个自定义的触发器配置
  2. MinIO 在接收到请求后,将关系存储在数据库中,并同步通知函数计算平台,创建对应的规则
  3. 函数计算平台接收到 MinIO 的请求后,检查当前库中是否已经存在同样的规则
    • 如果存在,则直接返回响应成功
    • 如果不存在,记录规则,用于触发时校验,最后通知 MinIO 绑定成功

触发器的调用过程

  1. 用户操作 MinIO
  2. MinIO 事件监听器对触发的事件进行捕获
  3. 事件监听器从 MySQL 中获取匹配该事件的触发关系
  4. 根据触发关系发起调用函数计算服务的请求
  5. 函数计算平台接收到请求后
    • 进行鉴权规则的验证,并执行相应的函数处理
    • 最后同步或者异步地返回结果

image-20240315095944646