NRedis-Proxy 高性能Redis 中间件服务原理解析

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
简介: 受飞凡电商技术负责人刘兵先生的独家授权,在csdn博客我原创发表《NRedis-Proxy 高性能Redis 中间件服务》的架构原理,以及项目开源介绍。一、 NRedis-Proxy 介绍NRedis-Proxy 是一个Redis中间件服务,第一个Java 版本开源Redis中间件,无须修改业务应用程序任何代码与配置,与业务解耦;以Spring为基础开发自定义标签,让它可配置化,使其更加容易上手;以netty 作为通信传输工具,让它具有高性能,高并发,可分布式扩展部署等特点,单片性能损耗约5%左右。

受飞凡电商技术负责人刘兵先生的独家授权,在csdn博客我原创发表《NRedis-Proxy 高性能Redis 中间件服务》的架构原理,以及项目开源介绍。
一、 NRedis-Proxy 介绍

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

这里写图片描述

三、NRedis-Proxy 优势以及缺点

a) 功能优势 1. 自带连接池,简单稳定且性能高效 2. 支持读写分离,从读按照权重算法 3. 支持灵活主从配置策略 4. 默认支持一致性哈希分片策略,扩展性强 5. 分片策略与从读取策略可自定义化 6. 支持主从自动切换,提供RedisServer监听服务 7. 支持HA 分布式部署,节点可随意扩展
b) 天然缺点 中间件的存在,会自带网络损耗,但是网络带宽足够,可以忽略不计。相比客户端分片等策略,中间件可以解决客户端应用过多,解决M*N 问题,Redis-Server连接数不够,造成机器CPU性能降低;如下图:

这里写图片描述

四、NRedis-Proxy 类逻辑调用图

这里写图片描述

五、 NRedis-Proxy 配置标签

1、redisProxyNode

这里写图片描述

2、redisProxyMaster
这里写图片描述

3、redisProxyCluster
这里写图片描述

4、默认两个分片策略
这里写图片描述

六、NRedis-Proxy 使用场景

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

这里写图片描述
通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。面临下面几个问题:
1、怎么样保证读取高性能,满足高并发请求?
2.、怎么样保证数据一致性,保证 MySQL 数据不丢失,与Redis 数据保持一致性
3、 RedisServer 连接数不够,应用程序RedisClient 客户端连接数过多,造成 Redis Server 机器CPU 性能降低,以至于Redis Server 性能低
4.、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 分片机制,采用虚拟捅算法以及配置中心系统,当流量一旦来临,在快超过最大容量时,改变分片规则以及流量,把不重要的业务流量涌向低性能机器,充分利用机器性能,保障服务性能.(后续开源)
七、NRedis-Proxy 部署

1、部署架构图

这里写图片描述

2、部署环境要求 JDK 1.7 Redis-Server Zookpeer3.4.6
3、调试步骤 a、启动Redis Server 主机器
这里写图片描述

b、启动Redis Server
这里写图片描述

c、启动 zookpeer
这里写图片描述

d、启动NRedis-Proxy Server
这里写图片描述

e、使用Redis 命令行连接NRedis-Proxy
这里写图片描述

g、部署方式 执行nredis-proxy-sample 中 sing.sh 文件
八、 NRedis-Proxy 未来规划

1、Redis Server 集群监控报警 2、NRedis-Proxy页面可控制流量以及RedisServer主从切换
九、项目开源地址

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
4月前
|
缓存 NoSQL Java
Redis深度解析:解锁高性能缓存的终极武器,让你的应用飞起来
【8月更文挑战第29天】本文从基本概念入手,通过实战示例、原理解析和高级使用技巧,全面讲解Redis这一高性能键值对数据库。Redis基于内存存储,支持多种数据结构,如字符串、列表和哈希表等,常用于数据库、缓存及消息队列。文中详细介绍了如何在Spring Boot项目中集成Redis,并展示了其工作原理、缓存实现方法及高级特性,如事务、发布/订阅、Lua脚本和集群等,帮助读者从入门到精通Redis,大幅提升应用性能与可扩展性。
87 0
|
29天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
39 5
|
1月前
|
缓存 NoSQL 中间件
redis高并发缓存中间件总结!
本文档详细介绍了高并发缓存中间件Redis的原理、高级操作及其在电商架构中的应用。通过阿里云的角度,分析了Redis与架构的关系,并展示了无Redis和使用Redis缓存的架构图。文档还涵盖了Redis的基本特性、应用场景、安装部署步骤、配置文件详解、启动和关闭方法、systemctl管理脚本的生成以及日志警告处理等内容。适合初学者和有一定经验的技术人员参考学习。
188 7
|
1月前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
1月前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
3月前
|
存储 缓存 NoSQL
Redis的高性能之谜
Redis的高性能之谜
44 5
|
3月前
|
存储 消息中间件 缓存
中间件redis的使用
【9月更文挑战第28天】Redis 是一个开源的、基于内存的数据结构存储系统,可用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等,使其在各种应用场景中表现出色。Redis 作为缓存中间件能显著提高数据访问速度,其缓存过期策略有助于管理数据生命周期。在 .NET 应用程序中使用 Redis 缓存,可通过安装 `StackExchange.Redis` 库并连接到 Redis 服务器来实现数据的读写操作。此外,Redis 作为消息中间件,基于生产者-消费者模型实现消息队列,确保消息的可靠性和顺序性。
|
3月前
|
存储 消息中间件 NoSQL
Redis的单线程设计之谜:高性能与简洁并存
Redis的单线程设计之谜:高性能与简洁并存
47 1
|
3月前
|
中间件 API 开发者
深入理解Python Web框架:中间件的工作原理与应用策略
在Python Web开发中,中间件位于请求处理的关键位置,提供强大的扩展能力。本文通过问答形式,探讨中间件的工作原理、应用场景及实践策略,并以Flask和Django为例展示具体实现。中间件可以在请求到达视图前或响应返回后执行代码,实现日志记录、权限验证等功能。Flask通过装饰器模拟中间件行为,而Django则提供官方中间件系统,允许在不同阶段扩展功能。合理制定中间件策略能显著提升应用的灵活性和可扩展性。
50 4

推荐镜像

更多
下一篇
DataWorks