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?单纯拷贝数据文件可解决单点到双点的实现。但多点服务器扩容,尚未做一致性哈希尝试,有一定的风险。

完全是个人头脑风暴,欢迎拍砖。

关于调优 http://www.oschina.net/translate/redis-latency-problems-troubleshooting?from=20130317

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2014-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

前言在上一篇《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》中,我们已经体验了如何使用@HystrixCommand来为一个依...

20690
来自专栏程序你好

20个对Java程序员有用的开源库

优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了大量的时间学习API,特别是在阅读了 Effective Java ...

20220
来自专栏开源项目

码云推荐 | J2EE 快速开发平台 renren-security-boot

renren-security-boot 是一款基于代码生成器的 J2EE 快速开发平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展;使用 Spring...

46280
来自专栏飞雪无情的博客

Android Gradle实用技巧(一) | 隐藏Android签名文件和密钥信息

Gradle是一款非常优秀的构建系统工具,它使用可以配置的DSL语言描述构建流程,同时允许我们使用原生的Java和Groovy编码的方式进行构建,所以相比Ant...

13410
来自专栏数据和云

修而未复:说说WebLogic那修不完的Java反序列化漏洞

编者说明:这篇文章初稿写在Oracle CPU补丁发布之后,考虑到文章内容的影响,并未在当时发布,WebLogic 的 Java 反序列化漏洞,已经修复了多次,...

24860
来自专栏Laoqi's Linux运维专列

Kubernetes 1.8.6 集群部署–监控mysql(十四)

18230
来自专栏杨建荣的学习笔记

MySQL主从不一致的细小问题分析(r12笔记第62天)

今天和同事一起看了一个问题,她在一个主从环境中发现了数据不一致,存在主键冲突。 show slave status的报错信息大概是下面的样子。 L...

39370
来自专栏后端技术探索

大型网站主从库复制延迟解决方案

像Facebook、开心001、人人网、优酷、豆瓣、淘宝等高流量、高并发的网站,单点数据库很难支撑得住,WEB2.0类型的网站中使用MySQL的居多,要么用My...

11010
来自专栏技术博文

Linux添加/删除用户和用户组

本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数。 1、建用户: adduser phpq                          ...

70060
来自专栏Dawnzhang的开发者手册

spring cloud心跳检测自我保护(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT

默认情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。但是当网络分区故障...

32840

扫码关注云+社区

领取腾讯云代金券