近年来通天塔的业务数据量和用户流量都呈现出了非常迅猛的增长趋势 , 为了解决历史架构设计中的不足,应对诸多因素引发的风险并保证通天塔平台的稳定运行,通天塔后端组专项成立了一个“通天塔后端技术优化组”,号召并鼓励团队每个人积极参与进来,全盘分析和梳理、技术设计和技术Review、形成技术优化需求、排期、自测和验证效果、Code Review、制定灰度和上线计划、上线、总结经验并形成未来可借鉴的方法 。
本文主要聚焦在总结通天塔性能优化的经验,为聚合服务的性能优化提供些参考 。
优化效果
本次通天塔性能优化对比了优化前后的数据 , 约有10%~30%的提升:
优化原则
性能优化主要按下图所示“三步走” 。
通过测试收集性能指标数据,具体分析产生性能问题的原因,对症下药解决性能问题 。
从长期看 , 这样的优化过程是持续进行、反复迭代的 。但是短期看,我们同样需要一些阶段性的里程碑来提升信心 。
因此,在做通天塔性能优化时 , 我们制定了一些优化标准 。例如:接口响应指标AVG、TP999提升10~20%,吞吐率提升(当时没有定明确的量化值,主要考虑到响应提升间接也能带来一定的吞吐率提升) 。
并且,我们始终要坚持一些基本的系统优化原则:
1.以不影响业务功能为前提 。保证优化前后逻辑的一致性 , 从理论到实践,通过严格的论证和全面的测试 。
2.注重优先级 。优先考虑一些性价比高的优化,性价比太低的放到最后 , 甚至干脆就不考虑了,节省研发成本 。
3.奥卡姆剃刀原则 。即简单性原则 。新产生的性能问题的原因很可能是最近的迭代造成的;非必要的功能、代码,能不加就不加 。
性能测试
测试是为了收集性能数据,为后续分析调优提供基础 。通天塔在优化过程中,主要采取了两类性能测试方法:
1.微基准测试:针对方法级别,主要使用JMH等工具检测方法的吞吐和延迟 。
2.宏基准测试:针对系统级别,主要使用forcebot(公司内部工具)压测系统整体的性能(CPU、内存、IO、JVM、延迟、吞吐等等) 。开源的ab,jmeter等性能测试工具也能达到类似的效果 。
对于性能指标,目前我们主要采集了如下的一些指标:
- CPU、内存、IO等系统指标
- 接口延迟、QPS等
- JVM堆、栈等指标采样
- 调用链延迟分析工具等
收集到系统资源、JVM、应用等性能指标后,对各类性能指标的问题表现进行分析,简单总结了以下一些点:
CPU高:
- 计算任务重
- 正则表达式回溯
- GC频繁
- 上下文切换多
- 大量异常填充栈信息
- 创建对象多
- 内存泄漏
- STW过多
- 日志记录影响
- 传输数据量大
- 串行IO设计影响
- 上游尾延迟影响
调优策略
这里主要介绍对问题表现的分析后进行的一些系统优化 。
1 优化设计
设计层面的优化,需要我们对自身的应用架构足够熟悉,缩小可能存在瓶颈的范围 。然后再借助压测、调用链分析等工具,进一步确诊问题点 。
6.1.1 多任务RPC查询调度编排优化
对于通天塔(存在大规模扇出依赖查询的聚合服务也是类似)来说,有大量的上游依赖需要进行RPC调用来获取外部数据,再结合系统内部数据进行聚合 。为了只关注我们的优化点,我们把这个过程简化为如下图所示:
图6.1.1.a:通天塔数据聚合过程
对于外部数据的获?。颐强梢允褂孟叱坛厝プ鲆淮尾⑿胁檠?。对于简单的页面来说这是一种非常理想的情况,但是实际情况往往复杂得多 。当配置的页面复杂度提高后,外部数据之间也会存在着依赖关系,依赖之间必须串行执行,一次并行查询无法解决问题 。如下示意图展示了外部数据的依赖关系及我们优化前的设计:
图6.1.1.b:优化前外部数据查询示意图
推荐阅读
- 第一次和女生见面送什么礼物好 第一次和女生见面适合送什么礼物
- 百子莲养殖方法 百子莲养殖方法有什么
- 教育心理学的体系是怎样的
- 房产交易适用税费 最全总结 房地产税种
- 22岁0基础可以做什么 22岁0基础学什么技术好
- 考博需要什么条件,读博的条件
- 考会计证有年龄限制吗
- 一加电视售价是多少钱 一加电视卖多少钱
- 龙门石窟为什么有这么多佛像 龙门石窟简单介绍