Lunarain_079's Inn

Back

QQ 客户端性能稳定性防劣化系统 Hodor 技术方案

https://cloud.tencent.com/developer/article/2427487

防劣化机制、向前兼容…今日头条前端架构设计解读

https://cloud.tencent.com/developer/article/1807771

抖音创作工具防劣化实践

https://www.hellobit.com.cn/doc/2021/8/4/448.html

为什么要构建一个防劣化系统#

  • 产品快速迭代,开发时为了”能跑“,不注意引入了性能问题
  • 历史问题积攒,架构在演进的时候出现不合理
  • 种种原因,引发系统性能下降

手机QQ的方案#

合流门禁+自动化测试+静态检查+动态性能监测

  1. 建立合流门禁,在合并主分支之前运行一系列测试,观测性能有无下降,如果性能报告发现性能在基准线下拒绝合入主分支
  2. 全链路自动化+定时测试,能定位性能瓶颈到某一个服务,并生成对应的性能提单
  3. 对OC符号问题和原生符号进行静态扫描,发现代码不合理所在
  4. 利用苹果提供的工具进行实时使用时的性能采集,获取对应数据

我们的方案——构建自动化门禁#

数据监测+合流门禁+自动化测试(利用流量重放)

原因#

  • 手机qq是客户端,且代码复杂,不易分析,推出静态检查+动态性能监测的方案,我们是web服务,大部分性能问题我们是可以直接通过服务器查找问题,不需要这么复杂的流程
  • 腾讯有着强大的测试团队,测试用例+测试流程很成熟,我们没有专门的测试团队,使用实际的流量可以帮助我们在测试较少的情况下进行回归测试+性能测试,能照顾到我们想不到的corner case

使用的组件#

  1. 流量录制 经过一系列调研:jvm-sandbox-repeater + 自研插件,moonbox,nginx…

最后选择了携程的开源方案:arex

  • 支持实时流量录制和回放,进行回归测试
  • 全链路追踪,提供trace id
  • 支持skywalking的集成,回归测试时可配合进行分析
  • 无侵入,利用agent进行数据采集
  • 提供webhook,可以构建 gitlab ci/cd流程
  1. 数据监测:skywalking
  • 对于每一个服务都有耗时监测,便于排查
  • 机器人实时监控报警

设计#

  1. 自动化门禁——利用github action,在push到主分支的时候进行相应的检查
    • 先调用arex提供的webhook进行回归测试,确认业务逻辑没有错误
    • 再通过py脚本获取arex中的测试数据,编写为jmeter模板,进行性能测试(压测),和标准版本比较
    • 两个测试都通过才能合并进入主分支
  2. 日常测试——arex定时任务,定时进行测试

落地遇到的挑战#

  • 需要的资源较多,arex单独部署需要4-6个g的内存,和skywalking一起就是6-8个g;测试环境也最好也得单独运行,尽量不在生产环境进行重放或压测
  • arex流量回放的回调结果是通过http发送的,不能直接发送给github action,需要一个服务实现提供hook返回测试结果;做性能测试的时候需要能访问arex所在机器的mongobd,做起来是一个偏向微服务的架构
  • 没有合适的工具录制websocket流量,基本都是只能录制http或者rpc,聊天接口测试需要单独适配(构建apifox的自动化流程
防劣化系统的构建
https://www.lunarain.top/blog/%E9%98%B2%E5%8A%A3%E5%8C%96%E7%B3%BB%E7%BB%9F
Author Lunarain_079
Published at July 8, 2025
Comment seems to stuck. Try to refresh?✨