首页 > 其他分享 >FaaS触发器

FaaS触发器

时间:2023-01-26 11:23:59浏览次数:37  
标签:触发 网关 函数 CDN 触发器 API FaaS

3.3 触发器

触发器(Trigger)用于触发函数执行。不同云厂商会根据自己的业务,为FaaS平台提供多种触发器。其中比较常见的触发器包括API网关触发器、对象存储触发器、定时触发器等。阿里云函数计算提供的触发器如下。

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

当创建一个函数之后,我们更希望它在业务中发挥一定的作用。这时,如何让函数在业务中发挥作用,就要看配置的触发器了。

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

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

 

 

 

图3-41 同步触发器示例

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

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

 

 

 

图3-42 异步触发器示例

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

3.3.1 定时触发器

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

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

3.3.2 对象存储触发器

函数计算可以主动激发对象存储上的资源,但是如果对象存储的资源发生了变化,又如何告知函数计算呢?这时,我们就可以通过对象存储触发器来实现。通常情况下,对象存储触发器的规则包含两个部分。

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

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

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

3.3.3 API网关触发器

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

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

1. HTTP触发器

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

通常情况下,API网关和函数计算所规约的数据结构是JSON类型。这就意味着传统的Web框架可能没办法很好地识别这个对象,需要将JSON对象转换成Web框架可识别的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)

2. API网关触发器

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

 

 

 

图3-43 API网关与函数计算结合的流程

3. CDN触发器

CDN触发器也是比较常见的一种触发器。该触发器的作用是当CDN系统捕获到指定类型、满足过滤条件的事件后,通过CDN事件触发器触发函数执行。

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

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

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

4. 消息相关触发器

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

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

5. 日志服务触发器

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

  • 数据清洗、加工场景:通过日志服务,快速完成日志采集、加工、查询、分析,如图3-44所示。

 

 

 

图3-44 日志触发器场景:数据清洗、加工场景

  • 数据投递场景:为数据的目的端落地提供支撑,构建云上大数据产品间的数据管道,如图3-45所示。

 

 

 

图3-45 日志触发器场景:数据投递场景

6. 事件总线EventBridge

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

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

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

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

7. “创造”新的触发器

在实际生产中,我们可以发挥想象力自己“创造”新的触发器。与其说是“创造”新的触发器,不如说是在已有的触发器基础上进行灵活应用。例如GitHub支持Webhook,配置页面如图3-46所示。

 

 

 

图3-46 GitHub Webhook配置页面

只需要在函数计算侧创建一个HTTP函数,绑定一个HTTP触发器,然后在Payload URL处设置好HTTP触发器后返回地址即可。当GitHub出现指定的行为,触发函数进行相关的提醒。例如我在设置Webhook时选择Issues和Issue comments,如图3-47所示。

 

 

 

图3-47 设置Webhook触发条件

此时,当有人在当前仓库下进行Issue相关操作,就会通过HTTP触发器触发指定函数。如果函数执行逻辑是触发钉钉机器人,并将信息发送到指定群聊中,效果会如图3-48所示。

 

 

触发效果

 

标签:触发,网关,函数,CDN,触发器,API,FaaS
From: https://www.cnblogs.com/muzinan110/p/17067638.html

相关文章

  • 数字电路实验 05 - | 触发器及其应用
    一、实验目的和任务掌握基本RS、JK、T和D触发器的逻辑功能。掌握集成触发器的功能和使用方法。熟悉触发器之间相互转换的方法。二、实验原理介绍触发器是能够存储1位二进制......
  • FaaS应用开发
    如何提取公共的服务能力?开发微服务的时候,如果是一个复杂一点的功能,则需要多人协作或者复用一些别人开发好的类库。那么,函数计算中是否也有类似的特性呢?层的提出就是为了解......
  • FaaS任务编排
    在Serverless的领域中,通过某种方式来协调各个服务和函数的执行,使得我们在享受高弹性、低成本的同时,也降低业务处理上的复杂度呢?这种能力的确存在,业界普遍称之为“工作流(S......
  • FaaS流量转发
    冷启动的流量转发PublicService和PrivateService,它们是决定流量走向PodIP还是Activator的关键。PublicService:由Knative管控,其EndPoints是可变的。如果当......
  • FaaS扩缩容
    Node维度 Scheduler:调度模块负责将请求打到指定的函数实例上(Pod),同时负责为集群中的Node标记状态,记录在etcd中;Local-controller:Node上的本地控制器,负责管理Node......
  • FaaS冷启动
    冷启动是什么?当请求被调度到函数实例上时,如果这个函数实例在上一次执行完代码后没有被回收,那么接收到请求后只需要复用这个实例进行代码的执行即可,这个过程被称为热启动过......
  • 【MySQL思考】触发器是否应该在生产环境中使用?
    [1]触发器简单介绍  MySQL触发器​​trigger​​​是一种存储程序,它和一个指定的表相关联,当该表中的数据发生变化(增加、更新、删除)时自动执行。这些修改数据行的操作......
  • FaaS进程模型
    从运行函数实例的进程角度来看,就有两种模型。用完即毁型:函数实例准备好后,执行完函数就直接结束。这是FaaS最纯正的用法。常驻进程型:函数实例准备好后,执行完函数不结束,......
  • FaaS运行逻辑
    在Serverless出现之前,我们要部署这样一个应用的流程。首先为了运行我们的应用,我们要在服务端构建代码的运行环境:我们要购买虚拟机服务,初始化虚拟机运行环境,安装我们需要......
  • 1-锁存器与触发器 & 阻塞赋值与非阻塞赋值
    1.锁存器与触发器锁存器latch:电平触发 寄存器flip-flop:边沿触发 寄存器:用来存放数据的一些小型存储区域,由多个触发器组成(时钟端连在一起)触发器与锁存器优缺点:......