后端服务之应用预热 | 京东云技术团队

京东云开发者
• 阅读 398

一 背景

C端服务应用升级和重启,导致耗时瞬时抖动,业务超时,应用监控报警,上游感知明显,导致用户体验变差。

二 应用升级重启导致抖动的原因

1 C端服务应用升级和重启的冷启动阶段,它需要重新加载和初始化各种资源,例如数据库连接、缓存数据等,导致耗时瞬时飙升。

2 应用重启后,本地缓存失效,应用需要重新加载数据,导致耗时变长。

3 应用重启后,有大量请求堆积,导致系统负载增加,线程处理不及时,导致系统响应变慢。

三 解决方案

1 停服时,先下线JSF接口,再升级应用,待应用启动成功后,JSF服务接口延迟注册到注册中心。

2 JSF开启预热功能,是服务提供者重启后,JSF上线后,消费者与服务者建立链接后,调用方客户端先放设置比例的小部分流量过来到升级重启的实例,在预热周期内,逐步到100%

3 在应用升级流程编排中,结合流量回放,编排流程,在流量回放后再操作JSF上线,实现略复杂,依赖基础运维

方案1,方案2实现简单,预热效果也比较好,使用的是JSF的预热功能,以下效果对比的实现来自方案2的JSF预热功能。

四 采用JSF开启预热功能效果对比

1 服务提供者配置预热周期

预热初始权重:consumer连接到provider后,provider的初始权重(provider端权重会在预热周期内会逐渐恢复到正常权重,一般是100)

后端服务之应用预热 | 京东云技术团队

2 未开启预热容器实例整体升级重启监控:

应用部署在3个机房,所以看到3次抖动,可以看到TP999最高的机房达到了近25s。

后端服务之应用预热 | 京东云技术团队

开启预热后整体实例升级重启效果:

应用部署在3个机房,所以看到3次抖动,可以看到TP999最高的机房降到了2.5s,降幅达10倍。

后端服务之应用预热 | 京东云技术团队

3 未开启预热,单实例应用重启监控

max达到了20s,TP999到达了18s

后端服务之应用预热 | 京东云技术团队

开启预热后,单实例应用重启监控

max降到了2s,TP999将到了1.5s左右,降幅达10倍,TPS在配置的预热周期内(60s)呈现线性增长

后端服务之应用预热 | 京东云技术团队

五 注意事项

依赖服务调用方升级JSF到1.7.6版本及以上,推动所有调用方升级JSF

可根据应用的启动时间和特性,调整应用匹配的预热周期,达到相对预热效果最好的状态。至于是否有必要结合流量回放和流程编排实现预热,需结合自己的业务情况和实现成本考虑。

作者:京东科技 张石磊

来源:京东云开发者社区 转载请注明来源

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java 代码实现使用Druid 链接池获取数据库链接
因为原先使用的c3p0链接池,时常出现:APPARENTDEADLOCK!!!Creatingemergencythreadsforunassignedpendingtasks,以及出现线程死锁的情况导致服务器经常需要重启,很是头疼。所以考虑使用Druid链接池来代替原先的c3p0.AlibabaDruid中文文档(https:/
Easter79 Easter79
3年前
tcp_tw_recycle参数引发的数据库连接异常
【问题描述】开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:  其一:连接超时  <spanstyle"backgroundcolor:FFFF00"131148.00msTomcatConnectionPool</span  其二:连接耗时过
可莉 可莉
3年前
2019年初,一次Confluence迁移升级历程
AtlassianConfluence从5.7.1升级到6.14.1背景随着时间的推移用户量不断增长数据量也越来越大Confluence最初安装使用的是内存数据库由于这个技术债务所需的资源(尤其是内存)越来越大服务启动所需JVM需求不断增长:4G—8G—12G曾出现因JVM不足导致系统慢或重启失
Wesley13 Wesley13
3年前
K8S为何杀死我的应用
首发公众号:二进制社区,转载联系:binary0101@126.com导读"K8S为我们提供自动部署调度应用的能力,并通过健康检查接口自动重启失败的应用,确保服务的可用性,但这种自动运维在某些特殊情况下会造成我们的应用陷入持续的调度过程导致业务受损,本文就生产线上一个核心的平台应用被K8S频繁重启调度问题展开剖解,抽丝剥茧一
Stella981 Stella981
3年前
2019年初,一次Confluence迁移升级历程
AtlassianConfluence从5.7.1升级到6.14.1背景随着时间的推移用户量不断增长数据量也越来越大Confluence最初安装使用的是内存数据库由于这个技术债务所需的资源(尤其是内存)越来越大服务启动所需JVM需求不断增长:4G—8G—12G曾出现因JVM不足导致系统慢或重启失
Stella981 Stella981
3年前
Spring boot 2.3优雅下线,距离生产还有多远?
前言在生产环境中,随着云原生架构的发展,自动的弹性伸缩、滚动升级、分批发布等云原生能力让用户享受到了资源、成本、稳定性的最优解。但是在应用的缩容、发布等过程中,由于实例下线处理得不够优雅,将会导致短暂的服务不可用,短时间内业务监控会出现大量io异常报错;如果业务没做好事务,那么还会引起数据不一致的问题,那么需要紧急手动订正错误数据;甚至每次发布
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
万物云原生下的服务进化 | 京东云技术团队
在万物云原生下的环境下,Java的市场份额也因耗资源、启动慢等缺点,导致在云原生环境里被放大而降低,通过这篇文章,读者可以更好地了解如何在云原生环境下通过升级相关版本和使用GraalVM打出原生镜像到方式,优化Java应用的性能和资源利用率,使Java应用更好地适应云原生环境。
京东云开发者 京东云开发者
11个月前
记一次线上问题引发的对 Mysql 锁机制分析 | 京东物流技术团队
背景最近双十一开门红期间组内出现了一次因Mysql死锁导致的线上问题,当时从监控可以看到数据库活跃连接数飙升,导致应用层数据库连接池被打满,后续所有请求都因获取不到连接而失败整体业务代码精简逻辑如下:@Transactionpublicvoidservic
京东云开发者 京东云开发者
10个月前
记一次生产慢sql索引优化及思考 | 京东云技术团队
一问题重现夜黑风高的某一晚,突然收到一条运营后台数据库慢sql的报警,耗时竟然达到了60s。看了一下,还好不是很频繁,内心会更加从容排查问题,应该是特定条件下没有走到索引导致,如果频繁出现慢查询,可能会将数据库连接池打满,导致数据库不可用,从而导致应用不可