本文介绍函数调用的两种方式,以及相关的并发执行、调用限制和重试机制信息。

调用方式

函数计算支持以下调用方式:

  • 同步调用:事件被函数处理后直接返回结果。例如,使用控制台调用函数属于同步调用。
  • 异步调用:事件在写入到函数计算内部队列后返回结果,函数计算系统会保证该消息被可靠地处理。例如,使用OSS事件触发器等调用函数属于异步调用。函数异步调用的更多信息,请参见管理函数异步调用配置
说明
  • 使用fcli或SDK调用函数时,您可以设置函数是同步调用或是异步调用。
  • 同步请求和异步请求对传入的事件有不同的限制,更多信息,请参见资源使用限制

并发执行

并发执行是指在任意指定时间您的函数代码同时执行的数量。您可以用以下公式来估算并发的函数调用数:

并发调用数=请求速率×函数执行时间
  • 请求速率是指函数被调用的速率,即每秒请求数或者每秒事件数。
  • 函数执行时间的单位为秒。

例如,一个处理阿里云OSS事件的函数的平均执行时间为3秒,OSS每秒发布10个事件,那么根据该公式计算可得,您的函数有30个并发执行。

说明 函数并发执行数会影响您的计费,更多信息,请参见计费说明

调用限制

在某些情况下,由于错误的设置,函数执行可能会失控。例如,您设置了OSS触发器,当图片文件上传到OSS Bucket后,调用相关函数处理图片。该函数将处理后的结果错误地写回到了同一Bucket下。因此又会造成函数再次被调用,无限循环下去。

为了避免因为函数执行失控导致的财务损失,函数计算为每个账户设置了并发执行限制,默认为100。您可以通过函数在云监控控制台中的相关指标(throttles)来观察流控行为。如果您需要提高该限制,请提交工单

重试机制

函数未成功执行的重试机制因调用方式而异:

  • 同步调用失败:您需要自行重试。
  • 异步调用失败:在下列情况下函数计算会自动重试。
    执行失败原因 状态码 服务器端行为 是否计费
    HandledInvocationErrorUnhandledInvocationError,更多信息,请参见错误处理 200 默认重试3次,或者根据异步设置次数重试。 按照调用次数计费,更多信息,请参见计费说明
    函数并发执行超过上限。 429 以指数退避方式重试执行5小时。
    系统内部错误。 500 以指数退避方式重试执行5小时。
    函数计算资源不足。 503 以指数退避方式重试执行5小时。

若您在使用过程中遇到问题,请联系我们