今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了。只能在下班的路上考虑下Redis集群服务器的高可用方案。随笔而已,尚未成型,仅作记录。 当然,我说的可能比较片面,欢迎拍砖、斧正。

一、Redis与MySQL对比

相同点:

  • Master-Slave架构,集群架构下无法很好的完成数据拷贝,确保数据一致性。
  • 支持数据文件持久化存储,但数据文件过大时,宕机重启可能存在安全隐患。

不同点:

  • Redis时效性能远比MySQL要高得多,支持复杂的数据类型,基本上都是内存操作,效率远胜于MySQL。
  • RedisNoSQL型数据库,或者说是Store-Cache型数据库,而MySQL属于RDBMS,关系型数据库,虽然自身做了查询缓存,但效果一般。
  • Redis支持以数据横向切分,便于根据业务需求扩展,键值构建类似于数据库索引,灵活高效,不必忌讳数据之间的关联。Redis依赖其数据类型,完成交集、并集、补集计算,更胜一筹。
  • MySQL在数据量和连接数量上都有上限:单表数据量500万条记录,并发连接数3000/秒。
  • Redis定时、定量将数据保存至本地,命中数据大部分存活在内存中,降低了数据文件读取消耗;数据更新,以内存修改为主,不存磁盘在IO消耗。

结论:

  • 两者在高并发环境下,依靠自身的Master-Slave架构,完成横向扩容都存在难度。要控制每个实例的数据文件大小,留有足够的磁盘,内存空间。确保宕机后,服务可恢复。
  • Redis更适合作为频繁查询为主,对数据进行交集、补集、并集操作,类似于SNS用户社区关联关系展现等,有着良好的数据类型支持,以及高效性。

二、Redis与Memcached,以及EhCache/OSCache

EhCache/OSCacheMemcached可谓是缓存架构里的一朵朵奇葩。

  • EhCacheOSCache在几年前,都是小应用最喜欢使用缓存实现。尤其是当应用之间不需要考虑数据一致性问题时,几乎无所不能。但到了分布式缓存时代,虽然两者也提供了相应的架构实现,但实现成本较高,且存在一定风险。例如EhCache,提供了EhCache Server架构,主要通过各个EhCache集群网络多播等方式同步数据。但高并发下,网络多播易演变成网络风暴。增加了系统安全隐患。
  • Memcached走了另一条路,通过一致性哈希根据Key与Server的Hash对应关系,或者余数算法等,将数据散落在不同的Server上,确保每个Server上都能平均Cache数据。也基缘于此,Memcached适合进行快速地横向扩展。不必考虑磁盘存储,只需要提供一个内存足够大的Server主机即可。
  • Memcached也有瓶颈,单个ObjectSize不得大于1MB,KeySize不得大于250个字符,Write要比Read耗时长,对大对象做Write Cache时尤为明显。因此,Memcached适合小数据量对象的Cache。且当服务器宕机时,疯涨的数据库操作IO,很可能将数据库服务器拖垮。
Redis可以简单理解为Store-Cache,用作CacheObjectSize支持1GB,KeySize支持512Bytes,并支持复杂数据类型,可在内存中直接排序等。但Redis不能像Memcached那样实现Sharding,直接进行横向扩展。且自身作为Database时,也可能存在单点故障风险。
 

三、基于Redis高可用服务器架构简单设想

    1. Redis以Master-Slave为单元,公用虚拟IP,通过Keepalive实现自动切换,完成主从互备。
    2. 通过Redis Client,如Jedis,在Client端完成Sharding,访问多个Redis Server。
    3. 读写分离,Write-Master,Read-Slave。

       未尽之处,若横向扩容时,Client一致性哈希,是否会由原先的A Server指向,改为新进的C Server?单纯拷贝数据文件可解决单点到双点的实现。但多点服务器扩容,尚未做一致性哈希尝试,有一定的风险。

Redis集群服务器-高可用调研随笔[转]的更多相关文章

  1. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

  2. Redis集群与高可用

    Redis集群 redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了redis分布式的需求,当一个redis节点挂了可以快速的切换到另一个节点.当遇到单 ...

  3. Docker部署Redis集群(主从复制 高可用)

    环境 vmware12+centos7 关于环境安装可以参考我的另一篇博客 https://www.cnblogs.com/pengboke/p/13063168.html 1.清理环境 我这里用的虚 ...

  4. 11.Redis 哨兵集群实现高可用

    作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...

  5. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  7. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  8. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  9. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

随机推荐

  1. Js处理数据——前端分页工具

    这几天有小伙伴讨论起了分页的相关问题,这里我也简单讲下前端如何简单便捷的利用Js(库)写出优雅,好用的分页工具. 分页是个很简单又超多接触的技术点,粗略来讲分如下两种: 真分页--每次根据页码.页大小 ...

  2. 第 4 章 多例模式【Multition Pattern】

    以下内容出自:24种设计模式介绍与6大设计原则 这种情况有没有?有!大点声,有没有? 有!,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还记得那首诗< ...

  3. Android引导界面

    一.所需素材       很有必要整理一下,里面附带友盟的社会化分享组件,我就不去掉了. 二.代码 import com.umeng.update.UmengUpdateAgent; import a ...

  4. hdu 4714

    一个树形dp的题,又是一个涉及不深的领域  = =: 不过在网上看到了大神用很巧的思路解决了这个题: 大神的思路就是: 从树的底部往上看:如果一棵子树拥有两个及以上的叶子节点,可以将这棵子树与大树分离 ...

  5. ANDROID_MARS学习笔记_S04_006_用获取access_token,access_token_secrect

    一.代码流程 1.MainActivity会开启PrepareRequestTokenActivity 2.PrepareRequestTokenActivity会根据配置文件的CONSUMER_KE ...

  6. Win7资源管理器已停止工作——StackHash_6c37,R6205错误

      2013-9-20 此问题由来已久,截图及"问题签名"如下: 问题签名: 问题事件名称: BEX64 应用程序名: Explorer.EXE 应用程序版本: 6.1.7601. ...

  7. CCS3.3之DM642开发环境建立

    使用的仿真器是SEED-XDSUSB2.0/5V. 之前用的是CCS2.2,换成了CCS3.3的. 1.安装CCS3.3.38.在我安装完后,并没有急着升级,升级的程序是SR12_CCS_v3.3_S ...

  8. java学习多线程之生产者消费者

    在java多线程当中还有一种关系需要我们来重点掌握,那就是生产者和消费者的关系.那么什么是生产者,什么是消费者呢?我们可以举个例子来说,有张三.李四负责生产烤鸭,王五.马六负责吃烤鸭,那么前者生产完烤 ...

  9. 【log4js】

    手动创建日志目录 定时清理 nodejs之日志管理 玩转Nodejs日志管理log4js access.log-2015-11-20

  10. win8 mysqlzip install

    1. 下载MySQL Community Server 5.6.142. 解压MySQL压缩包 将以下载的MySQL压缩包解压到自定义目录下.3. 添加环境变量 变量名:MYSQL_HOME 变量值: ...