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

我们部署了2个函数 A:并发请求函数(NODEJS) B:接收请求,并返回内容,里面有一点点的计算

我们部署了2个函数

A:并发请求函数(NODEJS) B:接收请求,并返回内容,里面有一点点的计算,非常少的一点代码。

如果单独请求 B(POSTMAN或阿里自带测试工具),反应非常快,,,随便怎么测都是在20-50ms内完成, 而用A来并发请求B,360条数据,整个完成需要3秒左右

而我查看了日志,这360条请求,执行时间呈上升状态, 比如 10条是 20ms,10条是 40ms ,10条是80ms..............10条是1秒.........10条是 2s+ 这样的状况

我们B程序没有复杂的计算,也不会涉及到数据库,,,请问这是什么问题? 我们反复做了测试,,我只能理解为 阿里云的函数自己拥堵了,当并发请求多一点的时候,,,函数自己就拥堵反自己执行的速度变慢了。

B函数设置的并发是200,创建了10个预留实例

这是同一批请求,,,可以看到 : 最前面的请求速度 非常快,后面的请求 时间逐渐 变长了

提问1.png

提问2.png

展开
收起
飘飘斯嘉丽 2023-06-26 09:52:18 56 0
4 条回答
写回答
取消 提交回答
  • 随心分享,欢迎友善交流讨论:)

    这种情况可能是因为函数计算的并发调度机制导致的。函数计算的并发调度机制会根据函数实例的数量、并发请求数量、请求处理的耗时等多个因素来进行调度和分配。当并发请求数量较大时,函数计算可能会将请求分配到不同的实例上,从而导致一些请求相应速度变慢。

    为了解决这个问题,您可以尝试以下方法:

    调整函数实例数量:您可以尝试增加函数实例数量,以提高函数计算的并发处理能力。在函数计算的控制台中,您可以通过修改函数的配置,来增加函数的实例数量。

    使用预热机制:函数计算提供了预热机制,可以在函数代码被请求时提前加载函数执行环境,从而缩短函数计算的冷启动时间,进而缩短请求处理的时间。您可以通过在函数计算的控制台中开启预热机制,以加速函数的启动。

    使用常驻实例:如果您的函数需要长时间运行,可以尝试使用常驻实例功能,将函数实例常驻在内存中,从而避免频繁的冷启动,提高请求的响应速度。

    优化函数代码:您可以尝试优化函数代码,去掉冗余或不必要的依赖项,减小函数代码包大小,提高函数执行效率。

    总的来说,缩短函数计算的请求处理时间是一个综合性的问题,需要从多个方面进行优化和调整。在实际应用中,您可以根据自己的实际需求和应用场景,选择合适的优化方法,以提高函数计算的并发能力和响应速度。

    这是同一批请求,,,可以看到 : 最前面的请求速度 非常快,后面的请求 时间逐渐 变长了

    2023-06-30 16:20:43
    赞同 展开评论 打赏
  • 根据您的描述,当您使用函数 A 并发请求函数 B 时遇到了性能下降的问题。根据您提供的信息,这可能是由于函数 B 遭遇了并发压力导致的。

    函数计算平台为每个函数实例提供一定数量的计算资源,每个实例在处理请求时都可以独立运行。然而,当您进行并发请求时,可能会出现以下情况导致性能下降:

    1. 资源竞争:并发请求可能会导致函数实例之间的资源竞争,资源不足的情况下某些请求需要等待可用资源。这会导致后续请求的执行时间增加。

    2. 预热时间:如果函数没有足够的预留实例来处理所有并发请求,则新的实例需要在接收请求之前进行预热。这会导致一些请求的执行时间较长。

    为了解决这个问题,您可以尝试以下几种方法:

    1. 提高资源配额:检查函数 B 的配置,确保它具有足够的计算资源来处理并发请求。您可以增加预留实例的数量或者增加函数的内存配额来提高性能。

    2. 异步处理:如果函数 B 的计算部分可以异步执行并且不需要立即返回结果,您可以考虑将其转换为异步操作。这样可以减少响应等待时间,提高并发处理能力。

    3. 优化代码:检查函数 B 的代码,确保它没有不必要的计算或资源占用。优化代码和算法可以减少执行时间,提高性能。

    4. 使用消息队列或异步事件触发:可以考虑使用消息队列或事件驱动模型,在函数 B 接收到请求后将其放入队列中,然后由另一个函数异步地处理这些请求。这种方式可以平滑处理并发请求并减轻单个函数的压力。

    2023-06-27 10:23:42
    赞同 展开评论 打赏
  • 实例规格调大些试试呢 可以看看实例详情页的监控指标 看看cpu 内存 网络 打日志看看 看看哪里慢了 可能是有资源泄漏

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

    2023-06-26 18:35:49
    赞同 展开评论 打赏
  • 这种情况可能是由于函数计算实例资源不足导致的。

    当您使用并发请求函数A来同时调用函数B时,可能会导致函数B的执行时间变长,因为函数B需要与其他函数A共享计算资源。

    此外,函数B的执行时间可能会受到其他因素的影响,例如网络延迟、内存使用等。

    您可以尝试以下解决方法:

    1. 增加函数B的预留实例数。预留实例是指在函数计算中预先创建的实例,可以提高函数的响应速度和并发能力。您可以尝试增加预留实例数,以提高函数B的性能。

    2. 调整函数B的内存大小。函数计算的内存大小会影响函数的性能和响应速度。您可以尝试增加函数B的内存大小,以提高函数的性能。

    3. 调整函数A的并发数。当您使用并发请求函数A来同时调用函数B时,您可以尝试调整函数A的并发数,以减少对函数B的压力,从而提高函数B的性能。

    4. 使用异步调用方式。如果您的应用程序允许使用异步调用方式,可以尝试使用异步调用方式来调用函数B,以提高函数B的性能。

    2023-06-26 09:57:04
    赞同 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载