Redis后端分布式与高并发架构演进

这七张图片构成了一个非常系统化的、由浅入深的后端分布式与高并发架构演进知识图谱。

我将按照网络基础 →\rightarrow→ 性能优化(连接池) →\rightarrow→ 多路复用(高并发核心) →\rightarrow→ 解耦异步(消息队列) →\rightarrow→ 分布式高可用(Redis主从与哨兵) 的逻辑顺序,建立起一个完全不矛盾、环环相扣的架构演进知识体系。


一、 阶段一:基础网络通信与阻塞式 I/O(图 1 )

图1:

所有的互联网应用,最底层的根基都是客户端(Client)与服务端(Server)的通信。

  • 工作原理: 服务端创建一个 ServerSocket 监听特定端口,当客户端发起连接时,服务端调用 accept() 方法接收连接并返回一个标准的 socket
  • 痛点(为什么需要演进): 图中明确标注了 "阻塞式" 。在传统的 BIO(Blocking IO)模型中,当一个线程在执行 read()write() 读写流数据时,如果没有数据到来,该线程就会一直死等(阻塞)。这意味着一个线程只能处理一个客户端连接。如果有成千上万个用户同时访问,服务器需要创建同等数量的线程,系统会直接崩溃。

二、阶段二:缓解线程开销的利器------连接池(图 2)

图2:

既然频繁地为每个客户端创建和销毁线程/连接代价太高,工程师们想出了一个妥协的高招:引入连接池(Connection Pool)

  • 工作原理: * 提前准备: 系统启动时先初始化一部分连接(如图中的 init_connection 10)。

  • 动态伸缩: 随着用户变多,连接数按照一定的算法比例像"滑动窗口"一样增长,但有一个硬性天花板(如 max_connection 100)。

  • 循环利用: 当某个线程用完连接调用 close() 时,连接并不会被真正销毁 ,而是像图中绿色的 conn 一样,重新放回连接池的队尾,供下一个用户复用。

  • 痛点(为什么还不够): 连接池虽然省去了频繁创建连接的开销,但它依旧没有解决"一个连接/线程同时只能干一件事"的阻塞本质。面对真正的海量并发(如电商秒杀),光靠堆积连接池大小是无济于事的。


三、阶段三:高并发的灵魂------I/O 多路复用(图 3 & 图 4 )

图3:

图4:

为了彻底解决几万个连接把服务器卡死的问题,架构引入了 I/O 多路复用(Multiplexing) 技术,这也是 Redis 能够做到单线程却快到飞起的核心秘密。

我们把图 4、图 5 串起来看:

1. 什么是多路复用?(图 3 & 图 4)

传统的做法是"一个保安盯着一个客户"。而 I/O 多路复用(如底层的 epoll 机制,Java 中的 Selector 是"一个保安(单线程)盯着一整个大厅的客户"。

  • 如图 5 所示,client1client4 发起了不同的请求(连接、读、写)。
  • 这些请求并不会直接让服务器去开 4 个线程处理,而是全部放进一个队列/多路复用器中。
  • 事件分发器(Dispatcher) 像一个熟练的流水线调度员,谁的数据准备好了(触发了事件),它就把这个事件分发给对应的事件处理器(连接应答处理器、命令请求处理器等)去处理。

四、阶段四:应用间的解耦与异步------消息队列(图 5)

图5:

当单机性能通过 I/O 多路复用压榨到极致后,如果业务系统依然过于庞大(例如支付成功后要发短信、发优惠券、通知物流),让高并发的服务器在线死等这些长耗时业务是不现实的。于是,我们引入了 发布/订阅(Pub/Sub)消息队列

  • 工作原理: * 生产者(Producer): 负责发送消息。它不需要知道谁来消费,直接把消息扔给对应的 Topic(主题,如 newssport)。

  • 消费者(Consumer): 负责订阅自己感兴趣的主题。如图中消费者只订阅了 sport 主题,那么它就只会接收并处理 sport 的消息,哪怕生产者发了再多 news 消息也与其无关。

  • 主流技术选型(图最下方):

  • Kafka: 吞吐量极其恐怖,适合大数据、日志收集场景。

  • RocketMQ: Java 语言编写,对分布式事务支持极好,阿里开源,适合金融和电商核心业务。

  • RabbitMQ: Erlang 语言编写,天然具备极高的并发性和低延迟,稳定性极强。


五、阶段五:数据层的高可用架构演进(图 6 & 图 7)

当高并发的流量穿过网络、通过了消息队列,最终落到了数据库/缓存(以 Redis 为例)时,单台服务器(单机)如果宕机,整个系统就会瘫痪。因此,架构必须向分布式高可用演进。

1. 基础版:主从复制 + 读写分离(图 6)

图6:

  • 架构: 一个 Master(主节点)负责处理写请求(如 set k1 v1);多个 Follower/Slave(从节点)负责处理读请求(如 get k1)。
  • 两个致命痛点:
  1. 最终一致性问题: 主节点写完数据后同步到从节点是有时间延迟的。在这段延迟内,客户端去读从节点可能会读到旧数据(允许短时间不一致,但最终必须一致)。
  2. 主节点宕机断服: 如果 Master 挂了,Follower 只能傻傻地等待(从节点不会自动篡位)。此时整个集群将无法提供写服务

2. 终极高可用版:哨兵模式(图 7 - 哨兵模式)

图7:

为了解决主节点挂了无人主持大局的问题,引入了 哨兵(Sentinel)

  • 监控阶段(图 7 上半部分): * 哨兵就像一个巡逻兵,通过定时任务(如 setInterval())向 Master 和 Follower 发送健康检查(心跳)。

  • 当 Master 突然宕机 ,哨兵检测到其状态变为 unavailable,就会立刻向所有 Follower 发送远程调用通知(notify),并组织准备进行新皇选举(startLeading)。

  • 故障转移阶段(图 7 下半部分):

  • 哨兵会在现有的 Follower 中,随机(按一定算法规则)挑选一台机器将其提升为新的 Master

  • 原先的那些 Follower 会被通知去同步这个新 Master 的数据。

  • 最妙的地方在于: 当那个挂掉的旧 Master 恢复健康后,它失去了往日的荣光,会自动变成新 Master 的从机(Follower),重新加入集群。

  • 注:图中为了演示只画了一个哨兵,在生产环境中,为了防止哨兵自己产生误判,通常会部署奇数个(3个或以上)的哨兵集群进行共同决策。


六、总结:完整的请求流转顺序

我们将这七张图融合成一个动态的场景:

  • Step 1:从单机连接到突破瓶颈(图 1 & 图 2)

    最初,客户端通过标准的 ServerSocket(图 1) 发起阻塞式连接。为了避免频繁创建线程,系统引入了 ConnectionPool(图 2) 循环复用连接。然而,面对真正海量的瞬时并发,单纯堆积连接池无济于事,架构逼迫网络层向非阻塞演进。

  • Step 2:核心战力,压榨单机性能(图 4 & 图 3)

    为了彻底解决阻塞问题,服务器换上了高并发的灵魂武器------I/O 多路复用(图 4)。它让单个线程能够同时盯紧成千上万个连接(Selector 机制),并将准备就绪的事件分发处理。在 Redis 内部(图 3),这种多路复用配合其标志性的"单线程核心命令处理+多线程网络 I/O",让单机读写性能直接飙到极致。

  • Step 3:内部分流,应用异步解耦(图 5)

    当网络层能够轻松吞下海量请求后,面对长耗时、非核心的业务,服务器不再傻傻地在线等待。而是通过 PUB/SUB 发布订阅机制(图 5) 充当中间人,把消息直接扔给 Kafka、RocketMQ 或 RabbitMQ 后立刻返回,实现应用层的完美解耦与流量削峰。

  • Step 4:数据扩容,主从读写分离(图 6)

    当庞大的流量最终穿透应用层、涌入底层数据层时,单机存储成为新的瓶颈。系统随之演进为 主从复制架构(图 6)。利用 Spring Cloud LoadBalancer 等负载均衡算法,将写请求送往 Master 主节点,读请求分流到各大 Follower 从节点,实现读写分离。

  • Step 5:终极闭环,自动化高可用(图 7)

    分布式集群最怕主节点突然宕机。于是 哨兵(Sentinel)集群(图 7) 登场,它们像巡逻兵一样定时健康检查。一旦 Master 挂掉,哨兵立刻自动主持大局,快速选举出新的 Master,并让断线重连的旧 Master 降级为从机,整个高并发、高可用系统自此实现 24 小时永不宕机的闭环。

相关推荐
闪电悠米15 小时前
黑马点评-优惠券秒杀-01_redis_global_id
数据库·redis·缓存
wb0430720115 小时前
架构是“长“出来的
adb·架构
“码”力全开15 小时前
容器化架构下的边缘计算:基于Docker与GB28181/RTSP多协议汇聚的AI视频管理平台架构解析与源码交付实践
人工智能·架构·边缘计算
宠友信息16 小时前
友猫社区Vue与Spring Boot多端社交平台源码架构
java·vue.js·spring boot·架构
悦数图数据库1 天前
图数据库选型指南 2026:从架构、性能、AI 适配三个维度看 悦数科技
数据库·人工智能·架构
洛水水1 天前
Redis 分布式锁详解:实现与缺陷
数据库·redis·分布式
这是谁的博客?1 天前
Mamba 状态空间模型深度解析:挑战 Transformer 的新一代架构
深度学习·ai·架构·transformer·ssm·mamba·状态空间模型
上海云盾第一敬业销售1 天前
高防CDN应对大规模流量攻击的架构解析
web安全·架构·ddos