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

函数计算,请教一下,我的应用因为异步执行很多(先返回后再花1s内执行完毕)因为这个原因准备想去买一个

函数计算,请教一下,我的应用因为异步执行很多(先返回后再花1s内执行完毕)因为这个原因准备想去买一个不闲置的预留实例,但是假设流量突然多了,现在自动弹性扩容到一台新的实例,这个实例的的请求里的异步执行全部都会被冻结失效么,即便买10台预留,总有自动弹性扩到第11 台的时候那预留实例也解决不了这种问题么,我的异步都很短,在返回后1秒内就执行完毕了

展开
收起
芬奇福贵 2023-07-28 09:58:08 161 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    函数计算支持自动弹性扩容,当函数计算服务的负载增加时,会自动增加运行实例以满足负载需求。在这种情况下,新的实例会分担部分请求,但是由于异步执行的特性,新的实例上的请求可能会出现失效的情况。

    具体来说,在函数计算服务自动弹性扩容时,新的实例会接管部分请求,但是由于异步执行的先返回后执行的特性,新的实例可能会接收到已经返回的请求,但是异步执行的部分可能还没有执行完毕,这样就可能导致部分请求的异步执行失效。

    为了解决这个问题,您可以使用函数计算服务提供的异步调用功能。异步调用可以将请求分为两部分,即同步调用和异步调用,同步调用会立即返回结果,异步调用则会在后台执行,不会阻塞同步调用的返回。这样,即使新的实例接收到已经返回的请求,异步部分的请求也可以在后台继续执行,不会受到新实例接管的影响。

    另外,为了提高异步执行的可靠性和稳定性,建议您使用消息队列等可靠的异步执行方案,将异步执行的任务发送到消息队列中,由后台异步任务处理器来处理,这样可以保证异步任务的可靠性和稳定性。

    2023-07-28 21:27:22
    赞同 展开评论 打赏
  • 这个就要在fc里把那1秒的逻辑单独拆函数。然后同步响应之前用fc sdk异步调用这个函数

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

    2023-07-28 17:47:52
    赞同 展开评论 打赏
  • 在函数计算中,异步执行的任务通常会受到函数实例生命周期管理的影响。当函数实例被销毁或新实例被创建时,异步任务可能会被中断或丢失。

    即使您购买了多个预留实例,当流量突然增加并超过这些实例的处理能力时,函数计算服务会自动进行弹性扩容以满足需求。在此过程中,新的实例会被创建,并且现有的实例可能会被销毁。

    对于异步任务,如果新实例在任务执行期间替换了旧实例,任务可能会被中断并丢失。这是因为函数计算不保证异步任务的状态持久性,而是依赖函数实例的生命周期来管理任务状态。

    要解决这个问题,您可以考虑以下几个方案:

    1. 使用队列等消息中间件:将异步任务发送到消息中间件(如消息队列)中,在函数计算内部消费这些消息。这样可以实现任务的持久性和可靠性,并且不会受到函数实例的生命周期限制。

    2. 使用数据库存储状态:将异步任务的状态信息存储在数据库或其他持久化存储中,以便在函数实例重新创建时,可以从状态存储中恢复任务并继续执行。

    3. 调整函数计算配置:根据您的负载特征和业务需求,调整函数计算的配置,例如内存大小、超时时间等。这样可以增加函数实例的处理能力,降低触发自动弹性扩容的概率。

    2023-07-28 16:39:02
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

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