由于单台Redis服务器的内存管理能力有限,使用过大内存的Redis又会使得服务器的性能急剧下降,一旦服务器发生故障将会影响更大范围业务,而Redis 3.0 beta1支持的集群功能还不适合生产环境的使用。于是为了获取更好的Redis缓存性能及可用性,很多公司都研发了Redis缓存集群方案。现对NetFlix、Twitter、国内的豌豆荚在缓存集群方面的解决方案进行一个汇总,以供读者参考,具体内容如下:
 
1、NetFlix对Dynamo的开源通用实现Dynomite
Dynomite是NetFlix对亚马逊分布式存储引擎Dynamo的一个开源通用实现,使用C/C++语言编写、以代理的方式实现的Redis缓存集群方案。Dynomite不仅能够将基于内存的Redis和Memcached打造成分布式数据库,还支持持久化的MySQL、BerkeleyDB、LevelDB等数据库,并具有简单、高效、支持跨数据中心的数据复制等优点。Dynomite的最终目标是提供数据库存储引擎不能提供的简单、高效、跨数据中心的数据复制功能。Dynomite遵循Apache License 2.0开源协议发布,更多关于Dynomite的信息请查看NetFlix技术博客对Dynomite的介绍。
 
2、Twitter的Redis/Memcached代理服务Twemproxy
Twemproxy是一个使用C语言编写、以代理的方式实现的、轻量级的Redis代理服务器,它通过引入一个代理层,将应用程序后端的多台Redis实例进行统一管理,使应用程序只需要在Twemproxy上进行操作,而不用关心后面具体有多少个真实的Redis或Memcached实例,从而实现了基于Redis和Memcached的集群服务。当某个节点宕掉时,Twemproxy可以自动将它从集群中剔除,而当它恢复服务时,Twemproxy也会自动连接。由于是代理,所以Twemproxy会有微小的性能损失。根据 Redis作者的测试结果,在大多数情况下,Twemproxy的性能相当不错,同直接操作Redis相比,最多只有20%的性能损失。Twemproxy遵循Apache License 2.0开源协议发布,更多关于Twemproxy的信息请登录其在GitHub的主页查看。
 
3、豌豆荚的 Redis 集群解决方案Codis
Codis是豌豆荚使用Go和C语言开发、以代理的方式实现的一个Redis分布式集群解决方案,且完全兼容Twemproxy。Twemproxy对于上一层的应用来说, 连接Codis Proxy(Redis代理服务)和连接原生的Redis服务器没有明显的区别,上一层应用能够像使用单机的 Redis一样对待。Codis底层会处理请求的转发、不停机的数据迁移等工作, 所有底层的一切处理, 对于客户端来说是透明的。总之,可以简单的认为后台连接的是一个内存无限大的Redis服务。Codis遵循MIT开源协议发布,更多关于Codis的信息请登录其在GitHub的主页查看。
 
另外,还有一些未开源的解决方案,比如新浪、百度、淘宝、腾讯等的Redis集群方案。在Redis官方正式推出可用于生产环境的集群方案前,以上三种方案是非常值得考虑在生产环境使用的方案。

最新文章

  1. Mac OS sierra app is damaged
  2. iOS 图片文件格式判断、圆角图片
  3. java System.out
  4. NSOJ10050 Newspaper Headline
  5. 一个简单的GI--Reflective Shadow Maps
  6. 8051单片机I/O引脚工作原理
  7. Flux是一个Facebook团队的前端开发架构
  8. 关于Java中面向对象章节、IO 流中的重点基础知识。
  9. zabbix教程
  10. “NHibernate.Cfg.Configuration 的类型初始值设定项引发异常。”的解决方法【备忘】
  11. Java按钮控件数组实现计算器界面
  12. python sort、sorted
  13. Day 5 笔记 dp动态规划
  14. Spring中<bean>标签之使用p标签配置bean的属性
  15. scrollreveal(页面滚动显示动画插件支持手机)
  16. oracle的存储过程如何返回结果集
  17. JavaScript Promise启示录--(转)
  18. CryptoZombies学习笔记——Lesson3
  19. 用HAProxy和KeepAlived构建高可用的反向代理系统
  20. 关于redis-windows环境下的一些配置:

热门文章

  1. 我的Android进阶之旅------>Android中Dialog系统样式讲解
  2. 0607am抽象类&接口&析构方法&tostring&小知识点
  3. Andorid:日常学习笔记(3)——掌握日志工具的使用
  4. Kafka Confluent
  5. json教程系列(4)-optXXX方法的使用
  6. 建议44:理解模块pickle优劣
  7. 【HackerRank】Missing Numbers
  8. gstreamer交叉编译
  9. iOS_触摸事件与手势识别
  10. Go make 和 new的区别