高并发架构设计可以从接入层、应用层、数据层考虑不同的设计实现系统高吞吐、低延迟、高可用性。
接入层
- 负载均衡:
使用Apigee、Spring Cloud Gateway 进行 API 请求路由、流量分发。
- 限流:
使用RateLimiter进行限流控制
滑动窗口限流:Redis + Lua 实现 令牌桶 / 漏桶算法。
Nginx 限流:limit_req_zone + burst 限制请求频率。
Guava RateLimiter:基于 令牌桶算法 限流
- MQ(消息队列)实现流量削峰
用户请求不直接访问系统,先进入MQ,后台消费队列异步处理用户请求

如上图所示,服务器接收到用户的请求后,首先写入消息队列,后台系统根据消息队列中的请求信息,做后续业务处理。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面
应用层
- 微服务
使用Spring Cloud / Dubbo /等 进行服务拆分。
- 服务降级/熔断
微服务系统中,某个服务超时或者异常时触发服务熔断,避免服务雪崩;同时降低非核心功能(比如监控、日志分析)
- 应用解耦/异步处理
代码中引入异步处理逻辑,比如订单创建后,支付/库存/物流可由 MQ 异步处理.
如下图,用途提交订单后,理论上是要串行调用积分系统的,但在高并发场景下,用户下完单,将消息写入消息队列,返回用户订单下单成功。积分系统通过订阅下单消息的方式获取下单通知消息,从而进行积分操作。实现订单系统与库存系统的应用解耦。如 果,在下单时积分系统系统异常,也不会影响用户正常下单

- 多线程
根据实际使用场景,创建多线程来处理(比如线程池中核心线程数根据IO密集还是CPU密集型不同来创建)
- 代码优化
代码中采用异步处理(CompletableFuture),批量处理(kafka批量处理,数据批量处理)
数据层
- 多级缓存
浏览器缓存(客户端):使用 LocalStorage、IndexedDB 缓存静态资源。
CDN 缓存(边缘节点):使用 Cloudflare、阿里云 CDN 缓存静态文件(CSS/JS/图片)。
本地缓存:Guava Cache / Caffeine
分布式缓存:Redis / Memcached
数据库缓存(查询优化):MySQL Query Cache、Materialized View(物化视图)
- 数据预热
通过异步任务提前预热数据到本地缓存或者分布式缓存中
- 读写分离
数据库主从节点读写分离
- 分库分表
根据表数据量进行分库分表操作
根据实际应用场景,创建合适的唯一索引和联合索引,避免索引失效场景发生
- 批量处理
使用批量处理,比如如下mongo批量插入替代单条插入场景
BulkOperations ops=mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED,className);
list.forEach(ops::insert);
- 锁选择
读多写少的场景用乐观锁,或者考虑通过分段锁的方式减少锁冲突
参考文献 https://baijiahao.baidu.com/s?id=1828015008527457530&wfr=spider&for=pc
浙公网安备 33010602011771号