高并发会带来哪些问题,如何解决?

带来的问题

  1. 瞬间流量过大,系统扛不住
  2. 接口重复提交、重复下单、重复扣款
  3. 多线程争抢资源,出现超卖、数据错乱
  4. 数据库压力过大,查询慢、连接耗尽
  5. 缓存压力大,出现穿透、击穿、雪崩
  6. 服务调用频繁,出现服务卡顿、雪崩
  7. 大量请求同步阻塞,接口超时
  8. 分布式环境下数据一致性难保证

如何解决

问题1:瞬时流量暴增,压垮服务与数据库

解决方案:

  1. 网关层 :Gateway + Sentinel 做限流、防刷,拦住超额流量
  2. 注册发现层 Nacos: 服务多实例集群部署,水平扩容分摊流量;LoadBalancer 负载均衡分流,分散请求压力
  3. 流量防护层 Sentinel:
  • 熔断:下游服务异常直接切断调用,避免连锁雪崩

  • 降级:大流量时关停非核心业务,保住主流程

  • 流量控制:控制请求进入速率,平缓涌入

    1. 中间件层:
  • MQ 异步削峰(Kafka/RocketMQ)同步改异步,请求快速返回,后台队列匀速消费,抹平高峰流量

  • Redis:热点数据提前预热存入 Redis,大量查询请求直接走缓存,绕过数据库

问题2:重复请求、重复下单、重复扣款

解决方案:(全层做幂等)

  1. 网关层 :拦截请求,提取用户 ID + 业务单号 + 唯一令牌, 借助 Redis 执行SET NX做全局请求防重。短时间内相同标识直接驳回,不转发业务服务。
  2. 接口层:自定义幂等注解 + AOP
  3. 业务层:状态机判断(订单状态、支付状态)
  4. **中间件层:**生成全局幂等 Token,下单 / 扣款前校验令牌有效性,利用 Redis 原子命令实现分布式场景防重。
  5. 数据层
    • 新增:唯一索引兜底
    • 修改:乐观锁 version控制

问题3:并发抢资源、商品超卖、数据错乱

解决方案:(加锁控制并发争抢)

  1. 单机服务:本地锁 ReentrantLock /synchronized
  2. 分布式微服务Redisson 分布式锁
  3. 数据库层面
    • 高并发更新:乐观锁
    • 强一致低并发:悲观锁 for update

问题4:数据库查询压力大、慢查询、连接不够

解决方案:

  1. 引入 Redis 缓存,热点数据放缓存,少查数据库
  2. 读写分离 + 主从复制:写主库,读分摊从库
  3. 分库分表(Sharding-JDBC):数据量大水平拆分
  4. SQL 优化、建立索引、禁止长事务、减少联表查询
  5. 合理配置数据库连接池

问题5:缓存三大经典问题

  1. 缓存穿透:查不存在数据一直打库解决:空值缓存、布隆过滤器
  2. 缓存击穿:热点 key 过期瞬间并发打库解决:互斥锁、永不过期、热点数据永缓存
  3. 缓存雪崩:大量 key 同时过期 / Redis 宕机解决:过期时间随机错开、Redis 主从哨兵高可用、服务降级

问题6:微服务之间调用卡顿、服务雪崩

解决方案:

  1. 网关层:
  • 统一配置接口超时时间,超时直接快速失败,不无限等待
  • 路由策略优化,合理分发请求,避免单点服务压力集中
  • 流量隔离,限制单服务请求频次

2. 注册发现层 Nacos:

  • 服务多实例集群部署,故障实例自动健康剔除
  • 配合LoadBalancer负载均衡,自动避开卡顿 / 宕机实例
  • 及时刷新服务列表,快速切换可用节点

3. 远程调用层 OpenFeign:

  • 远程调用优化,设置超时时间**配置合理连接超时,**避免长时间阻塞
  • 精简请求参数,减少传输数据量,提升调用速度

4. 流量防护层 Sentinel(核心防雪崩):

  • 熔断:下游服务失败率过高直接熔断,停止调用,防止拖垮自身
  • 降级:非核心接口直接返回兜底数据,放弃远程调用
  • 流量控制:限制调用 QPS,避免大量请求压垮下游

问题7:同步业务耗时久,接口超时严重

解决方案:

  1. 简单业务:本地 @Async 异步执行
  2. 高并发跨服务:MQ 消息队列异步处理
  3. 接口逻辑精简,只做校验与转发,复杂业务后置

问题8:分布式多服务数据不一致

解决方案:

  1. 合理设置数据库事务隔离级别(可重复读)
  2. 分布式场景使用 Seata 解决分布式事务
  3. 依靠 MQ 消息重试、消息可靠投递保证最终一致性

分层分析

从上至下主要7 层:客户端 → 网关 → (sentinel层→ nacos层)→ 接口层 → 业务层 → 中间件层 → 数据访问层 → 数据库层

  • 前端:防抖节流,减少无效请求
  • 网关 Gateway:限流、鉴权、路由、全局防重,削峰第一道拦截
  • 注册中心 Nacos:服务集群部署,负载均衡分流
  • 流量防护 Sentinel:熔断、降级、流量控制保护服务
  • 接口层:参数校验、AOP 统一幂等
  • 业务层:状态机、事务、本地锁、业务拆分逻辑管控
  • 中间件层
    • Redis:缓存提速、分布式锁、接口幂等
    • MQ:异步、削峰、解压流量
  • DAO 层:SQL 优化、读写分离
  • 数据层:乐观锁 / 唯一索引兜底、读写分离、分库分表

1. 客户端层(最外层)

做的事:节流、防抖、源头控流

  1. 按钮防抖、短时间禁用提交按钮
  2. 前端请求节流,限制 1 秒内多次点击
  3. 预获取幂等 Token,统一携带请求
  4. 页面缓存静态数据,减少重复请求作用:从源头减少无效并发请求

2. 网关层(Gateway/Nginx/Sentinel)【高并发第一道大门】

核心动作:限流、削峰、防刷、全局幂等、路由

  1. 限流:QPS 限流、IP 限流、用户限流,超出直接拒绝
  2. 熔断:下游服务宕机,直接熔断不转发
  3. 降级:大促高峰期关闭非核心接口
  4. 全局幂等拦截:提取 Token / 业务单号,Redis NX 提前防重
  5. 负载均衡:把流量平分到多台服务
  6. 灰度发布:分批放量,控制流量
  7. 请求过滤 :拦截恶意请求、非法参数一句话:挡住 80% 无效流量,不让压力进业务服务

3. 接口层(Controller 控制层)

核心动作:参数校验、统一 AOP 幂等、快速失败

  1. 统一参数合法性校验,非法参数直接返回
  2. AOP 注解实现接口层幂等(Redis 令牌校验)
  3. 统一异常捕获,避免异常扩散
  4. 请求头统一解析、登录鉴权不做:业务逻辑、事务、复杂计算

4. 业务层(Service 核心层)【并发逻辑主战场】

核心动作:状态机、事务、异步、本地锁、业务幂等

  1. 状态机判断:订单 / 支付状态兜底幂等
  2. 事务控制:保证业务原子性
  3. 本地锁 :单机高并发用 synchronized / ReentrantLock
  4. 业务拆分:同步改异步,释放接口吞吐量
  5. 热点数据前置判断,提前拦截无效业务
  6. 控制长事务,避免并发阻塞重点:决定业务走不走、能不能重复执行

5. 中间件层(Redis / MQ / 分布式锁)【高并发最强缓冲层】

Redis 做这些

  1. 热点缓存:商品、活动、用户信息,减轻 DB 压力
  2. 分布式锁:集群高并发统一互斥(下单、扣库存)
  3. 原子幂等:SET NX 做防重
  4. 防缓存击穿 / 穿透 / 雪崩
  5. 计数器、限流统计

MQ 消息队列 专门做:削峰填谷

  1. 瞬间超大并发请求异步丢进队列
  2. 服务匀速消费,把尖峰流量抹平
  3. 解耦业务,提升接口响应速度
  4. 消息自身做消费幂等,避免重复消费

总结中间件层三大神器

  • Redis:扛热点、加分布式锁、做幂等
  • MQ:削峰、异步、解压
  • 分布式锁:集群并发抢资源统一控制

6. 数据访问层(Mapper/DAO)

核心动作:SQL 优化、避免慢查询

  1. 禁止联表多、禁止大事务、禁止全表扫描
  2. 分页、索引优化
  3. 读写分离路由(走读库 / 写库)只操作 SQL,不加业务逻辑

7. 数据库层(最终底层承压)

核心动作:锁机制、最终幂等、分库分表

  1. 悲观锁 :低并发强一致性 for update
  2. 乐观锁 :高并发更新首选 version 版本号
  3. 唯一索引:新增业务底层幂等兜底
  4. 分库分表:拆分海量数据,分摊并发压力
  5. 主从复制:读写分离,提升查询并发
  6. 事务隔离级别调整,平衡并发与一致性

最核心 4 个词对应层级

  • 限流 → 网关层
  • 削峰 → MQ 消息队列(中间件层)
  • → 业务层本地锁 + 中间件分布式锁 + 数据库锁
  • 幂等 → 全层级层层防护(网关→接口→业务→数据库)
  • 缓存 → Redis 中间件层
  • 防超卖 → 分布式锁 + 乐观锁组合
相关推荐
@大迁世界1 小时前
Prompt 缓存,一次讲明白
缓存·prompt
无小道3 小时前
Redis——list相关指令
数据库·redis·缓存
Trouvaille ~3 小时前
【Redis篇】为什么需要 Redis:从单机到分布式的架构演进之路
数据库·redis·分布式·缓存·中间件·架构·后端开发
June`3 小时前
多线程redis项目之aof
数据库·redis·缓存
Peter-OK3 小时前
Redis从3.x到8.4的核心新特性深度解析与实战学习指南
数据库·redis·缓存
晚烛4 小时前
CANN 数据流与内存优化:L1/L2 缓存机制与计算重叠深度解析
人工智能·python·缓存
fengxin_rou4 小时前
【Outbox 事件驱动 + Canal Binlog 增量订阅】:用户关系模块架构实战详解
缓存·架构·canal·outbox
phltxy4 小时前
Redis 常见面试题
数据库·redis·缓存
小碗羊肉5 小时前
【Redis | 第二篇】Jedis&SpringDataRedis
数据库·redis·缓存