调用函数-j9九游会登录
函数创建和配置完成后,可通过restful api或者云服务事件源触发函数执行。
- restful api:通过调用api直接触发函数。
- 云服务事件源:由云服务触发函数,即使用函数触发器。
根据客户端是否需要等待函数的处理结果,函数的调用可分为同步调用和异步调用两种方式。
同步调用是指客户端调用函数后,functiongraph会立即执行函数,等函数执行完成后再向客户端返回响应和执行结果。
同步调用应用场景:
同步调用的响应时间较短,适用于需要实时响应的业务场景。
应用场景示例一:实时数据处理与查询
需要快速获取实时数据(如订单状态、支付结果)。同步调用能够立即处理请求并返回结果,满足实时性需求。
应用场景示例二:即时交互与控制
需要即时看到操作结果(如消息发送成功)。同步调用能够确保操作的实时性和反馈的即时性。
异步调用是指客户端调用函数后,functiongraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,functiongraph会在系统空闲的情况下逐个处理排队的请求。
异步调用场景下客户端无法实时感知函数的执行结果,如需获取异步请求的结果通知或者设置异步请求失败重试,请参见配置函数的异步调用策略。也可以使用异步执行函数接口异步触发函数。
异步调用应用场景:
异步调用适用于可以延迟处理,不需要实时响应,且可能需要较长时间或大量资源的任务。异步调用能够提升系统的响应速度和吞吐量,同时确保任务的可靠执行。
应用场景示例一:媒体处理与转换
- 图片压缩与格式转换:上传图片后,系统在后台异步处理图片,执行压缩、裁剪或格式转换,完成后将处理的图片存储于指定位置。图片处理需要一定时间,异步调用可避免等待。
- 视频转码与剪辑:上传视频后,系统在后台异步完成视频的转码、剪辑或添加水印。视频处理耗时较长,异步调用可以释放系统资源,保障其他任务正常运行。
应用场景示例二:数据处理与集成
- etl任务(数据清洗与转换):定期从数据库中提取数据,进行清洗、转换和加载到目标存储或分析平台,完成后生成报告并通知相关人员。etl任务涉及大量数据和复杂计算,异步调用可避免系统阻塞,提高处理效率。
- 日志分析与统计:收集系统日志后,在后台异步进行日志分析、异常检测及统计,完成后将结果存储或发送至监控系统。日志分析需要较长时间,异步调用确保系统在高峰期间仍能正常运行。
约束与限制
- 同步调用场景下,函数最大运行时长限制为15分钟(900秒)。
- 异步调用场景下,函数最大运行时长限制为259200秒(3天)。如果业务有更大的最大执行时长需求,请申请。
在函数详情页中支持自定义配置函数执行超时时长,具体请参见配置函数的常规信息,配置的函数执行超时时长需小于函数最大运行时长限制。
- 如果函数执行端到端时延超过90s,建议使用异步调用。如果使用同步调用,会因为网关限制,时延超过90s后无法收到同步响应。
函数触发器的调用方式
根据函数调用方式,函数的触发器可分为同步调用和异步调用。关于函数调用的更多说明请参见调用函数。
- 同步调用:客户端调用函数后,functiongraph会立即执行函数,等函数执行完成后再向客户端返回响应和执行结果。
- 异步调用:客户端调用函数后,functiongraph会将请求排队,不等待函数的执行结果,直接向客户端返回响应,functiongraph会在系统空闲的情况下逐个处理排队的请求。
|
触发器 |
调用方式 |
|---|---|
|
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触发器的情况下,配置异步调用。
- 登录,在左侧导航栏选择“函数 > 函数列表”,单击函数名称进入函数详情页,选择“设置 > 触发器”。
- 单击已配置的apig触发器名称,跳转至apig服务页面。
图1 单击触发器名称
- 单击右上角的”编辑”。
图2 单击“编辑”
- 单击“下一步”到“后端基础定义”界面,修改调用类型为“asynchronous”。
图3 修改调用类型
- 单击“立即完成”,进行保存。
函数调用的重试机制
函数在同步调用或异步调用执行失败时,可以通过以下重试机制进行操作。
- 同步调用
同步调用执行失败,需要自行重试。
- 异步调用
异步调用可配置最大重试次数和消息最大有限期,具体配置方法请参见配置函数的异步调用策略。
functiongraph会根据配置的最大重试次数和消息最大有限期(最大有限期为24小时)进行重试。重试次数和配置的最大重试次数一致,重试有效期和配置的消息最大有效期一致。
幂等性
在编程中,幂等性指应用程序或组件具备识别重复事件和防止重复、不一致或数据丢失的能力。若需要函数保持幂等性,可以通过函数逻辑设计来正确处理重复的事件。
幂等函数逻辑有助于减少以下问题:
- 不必要的api调用
- 代码处理时间
- 数据不一致
- 限制
- 延迟
请确保函数代码可以多次处理相同的事件,而不会导致重复的事务或其他不必要的副作用。如果函数不满足幂等性要求,则当函数调用异常、客户端重试或依赖函数内部重试时,可能会导致重复的事务或其他不必要的副作用。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨