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.














