当一个线上应用正在运行时,用户需要进行重新部署、扩容或者更新的时候,新注册的节点需要进行一些懒加载、连接池初始化等动作,无法接受一些大流量的请求,此时新上线的服务可能会有短时间内无法处理突增流量导致进程异常的风险。
针对应用启动阶段,TSF 提供了服务预热能力进行保护,对刚刚上线的节点仅分配较小流量,以方便新增节点完成初始化。避免在大流量场景下,由于初始化不彻底出现大量请求报错情况。
应用场景
当用户开启了滚动发布(虚拟机部署场景为滚动更新、容器部署场景为分批次发布)后,可以配置服务预热策略,在如下情况下服务预热策略会生效:
1. 新增节点:如新部署组上线,新增节点等。
2. 更新节点:如部署组进行更新重启,应用扩容等。
使用限制
仅 Spring Cloud 普通应用支持服务预热能力,对应支持的版本如下:
限制项 | 支持版本 |
Spring Cloud | Spring Cloud Finchley、Spring Cloud Greenwich、Spring Cloud Hoxton、Spring Cloud 2020,且SDK 版本为1.40及之后的版本 |
配置服务预热
1. 登录 TSF 控制台。
2. 在左侧导航栏中,单击部署组,选择好地域。
3. 找到目标部署组,单击操作列的部署应用。
4. 在部署应用页面,更新方式选择滚动更新,并设置好更新策略。
5. 打开是否开启服务预热开关,在展开的预热配置中根据您的业务需求配置服务预热策略。
说明
下图以虚拟机场景部署为例,容器部署场景的服务预热策略设置规则与之相同。
参数 | 描述 |
预热间隔 | 应用实例启动的预热时间,默认预热时长为 60 秒。服务预热时长设置范围为 0~600 秒。建议该值小于分批等待时间,避免出现多批节点同时在预热、更新状态,从而降低更新中服务的流量承载能力。 |
预热流量系数 | 基于已配置的预热间隔,被预热的应用流量权重会根据配置的预热流量系数呈指数型增长。在指定预热间隔内,预热流量系数越大则应用刚启动时分配的权重越小,以满足需要较长时间进行预热的复杂应用的预热需求。预热流量系数默认值为 2,表示在预热间隔周期内服务提供者的流量接收曲线形状呈 2 次曲线形状。预热流量系数设置范围为 0~5。相同预热间隔,预热流量系数越大,表示预热开始时接收的流量越小,临近预热结束时接收的流量增幅越大。 |
预热终止保护 | 当超过50%节点处于预热阶段,则预热终止,避免流量聚集在少量节点导致过载。预热终止开关默认打开。 |
6. 完成设置后单击提交。
结果验证
在应用部署后,可以查看预热效果。
1. 单击目标部署组的“ID”,进入服务实例列表页面。
2. 勾选实例ID后,单击左上角的查看监控,在监控页面可以查看预热效果。
服务预热效果。
2.1.1 分批重启,第一批重启两个节点,流量系数为 2,预热间隔为 180 秒。可以看到流量缓慢增长,三分钟后达到顶峰。
2.1.2 在第一批重启时,未重启的节点,承担了全部流量。
2.1.3 第二批重启时的流量接收表现。
2.1.4 第二批重启时,第一批重启的节点承担了大部分流量。
2.1.5 整体预热过程的表现
在稳定的业务流量下,可以看到新发布的应用所占流量比例呈预热流量系数缓慢增长。通过配置部署组的预热间隔以及预热流量系数来控制新发布的部署组流量比例,用户可以根据业务需求按需配置预热时长,并根据程序复杂度控制预热流量系数来调整应用刚启动时分配的流量权重。
应用部署时,配置不用的预热流量系数展示示例如下。
2.1.1 预热间隔为 180 秒,预热流量系数为 2。
2.1.2 预热间隔为 180 秒,预热流量系数为 5。