高并发解决方案(9 个常见)
Siona
高并发解决方案(9 个常见)
- 微服务拆分
- 负载均衡
- 分布式缓存
- 异步处理
- 分库分表
- 消息队列
- 限流和熔断
- 分布式数据库
- 数据库优化
典型场景:阿里的双 11 秒杀
微服务拆分
分布式架构会从一个拆分为多个系统,每个系统都有独立的数据库等,通过这样的横向扩展,就可以支撑更大的并发量。
微服务架构拆分,最常见的就是 Spring Cloud 和 Spring Cloud Alibaba。
Spring Cloud,全体系包含如下:
组件 | ||
---|---|---|
注册与发现 | Eureka | 客户端发现机制、服务端发现机制 |
Consul | ||
Zookeeper | ||
负载均衡 | Ribbon | |
API 网关 | Zuul | |
Gateway | 统一对外接口、统一鉴权、服务注册与授权、服务限流、全链路追踪 | |
REST 调用 | Feign | |
容错处理(监控和断路器) | Hystrix | |
统一配置管理 | Config | |
服务跟踪 | Sleuth |
Spring Cloud Alibaba,全体系包含如下:
组件 | 描述 |
---|---|
Sentinel | 把流量作为切入点,从流量控制、熔断降级 开源的流量控制和熔断框架,用于保护分布式系统免受不稳定的外部资源影响。 |
Nacos | Nacos (Naming and Configuration Service) 一个服务注册与发现、配置管理的平台。 用于动态注册和发现服务、管理配置信息等。 |
RocketMQ | 开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。 分布式消息队列,用于实现异步消息通信。 |
Dubbo | Apache Dubbo 是一款高性能的 Java RPC 框架。 用于实现微服务架构中的服务调用和远程通信。 |
Seata | 阿里巴巴开源产品,高性能微服务分布式事务解决方案。 开源的分布式事务解决方案,用于管理分布式事务的一致性和隔离性。 |
负载均衡 Load Balancing
一种分布式系统架构中的技术,用于将网络请求或任务分散到多个服务器或资源上。
举例:当系统面临大量用户访问,负载过高时,通常会增加服务器数量来进行横向扩展,来提高整个系统的处理能力。

上图中:tomcat-node1、tomcat-node2、tomcat-node3 就可以横向扩展,通过多台服务器来承担并发压力。
负载均衡可以在不同的层次上实现,包括:
- 硬件负载均衡器:使用专门的硬件设备来实现负载均衡,如硬件负载均衡器。
- 软件负载均衡器:在应用层或网络层使用软件来实现负载均衡,如反向代理服务器、负载均衡算法。
在负载均衡的设计中,有几种常见的负载均衡策略:
1. 轮询(Round Robin):将请求依次分配给服务器列表中的每个服务器,每次请求后移动到下一个服务器。适用于服务器性能相近的情况。
2. 权重轮询(Weighted Round Robin): 类似于轮询,但每个服务器有不同的权重,可以根据服务器性能调整权重。
3. 最少连接(Least Connections):将请求分配给当前连接数最少的服务器,以确保负载均衡。适用于长连接的情况。
4. 权重最少连接(Weighted Least Connections):类似于最少连接,但每个服务器有不同的权重,可以根据服务器性能调整权重。
5. 随机(Random):随机选择一个服务器来处理请求,适用于简单的负载均衡需求。
6. IP 哈希(IP Hash):根据客户端 IP 地址的哈希值来选择服务器,可以确保同一客户端的请求始终发送到同一服务器。
分布式缓存
应用场景:大部分的高并发场景,都是读多写少,要想提高数据的访问速度,系统必须加缓存。
原因:缓存的读写效率,远远大于数据库的读写效率。
So,一般会采用分布式缓存来提升系统性能。
常见的分布式缓存系统,包括:
方案 | |
---|---|
Redis ⭐️⭐️⭐️⭐️⭐️ | 基于内存的键值存储系统。 支持多种数据结构,如字符串、哈希、列表等。 场景:快速读取和写入 |
Memcached | 基于内存的键值存储系统。 场景:分布式缓存和缓存共享。 |
Hazelcast | 开源的分布式数据存储和计算平台。 场景:支持分布式缓存、分布式计算等。 |
Couchhase | 一个分布式缓存和数据库系统。 结合了缓存和文档存储的功能。 |
Ehcache | 一个 Java 缓存库。 场景:作为本地缓存 or 分布式缓存使用。 |
📢 使用最多的是 Redis。
详情可见相关文章:分布式缓存具体实现