RedisTunel 是为了解决PHP-FPM和Redis服务器之间的短连接问题,是为了更好地解耦业务代码与后端redis服务器集群之间的关系而设计的网络通信中间件,目的在于提高PHP请求远程Redis服务器的性能及稳定性,并在业务代码无感知的情况下提供数据分槽,指令组合,数据压缩等通信插件包,丰富redis的操作.

一. 总体设计

Redis-Tunel在组件设计上分为以下几部分:

  1. Agent配置解析器和更新器
  2. 通信组件: 包括UNIX本地监听组 和 远端Redis服务器连接池
  3. 协议分析器: 主要包括协议编码器,解码器
  4. 协议拦截器: 主要对某些redis命令进行拦截,调用协议插件组进行功能扩展.
  5. 协议插件组: 为协议分析器添加一系列插件,对通信进行优化和功能扩展.
  6. 容灾器: 为Agent运行提供必要的安全保障,主要包括进程资源监控,迭代更新监控.

具体的组件总体架构如下图:

二. 网络代理设计

Redis-Tunel很重要的是网络代理部分,在网络代理方面由三部分组成.

  1. 第一部分是对远程redis-server的连接池.
  2. 第二部分是对本地众多php-fpm客户端的UNIX请求连接管理.
  3. 第三部分是对这三端之间redis通信协议进行兼容.

Go基础版本组件设计目前已经完成功能如下:

  1. 配置解析器。
  2. Unix domain server 组。
  3. Tcp pool (目前包含自动扩容,连接隔离)。
  4. Unix domain server 与 Tcp pool 的网络解耦。
  5. 借助redcon库进行redis协议解析和php-fpm客户端连接控制。
  6. 兼容set,get,mset,mget命令。
文档更新时间: 2019-01-04 10:03   作者:李彪