更新时间:2025-06-28 GMT+08:00
分享

调用函数

函数创建和配置完成后,可通过RESTful API或者云服务事件源触发函数执行。

  • RESTful API:通过调用API直接触发函数。
  • 云服务事件源:由云服务触发函数,即使用函数触发器。

根据客户端是否需要等待函数的处理结果,函数的调用可分为同步调用和异步调用两种方式。

同步调用是指客户端调用函数后,FunctionGraph会立即执行函数,等函数执行完成后再向客户端返回响应和执行结果。

同步调用应用场景:

同步调用的响应时间较短,适用于需要实时响应的业务场景。

应用场景示例一:实时数据处理与查询

需要快速获取实时数据(如订单状态、支付结果)。同步调用能够立即处理请求并返回结果,满足实时性需求。

应用场景示例二:即时交互与控制

需要即时看到操作结果(如消息发送成功)。同步调用能够确保操作的实时性和反馈的即时性。

异步调用是指客户端调用函数后,FunctionGraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,FunctionGraph会在系统空闲的情况下逐个处理排队的请求。

异步调用场景下客户端无法实时感知函数的执行结果,如需获取异步请求的结果通知或者设置异步请求失败重试,请参见配置函数的异步调用策略。也可以使用异步执行函数接口异步触发函数。

异步调用应用场景:

异步调用适用于可以延迟处理,不需要实时响应,且可能需要较长时间或大量资源的任务。异步调用能够提升系统的响应速度和吞吐量,同时确保任务的可靠执行。

应用场景示例一:媒体处理与转换

  • 图片压缩与格式转换:上传图片后,系统在后台异步处理图片,执行压缩、裁剪或格式转换,完成后将处理的图片存储于指定位置。图片处理需要一定时间,异步调用可避免等待。
  • 视频转码与剪辑:上传视频后,系统在后台异步完成视频的转码、剪辑或添加水印。视频处理耗时较长,异步调用可以释放系统资源,保障其他任务正常运行。

应用场景示例二:数据处理与集成

  • ETL任务(数据清洗与转换):定期从数据库中提取数据,进行清洗、转换和加载到目标存储或分析平台,完成后生成报告并通知相关人员。ETL任务涉及大量数据和复杂计算,异步调用可避免系统阻塞,提高处理效率。
  • 日志分析与统计:收集系统日志后,在后台异步进行日志分析、异常检测及统计,完成后将结果存储或发送至监控系统。日志分析需要较长时间,异步调用确保系统在高峰期间仍能正常运行。

约束与限制

  • 同步调用场景下,函数最大运行时长限制为15分钟(900秒)。
  • 异步调用场景下,函数最大运行时长限制为259200秒(3天)。如果业务有更大的最大执行时长需求,请提交工单申请。

    在函数详情页中支持自定义配置函数执行超时时长,具体请参见配置函数的常规信息,配置的函数执行超时时长需小于函数最大运行时长限制。

  • 如果函数执行端到端时延超过90s,建议使用异步调用。如果使用同步调用,会因为网关限制,时延超过90s后无法收到同步响应。

函数触发器的调用方式

根据函数调用方式,函数的触发器可分为同步调用和异步调用。关于函数调用的更多说明请参见调用函数

  • 同步调用:客户端调用函数后,FunctionGraph会立即执行函数,等函数执行完成后再向客户端返回响应和执行结果。
  • 异步调用:客户端调用函数后,FunctionGraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,FunctionGraph会在系统空闲的情况下逐个处理排队的请求。
表1 函数触发器的调用机制

触发器

调用方式

API网关服务(APIG专享版)触发器

默认为同步调用,但可以修改为异步调用,具体配置方式请参考配置异步调用

API Connect(APIC)触发器

默认为同步调用,但可以修改为异步调用,具体配置方式请参考配置异步调用

定时触发器(TIMER)触发器

默认为同步调用。

云数据库 GeminiDB DynamoDB触发器

默认为同步调用。

云审计服务(CTS)触发器

默认为异步调用,且不可修改。

文档数据库服务(DDS)触发器

默认为异步调用,且不可修改。

数据接入服务(DIS)触发器

默认为异步调用,且不可修改。

分布式消息服务 Kafka版(KAFKA)触发器

默认为异步调用,且不可修改。

开源Kafka(OPENSOURCEKAFKA)触发器

默认为异步调用,且不可修改。

分布式消息服务 RabbitMQ版(RABBITMQ)触发器

默认为异步调用,且不可修改。

云数据库 GeminiDB Mongo触发器

默认为异步调用,且不可修改。

设备接入(IoTDA)触发器

默认为异步调用,且不可修改。

云日志服务(LTS)触发器

默认为异步调用,且不可修改。

消息通知服务(SMN)触发器

默认为异步调用,且不可修改。

EventGrid触发器

默认为异步调用,且不可修改。

配置函数的异步调用

以APIG触发器为例,在已创建函数并配置APIG触发器的情况下,配置异步调用。

  1. 登录函数工作流控制台,在左侧导航栏选择“函数 > 函数列表”,单击函数名称进入函数详情页,选择“设置 > 触发器”。
  2. 单击已配置的APIG触发器名称,跳转至APIG服务页面。
    图1 单击触发器名称
  3. 单击右上角的”编辑”。
    图2 单击“编辑”

  4. 单击“下一步”到“后端基础定义”界面,修改调用类型为“Asynchronous”。
    图3 修改调用类型

  5. 单击“立即完成”,进行保存。

函数调用的重试机制

函数在同步调用或异步调用执行失败时,可以通过以下重试机制进行操作。

  • 同步调用

    同步调用执行失败,需要自行重试。

  • 异步调用

    异步调用可配置最大重试次数和消息最大有限期,具体配置方法请参见配置函数的异步调用策略

    FunctionGraph会根据配置的最大重试次数和消息最大有限期(最大有限期为24小时)进行重试。重试次数和配置的最大重试次数一致,重试有效期和配置的消息最大有效期一致。

幂等性

在编程中,幂等性指应用程序或组件具备识别重复事件和防止重复、不一致或数据丢失的能力。若需要函数保持幂等性,可以通过函数逻辑设计来正确处理重复的事件。

幂等函数逻辑有助于减少以下问题:

  • 不必要的API调用
  • 代码处理时间
  • 数据不一致
  • 限制
  • 延迟

请确保函数代码可以多次处理相同的事件,而不会导致重复的事务或其他不必要的副作用。如果函数不满足幂等性要求,则当函数调用异常、客户端重试或依赖函数内部重试时,可能会导致重复的事务或其他不必要的副作用。

相关文档

相关文档