美文网首页
长虹电视Launcher系统后端接口服务重构总结

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

作者: javacoo | 来源:发表于2020-05-28 10:21 被阅读0次

背景

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系统后端接口服务重构总结

    背景 1、Launcher主场景和积分商城等业务接口都在一个工程,业务间相互影响,不利于后期扩展与维护,单War包...

  • 接口、安全、性能测试

    接口测试 1.定义:接口测试时测试系统组件间接口的一种测试 包括:模块接口测试、后端服务器接口测试、外部接口测试。...

  • Nginx and micro-service

      一个web系统,它每个前端页面上的功能都会有一个或者数个后端接口来支撑。现在假设系统后端服务是微服务架构,一共...

  • 重构总结

    最近对一个老的系统进行重构,有些感触,写出来做个总结 重构的原则保证和第三方的交互接口没有变化,保证新系统上线后,...

  • node如何实现java接口的中转

    #序言 由于项目重构,需要实现彻底的前后端分离,前端页面和后台的接口放在不同的服务器上以便于维护,前端只维护页面,...

  • 互联网分层架构,为啥要前后端分离?

    通用业务服务化之后,系统的典型后端结构如上: web-server通过RPC接口,从通用业务服务获取数据 biz-...

  • 互联网架构,为啥要前后端分离?

    通用业务服务化之后,系统的典型后端结构如上: web-server通过RPC接口,从通用业务服务获取数据 biz-...

  • 学习笔记--Launcher应用的进程启动流程

    Launcher应用的进程启动流程 紧接上篇从开机到SystemServer系统服务启动,这篇分析Launcher...

  • 长虹Launcher项目简介

    Launcher项目简介 Launcher是一套涵盖终端操作功能和云端管理功能的端云一体化管理系统,将独立分散的终...

  • ELK前端日志分析、监控系统

    ELK前端日志分析、监控系统 前端日志与后端日志不同,具有很强的自定义特性,不像后端的接口日志、服务器日志格式比较...

网友评论

      本文标题:长虹电视Launcher系统后端接口服务重构总结

      本文链接:https://www.haomeiwen.com/subject/ohkoahtx.html