本文介绍函数调用的两种方式,以及相关的并发执行、调用限制和重试机制信息。
调用方式
函数计算支持以下调用方式:
- 同步调用:事件被函数处理后直接返回结果。例如,使用控制台调用函数属于同步调用。
- 异步调用:事件在写入到函数计算内部队列后返回结果,函数计算系统会保证该消息被可靠地处理。例如,使用OSS事件触发器等调用函数属于异步调用。函数异步调用的更多信息,请参见管理函数异步调用配置。
说明
- 使用fcli或SDK调用函数时,您可以设置函数是同步调用或是异步调用。
- 同步请求和异步请求对传入的事件有不同的限制,更多信息,请参见资源使用限制。
并发执行
并发执行是指在任意指定时间您的函数代码同时执行的数量。您可以用以下公式来估算并发的函数调用数:
并发调用数=请求速率×函数执行时间
- 请求速率是指函数被调用的速率,即每秒请求数或者每秒事件数。
- 函数执行时间的单位为秒。
例如,一个处理阿里云OSS事件的函数的平均执行时间为3秒,OSS每秒发布10个事件,那么根据该公式计算可得,您的函数有30个并发执行。
说明 函数并发执行数会影响您的计费,更多信息,请参见计费说明。
调用限制
在某些情况下,由于错误的设置,函数执行可能会失控。例如,您设置了OSS触发器,当图片文件上传到OSS Bucket后,调用相关函数处理图片。该函数将处理后的结果错误地写回到了同一Bucket下。因此又会造成函数再次被调用,无限循环下去。
为了避免因为函数执行失控导致的财务损失,函数计算为每个账户设置了并发执行限制,默认为100。您可以通过函数在云监控控制台中的相关指标(throttles)来观察流控行为。如果您需要提高该限制,请提交工单。
重试机制
函数未成功执行的重试机制因调用方式而异:
- 同步调用失败:您需要自行重试。
- 异步调用失败:在下列情况下函数计算会自动重试。
执行失败原因 状态码 服务器端行为 是否计费 HandledInvocationError
或UnhandledInvocationError
,更多信息,请参见错误处理。200 默认重试3次,或者根据异步设置次数重试。 按照调用次数计费,更多信息,请参见计费说明。 函数并发执行超过上限。 429 以指数退避方式重试执行5小时。 否 系统内部错误。 500 以指数退避方式重试执行5小时。 否 函数计算资源不足。 503 以指数退避方式重试执行5小时。 否
若您在使用过程中遇到问题,请联系我们。