【愚公系列】2022年05月 .NET架构班 045-分布式中间件 Redis通信原理
前言
1.多路复用定义
数据通信系统或计算机网络系统中,传输媒体的带宽或容量往往会大于传输单一信号的需求,为了有效地利用通信线路,希望一个信道同时传输多路信号,这就是所谓的多路复用技术(Multiplexing)。采用多路复用技术能把多个信号组合起来在一条物理信道上进行传输,在远距离传输时可大大节省电缆的安装和维护费用。频分多路复用FDM (Frequency Division Multiplexing)和时分多路复用TDM (Time Division Multiplexing)是两种最常用的多路复用技术。
2.reactor模式定义
Reactor模式是一种典型的事件驱动的编程模型,Reactor逆置了程序处理的流程,其基本的思想即为Hollywood Principle— ‘Don’t call us, we’ll call you’.
普通的函数处理机制为:调用某函数-> 函数执行, 主程序等待阻塞-> 函数将结果返回给主程序-> 主程序继续执行。
Reactor事件处理机制为:主程序将事件以及对应事件处理的方法在Reactor上进行注册, 如果相应的事件发生,Reactor将会主动调用事件注册的接口,即回调函数. libevent即为封装了epoll并注册相应的事件(I/O读写,时间事件,信号事件)以及回调函数,实现的事件驱动的框架。
Reactor架构模式允许事件驱动的应用通过多路分发的机制去处理来自不同客户端的多个请求。事件(事件源)、Reactor (反应器)、Event demultiplexer(事件多路分发机制)、Event Handler(事件处理程序)是Reactor架构模式的关键组件。
一、Redis通信原理
一般来说程序和Redis连接主要经过三个步骤:
- 建立连接
- 存储数据到本地缓存中
- 持久化数据到文件(开启新线程)
Redis主要是基于单线程的所以一般不存在锁的问题,在Redis中单线程和多线程如下:
- 单线程:数据完全基于内存操作,性能足够,而且多线程消耗性能
- 多线程:开启多个线程做不同的事情,而不是开启多个线程做同样的一件事情
1.建立连接
Redis 处理事件的简单模型:多路复用机制,基于epoll的reactor机制实现的,简单来说就说一个线程处理多个客户端连接。
由上图可以看出,处理请求事件时,Redis 的事件消费者只是被事件分发者进程短期调用而已,这种设计使得网络性能、用户感知的请求时延都得到了提升,每个用户的请求所产生的事件会及时响应,整个服务器的网络吞吐量都会由于事件的及时响应而增大。当然,这也带来一定的要求,即每个事件消费者都不能有阻塞行为,否则将会由于长时间占用事件分发者进程而导致其他事件得不到及时响应,Redis 的非阻塞特性就是由于它的模块都是满足这个要求的。
流程如下:
- 由多个socket接收来自客户端的各种请求,例如:建立通道,返回data,发送redis指令等。
- socket由I/O多路复用程序进行监听,redis中的I/O多路复用机制采用的是非阻塞的epoll模型。
- 将执行命令顺序压入队列,由文件事件分派器将分派给相应的处理器处理完毕后返回结果(或数据)。
- 点赞
- 收藏
- 关注作者
评论(0)