nredis-proxy 高性能Redis 服务中间件
#长按上图识别二维码,参与OSC源创会年终盛典#
NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解耦;以Spring为基础开发自定义标签,让它可配置化,使其更加容易上手;以netty 作为通信传输工具,让它具有高性能,高并发,可分布式扩展部署等特点,单片性能损耗约5%左右。
a) 功能优势
1. 自带连接池,简单稳定且性能高效
2. 支持读写分离,从读按照权重算法
3. 支持灵活主从配置策略
4. 默认支持一致性哈希分片策略,扩展性强
5. 分片策略与从读取策略可自定义化
6. 支持主从自动切换,提供RedisServer监听服务
7. 支持HA 分布式部署,节点可随意扩展
b) 天然缺点
中间件的存在,会自带网络损耗,但是网络带宽足够,可以忽略不计。相比客户端分片等策略,中间件可以解决客户端应用过多,解决M*N 问题,Redis-Server连接数不够,造成机器CPU性能降低;如下图:
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 | timeout | 连接超时时间 |
5 | maxActiveConnection | 最大活跃连接数 |
6 | maxIdleConnection | 最大空闲连接数 |
7 | minConnection | 最小连接数 |
8 | algorithm-ref | NRedis-proxy 从分片读取策略类引用 |
c) redisProxyCluster
序号 | 名称 | 描述 |
1 | id | Spring 标签唯一标志 |
2 | host | RedisServer从主机名 |
3 | port | RedisServer从端口号 |
4 | timeout | 连接超时时间 |
5 | maxActiveConnection | 最大活跃连接数 |
6 | maxIdleConnection | 最大空闲连接数 |
7 | minConnection | 最小连接数 |
8 | weight | 权重 |
d) 默认两个分片策略
a) 项目初始团队
当一个公司成立一个研发初始团队,对于互联网公司,研发时间周期短,迭代快,没有时间与资源研发基础中间件,如果有成熟的中间服务,不参合业务代码,与应用解耦,让研发专心专一研发业务本身 ,同时又能够让后期上线业务稳定。NRedis-Proxy是一个高性能且稳定中间件服务,第一个真正意义Java 版本Redis中间件,让研发团队既可以学习,又可控!
b) 秒杀场景,应用服务较多,RedisServer较少
通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。面临下面几个问题
怎么样保证读取高性能,满足高并发请求?
怎么样保证数据一致性,保证MySQL 数据不丢失,与Redis 数据保持一致性
RedisServer 连接数不够,应用程序RedisClient 客户端连接数过多,造成Redis Server 机器CPU 性能降低,以至于Redis Server 性能低
Redis Server 机器性能不一样,当大流量风暴 怎么样保障高性能RedisServer 机器 支持支撑 重要的业务实时性,高并发性
解决问题方案如下图:
1.怎么样保证读取高性能,满足高并发请求?
使用内存级别NOSQL 数据-Redis,保障高性能高并发
2.怎么样保证数据一致性,保证MySQL 数据不丢失,与Redis 数据保持一致性
使用MQ 消息以及消息幂等性,采取补偿机制,记录错误日志,补写数据,保障数据最终一致性
3.RedisServer 连接数不够,应用程序RedisClient 客户端连接数过多,造成Redis Server 机器CPU 性能降低,以至于Redis Server 性能低
使用NRedis-Proxy 集群 部署,对应用程序透明化,保障连接数可用,避免此问题
4.Redis Server 机器性能不一样,当大流量风暴 怎么样保障高性能RedisServer 机器 支持支撑 重要的业务实时性,高并发性
自定义Redis 分片机制,采用虚拟捅算法以及配置中心系统,当流量一旦来临,在快超过最大容量时,改变分片规则以及流量,把不重要的业务流量涌向低性能机器,充分利用机器性能,保障服务性能.(后续开源)
1. 部署架构图
2. 部署环境要求
1:JDK 1.7
2:Redis-Server
3:Zookpeer3.4.6
3. 调试步骤
1.启动Redis Server 主机器
2. 启动Redis Server
3.启动 zookpeer
4. 启动NRedis-Proxy Server
5.使用Redis 命令行连接NRedis-Proxy
4.部署方式
执行nredis-proxy-sample 中 sing.sh 文件
1:Redis Server 集群监控报警
2:NRedis-Proxy页面可控制流量以及RedisServer主从切换
云计算时代,七牛云技术专家带你进行深度学习训练