性能提升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进行规格选择与性能压测。
相关文章
|
2月前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
103 3
|
2月前
|
SQL 缓存 监控
接口性能倍增记:一次成功的优化实践
在软件开发过程中,接口性能优化是提升用户体验和系统稳定性的关键环节。本文将分享一次接口优化的成功案例,从问题发现到解决方案实施,详细介绍我们的优化过程和成果。
33 0
|
2月前
|
缓存 监控 数据库
接口性能飞跃:一次成功的优化实践
在软件开发中,接口性能优化是一个永恒的话题。一个高效的接口不仅能提升用户体验,还能减轻服务器压力,降低运营成本。本文将分享一次成功的接口优化案例,从问题诊断到解决方案实施,详细介绍我们的优化过程。
40 0
|
5月前
|
数据采集 人工智能 算法
谷歌发布大模型数据筛选方法:效率提升13倍,算力降低10倍
【8月更文挑战第31天】近日,谷歌发布了一项名为多模态对比学习联合示例选择(JEST)的研究成果,旨在优化大模型预训练过程中的数据筛选。JEST通过联合选择数据批次而非独立选择示例,利用多模态对比目标揭示数据间的依赖关系,提高了学习效率。实验表明,JEST能显著加速训练并降低计算成本,最多减少13倍迭代次数和10倍计算量。这一成果有望推动大模型预训练更加高效和经济。论文详情见:https://arxiv.org/abs/2406.17711。
79 2
|
6月前
|
SQL UED
领域模式问题之大模型应用的规模成本增加如何解决
领域模式问题之大模型应用的规模成本增加如何解决
|
8月前
|
人工智能 算法 搜索推荐
某国有银行业务收益提升30倍,它究竟是怎么做到的!
在激烈的银行竞争环境下,释放存量客户的复购潜力成为关注的重点。然而,目前银行销售理财产品过程中存在一系列问题,其中一个主要原因是过度依赖理财经理的个人经验。国有银行也难以避免这些问题在目标客户定位和营销执行过程中的出现。
|
存储 缓存 监控
浅谈系统性能提升的经验和方法
资金核对的数据组装-执行-应急链路,有着千万级TPS并发量,同时由于资金业务特性,对系统可用性和准确性要求非常高;日常开发过程中会遇到各种各样的高可用问题,也在不断地尝试做一些系统设计以及性能优化,在此期间总结了部分性能优化的经验和方法,跟大家一起分享和交流,后续遇到一些新的问题也会持续总结和补充。
39498 17
浅谈系统性能提升的经验和方法
|
测试技术 应用服务中间件
软件测试面试题:在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景?
软件测试面试题:在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景?
176 0
EMQ
|
缓存 运维 Kubernetes
5.0 版本持续优化:ExProto 吞吐性能提升
九月,EMQX 5.0保持稳定更新,目前已发布5.0.8版本,企业版4.3&4.4发布最新维护版本。云服务方面,EMQX Cloud新增1000连接规格的专业版部署。
EMQ
267 0
5.0 版本持续优化:ExProto 吞吐性能提升
|
存储 缓存 负载均衡
C++高并发场景下读多写少的优化方案
C++高并发场景下读多写少的优化方案 述 一谈到高并发的优化方案,往往能想到模块水平拆分、数据库读写分离、分库分表,加缓存、加mq等,这些都是从系统架构上解决。单模块作为系统的组成单元,其性能好坏也能很大的影响整体性能,本文从单模块下读多写少的场景出发,探讨其解决方案,以其更好的实现高并发。 不同的业务场景,读和写的频率各有侧重,有两种常见的业务场景: 读多写少:典型场景如广告检索端、白名单更新维护、loadbalancer 读少写多:典型场景如qps统计 本文针对读多写少(也称一写多读)场景下遇到的问题进行分析,并探讨一种合适的解决方案。
707 0
C++高并发场景下读多写少的优化方案