在函数调用的过程中,可能有多种原因导致函数调用失败。不同的错误类型以及调用方式(同步调用、异步调用)都会影响重试策略。实际业务生产中,有很多开发者对这里的策略有疑惑,本文将全面解读 Serverless 异步队列重试策略,并对多种使用场景提供相关的配置建议。
在函数调用的过程中,可能有多种原因导致函数调用失败。错误类型分为以下几类:
调用错误发生在函数实际执行前。以下情形均会产生调用错误:
运行错误发生在函数实际运行中。运行错误有以下情形:
函数平台的错误,例如 internal error。
不同错误类型以及调用方式(同步调用、异步调用)都会影响重试策略。
同步调用包含 云 API 触发器 的同步调用、API 网关触发器 及 CKafka 触发器。
由于同步调用的过程中,错误信息会直接返回给用户,所以在同步调用中发生错误时,平台不会自动重试,重试策略(是否重试、重试几次)均由调用方决定。
异步调用包含 云 API 触发器 的异步调用、COS 触发器、定时触发器 及 CMQ Topic 触发器 等,具体触发器调用类型请参考相关触发器说明文档。
在新版重试策略中,开发者可以根据业务诉求在函数配置中修改和自定义默认的【重试次数】,【最长等待时间】配置,该配置只适用于异步调用场景。
异步调用发生各种错误类型的重试策略:
一般使用场景:
一般使用场景下,推荐默认配置即可满足大多数错误情况下的重试诉求,无需进行任何修改即可放心使用。
对代码重入较敏感:
对代码重入较敏感的场景,建议将重试次数调整为 0 即代码报错不会重试。
对事件处理实效性较高:
在事件处理实效性要求较高的场景下,并在一定时间范围内进行重试的场景下,可配置事件最长保留事件来及时淘汰过期事件。保证错误重试的实效性。
并发超限场景:
并发超限(ResourceLimitReached)指云函数 SCF 在同一时刻执行的并发数超过并发配额导致的函数报错。并发超限分为同步调用、异步调用两种情况。
异步调用并发超限时其处理逻辑由云函数 SCF 进行自动重试,在保留时间内并发超限不会导致如何数据丢弃。通常情况下异步调用的并发超限用户无需进行任何操作,在设定的最长等待时间内,函数平台会自动对并发超限错误进行重试。异步调用中,如对实效性比较敏感可以通过配置保留并发来减少或降低超限对业务系统的影响,数据较重要可配置死信队列兜底。
同步调用的过程中,错误信息会直接返回给用户。
目前重试可配置已全量开放,通过重试策略配置的能力,可根据业务需求自行配置重试策略。平台的默认重试策略可满足大多数开发者错误重试的诉求,更多异步队列重试配置能力建设请关注微信号或官网产品动态。
立即体验腾讯云 Serverless Demo,领取 Serverless 新用户礼包
联系客服