免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3872 | 回复: 7
打印 上一主题 下一主题

[C++] Redis3.0集群方案分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-03 09:17 |只看该作者 |倒序浏览
在Redis3.0集群出来之前,大家都对作者antirez寄予厚望,因为Redis从来没有让我们失望过。现在Redis3.0集群出来了,网上出了很多评论文章,都说他的功能多么强大,包括下面这张图是彻底把我欺骗了。

   

等到我把Redis3.0客户端库hiredis编译好集成到公司系统,访问其中一台Redis3.0服务器居然返回"MOVED 2318 10.12.8.156

:6379",这才了解到访问其他Redis3.0服务器的Key需要二次定位,这就是Redis3.0所谓的ASK 转向/MOVED 转向机制,这绝对

是一个大坑,网上既然没有人说出来,如果我不站出来,会有人继续掉进这个大坑。

   

     Redis最初的使命是用高效的内存取代复杂繁重的数据库,如果从缓存服务器获取一个Key要经过二次定位,访问时间是原来单机

缓存服务器的两倍,那样我们还不如直接用数据库呢。



     鉴于Redis3.0所谓的ASK 转向/MOVED 转向机制,网上推出了JAVA版的Redis3.0客户端库jedis、C++版的Redis3.0客户端

库ACL,他们都支持根据Redis服务器居返回"MOVED"信息进行二次定位数据访问,而且还有在主备切换的情况下访问备机的功能,

正常情况下Redis3.0集群要部署3台主机和3台备机,这样客户端就要同时维持这6台服务器的长连接,像我们公司的系统有上百个

进程,一个线程就要维持6台缓存服务器的长连接,一个进程拥有多个线程,总的算起来差不多上千个缓存服务器的长连接,这无异

于饮鸩止渴。

   

     最理想的方案就是Redis3.0 Cluster加入集群代理功能,实现客户端通过任何一台缓存服务器一次性定位所有的Key,当然这要等待

antirez发力,短期看似乎不大可能;客户端优化方案就是加入计算Key的哈希槽值的逻辑,加载服务器端的哈希槽存储逻辑,来实现一次

性定位访问缓存服务器,这样做的缺陷还是避免不了多台缓存服务器的长连接,同时一旦缓存服务器发生数据迁移和主备切换的情况,客

户端就得变更哈希槽存储逻辑。



    俗话说,自力更生,丰衣足食。我们为何不自己开发一个Redis缓存集群代理服务器系统,取名为RedisClusterProxy,多牛B啊!

系统构思:系统并发接收客户端请求,计算Key的哈希槽值,加载服务器端的哈希槽存储逻辑,转发到对应的缓存服务器,并将缓存服

务器的返回值回传给客户端,这样客户端只要访问集群代理系统,实现一次性定位访问,效率与单台缓存服务器相差无几,协议还是采

用Redis3.0客户端和服务端的通信协议,这样不用对Redis3.0的客户端和服务器源码做任何改动,另外将服务器端的哈希槽存储逻辑

定时动态加载到系统,一旦缓存服务器发生数据迁移和主备切换的情况就不会发生访问定位不准确的问题,就算antirez将集群代理功能

加入Redis3.0,我们的客户端系统也不用做任何更改。



论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
2 [报告]
发表于 2015-07-03 22:20 |只看该作者
记得国内有一网站实现了redis的集群功能,豆瓣还是谁忘了,楼主可以关注一下,不用造轮子。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
3 [报告]
发表于 2015-07-03 23:35 |只看该作者
你就用DHT/Hash-Ring自己做分布式吧,还简单些。我就觉着Redis自己的这个集群/主备功能很鸡肋。

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
4 [报告]
发表于 2015-07-04 14:56 |只看该作者

论坛徽章:
0
5 [报告]
发表于 2015-07-06 13:46 |只看该作者
redis及群里 有说明 可能会进行2次查找,是你看文档不认真

论坛徽章:
0
6 [报告]
发表于 2015-07-06 18:10 |只看该作者
网上是已经有一些开源的软件,不过自己做出来的感觉就不一样了。

主要功能已经基本完成,在百度搜索"Redis3.0集群代理"即可下载源码,欢迎大家指正!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP