进一步了解Trigger

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: Trigger实际上就是触发器的意思。触发器是触发函数执行的方式,在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者,而触发器提供了一种集中、统一的方式来管理不同的事件源。在事件源中,当事件发生时,如果满足触发器定义的规则,事件源会自动调用触发器所对应的函数。

Trigger实际上就是触发器的意思。触发器是触发函数执行的方式,在事件驱动的计算模型中,事件源是事件的生产者,函数是事件的处理者,而触发器提供了一种集中、统一的方式来管理不同的事件源。在事件源中,当事件发生时,如果满足触发器定义的规则,事件源会自动调用触发器所对应的函数。

不同云厂商中都会根据自己的业务纬度,为FaaS平台提供多种类的触发器,这其中比较常见的触发器包括API网关触发器,对象存储触发器,定时触发器等。以阿里云函数计算为例:

  • 事件函数:对象存储触发器、API网关触发器、日志服务触发器、MNS触发器、定时触发器、表格存储触发器、消息队列Kafka版Connector触发器、IoT触发器、云监控触发器、CDN触发器以及事件总线EventBridge触发器等;
  • HTTP函数:HTTP触发器;

当我们完成一个函数之后,我们更希望他在我们的业务中发挥一定的作用,这个时候如何来让函数所要处理的业务逻辑,在我们的业务中发挥作用,要看我们如何配置触发器了。

除此之外,触发器还可以按照函数的同步调用与异步调用来进行划分,通常情况下,函数被调用会有同步和异步的说法,而函数是由事件驱动的,所以很多时候也将一些触发器区分为“同步触发器”和“异步触发器”。

所谓的同步调用,或者说由同步触发器来触发函数,所具有的特性是,客户端期待服务端立即返回计算结果。请求到达函数计算时,会立 即分配执行环境执行函数。

以 API 网关为例,API 网关同步触发函数计算,客户端会一直等待服务端的执行结果, 如果执行过程中遇到错误, 函数计算会将错误直接返回,而不会对错误进行重试。这种情 况下,需要客户端添加重试机制来做错误处理。

所谓的异步调用,或者由异步触发器触发函数,其通常是是客户端不急于立即知道函数结果,函数计算将请求丢入队列中即可返 回成功,而不会等待到函数调用结束。


函数计算会逐渐消费队列中的请求,分配执行环境,执行函数。如果执行过程中遇到错 误,函数计算会对错误的请求进行重试,对函数错误重试三次,系统错误会以指数退避方式 无限重试,直至成功。 异步调用适用于数据的处理,比如 OSS 触发器触发函数处理音视频、日志触发器触 发函数清洗日志,都是对延时不敏感,又需要尽可能保证任务执行成功的场景。如果用户需 要了解失败的请求并对请求做自定义处理,可以使用 Destination 功能。

定时触发器

定时触发器是非常常见的一个触发器,也是绝大部分厂商所支持的触发器之一,它存在的意义就是在某个时间来执行当前函数,例如每隔一段时间执行函数、每天几点执行函数、或者每月/每周的某一天执行函数等。常见的应用场景有:

  • 批量数据的定时处理,例如每1小时收集全量数据并生成报表。
  • 日常行为的调度,例如整点发送优惠券。
  • 与业务解耦的异步任务,例如每天0点清理数据。

对象存储触发器

函数计算是可以主动“激发”对象存储上的资源,例如下载,上传,覆盖等操作,但是如果对象存储的资源发生了变化,又如何告知函数计算呢?这个时候就可以通过对象存储触发器来进行实现。通常情况下对象存储触发器的规则都会有两个部分:

  • 行为:所谓的行为则是上传操作、复制操作等,例如阿里云函数计算的对象存储触发器提供的行为包括:oss:ObjectCreated:PutObject(调用PutObject接口上传文件)、oss:ObjectCreated:PutSymlink(调用PutSymlink接口针对OSS上的TargetObject创建软链接)、oss:ObjectCreated:PostObject(调用PostObject接口使用HTML表单上传文件到指定的Bucket)、oss:ObjectCreated:CopyObject(调用CopyObject接口拷贝一个在OSS上已经存在的对象)等在内的13个基本行为;
  • 规则:所谓的规则就是在行为基础上进一步进行限制,例如如果用户上传的是MP4格式的视频则转换成AVI格式视频,如果上传的是其他格式视频则不做操作,那么此时就可以使用创建行为(oss:ObjectCreated:*)与后缀.mp4进行组合,实现只有上传MP4格式后缀的视频到指定存储桶,才会触发对应的函数进行转码操作;

对象存储触发器的用处有很多,常见的场景有:

  • 图像的压缩、转换
  • 音视频的转码、压缩
  • 大数据的处理
  • 文件解压等

API网关触发器

API网关触发器实际上是和函数计算结合最近迷的触发器之一,通过该触发器可以快速实现传统的API服务,客户端通过API网关,将事件传递到函数计算,经过处理之后再返回,整个过程用户只需要关注业务逻辑即可,无需再像传统Web应用一样,需要关注包括Nginx等在内的各种软件。同时API网关等通常会提供相对完善的、更简单的配置能力,例如白名单、黑名单、请求方法、请求参数、鉴权等,据有关组织统计,Serverless架构中,FaaS+API网关的搭配,占调研应用的76%以上,这也足可以看到API网关在函数计算中重要作用。

在阿里云函数计算中,可以认为是有两种API网关触发器,虽然这种说可能并不是十分准确,但是API网关触发器和HTTP触发器在一定程度上,确实在解决同样的问题。

HTTP触发器

在阿里云函数计算中,HTTP触发器仅在HTTP函数中可以使用,相对API网关触发器而言,在一定程度上是有功能的减少,例如暂时没有提供黑名单、白名单等能力,但是相对API网关而言他有一个非常强大的优势:他可以让使用者非常快速的将传统的Web项目迁移到函数计算上。

通常情况下,API网关和函数计算所规约的数据结构是一个JSON对象,这就意味着传统的Web框架可能没办法很好的识别这个对象,需要将这个JSON对象转换成为框架可识别的Request对象。但是HTTP触发器传递给函数的本身就是一个Request对象,这样用户可以非常简单的,方便的,快速的将传统的Web框架迁移到函数计算。以Python的Bottle框架为例,我们只需要把入口方法设置为index.app,并在函数计算中初始化app对象即可:

# index.py

import bottle

@bottle.route('/hello/<name>')

def index(name):

   return "Hello world"


app = bottle.default_app()


if __name__ == '__main__':

   bottle.run(host='localhost', port=8080, debug=True)

除此之外,相对于API网关HTTP触发器的优势还有:

  • 简化了开发人员的学习成本和调试过程,帮助开发人员快速使用函数计算搭建Web service和API。
  • 支持选择您熟悉的HTTP测试工具验证函数计算侧的功能和性能。
  • 减少请求处理环节,HTTP触发器支持更高效的请求、响应格式,不需要编码或解码成JSON格式,性能更优。
  • 方便对接其他支持Webhook回调的服务,例如CDN回源、MNS等。

API网关触发器

包括AWS、阿里云等在内的绝大多数云厂商的FaaS产品,都是支持API网关触发器的。API网关触发器与HTTP触发器类似,可应用于搭建Web应用。相较于HTTP触发器,使用者可以使用API网关进行IP白名单或黑名单设置等高级操作。API网关调用函数计算服务时,会将API的相关数据转换为Map形式传给函数计算服务。函数计算服务处理后,按照Output Format格式返回statusCode、headers、body等相关数据。API网关再将函数计算返回的内容映射到statusCode、header、body等位置返回给客户端:

CDN触发器

除了定时触发器、API网关触发器以及对象存储触发器之外,CDN触发器也是比较常见的一种触发器。该触发器的作用是当CDN系统捕获到指定类型的、满足过滤条件的事件后,通过CDN事件触发器触发函数执行。

CDN是建立并覆盖在承载网之上、由分布在不同区域的边缘节点服务器群组成的分布式网络。通常情况下CDN可以替代传统以Web Server为中心的数据传输模式,将源站资源缓存到云厂商所提供的全国各地的边缘服务器,供应用就近快速获取,提升用户体验,降低源站压力。在函数计算中通过配置内容分发网络事件触发器,集成CDN服务可以实现对CDN的各类事件进行自定义处理。例如,使用者可以设置函数和对应的CDN触发器来处理www.anycodes.cn域名下的资源刷新事件,当该域名下有资源刷新事件时,CDN事件触发器会自动触发函数执行。

CDN事件触发器可以实现函数计算与CDN服务的集成,集成的使用场景如下:

  • CDN在预热(CachedObjectsPushed)和刷新(CachedObjectsRefreshed)用户数据后,通过触发器执行函数。用户可以及时得知资源预热刷新的状态并进行下一步处理,避免不断轮询列表查询最新状态。
  • 当在CDN上发现违禁内容(CachedObjectsBlocked)时,通过触发器执行函数直接去源站删除资源。您不需要等待CDN团队响应,可以及时去源站删除资源。
  • 日志文件生成后(LogFileCreated),通过触发器执行函数处理日志。您不需要长时间等待日志,可以及时转存或处理日志。
  • 当某加速域名被停用(CdnDomainStopped)或者被启用(CdnDomainStarted),通过触发器执行函数及时作出相应的处理。

消息相关触发器

在实际生产过程中,消息相关的产品是避不开的,那么消息产生之后就要有服务来对他进行消费,在FaaS平台通常也会有消息相关的触发器,例如Kafka触发器等。这类触发器触发条件通常是有三部分:

  • 时间部分:所谓的时间部分是说,距离上次触发时间达到预定的阈值之后,即使队列中的消息数量没有达到触发条件,仍然会进行函数的触发行为;
  • 数量部分:当队列中消息达到一定数量,会触发对应的函数;
  • 大小限制:所谓的大小限制就是说,当队列中消息达到某个预定的大小之后,会触发对应的函数;

日志服务触发器

日志服务触发器也是非常常见的触发器。在我们日常生产中,应用会无时无刻的产生大量的日志,通过日志服务触发器触发函数可以消费增量的日志数据,并完成对数据的自定义加工。常见的使用场景有:

数据清洗、加工场景: 通过日志服务,快速完成日志采集、加工、查询、分析。

数据投递场景:为数据的目的端落地提供支撑,构建云上大数据产品间的数据管道。

事件总线EventBridge

事件总线EventBridge是云厂商所提供的一款无服务器事件总线服务,通常情况下支持自身云产品、自定义应用、SaaS应用以标准化、中心化的方式接入。阿里云EventBridge能够以标准化的CloudEvents 1.0协议在应用之间路由事件,帮助用户轻松构建松耦合、分布式的事件驱动架构。

EventBridge 通过事件连接应用程序。事件是系统状态发生变更的信号,例如客户支持 TT 的状态发生变更。要编写代码来响应事件,用户需要了解事件的 Schema,包括各种事件数据的标题、格式和验证规则等信息。EventBridge Schema 注册表可存储使用者的组织的应用程序、云厂商服务或云厂商应用程序所生成的一系列 Schema 以方便查找。除此之外使用者还可以下载 IDE 注册表中任何 Schema 的代码绑定,从而在代码中以强类型对象形式来表示事件。

事件总线EventBridge的典型应用场景如下:

  • 构建事件驱动型架构:借助事件总线EventBridge,您无需了解事件源,就可以直接筛选并发布事件。
  • 微服务解耦:事件总线EventBridge可以实现不同系统之间的异步消息通信,从而将互相依赖的服务解耦。
  • 异步执行:事件总线EventBridge可以使执行逻辑异步运行,减少用户的等待时间,增加系统的吞吐量。
  • 状态变化追踪:事件总线EventBridge可以作为中心接收所有应用的状态变化,然后将这些应用状态变化分别路由到需要感知这些变化的服务。

“创造”新的触发器

在我们的实际生产中,是可以发挥想象力自己“创造新的触发器”,其实与其说是创造新的触发器,不如说是在已有的触发器基础上进行灵活应用。例如Github支持WebHooks:

我们只需要在函数计算侧创建一个HTTP函数,绑定一个HTTP触发器,然后在Payload URL处填写设置好HTTP触发器后返回给我们的地址即可。当Github出现指定的行为,会触发好书进行相关的提醒。例如我在设置Webhooks时选择了Issues和Issue comments


此时,当有人在当前仓库下进行Issue相关操作,就会通过HTTP触发器触发指定函数。当我的函数逻辑是触发钉钉机器人,并将信息发送到指定群聊中

目录
相关文章
|
17天前
|
运维 Serverless API
Serverless 应用引擎产品使用合集之哪里添加函数计算触发器能够触发某个函数work
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
8月前
|
JavaScript 前端开发 算法
什么是 Dynatrace 的 Speed Index 度量标准
什么是 Dynatrace 的 Speed Index 度量标准
Revit空闲事件(Idling Event)增强和外部事件(External Event)
Revit空闲事件(Idling Event)增强和外部事件(External Event)
Revit空闲事件(Idling Event)增强和外部事件(External Event)
|
存储 SQL 缓存
如何高效分析 Aptos Event
随着 Aptos 生态的发展,上链数据分析的需求也随之出现,在这篇文章里,我们能简单了解 1)对 Aptos 事件的认识及其在 Aptos 设计中的地位;2)如何使用 Node API 轮询事件的数据;3)举例:一些查询/索引事件数据的更好方法!
210 0
|
存储 SQL 关系型数据库
最佳实践—如何优化Batch Insert
Batch Insert语句是常见的数据库写入数据的方式,PolarDB-X兼容MySQL协议和语法,Batch Insert语法为:
143 0
最佳实践—如何优化Batch Insert
|
SQL 弹性计算 关系型数据库
PostgreSQL 12 preview - CTE 增强,支持用户语法层控制 materialized 优化
标签 PostgreSQL , CTE , materialized , not materialized , push down 背景 PostgreSQL with 语法,能跑非常复杂的SQL逻辑,包括递归,多语句物化计算等。 在12以前的版本中,WITH中的每一个CTE(common table express),都是直接进行物化的,也就是说外层的条件不会推到CTE(物化节点)里
864 0
|
存储 移动开发 数据可视化
2021如何让你的Table组件无限可能
在管理后台中我们会使用大量的表格表单组件, 导入导出各种报表, 有些场景还需要对报表数据进行可视化分析, 动态生成可视化图表, 笔者将基于以上场景, 总结一些实用的 Table 组件开发技巧, 让前端开发不再吃力.
162 0
S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析
S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析
134 0
S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析
|
Kubernetes Cloud Native Serverless
Knative 初体验:Tekton Hello World
Tekton 作为 Knative Build 模块的升级版,提供了更丰富的功能,可以适用更多的场景。如果你知道 Knative Build 是什么相信你理解起 Tekton 就是很容易的一件事了。
Knative 初体验:Tekton Hello World