长虹电视Launcher系统后端接口服务重构总结

背景

1、Launcher主场景和积分商城等业务接口都在一个工程,业务间相互影响,不利于后期扩展与维护,单War包部署,也存在单点故障风险,牵一发而动全身。
2、Jar包维护升级不易,项目构建方式待改进。
3、部分基础组件老化,影响系统性能。
4、接口安全性不高,数据冗余量大。
5、终端调用机制不合理。
6、系统单元测试,集成测试机制不完善。
7、文档不完善,开发流程不规范。
...

目标

1、基于现有服务逐步迭代优化升级。
2、Launcher,积分商城系统分离为2个独立的系统。
3、引进合适的项目构建工具。
4、升级老化的基础组件。
5、梳理,优化业务逻辑。
6、完善系统单元,集成测试机制。
7、规范开发流程。
...

实现按业务组件化,分布式部署,前后端分离

图片.png

实施步骤

第一步:系统分离
梳理系统业务逻辑,分离Launcher主场景与积分商城,基于Git+Maven搭建新系统。
注:此步改动较小,不影响现有系统使用,只是简单的将Launcher主场景与积分商城分离为2个独立的系统,为后续优化升级打基础。
第二步:组件优化升级
引入SpringBoot,优化,升级老化的基础组件。
新建基础组件工程:主要提供系统相关基础功能,如,公共功能(缓存、基类、加解密、异常处理等等)、公共配置、工具类。
Launcher主场景与积分商城系统分别依赖基础组件,在此基础上优化调整(主要是接口发布方式的调整)。
注:此步改动较大,但未涉及到业务层深层次的梳理及优化。
第三步:业务逻辑梳理及优化
主要针对终端接口调用流程以及接口数据格式优化:
终端调用接口流程的调整:原有流程
1:终端->获得模式列表接口
2:终端->获得导航列表接口
3:终端->获得推荐数据接口
说明:主要压力集中在第3,终端会根据第2返回的导航列表数据,反复执行第3,获取推荐数据,更新本地缓存,无论本地缓存是否已经是最新版本。这样就没有充分利用终端数据缓存的优势,终端产生了很多不必要的数据请求,增加了服务端的压力,特别是在特定时间段影响就更为明显,调用流程如下:


重构前终端接口调用流程

终端调用接口流程的调整:优化后流程
第一步:终端->获得模式列表接口
第二步:终端->获得导航列表接口(增加返回每个板块数据的版本号)
第三步:终端->根据返回版本号与本地缓存板块版本号对比,不一致则执第四步,否则直接使用本地缓存数据。
第四步:终端->获得推荐数据接口。
这里终端多了一步本地缓存数据版本对比,实现了按需请求数据,而不是以前那种全量数据请求,大大减少了终端请求次数,降低了服务端压力。
建议:以上为开机时固定的执行步骤,执行完后,终端处理空闲期,不再请求launcher数据,我们可以利用这个空闲期,定时检查服务端是否有数据更新,如果有就更新,这样将数据的更新分散到不同时间段,有效地避免了特定时间段大量数据请求,也在一定程度上保证了数据的及时性。


优化后终端接口调用流程

接口返回数据优化与调整:优化响应报文结构,去除冗余字段,精简数据(如果字段值为空,则不返回)。有效地减少了响应数据量的大小(主场景获取版块内容接口从原来的100k左右减少到60K左右)。

重构产出

一:实现了Launcher主场景,积分商城接口系统分离。
二:引入Maven项目构建工具。
三:梳理,优化了接口业务逻辑:
--------1、终端调用流程的优化,大幅度降低了请求次数,减少了服务端的压力。
--------2、后端业务逻辑梳理:
--------------- 优化了数据库查询SQL语句,提高查询效率。
---------------优化接口请求以及响应参数,减少不必要的字段,极大的减少了请求,响应数据大小,提高了接口响应时间。
---------------优化缓存机制,有效减轻了数据库查询压力:
----------------------------热点数据集中失效解决方案:redisson分布式锁+随机过期时间
----------------------------缓存穿透的解决方案:设置空数据特定值(根据launcher业务场景特性:空数据的key数量有限、key重复请求概率较高)。
----------------------------缓存穿透的解决备选方案:空数据的key各不相同、key重复请求概率低的场景而言,可使用BloomFilter。
---------------优化远程服务调用组件,新增超时熔断机制
四:完善系统单元测试机制:基于Junit单元测试+基于Httpclien的集成测试有效保证了接口的完整及正确性。
五:整理出一套基于SpringBoot的微服务快速开发框架
六:增加接口安全校验机制,使接口不再裸奔,减少了非法请求量,提高了安全性。
--------1、引入kong网关,校验请求合法性以及流量控制。
--------2、接口请求,响应增加签名,验签机制。
七:规范开发流程:
--------1、开发前根据规格书梳理需求,编写开发文档。
--------2、开发中定期代码review,站立会,周例会。
--------3、开发完成,整理上线文档以及总结。
--------4、统一对外接口规范。
--------5、整个流程将产出以下文档:


文档目录

性能指标

图片.png

搭载情况

1、终端3期三阶段后的机型+部分整机升级机型。
2、截止到2019年5月搭载新接口终端数约为250万

重构前后应用架构示意图

重构前

重构后

重构前后部署架构示意图

重构前

重构后

你可能感兴趣的:(长虹电视Launcher系统后端接口服务重构总结)