云函数 单实例请求并发管理

这篇说说腾讯云云函数中基于请求模式的并发管理配置,包括开启请求多并发(自定义静态与动态并发)及计费、日志、超限错误和监控等注意事项。 开启请求多并发:支持自定义静态并发和动态并发两种模式,需在创建Web函数时于高级配置中启用。 计费与日志:并发请求交叠时段仅计费一次,日志需打印RequestID以解决对应问题。 超限与监控:内存超限可能导致实例重启或请求中断,监控页面新增“并发请求个数”面板。

相关产品
云函数 产品页,含版本规格、价格与购买入口。

这篇说说如何在云函数控制台配置基于请求模式的并发管理。

一、自定义静态并发

1. 登录 Serverless 控制台,选择左侧导航栏中的 函数服务。

2. 在函数服务页面,单击左上角的新建。

3. 选择从头开始创建 Web 函数。

4. 在高级配置中,启用请求多并发,在自定义静态并发下方的输入框中输入需要的并发值,开启请求多并发模式。如下:

二、自定义动态并发

1. 登录 Serverless 控制台,选择左侧导航栏中的 函数服务。

2. 在函数服务页面,单击左上角的新建。

3. 选择使用容器镜像创建 Web 函数,在函数代码中选择镜像和镜像类型。

4. 在高级配置的环境配置中,选择资源类型为 GPU,单击选择规格选择 GPU 类型。如下:

5. 启用请求多并发,开启请求多并发模式,单击自定义动态并发,在自定义动态并发下方的输入框中分别为不同类型的 GPU 资源输入不同的并发值。如下:

三、计费

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

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

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

四、日志

开启请求多并发后,由于多个并发请求同时处理,每个请求产生的日志在流式上报时,可能会出现日志和 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); });});

六、内存超限

请求多并发会增加内存超限的概率

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

·资源类型为 GPU 时:在显存超限 OOM 发生时,会终止引起显存超限的请求,实例内其他正在运行的请求不受影响。

七、超时

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

八、监控

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

九、监控常见问题

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

赞 (0)
上一篇 4天前
下一篇 4天前