高并发解决方案(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把流量作为切入点,从流量控制、熔断降级
开源的流量控制和熔断框架,用于保护分布式系统免受不稳定的外部资源影响。
NacosNacos (Naming and Configuration Service)
一个服务注册与发现、配置管理的平台。
用于动态注册和发现服务、管理配置信息等。
RocketMQ开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
分布式消息队列,用于实现异步消息通信。
DubboApache Dubbo 是一款高性能的 Java RPC 框架。
用于实现微服务架构中的服务调用和远程通信。
Seata阿里巴巴开源产品,高性能微服务分布式事务解决方案。
开源的分布式事务解决方案,用于管理分布式事务的一致性和隔离性。

负载均衡 Load Balancing

一种分布式系统架构中的技术,用于将网络请求或任务分散到多个服务器或资源上。

举例:当系统面临大量用户访问,负载过高时,通常会增加服务器数量来进行横向扩展,来提高整个系统的处理能力。

img.png
img.png

上图中: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。

详情可见相关文章:分布式缓存具体实现

Last Updated 8/29/2024, 3:09:35 AM