知识卡片

单实例多并发的适用边界

专业/工作 · 332.d

内容

默认情况下FaaS是请求级别隔离的,同时来3个请求就会拉起3个实例,每个只处理1个请求。部分平台提供 “单实例多并发”能力,允许设置一个实例并发度,让1个实例并行处理多个请求,减少实例数量,从而降低 总执行时长、共享数据库连接池、减少[[冷启动的本质原因]]带来的新建实例次数、减少VPC IP占用。但这 项优化只在请求本身以I/O等待为主(大部分时间在等下游响应,CPU基本空闲)时才划算,因为空闲CPU 可以拿来处理别的请求;如果请求本身要消耗大量CPU/内存,或者请求之间有不能并发访问的共享状态, 挤在一个实例里反而会互相拖慢甚至出错。发散:这本质上和”用多线程还是多进程处理并发”是同一个决策—— I/O密集型场景靠并发共享等待时间获利,CPU密集型或有状态冲突的场景则需要隔离,FaaS只是把这个经典 权衡换了个包装。

参考来源

《Serverless工程实践:从入门到进阶》第4章《Serverless应用开发、调试与优化》