FaaS - Trigger
事件
- 事件为系统
运行期间
发生的动作或者发生的事情,而函数计算,提供了一种事件驱动
的计算模型 CloudEvents
期望通过一种通用
的格式描述事件数据的规范,以提供跨服务、平台和系统的互操作性
- 国内云厂商的事件规范程度:在其中一家云产品上开发了函数,一般都需要进行简单的适配才能迁移
CNCF Serverless
工作组针对函数
和工作流
均定义了相关的格式规范
和原语
- 单函数的事件触发
- 多个简单函数通过
异步调用
的方式形成事件触发 - 复杂场景下通过
WorkFlow
来进行编排的事件交互
触发器
概述
- 由
事件驱动
连接上下游服务的关系组合
称为触发器 - 函数计算由
云函数
和触发器
组成 - 触发器描述了一组
关系
和规则
,包括核心要素:事件源
、目标函数
、触发条件
- 事件源:事件的生产者
- 目标函数:事件的处理者
- 触发条件:当触发条件满足时,就会通知函数计算引擎,调度对应的目标函数执行
- 触发器的
元数据
可以由服务方
持久存储,也可以由函数托管平台
和服务方
共同持有
类型
集成原则
区别:事件源和事件的规则
存储
在哪里,以及从哪里触发
单向
集成触发器双向
集成触发器代理
集成触发器
设计触发器的主要考虑:
事件源
和函数计算
的上下游关系
以及操作便捷度
调用方式
同步
调用- 触发事件被函数计算处理后直接返回结果
异步
调用- 触发事件请求函数计算后,函数计算服务返回一个
接收成功
的状态码,由函数计算来确保事件被可靠处理
- 触发事件请求函数计算后,函数计算服务返回一个
实现
通过监听 MinIO 的事件动作(MinIO 存储对象的创建、访问、删除)来触发函数计算的执行
- 用户在函数计算平台上对相关函数绑定
自定义触发器
,设定好事件源标识
- MinIO 发生动作,该动作关联唯一的 Bucket 下的一条路径,构成一次触发事件(
Event
) - 事件监听器(
Event Monitor Server
)作为 Deamon 进程持续运行,并捕获到该事件 - 事件监听器通过唯一标识(
Action + Bucket + Path
),从 MySQL 查询并获取相应的触发器(Trigger
) - 事件监听器对获取到的触发器进行逐个触发,对远端云函数进行触发调用
由 MinIO 作为
事件源服务方
通知触发云函数的执行,关系信息
存储在 MinIO,鉴权和规则
存储在函数计算平台
- 关系创建:确定具体的触发关系
- 规则创建:确保触发源按照既定规则进行触发
事件绑定(MinIO 作为事件源,函数计算平台作为处理方)
- 请求 MinIO 接口,创建一个
自定义的触发器配置
- MinIO 在接收到请求后,将
关系
存储在数据库中,并同步
通知函数计算平台,创建对应的规则
- 函数计算平台接收到 MinIO 的请求后,检查当前库中是否已经存在同样的规则
- 如果存在,则直接返回响应成功
- 如果不存在,记录规则,用于触发时校验,最后通知 MinIO 绑定成功
触发器的调用过程
- 用户操作 MinIO
- MinIO 事件监听器对触发的事件进行捕获
- 事件监听器从 MySQL 中获取匹配该事件的
触发关系
- 根据触发关系发起调用函数计算服务的请求
- 函数计算平台接收到请求后
- 进行
鉴权
和规则
的验证,并执行相应的函数处理 - 最后同步或者异步地返回结果
- 进行
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.