调用函数

 调用类型

您可以采用同步调用异步调用这2种方式调用函数。

  • 同步调用:事件被函数处理后直接将结果返回。例如使用控制台调用或HTTP触发器调用是同步调用。
  • 异步调用:事件在写入到消息队列后则返回。函数计算系统会保证该消息被可靠的处理。例如使用FDS事件触发器、定时触发器是异步调用。
    同步 / 异步请求对传入的事件有不同的限制,具体请参考配额限制

并发执行

并发执行是指在任意指定时间您的函数代码同时执行的数量。您可以用下述公式来估算并发的函数调用数。
请求速率 * 函数执行时间
其中,请求速率是指函数被调用的速率,单位为“每秒请求数”或者“每秒事件数”。函数执行时间的单位为“秒”。例如,考虑一个处理FDS事件的函数。假定函数平均用时 3 秒,FDS每秒发布 10 个事件。因此,您的函数有 30 个并发执行。

并发限制

当前默认情况下,函数计算对每个工作空间的并发量有一定限制,您可以通过函数计算工作空间的页面了解当前工作空间的并发量限制。 如果调用导致函数的并发数目超过了默认限制,则该调用会被阻塞,函数将不会执行这次调用。根据函数的调用方式,受限制的调用的处理方式会有所不同:

同步调用:如果函数被同步调用时受到限制,将会直接返回429错误。
异步调用:如果函数被异步调用时受到限制,函数计算将在一定的时间内以固定的频率自动重试受限制的事件。

安全限制

在某些情况下,由于用户的错误设置,函数执行可能会失控。考虑如下场景,您设置了FDS触发器,当图片文件上传到FDS上的 foo bucket 后,会调用相关函数处理。该函数将原图片调整为 3 张不同分辨率的图片,并将结果错误地写回到了 foo bucket 下。因此又会造成新的函数被调用,无限循环下去。为了避免因为失控函数导致财务损失,函数计算在每个工作空间粒度设置了并发执行限制,默认为100。

重试机制

根据调用方式的不同,对未成功执行的函数的重试机制不同。

  • 同步调用:同步调用的函数执行失败系统不会进行处理。您可以自行重试。
  • 异步调用:如果您的函数因为超过最大并发数目、或遇到平台内部资源不足等内部限制导致失败。则该次调用将会自动进入一个重试队列,函数计算将自动重试调用,目前最多重试两次。

results matching ""

    No results matching ""