更新时间:2022-04-29 GMT+08:00
分享

单实例多并发管理

该特性仅FunctionGraph v2版本支持。

概述

单实例多并发是指单个实例可以同时处理的请求数量,合理配置并发数具备如下优势。

  • 提高函数执行效率,减少执行时长。
  • 减少冷启动概率。
  • 单实例多并发可以降低总的实例数,节省用户实例资源。

应用场景

函数调用请求时,若有较长时间需等待下游服务的响应,则可以配置“单实例多并发”,让请求并发处理。

单实例单并发与单实例多并发的对比

当一个函数执行需要花费5秒,若配置为单实例单并发,三次函数调用请求分别在三个函数实例执行,总执行时长为15秒。

若配置为单实例多并发,设置单实例并发数为5,即单个实例最多支持5个并发请求,如果有三次函数调用请求,将在一个实例内并发处理,总执行时间为5秒。

当函数实例的并发度大于1,需要考虑函数作用域外资源的竞争和并发安全。

单实例并发数设置的大于1,不能及时处理的请求会等待一定的时间。比如:设置了单实例并发数为10,超过处理能力的请求不会立刻返回错误,部分请求等待后成功处理。

表1 单并发与多并发对比

对比项

单实例单并发

单实例多并发

日志打印

-

Node.js Runtime使用console.info()函数,Python Runtime使用print()函数,Java Runtime使用System.out.println()函数打印日志,该方式会把当前请求的Request ID包含在日志内容中。当多请求在同一个实例并发处理时,当前请求可能有很多个,继续使用这些函数打印日志会导致Request ID错乱。此时应该使用context.getLogger().log()函数打印日志,该方式仍保留了请求的独立Request ID。

共享变量

不涉及

单实例多并发处理时,修改共享变量会导致错误。这要求您在编写函数时,对于非线程安全的变量修改要进行互斥保护。

监控指标

按实际情况进行监控。

相同负载下,函数的实例数明显减少。

流控错误

不涉及

太多请求时,body中的errorcode为“FSS.0429” ,响应头中的status为429 ,错误信息提示:Your request has been controlled by overload sdk, please retry later。

配置单实例多并发

单实例多并发通过“单实例并发数consurrentNUM”配置,具体请参考修改函数配置,配置完成后单击“保存”。

图1 配置单实例多并发

配置约束

针对JAVA函数,单实例多并发配置约束如下:
  • 128M内存规格,最大支持并发数25
  • 256M内存规格,最大支持并发数50
  • 512M及以上内存规格,最大支持并发数100
分享:

    相关文档

    相关产品

close