知识卡片

应用宽限期应短于平台强制期限

专业/工作 · 523.c.1

内容

优雅关闭有个”宽限期”概念:应用收到终止信号后,最多能花多久时间处理完在途请求。这个宽限期在两个层面都存在——应用自己配置一个(比如 Spring Boot 的 15 秒),平台(Kubernetes)也配置一个默认 30 秒的宽限期,超时还没关闭就直接强制杀死。关键是应用层的宽限期要设得比平台层的短:只要应用能在自己设定的时间窗口内主动完成关闭,主导权就始终握在应用手里,平台那个更长的强制期限永远用不上、只是个兜底;反过来如果应用宽限期比平台的长,应用还没善后完就先被平台强制杀掉,之前做的”优雅关闭”配置全部白费。发散:这是一个通用的”软限制要严于硬限制”的设计原则——只要软限制留有余量,系统的实际行为就完全由软限制决定、可预测、可控;一旦软限制和硬限制的大小关系反过来,系统的行为就变成了由更粗暴的那个硬限制说了算,之前精心设计的优雅逻辑全部失效。

参考来源

《Cloud Native Spring in Action》第7章《Kubernetes fundamentals for Spring Boot》