ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

专项2:项目性能优化可量化指标

专项2:项目性能优化可量化指标 CaffeineRedis 二级缓存解决缓存穿透、击穿、雪崩核心技术知识点本地缓存 Caffeine 特性高内存读写、进程内无网络 IO、淘汰策略 LRU分布式缓存 Redis 做兜底存储布隆过滤器拦截不存在数据防穿透热点 key 分布式锁 重试防击穿缓存过期随机偏移防雪崩Lua 脚本统一缓存操作保证原子性生活化通俗举例超市货架分层放商品收银台手边小货架Caffeine 本地缓存高频热销商品随手就能拿不用跑仓库后方大仓库Redis存放全部商品需要走一段路调取门口安检黑名单布隆过滤器顾客要买不存在的商品直接拦在门外不用去仓库翻找爆款限量商品抢购热点 key一次只放一个购买名额锁防止所有人同时冲进仓库抢空商品保质期错开设置过期随机偏移不会同一天全部商品过期下架仓库瞬间爆满。架构流程图优化前后对比表格对比维度优化前单层 Redis优化后二级缓存 配套方案量化提升接口平均响应320ms62ms性能提升 80.6%MySQL 无效查询12 万次 / 小时0.8 万次 / 小时DB 压力降低 93.3%缓存雪崩故障每月 5~8 次全年 0 次彻底消除雪崩Redis 网络请求量高降低 65%Redis CPU 78%→31%优化前痛点仅单层 Redis每次查询走网络 IO延迟高无布隆过滤器空手机号大量穿透数据库热点营销 key 并发击穿 MySQL缓存同时过期定时活动雪崩。落地改造方案Caffeine 本地缓存 Redis 二级缓存架构启动预加载有效手机号至布隆过滤器拦截无效查询热点 key 加分布式锁 短休眠重试避免击穿所有缓存 key 过期时间随机 ±30 分钟打散过期峰值。模块小结二级缓存优先读取本地内存减少网络开销搭配布隆过滤器、分布式锁、随机过期三大方案一次性解决缓存穿透、击穿、雪崩三大经典问题有明确线上量化性能提升。RabbitMQ 多级死信 msgId 幂等千万短信异步削峰推送核心技术知识点RabbitMQ 同步转异步解耦、批量投递削峰业务队列本地有限次数重试机制独立死信队列兜底重试失败消息归档 MySQL全局唯一 msgId 生成规则商户 ID 活动 ID 手机号 时间戳RedisLua 原子幂等校验重复消息拦截消息持久化、生产者确认保障消息不丢失生活化通俗举例奶茶店接单配送改造改造前顾客下单店员当场现做 亲自送货高峰期订单挤满店员全部被占用后面顾客排队卡死配送没人签收直接丢掉订单同一顾客重复下单会重复送两杯。改造后前台只写订单丢进收纳筐MQ 队列立刻接待下一位顾客异步削峰配送员取单配送第一次没人签收重试 5 次本地重试5 次失败丢进退货筐死信队列晚上专人统一再试 3 轮兜底每张订单有专属单号 msgId配送前先查登记本送过的单直接跳过幂等防重复订单全部纸质存档筐子上锁不会弄丢任何订单持久化。全链路流转流程图优化前后对比表格对比维度优化前同步下发无重试幂等优化后MQ 异步 多级死信 幂等量化提升数据峰值消息堆积量10 万条≤500 条消息积压减少 99.5%日均短信丢失条数1200 条≤5 条短信送达率提升至 99.95%日均重复短信投诉320 条月度≤5 条投诉量下降 98.4%Tomcat 线程峰值占用95%38%无线程耗尽超时优化前痛点同步调用短信通道长时间占用 Tomcat 线程峰值消息严重堆积无重试、死信机制网络波动直接丢失短信MQ 重复投递无幂等控制同一用户收到多条相同营销短信大量投诉。落地改造方案同步下发改为 RabbitMQ 异步架构批量消息分批投递实现流量削峰业务队列配置最多 5 次本地递增重试达到上限转入专属死信队列定时任务消费死信队列执行 3 轮兜底重试多次失败消息归档 MySQL 支持手动补发基于商户、活动、手机号、时间戳拼接全局 msgId消费前通过 Lua 脚本原子校验幂等重复消息直接拦截开启消息持久化、生产者 confirm 机制保障消息零丢失。模块小结通过 MQ 异步解决同步线程耗尽、流量峰值堆积问题多级重试 死信队列兜底保证短信不丢失全局 msgIdRedis 幂等从消费层杜绝重复下发整套方案支撑千万级日短信推送有完整可量化业务优化指标。冷热数据分层存储千万日志 MySQL 迁移 ES核心技术知识点冷热数据划分标准热数据高频查询、冷数据海量明细检索MySQL 存储短字段核心热数据ES 存储海量日志冷数据ES 按天分索引、索引生命周期管理自动清理过期数据ES 联合倒排索引优化多条件模糊检索MQ 异步批量写入 ES不阻塞短信主业务链路查询分流简单统计查 MySQL复杂日志排查查 ES生活化通俗举例公司仓库记账改造改造前所有销售小票、详细交易明细全部存在前台小保险柜MySQL。每天产生上万张单据柜子很快塞满要查半年前某一笔详细记录需要翻完整柜子耗费几十分钟。改造后分两处存放前台保险柜MySQL 热数据只存订单号、手机号、发送状态等简短核心信息日常快速查发送状态大型档案库房ES 冷数据存放完整回执、错误码、渠道耗时等全部明细每天分新档案盒按天分索引7 个月前旧档案自动清理专门后勤人员统一批量归档日志 MQ 异步消费不占用前台收银工作只查是否发送成功去前台查报错明细、批量筛选去档案库。整体架构流程图优化前后对比表格对比维度优化前日志全量存 MySQL 单表优化后冷热分离 MySQLES量化提升数据单条日志多条件检索耗时45s20ms查询速度提升 2250 倍MySQL 每日磁盘增量12G1.2G磁盘占用降低 90%线上故障排查平均耗时15 分钟40 秒运维排查效率大幅提升MySQL 大表查询 IO 压力极高接口卡顿极低不影响核心业务杜绝数据库 IO 打满故障优化前痛点短信执行日志单表千万行多条件分页检索极慢每日新增百万级日志MySQL 磁盘暴涨频繁磁盘告警线上排查短信失败原因检索日志耗时分钟级定位问题效率极低批量推送同步写入全量日志瞬间打满 MySQL 磁盘 IO所有业务接口卡顿。落地改造方案冷热数据拆分短状态热数据留存 MySQL完整明细冷日志迁移 ElasticsearchES 按天分索引配置索引生命周期策略7 天自动清理过期日志ES 对手机号、活动 ID、时间、错误码建立联合倒排索引加速多维度检索下发完成后完整日志走独立 MQ 异步批量写入 ES与短信主链路解耦业务查询做分流简单统计走 MySQL复杂明细检索走 ES。模块小结通过冷热分层将海量明细日志剥离 MySQL利用 ES 擅长海量全文检索的特性解决大表慢查询、磁盘爆满问题异步写入架构隔离主业务压力极大缩短线上故障排查时间数据库资源全部留给核心短信下发业务。Quartz 持久化定时任务 Redis 分布式锁解决集群重复调度核心技术知识点SpringTask 原生缺陷单机内存运行、集群并发重复执行、无持久化Quartz 定时框架数据库持久化任务、可视化任务管理Redis 分布式锁实现跨节点任务互斥执行锁超时 TTL 兜底防止服务宕机死锁运营后台动态配置任务无需重启服务生效生活化通俗举例门店定时大扫除场景改造前每家分店集群服务节点都设置凌晨 2 点闹钟一到点所有店员同时打扫同一个仓库重复干活浪费人力还重复整理出多份相同活动通知发给客户。改造后统一登记台账Quartz 持久化到 MySQL所有打扫计划全部存档不会因为店员下班丢任务打扫前先拿唯一钥匙Redis 分布式锁只有抢到钥匙的店员打扫其他人直接下班钥匙自带失效时间如果店员打扫中途晕倒超时自动归还钥匙不耽误第二天打扫店长后台直接改打扫时间、新增打扫计划不用召集所有分店重新设置闹钟。任务完整流转流程图优化前后对比表格对比维度优化前 SpringTask 单机定时优化后 QuartzRedis 分布式锁量化提升数据集群日均重复短信2100 条0 条彻底消除重复营销短信任务丢失故障频次每周 3~5 次全年 0 次任务永不丢失新增 / 修改任务耗时重启服务 10 分钟后台实时生效无需停机发布多节点资源空耗大量重复计算占用 CPU仅单节点执行资源节省 50%降低服务器负载优化前痛点SpringTask 基于本机内存集群多节点同时触发同一任务重复筛选人群、重复生产短信定时任务仅内存存储服务重启直接丢失营销推送计划无可视化管理调整推送时间、新增活动任务必须重启服务中断业务。落地改造方案替换原生 SpringTask引入 Quartz 框架任务信息持久化存储 MySQL定时任务执行前争抢全局唯一 Redis 锁保证同一任务同一时间仅单个节点执行分布式锁设置合理 TTL 超时时间防止节点宕机造成永久死锁开发运营可视化后台支持任务启停、推送时间、人群条件在线修改实时生效。模块小结用 Quartz 解决定时任务丢失、不可管控问题搭配 Redis 分布式锁解决集群多节点重复调度的核心痛点从消息生产源头杜绝重复短信无人工停机发布大幅减少重复短信带来的客户投诉与通道成本损耗。Sentinel 多维度限流熔断多短信通道自动故障切换核心技术知识点Sentinel 流量防护核心能力限流、熔断降级、热点参数限流、系统保护多维度流量管控手机号、商户、IP 三层独立限流规则熔断半开探测机制故障通道自动隔离多短信服务商通道集群熔断后自动路由备用线路通道全故障时消息转入死信队列兜底存储生活化通俗举例外卖配送门店风控改造改造前不限制下单人数大量黄牛批量下单占满配送员某配送骑手全部订单超时、丢单门店依旧不停派单所有订单全部积压顾客全收不到餐。改造后单人、单个公司、单个地址每日下单次数做上限手机号 / 商户 / IP 限流防止黄牛刷单某个骑手频繁超时就暂时停止派单给他熔断隔一段时间少量试单测试是否恢复半开探测同时合作多家骑手团队一个团队故障订单自动分给其他骑手所有骑手都忙不过来时订单统一登记延后配送死信队列。完整业务流程图优化前后对比表格对比维度优化前无 Sentinel 防护单通道优化后Sentinel 限流熔断 多通道量化提升数据第三方通道雪崩故障每月 6 次全年 0 次彻底杜绝通道整体阻塞日均拦截恶意爬虫刷取请求0 次4.2 万次保护正常业务资源通道故障业务中断时长15 分钟秒级切换故障恢复效率大幅提升恶意用户挤占正常短信额度频繁发生完全管控普通用户短信无延迟优化前痛点无任何流量防护爬虫批量刷短信接口大量无效请求压垮服务与第三方通道仅单条短信通道通道超时、报错时全部营销任务阻塞服务不可用未区分商户、手机号、IP 做分层限流恶意客户占用大量短信额度正常用户短信延迟。落地改造方案接入 Sentinel 组件针对短信接口、第三方通道接口配置独立限流、熔断规则三层限流管控单手机号验证码 / 营销短信频次、商户每日短信总额度、客户端 IP 访问频次对接多家第三方短信通道通道触发熔断后自动路由至备用线路熔断配置半开探测窗口期自动恢复已修复通道所有通道全部故障时消息转入死信队列后续定时重试补发。模块小结Sentinel 从入口拦截恶意流量通过熔断隔离故障短信通道搭配多通道自动切换实现故障无感恢复彻底解决第三方通道雪崩、恶意流量挤占资源问题保障营销短信业务稳定运行。Nacos 配置中心热更新业务配置动态生效无需重启服务核心技术知识点Nacos 配置中心配置统一托管、Namespace 环境隔离SpringBoot RefreshScope 注解实现 Bean 动态刷新短信额度、限流阈值、通道密钥等业务配置云端存储配置变更实时推送毫秒级热生效区分开发 / 测试 / 生产多环境配置隔离避免配置污染生活化通俗举例奶茶店价目表改造改造前所有饮品定价、限购规则全部打印贴墙要改价格 / 限购数量必须停业重新打印张贴顾客暂时无法下单一次调整要折腾半小时。改造后统一后台电子价目表Nacos 云端配置分店共用一套配置区分门店测试区、营业区Namespace 隔离店长后台直接修改价格、限购规则点击保存立刻全门店生效不用关门、不用重启收银机器顾客下单不受任何中断渠道对接密码、每日活动发放上限统一存在后台不需要写死在收银机程序里。配置加载与热更新流程图优化前后对比表格对比维度优化前配置硬编码本地文件优化后Nacos 统一配置托管量化提升数据配置变更发布耗时30 分钟打包重启服务1 秒实时热刷新发布效率大幅提升配置修改停机业务中断每月 4~6 次全年 0 次无业务空档期多环境配置混淆 bug偶发线上配置错用完全隔离无混淆消除环境配置故障密钥硬编码安全风险存在泄露风险云端加密存储本地无明文提升密钥安全性优化前痛点短信通道密钥、限流阈值、营销额度硬编码在项目配置文件修改必须重新打包、重启服务每次调整规则需要停机发布业务出现长时间空档开发、测试、生产环境配置混在一起容易误改线上参数引发故障密钥写在本地配置文件代码上传仓库存在明文泄露安全隐患。落地改造方案将限流规则、信渠道密钥、单日推送上限、重试次数全部迁移至 Nacos 统一托管划分不同 Namespace 隔离开发、测试、生产三套环境配置互不干扰业务配置类添加 RefreshScope 注解支持配置动态刷新利用 Nacos 加密配置存储通道密钥避免明文落地本地运营人员直接在 Nacos 控制台修改参数发布后全服务实时生效。模块小结通过 Nacos 统一托管全量业务配置依靠 RefreshScope 实现配置热更新彻底解决修改配置需要重启服务、业务中断的问题同时多环境隔离规避配置混淆故障兼顾运维效率与线上稳定性。Docker Compose 容器化统一环境消除环境差异问题核心技术知识点Docker业务服务镜像打包环境与代码绑定Docker Compose一键编排 MySQL、Redis、RabbitMQ 全套中间件开发 / 测试 / 生产环境标准化依赖版本统一新人本地环境一键启动无需手动安装中间件规避因环境版本不一致导致的线上兼容 Bug生活化通俗举例连锁餐饮店标准化后厨工具改造前每家分店后厨工具需要厨师单独采购、安装调试有人买老款烤箱、有人新款做出来菜品口味不一样新人上岗要花大半天配齐所有厨具。改造后总部统一成套厨具集装箱Docker 镜像每家分店全部同款设备一套包装箱包含烤箱、冷藏柜、操作台等全套工具Compose 编排所有中间件新人直接开箱即用10 分钟配齐后厨不用挨个采购调试全国分店设备完全一致菜品出品标准统一不会出现奇怪故障。环境搭建完整流程图优化前后对比表格对比维度优化前手动搭建环境优化后Docker Compose 容器化量化提升数据新人搭建完整开发环境时长4 小时10 分钟搭建效率提升 96%环境版本不一致引发线上 bug每月 3 次全年 0 次彻底消除环境兼容故障多机器环境配置差异普遍存在所有环境完全统一本地复现线上问题更简单中间件安装、配置重复工作量每个开发重复操作一份脚本全员复用减少大量重复运维工作优化前痛点开发环境需要手动逐个安装 MySQL、Redis、RabbitMQ配置端口、账号耗时极久开发、测试、生产中间件版本不统一本地运行正常上线出现兼容异常不同开发人员本地配置五花八门出现 bug 很难复现定位新人入职需要耗费半天时间搭建环境上手效率极低。落地改造方案编写项目 Dockerfile将 Java 业务服务打包为标准化镜像编写 docker-compose.yml 统一编排 MySQL、Redis、RabbitMQ 中间件容器统一固定所有中间件版本开发、测试、生产保持版本一致提供一键启动脚本新人拉取代码后一条命令拉起全套环境测试环境、预发环境全部使用相同镜像部署保证环境无差异。模块小结借助 Docker 镜像固化运行环境Docker Compose 实现中间件一键编排统一全环境依赖版本大幅降低开发环境搭建成本彻底解决 “本地正常线上报错” 的环境兼容类故障提升开发与测试整体效率。JVM 堆内存参数调优降低 Full GC 频率与接口卡顿核心技术知识点JVM 堆内存参数 Xms、Xmx 原理堆内存伸缩带来性能损耗新生代 Eden、Survivor 分区分配规则新生代占比调优Minor GC、Full GC 触发条件频繁 GC 对接口响应的影响GC 日志打印、OOM 自动 dump 文件线上内存问题排查手段老年代内存泄漏监控提前发现堆内存持续上涨隐患生活化通俗举例办公室储物间改造改造前储物间最小面积和最大面积差距很大东西一多就要临时扩建扩建期间所有人不能放东西、等待卡顿储物区留给短期杂物的空间太小垃圾频繁清理不停中断办公。改造后储物间固定统一大小一开始直接给到最大面积不用反复扩容短期临时杂物区占整体三分之一减少频繁打扫清理全程监控储物间占用量一旦堆满自动留存全部物品清单方便排查不会出现频繁停工打扫员工办事不再排队卡顿。JVM 内存分区与 GC 调优流程图优化前后对比表格对比维度优化前不合理 JVM 参数优化后调优堆内存配比量化提升数据日均 Full GC 次数15 次0~1 次GC 停顿总时长下降 92%接口随机卡顿投诉高频出现减少 90%用户体验大幅提升堆内存频繁扩容 STW持续发生完全消失消除扩容带来的停顿线上内存问题定位效率无日志无法排查GC 日志 dump 文件快速定位运维排障效率提升优化前痛点Xms 远小于 Xmx程序运行时频繁扩容堆内存产生长时间 STW 停顿新生代内存分配过小Eden 区快速占满Minor GC 频繁接口偶发延迟卡顿未开启 GC 日志、OOM 快照出现内存溢出、长时间 GC 时无任何排查依据老年代持续内存泄漏无法提前感知容易引发服务卡死、宕机。落地改造方案统一配置 Xms Xmx固定堆内存大小消除运行期堆扩容新生代设置为堆总内存 1/3提升短期对象容纳量减少 Minor GC 频次启动参数开启完整 GC 日志持久化存储记录每次 GC 耗时、回收内存大小配置 OOM 时自动 dump 堆快照文件用于事后离线分析内存泄漏监控老年代内存增长曲线提前预警内存持续上涨隐患。模块小结通过固定堆内存、合理分配新生代空间从根源减少 Minor GC 与 Full GC 次数降低 GC 停顿造成的接口卡顿配套 GC 日志与 OOM dump 能力提供完整线上内存故障排查依据提升服务运行稳定性。智能营销千万级短信平台全链路整合优化核心技术知识点总览整套系统由 8 大优化技术体系串联全链路覆盖请求入口→缓存层→定时任务生产消息→MQ 异步推送→流量熔断防护→第三方通道调用→日志冷热存储→配置动态管控→底层 JVM 容器环境完整闭环接入层Nacos 动态配置 Sentinel 多维度限流熔断防护缓存层CaffeineRedis 二级缓存 布隆过滤器解决缓存三大问题任务生产层Quartz 持久化定时任务 Redis 分布式锁防集群重复生成短信消息异步层RabbitMQ 异步削峰、多级死信重试、全局 msgId 幂等防重复下发通道调用层多短信服务商通道自动切换、故障隔离数据存储层冷热数据分离MySQL 存业务热状态、ES 存储海量短信执行日志底层运维层Docker Compose 容器标准化开发测试环境底层 JVM 层堆内存参数调优减少 GC 停顿提升服务稳定生活化完整串联举例连锁奶茶门店完整改造流程改造前门店单机经营接单、制作、配送、记账全部同步操作价格规则写死机器改价必须关门后厨多人重复做同款饮品大量小票全部堆在前台小账本配送员单一、经常爆单卡顿后厨设备版本杂乱后厨储物间分配不合理频繁大扫除卡顿。完整改造后全流程门店规则统一后台管理Nacos限购、定价、配送额度实时修改不用停业门口前台设置限流风控Sentinel限制单人单日购买次数黄牛批量下单直接拦截热销饮品放在前台随手货架Caffeine 本地缓存冷门商品仓库调取Redis不存在的饮品直接拦下布隆过滤器定时活动奶茶统一排班制作Quartz 定时任务一把专属制作钥匙分布式锁保证同一批饮品只做一次顾客订单统一放入收纳筐异步制作配送RabbitMQ每张订单唯一单号msgId避免重复配送配送失败最多重试 5 次多次失败丢入退货筐夜间兜底补发合作多家配送骑手多短信通道某骑手频繁超时自动切换其他骑手订单简短状态记前台小账本MySQL 热数据完整配送回执存入大型档案库ES查详情去档案库全部门店统一标准化厨具套装Docker Compose新人 10 分钟配齐环境后厨储物间固定大小、合理分区JVM 调优减少频繁打扫卡顿保证营业流畅。全链路完整总流程图八大模块整体优化前后总对比汇总表优化体系优化前问题落地改造方案全局量化收益二级缓存架构单层 Redis 延迟 320msDB 每小时无效查询 12 万次频繁缓存雪崩CaffeineRedis 二级缓存 布隆过滤器 随机过期时间接口响应 320ms→62msDB 压力降低 93.3%全年无缓存雪崩RabbitMQ 异步推送同步下发线程打满日均丢失 1200 条短信重复投诉 320 条 / 天异步削峰 5 次本地重试 死信 3 轮兜底 msgId 幂等消息堆积 10 万→≤500 条送达率 99.95%投诉下降 98.4%冷热数据分层存储千万日志单表 MySQL检索 45s磁盘日增 12GMySQL 存热状态ES 存明细按天分索引检索 45s→20ms磁盘占用降低 90%故障排查提速 96%分布式定时任务SpringTask 集群重复执行日均 2100 条重复短信任务易丢失Quartz 持久化 Redis 分布式锁重复短信清零任务丢失故障全年 0 次配置无需重启Sentinel 流量防护无限流熔断通道每月雪崩 6 次恶意流量挤占资源手机号 / 商户 / IP 三层限流、通道熔断自动切换备用线路通道雪崩故障清零故障切换秒级日均拦截爬虫 4.2 万次Nacos 配置中心配置硬编码修改需重启 30 分钟多环境配置混淆全量配置 Nacos 托管RefreshScope 热刷新Namespace 环境隔离配置变更 30 分钟→1 秒无停机业务中断Docker 容器化手动搭建环境 4 小时环境版本不一致频繁出 bugDockerfile 打包服务Compose 一键编排全套中间件环境搭建 4h→10min环境兼容 bug 全年清零JVM 内存调优日均 Full GC15 次接口随机卡顿严重XmsXmx 固定堆新生代分配 1/3 堆内存开启 GC 日志 OOM dumpFull GC 降至 0~1 次 / 天GC 停顿总时长下降 92%全链路整体综合业务成果总结整套八大优化方案串联落地后平台整体能力得到质的提升业务承载日短信推送量从 10 万条提升至 1000 万条并发承载能力扩大 10 倍性能指标全链路接口平均响应 320ms 优化至 62ms整体性能提升 80.6%稳定性缓存雪崩、通道故障、重复短信、数据库 IO 打满、频繁 GC 等线上故障全年清零服务可用性系统全年可用率达到 99.99%运维效率配置修改、环境搭建、故障排查、任务发布全流程运维效率大幅提升人工维护成本显著下降。
返回列表