team中的一个同学在其项目中使用了Redis作为缓存,将热点数据存放在Redis中。为了提升性能,写Redis时采用了管道的方式,平时使用时,Redis的性能、资源使用都能符合项目需求,但当访问量增加的时候,Redis的QPS还能满足要求,但CPU使用率高的时候已经达到90%+,平时只有30%+,而众所周知,Redis是单进程的,只能占用1个CPU核,跑满了也就100%,无法利用机器的多核,而当CPU跑到100%时,必然会造成性能瓶颈。怎么解决?

主从结构  加从的节点提高读的能力  ,写入压力增大

方案一:
首先想到的是,增加Redis服务器的数量,在客户端对存储的key进行hash运算,存入不同的Redis服务器中,读取时,也进行相同的hash运算,找到对应的Redis服务器,可以解决问题,但是不好的地方:
第一,客户端要改动代码;
第二、需要客户端记住所有的Redis服务器的地址;
这个方案可以使用,但能不能不用改动代码就能实现扩容呢?

方案二: 
搭建一个集群,由于Redis服务器使用的版本低于3.0,不支持集群,只能通过使用代理,就想到了有名的Redis代理twemproxy。
twemproxy的性能也是杠杠滴,虽然是代理,但它对访问性能的影响非常小,连Redis作者都推荐它。
twemproxy使用方便,对于一个新手来说,不到一个小时就能学会使用,而且关键是不用改动客户端代码,几乎支持所有的Redis命令和管道操作,只需要改下客户端的配置文件中配置的Redis的IP和PORT,由原来的Redis的IP和Port改成twemproxy服务的IP和PORT。
客户端不需要考虑hash的问题,这些twemproxy会做,客户端就像操作一台Redis一样。
上面用了“几乎”这个词,因为有些命令,比如"keys *"就不支持
很快部署了好了twemproxy和后面跟着的四个Redis机器,压测发现,后面的四台Redis的CPU使用率降下来了,但新问题来了,twemproxy也是单进程的!性能瓶颈又跑到twemproxy上来了!

方案三:
对Redis的访问分为写和读,类似生产者和消费者, 再仔细分析,发现写的少,读的相对多些,这就可以将读写分离,写的往主的写,读的从备的读,遇到的情况恰好是读和写是两个服务,做到读写分离通过改下配置信息就可以很简单的做到,,这样分散了主Redis的压力。
这里对Redis的访问压力有好转,但不是长久之计,比如遇到举办活动, 数据量增大时,还是会有性能的风险。

最终采用的方法是综合方案二和三,如下图所示:

这种方法对现有的服务改动最小,可以有效缓解redis压力的问题
producer端和consumer端的twemproxy使用的hash算法要求一致,不然找不到key了。
如果把方案一也加进来,会比较复杂,暂时用不到。

redis 集群扩容方案相关推荐

  1. Docker高级篇之Mysql主从复制、Redis集群扩容缩容配置案例详解

    Docker之Mysql主从复制.Redis集群扩容缩容配置案例 1. 安装mysql主从复制 1.1 新建主服务器容器实例3307 1.2 进入/mydata/mysql-master/conf目录 ...

  2. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理

    " 在前面的文章中已经介绍了 本文将详细介绍集群,主要内容包括: 集群的作用 集群的搭建方法及设计方案 集群的基本原理 客户端访问集群的方法 实践须知(集群伸缩.故障转移.参数优化等) 集群 ...

  3. redis集群扩容和缩容_Full-Stack-Notes

    Redis Cluster 一.集群模式介绍 1.1 数据分区 1.2 节点通讯 1.3 请求路由 1.4 故障发现 1.5 故障恢复 二.集群模式搭建 2.1 节点配置 2.2 启动集群 2.3 集 ...

  4. redis集群扩容和缩容_深入理解Redis Cluster集群

    一.背景 前面的文章<深入理解Redis哨兵机制>一文中介绍了Redis哨兵集群的工作原理,哨兵集群虽然满足了高可用的特性,但是依然存在这样的问题:即数据只能往一个主节点上进行写入. 只能 ...

  5. 错过血亏!深入学习Redis集群搭建方案及实现原理

    我们知道 Redis 的这几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. 11.16-17日,北京市东三环中路61号富 ...

  6. 【Redis集群专题】「集群技术三部曲」介绍一下常用的Redis集群机制方案的原理和指南(入门篇)

    集群化的方案 Redis的Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis ...

  7. Redis集群的方案总结:客户端Sharding/Redis Cluster/Proxy

    转载:redis sentinel设计与实现 转载:分布式一致性算法(一)一致性哈希算法(consistent hashing) 转载:Jedis下的ShardedJedis(分布式)使用方法(一) ...

  8. redis集群扩容和缩容_redis集群cluster搭建,扩容缩容

    1.    概要说明 1.1.    概述 本文旨在说明平台部署环境搭建的过程和详细步骤说明,为后面系统部署提供清晰的参考依照. 以下搭建部署的环境,为一个小型的分布式集群环境.满足负载均衡和单点故障 ...

  9. redis集群扩容和缩容_Redis一站式管理平台,支持集群的创建、管理、监控和报警...

    redis是一个开源的key value存储系统,受到了广大互联网公司的青睐.redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本: redis集 ...

  10. Redis Cluster 集群扩容与收缩

    2019独角兽企业重金招聘Python工程师标准>>> Redis Cluster 集群伸缩 1. 伸缩原理 Redis提供了灵活的节点扩容和收缩方案.在不影响集群对外服务的情况下, ...

最新文章

  1. centos7配置bind重启后错误解决
  2. WKWebView自适应大小
  3. PHP回调函数的几种用法
  4. pyqt5 qgridlayout获取元素位置
  5. 【LeetCode】0938. 二叉搜索树的范围和(二叉树的遍历)
  6. 揭秘:如何为 Kubernetes 实现原地升级
  7. 网曝 Solaris 系统被砍,开发团队将大半被解雇
  8. 从完整的新手到通过TensorFlow开发人员证书考试
  9. 浅析Kubernetes Pod重启策略和健康检查
  10. 【Clickhouse】Clickhouse 外部存储引擎之 hdfs
  11. LTE系统信息块SIB:LTE system information blocks-MIB,SIB-1,2,3,4,5,6,7,8,9,10,11
  12. 从零开始学wordpress 之四
  13. git的SSH上传方式
  14. 计算机系统配置有哪些,查看电脑配置方法有哪些
  15. 通讯录 按中文名字 拼音首字母 排序
  16. 乐鑫Esp32学习之旅 12 开源一个微信公众号airkiss配网esp32以及局域网发现功能的工程,分享一个airkiss配网小工具。(附带Demo)
  17. 赵小楼《天道》《遥远的救世主》深度解析(4)从肖亚文引申怎么看待随缘、惜缘、攀缘这三种缘?
  18. NCEP再分析数据(FNL)Python下载
  19. 计算机视觉课程设计:基于SSD、Dlib多进程目标检测的对比研究
  20. 【NodeJs-5天学习】第四天存储篇① ——安装使用mysql 8.0

热门文章

  1. 彩虹易支付全开源码全新完全开源无任何加密易支付程序
  2. java j2se下载_J2SE基础之下载eclipse并创建项目
  3. 冒险岛079单机/小范围联机游戏搭建
  4. 数字音频功放芯片型号与应用介绍
  5. 图形验证码文字识别——pytesseract
  6. Hadoop和大数据:60款顶级大数据开源工具
  7. 【序列推荐】KDD2018|STAMP---基于注意力的短期记忆优先的推荐
  8. 金蝶K3案例教程采购报表
  9. VMWare Fusion 安装 Centos7操作系统
  10. leapFTP上传网页到服务器,leapftp登录ftp服务器