性能提升40倍——线上真实重构案例分享

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 性能提升40倍——线上真实重构案例分享

写在前面

这篇文章和大家分享一下最近和团队成员一起重构的围栏服务真实案例分享,二话不说,先上图:

d9cd0c030ce0a92e664f48bf9d1a0ed2.png

重构前后对比(单台docker服务压测结果)

对比项 QPS 平均RT P995耗时 说明
重构前 120 50ms 800ms 压测达到性能瓶颈
重构后 5000 5ms 50ms 压测未到达性能瓶颈

重构之后性能提升40倍,效果非常明显。

下面分享详细技术方案。

技术方案

一、背景/现状

  1. 多次压测反馈,目前线上机器8台docker大概只能支撑1k/QPS, 单机120/QPS。
  2. 无城市查询围栏场景,会循环判断该业务线下全国的围栏是否命中,耗CPU严重,高峰期性能瓶颈特别明显。


二、目标

  1. 1.派单围栏服务流程重构,通过派单系统自建空间索引RTree方式, 利用空间换时间的方式,先通过    RTree搜索围栏,再判断坐标是否在围栏内。
  2. 2.现有资源不变情况下,提升接口性能,并且支持水平扩展。


三、重构方案

1.重构前流程图


2.重构后流程图

b9af167847bb9b6f868ec52ea5868f43.png

3.RTREE数据结构简介: 每个节点是能把对应的围栏包起来 的最小外包矩形


四、里程碑节点

阶段 事项 开发时间
开发阶段 1. 围栏系统自建Rtree开发
2. 灰度方案开发(按流量灰度,支持header指定强制走新系统(方便压测),
3. 数据对比: 通过抓取线上日志,通过流量回放,同时请求新老围栏系统,判断结果是否完全一致。
4. 异常补偿: 强制刷新Rtree接口)
5d
测试阶段 由测试同学评估,开发提供影响范围 2d
灰度阶段 1. 按流量灰度平滑迁移  2. 压测 5d


五、灰度方案

按接口请求流量灰度

一阶段 二阶段【压测】 三阶段 四阶段 阶段
万分之一 1% 20% 50% 100%


六、所需资源

无需新增资源


总结:

本次重构优化效果很明显,其实改动并不是很大,可见合理的技术方案是非常重要的。作为技术人,我认为写代码是其次的,也是最基本的,除此之外应该多深入思考一下,多问问自己:"这样实现会不会有什么瓶颈?有没有更好的方案?我这样实现之后能不能水平扩展?如果不能,我有什么应对方案?"。

另外,借鉴之前老大说的一句话:"只要人觉得可能出现问题的地方,就一定会出问题!" ,敬畏心也是非常重要的,所以灰度方案,也是非常重要的。

刚接手这个新团队不久,重构之路刚刚启程,这篇文章也是记录一下心路历程,希望对大家也有所感悟和帮助。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
3月前
|
测试技术
优化if-else的11种方案
优雅编码不仅提升程序效率,也增进代码可读性与维护性。通过早返回减少嵌套逻辑、运用三元运算符简化条件判断、采用`switch-case`优化多分支结构、实施策略模式灵活应对不同情境、利用查找表快速定位处理方式、封装函数明确职责划分、应用命令模式解耦操作与调用、引入状态模式管理复杂状态变化、重构条件表达式以增强清晰度、运用断言确保前提条件、及合理异常处理等十大技巧,使代码更加精炼与优雅。
67 4
优化if-else的11种方案
|
1月前
|
编解码 监控 固态存储
提升系统的整体性能
提升系统的整体性能
30 2
|
3月前
|
数据采集 人工智能 算法
谷歌发布大模型数据筛选方法:效率提升13倍,算力降低10倍
【8月更文挑战第31天】近日,谷歌发布了一项名为多模态对比学习联合示例选择(JEST)的研究成果,旨在优化大模型预训练过程中的数据筛选。JEST通过联合选择数据批次而非独立选择示例,利用多模态对比目标揭示数据间的依赖关系,提高了学习效率。实验表明,JEST能显著加速训练并降低计算成本,最多减少13倍迭代次数和10倍计算量。这一成果有望推动大模型预训练更加高效和经济。论文详情见:https://arxiv.org/abs/2406.17711。
53 2
|
3月前
|
Docker 容器
典型热点应用问题之追求60秒构建时间目标的问题如何解决
典型热点应用问题之追求60秒构建时间目标的问题如何解决
|
4月前
|
SQL UED
领域模式问题之大模型应用的规模成本增加如何解决
领域模式问题之大模型应用的规模成本增加如何解决
|
6月前
|
人工智能 算法 搜索推荐
某国有银行业务收益提升30倍,它究竟是怎么做到的!
在激烈的银行竞争环境下,释放存量客户的复购潜力成为关注的重点。然而,目前银行销售理财产品过程中存在一系列问题,其中一个主要原因是过度依赖理财经理的个人经验。国有银行也难以避免这些问题在目标客户定位和营销执行过程中的出现。
|
SQL 关系型数据库 MySQL
浅谈千万级系统重构系列
浅谈千万级系统重构系列
105 0
|
存储 缓存 监控
浅谈系统性能提升的经验和方法
资金核对的数据组装-执行-应急链路,有着千万级TPS并发量,同时由于资金业务特性,对系统可用性和准确性要求非常高;日常开发过程中会遇到各种各样的高可用问题,也在不断地尝试做一些系统设计以及性能优化,在此期间总结了部分性能优化的经验和方法,跟大家一起分享和交流,后续遇到一些新的问题也会持续总结和补充。
39472 17
浅谈系统性能提升的经验和方法
|
测试技术 应用服务中间件
软件测试面试题:在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景?
软件测试面试题:在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景?
171 0
|
SQL 存储 关系型数据库
案例4:延迟优化 | 学习笔记
简介:快速学习案例4:延迟优化
下一篇
无影云桌面