在Serverless 应用引擎 SAE(Serverless App Engine)新版环境中,您可能会遇到这样的情况:尽管所有实例均处于运行状态,一部分实例却并未参与实际的流量处理,由此导致这些实例上业务日志的缺失。SAE新版支持微服务场景和Web应用场景。在Web应用场景下,采用了动态的流量调度策略,只要是为了优化资源利用和响应速度。然而,请求调度至实例的策略,因为不同实例间的流量分配不均可能导致实例间流量承接存在差异。
原理
单实例并发请求数是指每个应用实例能同时处理的请求次数上限,其SAE默认上限值为10。当并发请求数设置为10时,每个实例最多能同时处理10个请求。SAE根据流量自适应调整应用实例,当单个实例的并发请求数达到上限,才会创建新的实例。您可能会遇到以下情况:
当处理11个请求时,实例A的并发请求数达到上限,第11个请求将会由实例B承接。
当两个实例的部分请求处理完成后,实例A、B目前的请求数均下降为9,此时新请求会随机由实例A或B承接。如果实例A、B目前的请求数不同,则新请求优先由并发请求数较多的实例承接。
当请求缩减至10个内,将全部由单个实例承接。根据您已配置的实例数范围,应用实例将缩容至指定的最小值。
您可以在创建Web应用或更新Web应用版本时,设置单实例并发请求数和自动扩缩实例数范围。具体操作,请参见应用部署和版本管理。
相关影响
计费
在1个实例内并发处理请求可以节省费用。针对Web场景,SAE不会为无请求的实例分配CPU,因此无CPU计费。计费详情,请参见按量计费。
日志
无请求的实例,没有请求相关的日志。
常见问题
为什么设置了2个实例,但是只有1个实例有日志,另外1个实例没有日志?
该实例当前没有处理实际的请求,因此没有请求相关的日志。同时系统也没有给该实例分配CPU,所以CPU计费为0。
在代码中创建了进程/线程/协程,为什么它们没有被执行?
当前实例如果没有正在处理的实际请求,那么他的CPU就会被冻结,子线程中的代码也就无法执行了。