一、应用场景需求简要说明

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 的插件以及自定义数据处理函数等
  1. auth.conf配置与说明  
     Authority {
        Auth {
            Mode write
        }
        Auth "aaaa@bbbb.com" {
            Mode admin
        }
    }
  2. 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
        }
    }
  3. 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
         }
    }

  4. 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              #延时监视与信息统计

  5. 常用命令测试
    pub/sub、hset、hget等多种命令测试
    scan测试(说明:scan 0 对应的是standalone.conf(或其他模式的配置文件)实例Group shard001,scan 1对应的是standalone.conf(或其他模式的配置文件)实例Group shard002 )
    rejson自定义命令测试

  6. 数据迁移说明
    当修改了standalone.conf(或其他模式的配置文件)实例对应的分布式节点个数后,如果要保证数据确定能通过predixy代理获取到现有数据,需要进行单实例redis全部数据重新根据key的哈希值取模等映射方法重新映射到redis实例中,目前采用产品中redis跨网闸同步程序进行迁移。

redis分布式代理工具选型与功能验证相关推荐

  1. 【使用Redis分布式锁实现优惠券秒杀功能】-Redis学习笔记05

    前言 本章节主要实现限时.限量优惠券秒杀功能,并利用分布式锁解决<超卖问题>.<一人一单问题>. 一.优惠券下单基本功能实现 1.功能介绍及流程图 2.代码实现 @Resour ...

  2. redis分布式锁工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core. ...

  3. RedissonDistributedLock(redis分布式锁工具类,笔记)

    redisson分布式锁, 支持全局与局部锁 RedissonDistributedLock package com.llb.cloudyoung.tool.lock;import com.llb.c ...

  4. 接口测试准备一、 网路基础 常用代理工具 charles使用 Android手机代理抓包

    移动互联网公司技术架构 接口测试的必要性 1.行业成熟方案 2.更早份发现问题 3.更快的质量反馈 接口测试不能替代UI测试 1.接口测试有很多优点,但是保证的好似后端的质量,不能解决移动端的额质量 ...

  5. 软件测试 | 常见代理工具

    1.代理工具简介 各种功能强大的代理工具在接口测试中发挥着作用,如Charles.Burpsuite.Mitmproxy等.这些代理工具可以帮助我们构造各种测试场景,以便我们更好地完成测试工作.下面的 ...

  6. 面试官问我,Redis分布式锁如何续期?懵了。

    作者:肥朝,来自:肥朝(ID:feichao_java) 前言 上一篇[面试官问我,使用Dubbo有没有遇到一些坑?我笑了.]之后,又有一位粉丝和我说在面试过程中被虐了.鉴于这位粉丝是之前肥朝的老粉丝 ...

  7. Redis分布式锁的原理以及如何续期

    面试问题 Redis锁的过期时间小于业务的执行时间该如何续期? 问题分析 首先如果你之前用Redis的分布式锁的姿势正确,并且看过相应的官方文档的话,这个问题So easy.我们来看 很多同学在用分布 ...

  8. 报表/BI工具选型重点注意事项和验证技巧分享

    前言 报表工具是一个接近 20 年的产物了 但是,直到现在,在各种数据信息化的系统中,报表工具的作用,不仅没有褪色,反而是因为信息化需求的增大.数据的增多,以及报表工具本身迭代后越来越方便好用,使得它 ...

  9. Redis 官方可视化工具,功能真心强大!

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis ...

最新文章

  1. 阅读《深入理解程序设计使用linux汇编语言》
  2. 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!
  3. 测试学python路线_小蜗分享:Python测试开发全套学习路线
  4. Go搭建静态页面server笔记
  5. 如何调节idea jvm的最大内存_那个小白还没搞懂内存溢出,只能用案例说给他听了
  6. Python实现信号滤波(基于scipy)
  7. App首次安装 - 授权网络访问的坑
  8. python程序中1—10的乘积_[求助]1个数1到10的乘积
  9. 点到点法式平面投影点的计算
  10. 麦森数 OpenJ_Bailian - 2706
  11. Chrome下图片加载的问题
  12. 线性规划求极值问题-系统架构设计师-最“稳准狠”解题方法
  13. 笔记本显卡cpu 功耗测试软件,Alienware外星人X系列PK比51M系列性能,谁更强?应该选择买谁?笔记本显卡和CPU功耗如何?...
  14. 解决微信公众账号申请认证方面的问题
  15. JAVA实现CSV文件转JSON。
  16. linux下读写emmc,nand,硬盘下的文件(一)
  17. 浅谈数据结构以及其特点
  18. 基于视频行人重识别--解决遮挡问题
  19. matplotlib 中深色颜色选取
  20. 项目中如何整合微信支付

热门文章

  1. L2+ 概念要火!英伟达和英特尔都释放了什么信号?| CES 2019
  2. Mysql解决中文乱码
  3. 信息安全系统设计基础第十四周学习总结
  4. python主函数调用格式_python函数介绍
  5. df命令(df命令完成什么功能)
  6. 测地距geodesic
  7. 在线语音合成 5-1
  8. mysql中如何创建数据和表
  9. c语言输出函数语句,c语言输出语句及格式输出函数介绍
  10. oracle分区 varchar2,oracle分区怎么使用