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

写在前面

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

0426d6cc2deac54ec8263301fa65ccbb.png

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

对比项QPS平均RTP995耗时说明
重构前12050ms800ms压测达到性能瓶颈
重构后50005ms50ms压测未到达性能瓶颈

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

下面分享详细技术方案。

技术方案

一、背景/现状

  1. 多次压测反馈,目前线上机器8台docker大概只能支撑1k/QPS, 单机120/QPS。

  2. 无城市查询围栏场景,会循环判断该业务线下全国的围栏是否命中,耗CPU严重,高峰期性能瓶颈特别明显。

二、目标

  1. 派单围栏服务流程重构,通过派单系统自建空间索引RTree方式, 利用空间换时间的方式,先通过RTree搜索围栏,再判断坐标是否在围栏内。

  2. 现有资源不变情况下,提升接口性能,并且支持水平扩展。

重构方案

  1. 重构前流程图

19d0876ed89ec3f13f68a7d4cb875fdc.png
  1. 重构后流程图

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

cbadea2dd430e089564900ce43efc562.png

四、里程碑节点

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

五、灰度方案

按接口请求流量灰度

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

六、所需资源

无需新增资源

总结:

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI觉醒实战营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值