开发者社区 > 云原生 > Serverless > 正文

函数计算,如果调用频繁不会每次都进 preFreeze 是要在 preFreeze 做兜底 其他正常

函数计算,如果调用频繁不会每次都进 preFreeze 是要在 preFreeze 做兜底 其他正常写回调?

展开
收起
云原生那些事 2023-07-26 09:35:07 42 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    是的,对于频繁调用的函数,不建议在每次调用时都执行 preFreezefunc。

    preFreezefunc 为函数计算提供的优化功能,在函数部署或较少调用时使用。

    在函数调用频繁的场景下:

    不建议每次调用都执行 preFreezefunc

    建议在 preFreezefunc 中做必要的初始化工作

    其他正常的调用直接执行主函数代码

    具体做法如下:

    python
    Copy
    def preFreezefunc():

    # 在这里做必要的初始化 
    # 只执行一次即可
     ...
    

    def main_func(event, context):

    if context.is_pre_freeze:
    preFreezefunc()
    else:

      # 正常执行主函数逻辑
      ...
    

    通过context.is_pre_freeze来区分:

    当为 True 时,表示正在执行preFreezefunc,我们初始化工作

    当为 False 时,表示正常调用,执行主逻辑

    2023-07-28 23:04:06
    赞同 展开评论 打赏
  • 在函数计算(Function Compute,简称 FC)中,如果函数被频繁调用,会使用预热(pre-warming)机制来提高函数的响应速度和性能。

    预热是指在函数实例被触发执行前,函数计算服务会自动创建并初始化一些额外的实例。这样,在函数被真正触发执行时,可以直接使用已经初始化好的实例,从而减少冷启动延迟,并提供更快的响应时间。

    当函数被频繁调用时,预热机制会确保有足够的实例被初始化以满足请求的需求。因此,在这种情况下,大部分请求可能会直接进入到预热状态的实例,而不会每次都进入 preFreeze 状态。

    preFreeze 阶段是函数计算服务为了节省资源而将未使用的实例冻结的状态。当函数实例长时间未被使用时,它们可能会进入 preFreeze 状态。当有新的请求到达时,如果没有可用的已初始化实例,则会进行预热。

    至于是否在 preFreeze 阶段做兜底处理,这取决于你的具体需求和业务逻辑。如果在预热期间函数实例还未完成初始化,你可以在 preFreeze 阶段做一些处理,例如返回一个默认的响应或标记请求为处理中。当函数实例初始化完成后,请求会被重新触发执行,并正常进行回调处理。

    2023-07-27 22:28:35
    赞同 展开评论 打赏
  • 调用频繁没有执行preFreeze 的话实例也就冻结能执行 但这种方案好像会有点不太可靠

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-07-26 09:46:42
    赞同 展开评论 打赏
问答分类:
问答地址:
相关产品:

快速交付实现商业价值。

相关产品

  • 函数计算
  • 热门讨论

    热门文章

    相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载