Web 函数(Web Function)是云函数的一种函数类型,区别于事件函数(Event Function),Web 函数通过支持原生的 HTTP/WebSocket 协议,兼容任意一种原生 Web 框架编写的 Web 服务,无需改造即可将传统项目部署到函数,保证和本地开发服务体验一致。
自 21 年 6 月推出以来,广受欢迎,数万传统 Web 项目轻松迁移到函数上,让老代码也能在 Serverless 基础设施上继续发光。然而,随着 Web 函数在更多场景得到应用,一些问题也逐渐暴露出来。
01
Web 函数请求单并发
默认情况下,在调用函数时,云函数会分配一个并发实例处理请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的并发实例。一个并发实例同一时刻仅处理一个事件的运行逻辑,保障每个事件的处理效率和稳定性。
在大多数情况下,请求单并发都是值得推荐使用的模式,无需在写代码时考虑多个请求同时处理带来的典型并发难题,例如线程安全、阻塞调用、异常处理等。
而在 Web 应用中,典型的业务场景是 IO 密集型——函数内访问数据库或其他系统的接口等下游服务,会有较多时间在等待这些下游服务响应。这种等待一般都是在做 iowait,不怎么消耗 CPU,此时,单实例单并发模式则会产生两个问题:
- 计算资源浪费,在 websocket 长连接中尤为突出;
- 计费略高,每一个同时进来的请求因为分配在不同的实例中进行处理,单独计费,整体费用较传统容器或主机方案没有优势。
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
如您对产品有任何疑问