项目背景:托管工作台是产品参数校验的核心业务载体,日均新增数万件产品,每件产品对应一条完整审批流程,单流程包含 60 + 业务节点,系统月新增流程数据数千万条、累计存量突破亿级。全量任务数据集中单表存储,伴随业务量持续增长,出现核心查询接口超时、流程流转卡顿、批量任务积压、数据库 CPU 持续打满等严重性能问题,已成为业务增长的核心瓶颈,亟需从数据架构、代码逻辑到资源调度进行全链路重构优化。
技术栈:Spring Boot 、Spring Cloud Alibaba、gauss数据库、java8、redis、RabbitMQ
核心工作:
•数据层架构重构: 设计「按任务类型水平分表 + 按时间维度分片」的多级数据拆分方案。基于 ShardingJDBC 实现任务表按业务任务类型拆分独立数据表,隔离不同业务线的读写压力,避免单业务波动影响全量系统;单表内按自然月做时间分区,配合冷热数据分离策略,超过 6 个月的历史数据自动归档至历史库,在线库仅保留热数据,从根源解决单表数据量爆炸、索引失效、查询性能陡降问题。
•SQL 与索引深度优化: 全量扫描慢查询日志,针对核心查询链路逐条分析执行计划,剔除无效关联查询与全表扫描,新增联合索引、覆盖索引精准适配核心查询场景;重构深分页查询逻辑,采用游标分页替代传统 limit 分页,解决千万级数据下深分页性能断崖式下跌问题。
•业务代码与流程逻辑优化: 重构核心流程执行代码,将循环内串行数据库查询改造为批量查询,彻底解决 N+1 查询问题;合理设计字段冗余,减少多表关联查询开销;精简流程节点校验链路,非强一致性校验步骤后置异步执行,缩短主流程响应路径。
• 多级缓存与异步解耦架构升级: 搭建「JVM 本地内存缓存 + Redis 分布式缓存」的二级缓存体系,本地缓存承载高频访问的字典配置、流程节点定义等热点静态数据,Redis 缓存流程节点状态、产品参数快照等动态业务数据,整体缓存命中率稳定在 95% 以上;引入 RabbitMQ 做异步解耦,通过消息持久化、死信队列保障消息可靠性,实现削峰填谷,大幅降低主链路数据库并发压力。
•复杂查询临时表方案落地:针对多维度组合筛选、批量任务统计,任务列表等重查询场景,设计基于 gauss临时表的分步查询方案。将复杂查询拆解为「条件筛选 - 主键落表 - 关联查询」三步执行,先将符合筛选条件的任务主键集写入会话临时表,再通过临时表与主表、流程节点表做精准关联查询,彻底避免大表全量扫描与深分页性能损耗;同时适配分表分片架构,针对跨分片聚合查询场景,通过临时表承接各分片的中间结果集,再完成统一排序、分页与聚合,规避跨节点大量数据拉取的性能开销。
项目成果:
•核心查询接口响应时间从优化前的 60 秒以上,稳定降至 2 秒以内,性能提升超 30 倍,彻底解决业务高峰期接口超时不可用问题。
• 单表数据存量从亿级降至千万级以内,数据库 QPS 提升 5 倍,高峰期数据库 CPU 使用率从 90%+ 稳定降至 40% 以内,系统负载显著降低。
•系统整体吞吐量提升 4 倍以上,支撑日均数万件产品、百万级流程节点的流转处理无积压,成功支撑后续业务量翻倍增长。
完成亿级历史数据平滑归档与分表改造上线,业务无感知、数据零丢失,系统整体可用性达到 99.95% 以上。