您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
JSF预热功能在企业前台研发部的实践与探索
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
JSF预热功能在企业前台研发部的实践与探索
jd_4cf59ef7e7006
2023-04-03
IP归属:北京
24440浏览
本文共有 1,662 字 如果觉得页面很长 那是因为截图和留言很多,哈哈 # *00 导读* *企业前台研发部包含了企业业务大部分的对外前台系统,其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户。京东为这类客户专门开发API接口,对接到客户内网的网上商城,将产品SKU直接推送到客户内网,客户内部采购人员可以直接在内网商城进行下单采购,订单信息通过API接口传递到京东后台,由京东安排物流配送服务。VOP模式下,客户内网的数据信息京东并不抓取,从而实现内部采购架构的独立搭建及数据的保密与安全。* 随着业务的不断发展过程中,VOP截至目前已经服务于上千家企业Sass商城,其API接口的高并发、高可用、高可靠也就越发的重要。尽管我们如履薄冰的进行上线来尽可能的降低对接口的波动,但是发现,当下我们整个的上线流程中无损下线是没问题(NP层冷备机器直至无流量打进来,JSF层下线JSF服务),但是(自身&服务提供方)上线的瞬时波动都会或多或少引起我们系统的一阵报警,这对于一个"夜黑风高" 即将回家的我们多大的伤害。毕竟每一次性能或者可用率的报警都牵动着我们作为技术的心血管(牵动着客户的投诉...)。 通过本次JSF1.7.6的升级公告,其**预热策略动态下发**的特性,深深的吸引了我们,所以本文也将从JSF1.7.6预热的实践测试报告中,真实的讲述预热给我们平台带来的体验和帮助,供大家参考。 # *01 背景* ## **应用调用情况** ![img](https://apijoyspace.jd.com/v1/files/mMxC30uNbX1SFzkn47de/link) **场景一**:对外服务,部分接口发布过程中出现了大量的 5xx 超时异常,根据和客户侧研发团队的沟通,大概确定在应用启动后的时间点,会有部分接口的超时请求。 **场景二**:服务提供者接口发布,机器启动后,会有调用JSF超时请求。 以上两种情况都会影响到服务的稳定性,进而引起我们系统的一阵(TP99/可用率)报警,如下所示: ![img](https://apijoyspace.jd.com/v1/files/d6FSMgNGXZbnCU2r4f4h/link) <span style="color: #ef0b54">【补充】</span>这里同步一下检测工具:我们如何得知上下游是否存在部署事件。见:泰山平台故障分析模块,可以智能分析出上下游故障,或历史问题排查。 详细地址:[http://taishan.jd.com/faultAnalysis](http://taishan.jd.com/faultAnalysis) 帮助文档:[https://cf.jd.com/pages/viewpage.action?pageId=491274317](https://cf.jd.com/pages/viewpage.action?pageId=491274317) 通过故障分析,我们发现我们所依赖的接口系统正在处于部署状态,也就是说其上线发布影响到了我们接口的稳定性。 ![img](https://apijoyspace.jd.com/v1/files/nOaAdfb5Vm6wRKgQppro/link) # *02 预热管理实践* 问题是显而易见的,那么如何发现问题本质,并找到问题通用性,进而解决问题,推广各平台,最终达到良性循环,是我们着重需要考虑的。 **解决思路**:JSF1.7.6版本特性三:**预热策略动态下发,提升Provider实时治理能力** <span style="color: #7cafc2">*通过服务器其负载均衡的能力,对于上线需要预热的接口进行流量权重的调整,做到刚上线的应用按照对应所配置的规则进行小流量预热,使用方只需指定预热规则即可按照预期对刚上线的节点进行小流量预热。*</span> 当然新功能的引入,小至工具包升级,大致基础服务升级,都需要足够的测试实践和验证回归,一方面测试该功能是否符合我们的诉求,另一方面避免直接引入导致的一些未知异常。因此我们通过针对地址应用及自产自销的JSF接口进行测试实践,并形成以下报告。 ## *机器配置* 共计5台服务器 规格:4c8g 四台提供者:11.94.2.225,11.94.13.242,11.94.65.31,11.94.65.45 一台消费者:11.38.181.175 考虑到篇幅的问题,本文主要描述其中一个接口的上线情况,具体实践报告见:[https://joyspace.jd.com/page/LxPqDgcSA3GVjSYQRb73](https://joyspace.jd.com/page/LxPqDgcSA3GVjSYQRb73) ## *涉及接口* HTTP接口(消费者):[https://bizapi.jd.com/api/area/getTown](https://bizapi.jd.com/api/area/getTown) JSF接口(提供者):[com.jd.ka.vop.soa.address.sdk.provider.QueryAddressOpenProvider#queryJdAreaIdList](com.jd.ka.vop.soa.address.sdk.provider.QueryAddressOpenProvider#queryJdAreaIdList) ## *测试流程* **采用压力机,模拟调用对应接口,流量稳定后,模拟上线流程,按照50%的比例发布两台机器进行测试。** ## *未设置预热管理* 如下为流量稳定调用的UMP监控: ### 提供者监控 ![img](https://apijoyspace.jd.com/v1/files/Mbybh2wQeuVaPLpvSgfa/link) ### *消费者监控* ![img](https://apijoyspace.jd.com/v1/files/IDCEs4X5bXV5BOmIxscW/link) ## *未设置预热发布上线* *发布周期(15:40——15:44)发布机器比例50%* ### *提供者监控* ![img](https://apijoyspace.jd.com/v1/files/TO4uN99bkzpJEUVnfuWy/link) ### *消费者监控* ![img](https://apijoyspace.jd.com/v1/files/x2dx4j0PgmzXozweZDau/link) **通过上方监控图,我们可以清晰的看出**: - 无损下线过程符合预期,并且下线过程中并没有出现任何报错。 - 报错和性能下降期间处于服务端应用成功启动后且注册成功后。 ## *设置预热管理(流程同未设置预热情况)* 配置地址:[http://taishan.jd.com/jsf/protection/index](http://taishan.jd.com/jsf/protection/index) ![img](https://apijoyspace.jd.com/v1/files/N2guLuK6PZms4tHpEbiE/link) <span style="color: #f14703">**补充:**</span> - 权重和周期指的是初始权重到目标权重100,在预热周期内线性增长,流量在新节点逐渐增长的过程。(即:小流量预热) - 在泰山流量防护页面中新增的接口配置,必须是拥有该接口权限才可以直接进行配置。 - 在泰山平台配置后,则直接面向所有消费者有效。当然也可以使用JSF的标签配置进行预热,就仅对自身服务器有效。[](https://cf.jd.com/pages/viewpage.action?pageId=245184999#JSF配置参考手册-) - 预热周期最大2min 这里有个**小插曲**,最初我设置的权重为:<span style="color: #0a7f06">预热权重:10 周期:30000ms </span>,但是在测试结果中发现,效果并不明显,如下: ![img](https://apijoyspace.jd.com/v1/files/eOGzcWNRRDwUObLxZ0bm/link) 因此调整配置策略:<span style="color: #0a7f06">预热权重1,周期60000ms</span>。**以此降低初始权重,增大预热周期。** ## 设置预热发布上线 发布周期(17:36——17:40)*发布机器比例50%* ### *提供者监控* ![img](https://apijoyspace.jd.com/v1/files/QXRGKAWoDUrgjTugTbSu/link) 效果十分明显,如下: ![img](https://apijoyspace.jd.com/v1/files/WU0J6oBCG2iDAvNs6a2s/link) # *03 总结* **综上,性能波动影响,从直接发布的50%占比机器上看,配置预热后,其中一台影响下降了2.8——15倍左右;另一台机器上线性能波动几乎可以忽略(16ms)。(测试接口本身性能queryJdAreaIdList TP99 11ms左右)** **故,经过评估:provider冷启动后的瞬时TP耗时高,调用波动大进而导致请求有损的问题,可以通过自动预热机制解决。** 当然,根据目前行业的一些解决方案,无损上线功能远不止于此,期待JSF预热功能的能力与场景不断地大家的实践反馈中逐渐完善与丰富。 **最后感谢测试过程中企业效能技术部团队田庚和应用技术部团队易阳华、刘龙龙的支持与配合。** ------ **本次就写到这,文章中如有问题,欢迎留言斧正。希望能和更多志同道合的伙伴沟通交流。欢迎大家一键三连点赞收藏关注。**
上一篇:深入了解 JavaScript 内存泄漏
下一篇:架构师日记-为什么数据一致性那么难
jd_4cf59ef7e7006
文章数
6
阅读量
1677
作者其他文章
01
JSF预热功能在企业前台研发部的实践与探索
本文共有 1,662 字如果觉得页面很长那是因为截图和留言很多,哈哈00 导读企业前台研发部包含了企业业务大部分的对外前台系统,其中京东VOP平台(开放平台)适合于自建内网采购商城平台的企业客户。京东为这类客户专门开发API接口,对接到客户内网的网上商城,将产品SKU直接推送到客户内网,客户内部采购人员可以直接在内网商城进行下单采购,订单信息通过API接口传递到京东后台,由京东安排物流配送服务。V
01
VOP消息仓库演进之路|如何设计一个亿级企业消息平台
VOP作为京东企业业务对外的API对接采购供应链解决方案平台,一直致力于从企业采购数字化领域出发,发挥京东数智化供应链能力,通过产业链上下游耦合与链接,有效助力企业客户的成本优化与资产效能提升。本文将介绍VOP如何通过亿级消息仓库系统来保障上千家企业KA客户与京东的数据交互。本文共有 5,088 字如果觉得页面很长那是因为代码截图和留言很多,哈哈引言消息(仓库)作为电商业务场景必不可少的核心功能,
01
JSF源码分析(一)
本文共有 6,806 字如果觉得页面很长那是因为代码截图和留言很多,哈哈架构设计1.7.4-HOTFIX-T4版本包布局及简要含义看过了全包的简要,那么其核心的功能模块,就从常用的项目xml配置出发,便于我们的理解。如下:jsf-provider.xml配置以我们地址服务的jsf-provider.xml文件为例,即:可以看到,在JSF的配置文件中,我们并没有看到任何关于注册中心的内容。说到底,作
01
卓越笔触:打造高质量文章的艺术与科学
引言在信息爆炸的时代,写作不仅是一种表达,更是一种影响力的体现。无论是为了提升个人品牌,还是为了增强团队的技术氛围,或是推动集团的技术影响力,一篇高质量的文章都能起到关键作用。在这次分享中,我将探讨为什么我们需要写好文章,并提供实用的技巧,帮助大家提升文章的质量。希望这次分享能激发大家的写作热情,共同推动技术交流与知识传播的进程。一:我们为什么要写一篇好文章?1、对于集团2024年巴黎奥运会已结束
jd_4cf59ef7e7006
文章数
6
阅读量
1677
作者其他文章
01
VOP消息仓库演进之路|如何设计一个亿级企业消息平台
01
JSF源码分析(一)
01
卓越笔触:打造高质量文章的艺术与科学
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号