首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Web 函数请求多并发上线,Web 服务部署更快更省

Web 函数请求多并发上线,Web 服务部署更快更省

作者头像
腾讯云serverless团队
发布2022-05-09 14:40:16
6520
发布2022-05-09 14:40:16
举报

Web 函数(Web Function)是云函数的一种函数类型,区别于事件函数(Event Function),Web 函数通过支持原生的 HTTP/WebSocket 协议,兼容任意一种原生 Web 框架编写的 Web 服务,无需改造即可将传统项目部署到函数,保证和本地开发服务体验一致。

自 21 年 6 月推出以来,广受欢迎,数万传统 Web 项目轻松迁移到函数上,让老代码也能在 Serverless 基础设施上继续发光。然而,随着 Web 函数在更多场景得到应用,一些问题也逐渐暴露出来。

01

Web 函数请求单并发

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

在大多数情况下,请求单并发都是值得推荐使用的模式,无需在写代码时考虑多个请求同时处理带来的典型并发难题,例如线程安全、阻塞调用、异常处理等。

而在 Web 应用中,典型的业务场景是 IO 密集型——函数内访问数据库或其他系统的接口等下游服务,会有较多时间在等待这些下游服务响应。这种等待一般都是在做 iowait,不怎么消耗 CPU,此时,单实例单并发模式则会产生两个问题:

  1. 计算资源浪费,在 websocket 长连接中尤为突出;
  2. 计费略高,每一个同时进来的请求因为分配在不同的实例中进行处理,单独计费,整体费用较传统容器或主机方案没有优势。

02

Web 函数请求多并发

Web 函数目前已经支持请求多并发模式,您可以根据业务需要进行启用和配置。请求多并发支持自定义静态并发、智能动态并发两种模式。

自定义静态并发

启用后,当同时有多个请求,将不超过指定并发值的请求调度到同一函数实例内执行。并发增多,将增加函数实例的CPU、内存等消耗,建议配合压力测试进行合理设置,避免函数执行异常。目前支持的并发范围为 2~100 并发。

智能动态并发

启用后,在函数实例负载允许的情况下,智能动态调度更多请求到同一函数实例内运行。将于后续推出,敬请期待。

03

压测

多并发 vs 单并发压测结果:最大请求延迟降低 82.7%,成本节约 98.8%

测试说明:

在北京地域准备一个 Web 函数,模拟请求响应时间 500ms,函数配置为 512MB。

在北京市准备公网压测环境,分别压测未开启多并发和开启 100 多并发时的表现,压测条件为:100 并发,持续请求 50000 次。

未开启请求多并发:需要 60 个实例,最大响应时间 4177ms,计费内存时间 12500GBs

客户端压测结果:最大响应时间 4177ms,平均响应时间为 569ms。压测开始时,函数接收到 100 并发请求,立即开始冷启动拉起函数实例,在冷启动过程中,头几批请求开始等待,最长响应时间为 4177ms,而随着实例拉起来正常处理请求,则新的并发请求会被立即均匀分配到多个实例中进行处理,因此后续的大多数请求等待时间小,整体平均响应时间被拉平,回归到正常水平。

函数监控截图:一开始冷启动瞬间拉起了 100 个实例,后续实例轮转复用,平稳在 60 实例。计费时间为 0.5GB * 0.5s * 50000 = 12500GBs。

开启请求多并发:仅需 1 个实例,最大响应时间 723 ms,计费时长 150GBs

客户端压测结果:最大响应时间 723ms,平均响应时间为 565ms。压测开始时,函数接收到 100 并发请求,立即开始冷启动拉起函数实例,在冷启动过程中,头一批请求开始等待,最长响应时间为 723ms,而随着第一个实例被拉起来,新的并发请求会被立即分配到该实例中进行处理。处于等待冷启动中的请求数要显著少于未开启多并发时。

函数监控截图:并发请求进入,所有请求被分配到一个函数实例进行立即处理。

函数计费时间内存截图:只需一个实例,多并发模式下,分配到同一实例处理的请求,只会计算一次,计费时间为 0.5GB * 282.728s = 141GBs。节省 98.8% 费用。

04

请求多并发的优势

成本更低

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

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

可以看到,在 IO 密集型场景中,如 Websocket 长连接业务,可减少计费执行时长,节省费用。

性能提升

多个请求并发在同一个实例中可复用数据库连接池,减缓下游服务压力。

请求并发密集时,多个请求只需要一个实例进行处理,无需拉起多个实例,从而降低实例冷启动几率,降低响应延迟。

了解更多解决方案欢迎扫描下方二维码咨询

  • 云函数 SCF :https://cloud.tencent.com/product/scf?from=15939
  • 事件总线 EventBridge :https://cloud.tencent.com/product/eb?from=15940

如您对产品有任何疑问 🤔️ 或建议📃 ,欢迎下方留言交流。

点击 「阅读原文」查看产品文档, 立即体验!

↓↓↓↓↓↓

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ServerlessCloudNative 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义静态并发
  • 智能动态并发
  • 多并发 vs 单并发压测结果:最大请求延迟降低 82.7%,成本节约 98.8%
    • 未开启请求多并发:需要 60 个实例,最大响应时间 4177ms,计费内存时间 12500GBs
      • 开启请求多并发:仅需 1 个实例,最大响应时间 723 ms,计费时长 150GBs
        • 成本更低
          • 性能提升
          相关产品与服务
          云函数
          云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档