基于请求模式并发管理

最近更新时间:2025-09-30 14:18:42

我的收藏
本文介绍如何在云函数控制台配置基于请求模式的并发管理。

操作步骤

开启请求多并发

1. 登录 Serverless 控制台,选择左侧导航栏中的 函数服务
2. 函数服务页面,选择需进行配置的 Web 函数名。
3. 函数管理页面,选择函数配置。单击右上角的编辑,进入编辑模式。
4. 在“隔离、并发配置”中,单实例并发模式选择基于请求,在自定义静态并发下方的输入框中输入需要的并发值,开启请求多并发模式。如下图所示:

5. 单击保存完成配置。

注意事项

计费

未开启请求多并发时,单个函数实例一次只会处理一个请求,第一个请求处理完成才会开始处理下一个请求,内存时间的计费时长是每个请求的执行时长的加和,如下图所示:

未开启请求多并发时的计费


开启请求多并发之后,单个函数实例一次会处理多个并发请求,第一个请求未结束时,如果第二个请求进来,则会有一段时间两个请求同时在处理,此时,交叠的这段时间只会计算一次。如下图所示:



其他计费项保持不变,详情见 计费概述

日志

开启请求多并发后,由于多个并发请求同时处理,每个请求产生的日志在流式上报时,可能会出现日志和 RequestID 无法一一对应。此时,应该在代码中正确设置 logger,将 RequestID 打印到日志中,以解决该问题。RequestID 从 Web 函数中接收到的公共请求头里的 X-Scf-Request-Id 字段(部分框架为 x-scf-request-id)获取。

NodeJS 示例代码

let WebSocketServer = require('ws').Server;
let wss = new WebSocketServer({ port: 9000 });

wss.on('connection', function connection(ws) {

let requestID = ws.upgradeReq.headers['x-scf-request-id'];
console.log('requestID: %s', requestID);

ws.on('message', function incoming(message) {
console.log('requestID: %s', requestID);
console.log('received: %s', message);
});

});

超限错误

内存超限

请求多并发会增加内存超限的概率,在内存超限 OOM 发生时,实例会进行重启,此时,实例内正在处理的多个请求会同时出现 abort 中断错误,错误码为 434 MemoryLimitReached。请在设置并发值之前,先对函数进行压测以确定安全的并发值,以避免内存超限带来的影响。

超时

请求耗时过长,在配置的执行超时时间范围内没有执行完成时,会终止该请求,向客户端返回错误码 433 TimeLimitReached。实例内的其他正在进行中的请求不受影响。

监控

开启请求多并发后,在监控页面会出现“并发请求个数”面板,可直观看到指定时间段内的请求并发情况。




监控常见问题

对一段时间没有调用的函数发起并发请求,会出现虽然并发请求数量未超过设定的并发值,但监控“并发实例个数和预置并发”面板中显示的并发实例个数大于 1 的情况。这是因为一段时间没有调用,函数实例回收资源,此时发起请求,会出现冷启动,为保障及时响应处理进来的请求,此时会并发拉起函数实例,直到第一个实例可以正常接收请求为止。如果是普通的 HTTP 请求,过一段时间之后,新请求会集中在若干个函数实例上进行处理,其余的函数实例会在请求处理结束后逐步下线,监控中的并发实例数恢复正常。如果是 WebSocket 连接,则在连接未断开之前,并发实例数都会维持在一开始拉起的数量。通过配置动态预置避免冷启动,可以减少这类问题发生的概率。