NRedis

Stella981
• 阅读 383

一、 NRedis-Proxy 介绍

NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解耦;以Spring为基础开发自定义标签,让它可配置化,使其更加容易上手;以netty 作为通信传输工具,让它具有高性能,高并发,可分布式扩展部署等特点,单片性能损耗约5%左右。

二、 NRedis-Proxy 技术架构图

NRedis

三、 NRedis-Proxy 优势以及缺点

a)      功能优势

            1.        自带连接池,简单稳定且性能高效

            2.        支持读写分离,从读按照权重算法

            3.        支持灵活主从配置策略

            4.        默认支持一致性哈希分片策略,扩展性强

            5.        分片策略与从读取策略可自定义化

            6.        支持主从自动切换,提供RedisServer监听服务

            7.        支持HA 分布式部署,节点可随意扩展

b)     天然缺点

中间件的存在,会自带网络损耗,但是网络带宽足够,可以忽略不计。相比客户端分片等策略,中间件可以解决客户端应用过多,解决M*N 问题,Redis-Server连接数不够,造成机器CPU性能降低;如下图:

NRedis

四、 NRedis-Proxy 类逻辑调用图

NRedis

五、 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

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)     默认两个分片策略

NRedis

六、 NRedis-Proxy 使用场景

a)      项目初始团队

   当一个公司成立一个研发初始团队,对于互联网公司,研发时间周期短,迭代快,没有时间与资源研发基础中间件,如果有成熟的中间服务,不参合业务代码,与应用解耦,让研发专心专一研发业务本身 ,同时又能够让后期上线业务稳定。NRedis-Proxy是一个高性能且稳定中间件服务,第一个真正意义Java 版本Redis中间件,让研发团队既可以学习,又可控!

b)     秒杀场景,应用服务较多,RedisServer较少

NRedis

通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。面临下面几个问题

1.        怎么样保证读取高性能,满足高并发请求?

2.        怎么样保证数据一致性,保证MySQL 数据不丢失,与Redis 数据保持一致性

3.        RedisServer 连接数不够,应用程序RedisClient 客户端连接数过多,造成Redis Server  机器CPU 性能降低,以至于Redis Server 性能低

4.        Redis Server 机器性能不一样,当大流量风暴 怎么样保障高性能RedisServer 机器 支持支撑 重要的业务实时性,高并发性

解决问题方案如下图:

NRedis   

1.        怎么样保证读取高性能,满足高并发请求?

使用内存级别NOSQL 数据-Redis,保障高性能高并发

2.        怎么样保证数据一致性,保证MySQL 数据不丢失,与Redis 数据保持一致性

使用MQ 消息以及消息幂等性,采取补偿机制,记录错误日志,补写数据,保障数据最终一致性

3.        RedisServer 连接数不够,应用程序RedisClient 客户端连接数过多,造成Redis Server  机器CPU 性能降低,以至于Redis Server 性能低

使用NRedis-Proxy 集群 部署,对应用程序透明化,保障连接数可用,避免此问题

4.        Redis Server 机器性能不一样,当大流量风暴 怎么样保障高性能RedisServer 机器 支持支撑 重要的业务实时性,高并发性

自定义Redis 分片机制,采用虚拟捅算法以及配置中心系统,当流量一旦来临,在快超过最大容量时,改变分片规则以及流量,把不重要的业务流量涌向低性能机器,充分利用机器性能,保障服务性能.(后续开源)

七、 NRedis-Proxy 部署

1.      部署架构图

NRedis

2.      部署环境要求

1:JDK 1.7

2:Redis-Server

3:Zookpeer3.4.6

3.      调试步骤

1.        启动Redis Server 主机器

NRedis

2.        启动Redis Server

NRedis

3.        启动 zookpeer

NRedis

4.        启动NRedis-Proxy Server

NRedis

5:使用Redis 命令行连接NRedis-Proxy

NRedis

4.        部署方式

执行nredis-proxy-sample 中 sing.sh 文件

八、NRedis-Proxy 未来规划

1:Redis Server 集群监控报警

2:NRedis-Proxy页面可控制流量以及RedisServer主从切换

九、项目地址

 http://www.oschina.net/p/nredis-proxy

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这