【编者按】:刘兵,花名玄靖,开源技术爱好者。高性能Redis中间件NRedis-Proxy作者,目前研究方向Java中间件,微服务等技术。
一. NRedis-Proxy 介绍
NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解耦;以Spring为基础开发自定义标签,让它可配置化,使其更加容易上手;提供RedisServer监控以及自动、收到failover等功能;以netty 作为通信传输工具,让它具有高性能,高并发,可分布式扩展部署等特点,单机器单个RedisServer QPS在9千左右。
二. NRedis-Proxy 技术架构图
a. 系统架构图
b. 技术架构图
c. 部署架构图
三. NRedis-Proxy 优势以及缺点
a. 功能优势
1) 自带连接池,简单稳定且性能高效
2) 支持读写分离,从读按照权重算法
3) 支持灵活主从配置策略
4) 默认支持一致性哈希分片策略,扩展性强
5) 分片策略与从读取策略可自定义化
6) 支持主从自动、手动切换,下次应用程序或者机器重启不会受到任何影响
7) 支持HA 分布式部署,节点可随意扩展
8) 提供redis-monitor小型机器人,监听cpu、jvm、线程、redis 命中率等监控服务
b. 天然缺点
中间件的存在,会自带网络损耗,但是网络带宽足够,可以忽略不计,最主要损耗在于协议解析。相比客户端分片等策略,中间件可以解决客户端应用过多,解决M*N 问题,Redis-Server连接数不够,造成机器CPU性能降低;如下图:
四. NRedis-Proxy 类逻辑调用图
五. NRedis-Proxy 配置标签
a. redisProxyNode
序号 | 名称 | 描述 |
1 | id | Spring 标签唯一标志 |
2 | redisProxyHost | NRedis-proxy 对外提供主机号 |
3 | redisProxyPort | NRedis-proxy 对外提供端口号 |
4 | algorithm-ref | NRedis-proxy 多主分片实现类引用 |
5 | address | Zookpeer 地址 |
b. redisProxyMaster
序号 | 名称 | 描述 |
1 | id | Spring 标签唯一标志 |
2 | host | RedisServer主主机名 |
3 | port | RedisServer主端口号 |
4 | algorithm-ref | NRedis-proxy 从分片读取策略类引用 |
5 | config-ref | 连接池配置 |
c. redisProxyCluster
序号 | 名称 | 描述 |
1 | id | Spring 标签唯一标志 |
2 | host | RedisServer主主机名 |
3 | port | RedisServer主端口号 |
4 | algorithm-ref | NRedis-proxy 从分片读取策略类引用 |
5 | config-ref | 连接池配置 |
6 | weight | 权重 |
d. redisPoolConfig
序号 | 名称 | 描述 |
1 | id | Spring 标签唯一标志 |
2 | connectionTimeout | 连接超时时间 |
3 | maxActiveConnection | 最大活跃连接数 |
4 | maxIdleConnection | 最大空闲连接数 |
5 | minConnection | 最小连接数 |
6 | maxWaitMillisOnBorrow | 取出最大等待时间 |
7 | initialConnection | 初始化连接数 |
8 | timeBetweenEvictionRunsMillis | 每隔多久检查一次连接池 |
9 | minEvictableIdleTimeMillis | 连接池最小生存时间 |
10 | minIdleEntries | 最小空闲数 |
11 | testOnBorrow | 取出是否检测 |
12 | testOnReturn | 归还是否检查 |
13 | testWhileIdle | 空闲是否检测 |
e. 默认两个分片策略
六. NRedis-Proxy 部署
a. 部署环境要求
-
JDK 1.7
-
Redis-Server
-
Zookpeer3.4.6
b. 调试步骤
1) 启动Redis Server 主机器
2) 启动Redis Server
3) 启动 zookpeer 4) 启动NRedis-Proxy Server5) 使用Redis 命令行连接NRedis-Proxy
c. 部署方式
maven执行nredis-proxy-bootstrap ,然后再找到 nredis-proxy-server.sh 文件执行七. redis-monitor监控
a. nredis-proxy监控
b. redis-server监控
c. redis-monitor本身监控
八. redis-monitor 服务治理
a. 定时器配置
b. 手动服务治理
c. 自动服务治理
来源:中生代技术