单实例多并发管理

该特性仅FunctionGraph v2版本支持。
概述
单实例多并发是指单个实例可以同时处理的请求数量,合理配置并发数具备如下优势。
- 提高函数执行效率,减少执行时长。
- 减少冷启动概率。
- 单实例多并发可以降低总的实例数,节省用户实例资源。
应用场景
函数调用请求时,若有较长时间需等待下游服务的响应,则可以配置“单实例多并发”,让请求并发处理。
单实例单并发与单实例多并发的对比
当一个函数执行需要花费5秒,若配置为单实例单并发,三次函数调用请求分别在三个函数实例执行,总执行时长为15秒。
若配置为单实例多并发,设置单实例并发数为5,即单个实例最多支持5个并发请求,如果有三次函数调用请求,将在一个实例内并发处理,总执行时间为5秒。

当函数实例的并发度大于1,需要考虑函数作用域外资源的竞争和并发安全。
单实例并发数设置的大于1,不能及时处理的请求会等待一定的时间。比如:设置了单实例并发数为10,超过处理能力的请求不会立刻返回错误,部分请求等待后成功处理。
对比项 |
单实例单并发 |
单实例多并发 |
---|---|---|
日志打印 |
- |
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。 |
配置约束
- 128M内存规格,最大支持并发数25
- 256M内存规格,最大支持并发数50
- 512M及以上内存规格,最大支持并发数100
