上云无忧 > 文档中心 > 腾讯云云Web函数使用教程 - 请求并发管理
云函数 SCF
腾讯云云Web函数使用教程 - 请求并发管理

文档简介:
请求单并发: 默认情况下,在调用函数时,云函数会分配一个并发实例处理请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的并发实例。一个并发实例同一时刻仅处理一个事件的运行逻辑,保障每个事件的处理效率和稳定性。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

请求并发概述

请求单并发

默认情况下,在调用函数时,云函数会分配一个并发实例处理请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的并发实例。一个并发实例同一时刻仅处理一个事件的运行逻辑,保障每个事件的处理效率和稳定性。

请求多并发

在大多数情况下,请求单并发都是值得推荐使用的模式,无需在写代码时考虑多个请求同时处理带来的典型并发难题,例如线程安全、阻塞调用、异常处理等。
而在 Web 应用中,典型的业务场景是 IO 密集型——函数内访问数据库或其他系统的接口等下游服务,会有较多时间在等待这些下游服务响应。这种等待一般都是在做 iowait,不消耗 CPU,此时,如果开启了请求多并发,让一个实例可以同时处理多个请求,则可以更充分利用单个实例的 CPU 资源。
Web 函数目前已经支持 开启请求多并发 配置,您可以根据业务需要进行启用和配置。请求多并发支持自定义静态并发智能动态并发两种模式。
自定义静态并发 启用后,当同时有多个请求,将不超过指定并发值的请求调度到同一函数实例内执行。并发增多,将增加函数实例的CPU、内存等消耗,建议配合压力测试进行合理设置,避免函数执行异常。目前支持的并发范围为 2~100 并发。
智能动态并发 启用后,在函数实例负载允许的情况下,智能动态调度更多请求到同一函数实例内运行。将于后续推出,敬请期待。

请求并发优势

在 IO 密集型场景中,如 Websocket 长连接业务,可减少计费执行时长,节省费用。
多个请求并发在同一个实例中可复用数据库连接池,减缓下游服务压力。
请求并发密集时,多个请求只需要一个实例进行处理,无需拉起多个实例,从而降低实例冷启动几率,降低响应延迟。

操作步骤

开启请求多并发

1. 登录云函数控制台,选择左侧导航栏中的 函数服务
2. 在“函数服务”列表页面,选择需进行配置的 Web 函数名。
3. 在“函数管理”页面中,选择函数配置
4. 在“函数配置”页面中,单击“编辑”,进入编辑模式。
5. 在“请求多并发”中,勾选“启用”,开启请求多并发模式,在弹出的“自定义静态并发”下方的输入框中输入需要的并发值。如下图所示:

6. 单击“保存”完成配置。

注意事项

计费

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

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

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

日志

开启请求多并发后,由于多个并发请求同时处理,每个请求产生的日志在流式上报时,可能会出现日志和 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 连接,则在连接未断开之前,并发实例数都会维持在一开始拉起的数量。通过配置动态预置避免冷启动,可以减少这类问题发生的概率。
相似文档
  • 操作场景: 云函数 SCF 于2021年01月29日起进行日志服务升级,接入腾讯云日志服务 CLS,在此日期前创建的函数正在按地域逐渐进行迁移,详情可参见 云函数日志服务变更说明。
  • 云函数 SCF 日志按条写入日志服务 CLS,每次请求的日志由多条组成,每条日志均为固定的 键:值 格式。
  • 说明: 若您的函数于2021年1月29日前创建且尚未进行迁移,如需使用更多日志分析功能,则请参见 日志投递配置(旧),将函数调用日志投递到日志服务 CLS 使用。
  • 说明: 云函数 SCF 于2021年01月29日起全量接入腾讯云 日志服务 CLS,在此之后创建的函数调用日志将默认投递至 CLS,且支持日志实时输出。若您的函数于2021年1月29日前创建,且需进行日志检索与日志投递,请参考本文档使用该功能。
  • 并发是云函数在某个时刻同时处理的请求数。在业务其他服务可以支撑的情况下,您可以通过简单的配置实现云函数从几个并发到数以万计并发的拓展。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部