redis分布式代理工具选型与功能验证
一、应用场景需求简要说明
1、目前产品架构基于redis单实例设计,因单实例QPS受限(都在10万级QPS以下),不适用于中大型项目,设计要求通过服务器与多实例redis水平扩展使QPS能达到1000万级别;
2、要求支持一般的string、hash、lish、set、zset数据结构对应的命令以及pub/sub消息发送订阅等命令;
3、要求支持scan等命令,并且能扩展支持redis 的rejson插件对应的主要命令等;
4、要求多线程,支持redis集群与哨兵模式;
5、要求支持auth认证等;
6、对现有程序访问redis的client库能完全兼容,不需要对程序进行改造;
二、选型总结
通过百度搜索以及github上查找,先后考虑了如下几种redis代理开源中间件:
1、codis:由豌豆荚开源的Redis分布式中间件;
2、twemproxy:由Twitter开源;
3、predisxy:由joyieldInc个人开源,入选了华为云鲲鹏社区开源中间件 (https://www.huaweicloud.com/kunpeng/software/predixy.html);
几大代理工具具体对比可以参考博客:https://blog.csdn.net/rebaic/article/details/76384028
没有选择codis的原因:
1)自有的redis分支(基于redis-3.2.8源码改造), 不能与原版的redis保持同步;
2)不支持BLPOP/BRPOP/pub/sub/scan等命令,不支持rejson等插件的扩展指令等;
3)比较重型,依赖的软件比较多,包括第三方的软件;
没有选择twemproxy的原因:
1)不支持BLPOP/BRPOP/pub/sub/scan/auth等命令,不支持rejson等插件的扩展指令等;
三、主要功能测试点
1、多个实例代理测试;
2、自定义命令测试;
3、pub/sub等指令测试;
4、增加节点并迁移数据;
四、测试环境与主要配置
测试环境准备:
采用virualbox 安装linux centos7.7虚拟机,通过源码编译最新版的redis6.0.1,并配置3个单实例,对应的端口分别为16379、16380、16381,同时源码编译predixy并采用默认的端口7617,具体部署结构如下图:
主要配置:
1)redis6.0.1源码编译与安装与多实例配置(略)
2)predixy源码编译,见https://github.com/joyieldInc/predixy/blob/master/README_CN.md说明
3)配置文件作用:
- predixy.conf,整体配置文件,会引用下面的配置文件
- cluster.conf,用于Redis Cluster时,配置后端redis信息
- sentinel.conf,用于Redis Sentinel时,配置后端redis信息
- auth.conf,代理中心访问权限控制配置,可以定义多个验证密码,可每个密码指定读、写、管理权限,以及定义可访问的健空间
- dc.conf,多数据中心支持,可以定义读写分离规则,读流量权重分配
- latency.conf, 延迟监控规则定义,可以指定需要监控的命令以及延时时间间隔
- command.conf,自定义命令扩展,用于命令扩展,支持redis 的插件以及自定义数据处理函数等
- auth.conf配置与说明
Authority {
Auth {
Mode write
}
Auth "aaaa@bbbb.com" {
Mode admin
}
} - standalone.conf配置与说明
StandaloneServerPool {
Password ccc@163.com #redis实例访问权限密码
Databases 16 #支持的db分区数目
Hash crc16 #采用的分布式映射的hash算法,目前支持crc16或atol
HashTag "{}"
Distribution modula #采用的分布式映射到redis实例的方法,目前支持modula(取模法)和random(随机法)
MasterReadPriority 60
StaticSlaveReadPriority 50
DynamicSlaveReadPriority 50
RefreshMethod fixed
ServerTimeout 1
ServerFailureLimit 10
ServerRetryTimeout 1
KeepAlive 120
Group shard001 { #分区对应的redis实例地址
+ 127.0.0.1:26379
}
Group shard002 {
+ 127.0.0.1:26380
}
Group shard003 {
+ 127.0.0.1:26381
}
Group shard004 {
+ 127.0.0.1:26382
}
} - command.conf
CustomCommand {
json.get { #定义扩展了redis的rejson插件的get方法
Mode read #定义扩展命令类型,支持read|write|admin[|[keyAt2|keyAt3]
MinArgs 2 #支持的输入最小参数个数,包括命令在内
MaxArgs 10 #支持的输入最大参数个数,包括命令在内
}json.set {
Mode write
MinArgs 2
MaxArgs 10
}json.objkeys {
Mode read
MinArgs 2
MaxArgs 10
}
} predixy.conf
主要修改配置################################### AUTHORITY ##################################
Include auth.conf################################### SERVERS ####################################
# Include cluster.conf #集群模式的redis配置
# Include sentinel.conf #哨兵模式的redis配置
# Include try.conf #测试用简约版配置
Include standalone.conf #使用单击模式的redis配置################################### DATACENTER #################################
## LocalDC specify current machine dc
# LocalDC bj## see dc.conf
# Include dc.conf #“异地”数据中心配置################################### COMMAND ####################################
## Custom command define, see command.conf
Include command.conf #使用自定义扩展命令################################### LATENCY ####################################
## Latency monitor define, see latency.conf
Include latency.conf #延时监视与信息统计常用命令测试
pub/sub、hset、hget等多种命令测试
scan测试(说明:scan 0 对应的是standalone.conf(或其他模式的配置文件)实例Group shard001,scan 1对应的是standalone.conf(或其他模式的配置文件)实例Group shard002 )
rejson自定义命令测试数据迁移说明
当修改了standalone.conf(或其他模式的配置文件)实例对应的分布式节点个数后,如果要保证数据确定能通过predixy代理获取到现有数据,需要进行单实例redis全部数据重新根据key的哈希值取模等映射方法重新映射到redis实例中,目前采用产品中redis跨网闸同步程序进行迁移。
redis分布式代理工具选型与功能验证相关推荐
- 【使用Redis分布式锁实现优惠券秒杀功能】-Redis学习笔记05
前言 本章节主要实现限时.限量优惠券秒杀功能,并利用分布式锁解决<超卖问题>.<一人一单问题>. 一.优惠券下单基本功能实现 1.功能介绍及流程图 2.代码实现 @Resour ...
- redis分布式锁工具类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core. ...
- RedissonDistributedLock(redis分布式锁工具类,笔记)
redisson分布式锁, 支持全局与局部锁 RedissonDistributedLock package com.llb.cloudyoung.tool.lock;import com.llb.c ...
- 接口测试准备一、 网路基础 常用代理工具 charles使用 Android手机代理抓包
移动互联网公司技术架构 接口测试的必要性 1.行业成熟方案 2.更早份发现问题 3.更快的质量反馈 接口测试不能替代UI测试 1.接口测试有很多优点,但是保证的好似后端的质量,不能解决移动端的额质量 ...
- 软件测试 | 常见代理工具
1.代理工具简介 各种功能强大的代理工具在接口测试中发挥着作用,如Charles.Burpsuite.Mitmproxy等.这些代理工具可以帮助我们构造各种测试场景,以便我们更好地完成测试工作.下面的 ...
- 面试官问我,Redis分布式锁如何续期?懵了。
作者:肥朝,来自:肥朝(ID:feichao_java) 前言 上一篇[面试官问我,使用Dubbo有没有遇到一些坑?我笑了.]之后,又有一位粉丝和我说在面试过程中被虐了.鉴于这位粉丝是之前肥朝的老粉丝 ...
- Redis分布式锁的原理以及如何续期
面试问题 Redis锁的过期时间小于业务的执行时间该如何续期? 问题分析 首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看 很多同学在用分布 ...
- 报表/BI工具选型重点注意事项和验证技巧分享
前言 报表工具是一个接近 20 年的产物了 但是,直到现在,在各种数据信息化的系统中,报表工具的作用,不仅没有褪色,反而是因为信息化需求的增大.数据的增多,以及报表工具本身迭代后越来越方便好用,使得它 ...
- Redis 官方可视化工具,功能真心强大!
欢迎关注方志朋的博客,回复"666"获面试宝典 一.RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis ...
最新文章
- 阅读《深入理解程序设计使用linux汇编语言》
- 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!
- 测试学python路线_小蜗分享:Python测试开发全套学习路线
- Go搭建静态页面server笔记
- 如何调节idea jvm的最大内存_那个小白还没搞懂内存溢出,只能用案例说给他听了
- Python实现信号滤波(基于scipy)
- App首次安装 - 授权网络访问的坑
- python程序中1—10的乘积_[求助]1个数1到10的乘积
- 点到点法式平面投影点的计算
- 麦森数 OpenJ_Bailian - 2706
- Chrome下图片加载的问题
- 线性规划求极值问题-系统架构设计师-最“稳准狠”解题方法
- 笔记本显卡cpu 功耗测试软件,Alienware外星人X系列PK比51M系列性能,谁更强?应该选择买谁?笔记本显卡和CPU功耗如何?...
- 解决微信公众账号申请认证方面的问题
- JAVA实现CSV文件转JSON。
- linux下读写emmc,nand,硬盘下的文件(一)
- 浅谈数据结构以及其特点
- 基于视频行人重识别--解决遮挡问题
- matplotlib 中深色颜色选取
- 项目中如何整合微信支付