那些年用过的Redis集群架构(含面试解析)

  • 时间:
  • 浏览:0

问題2:Redis的多数据库机制,了解几个?

正常版:Redis支持多个数据库,否则每个数据库的数据是隔离的非要共享,单机下的redis还还都后能 支持16个数据库(db0 ~ db15)

高调版: 在Redis Cluster集群架构下非要有好几个 多数据库空间,即db0。否则,亲戚亲戚朋友 那末 使用Redis的多数据库功能!

具有如下优点:

(1)不让Sentinel哨兵监控,可能Master挂了,Redis Cluster内部人员自动将Slave切换Master

(2)还还都后能 进行水平扩容

(3)支持自动化迁移,当总是出先某个Slave宕机了,那末 就非要Master了,这前一天的高可用性就无法很好的保证了,万一Master也宕机了,咱办呢? 针对你你是什么 情况报告,可能说你你是什么Master有多余的Slave ,集群自动把多余的Slave迁移到那末 Slave的Master 中。

ps:可能你用的是Proxy分片集群架构,你你是什么于Codis你你是什么 ,会将mget/mset的多个key拆分成多个命令发往不同得Redis实例,这里太久说。我推荐答的还是Redis Cluster。

问題6:亲戚亲戚朋友 有对Redis做读写分离么?

正常版:那末 做,至于导致 额。。。额。。。额。。那末 子了,硬着头皮扯~

高调版:不做读写分离。亲戚亲戚朋友 用的是Redis Cluster的架构,是属于分片集群的架构。而Redis五种 在内存上操作,不让涉及IO吞吐,即使读写分离就说 会提升太久性能,Redis在生产上的主要问題是考虑容量,单机最多10-20G,key太久降低Redis性能.否则采用分片集群内部人员,可还还都后能 保证了亲戚亲戚朋友 的性能。其次,用上了读写分离后,需要考虑主从一致性,主从延迟等问題,徒增业务复杂化度。

问題4:懂Redis的批量操作么?

正常版: 懂你你是什么。比如mset、mget操作等,blabla

高调版: 亲戚亲戚朋友 在生产上采用的是Redis Cluster集群架构,不同的key会划分到不同的slot中,否则直接使用mset可能mget等操作是行不通的。

据说是可能Codis开源的比较晚,考虑到更换组件的成本问題。毕竟有有好几个 运行好好的东西,你再去换组件,风险是很大的。

客户端与Redis节点直连,需要里边Proxy层,直接连接任意有有好几个 Master节点

问題1:懂Redis事务么?

正常版:Redis事务是你你是什么列redis命令的集合,blabla…

高调版: 亲戚亲戚朋友 在生产上采用的是Redis Cluster集群架构,不同的key是有可能分配在不同的Redis节点上的,在你你是什么 情况报告下Redis的事务机制是不生效的。其次,Redis事务不支持回滚操作,青春恋爱物语是鸡肋!好多好多 基本不让!

根据公式HASH_SLOT=CRC16(key) mod 16384,计算出映射到哪个分片上,否则Redis会去相应的节点进行操作

每有有好几个 分片节点的Slave一定会Master的副本且只读

Redis Cluster在2015年还是试用版,不保证会遇到哪些问題,否则不敢尝试。

Sentinel 还还都后能 在发生故障转移动作后触发相应脚本(通过 client-reconfig-script 参数配置 ),脚本获取到最新的Master来修改Twemproxy配置

过低:

(1)部署内部人员超级复杂化

(2)可扩展性差,进行扩缩容需要手动干预

(3)运维不方便

Redis Cluster

我经历这套架构的时间为2017年,在你你是什么 时间Redis Cluster可能很成长期图片 是什么是什么是什么 期了!亲戚亲戚朋友 在网还还都后能 查到的大次要缺点,在我接触到的前一天基本可能除理!

比如那末 完善的运维工具?还还都后能 参照一下搜狐出的CacheCloud。

比如那末 公司在生产用过?我接触到的前一天,百度贴吧,美团等大厂都用过了。

比如那末 Release版?我接触到的前一天距离Redis Cluster发布Release版可能后来 。

否则毕竟是官网出的,肯定会总是维护、更新下去,未来必定会更加成长期图片 是什么是什么是什么 期、稳定。换句话说,Redis不倒,Redis Cluster就不让放弃维护。好多好多 ,我推荐还是这套架构!

工作原理如下

好多好多 我没接触过Codis,前一天总是用的是Twemproxy作为Proxy。

这里以Twemproxy为例说明

Proxy+Replication+Sentinel

这里的Proxy目前有五种 取舍:Codis和Twemproxy。我经历这套架构的时间为2015年,当时我好像咨询过我的主管咱办 会 不让Codis和Redis官网的Redis Cluster。导致 有二:

Sentinel持续不断的监控每个分片节点的Master,当Master总是出先故障且不可用情况报告时,Sentinel会通知/启动自动故障转移等动作

工作原理就说 ,当Master宕机的前一天,Sentinel会选举出新的Master,并根据Sentinel中client-reconfig-script脚本配置的内容,去动态修改VIP(虚拟IP),将VIP(虚拟IP)指向新的Master。亲戚亲戚朋友 的客户端就连向指定的VIP即可!

过低:

(1)主从切换的过程中会丢数据

(2)Redis非要单点写,非要水平扩容

对于key为{foo}.student1、{foo}.student2,{foo}student3,你你是什么于于key一定是在同有有好几个 redis节点上。可能key中“{}”之间的字符串就说 当前key的hash tags, 非要key中{ }中的次要才被用来做hash,否则计算出来的redis节点一定是同有有好几个 !

监控:Sentinel 会不断的检查主服务器和从服务器是是否是正常运行。

问題5:那在Redis集群模式下,咋样进行批量操作?

正常版:他不知道

高调版:你你是什么 问題其实还还都后能 写一篇文章了,改天写。这里说五种 有有好几个 多很简单的答法,足够面试用。即:

可能执行的key数量比较少,就不让mget了,就用串行get操作。可能真的需要执行的key好多好多 ,就使用Hashtag保证哪些key映射到同一台Redis节点上。简单来说语法如下

问題3:Redis集群机制中,你其实哪些过低的地方吗?

正常版: 他不知道

高调版: 假设我有有好几个 多key,对应的value是Hash类型的。可能Hash对象非常大,是不支持映射到不同节点的!非要映射到集群中的有有好几个 节点上!还有就说 做批量操作比较麻烦!

工作原理如下

这里Sentinel的作用有有好几个 多:

前端使用Twemproxy+KeepAlived做代理,将其后端的多台Redis实例分片进行统一管理与分配

缺点:

(1)批量操作是个坑

(2)资源隔离性较差,容易总是出先相互影响的情况报告。

Replication+Sentinel

这套架构使用的是社区版本推出的原生高可用除理方案!

在面试中可能碰到下列问題,咋样应用上本篇的知识呢?先明确你你是什么,我推荐的是Redis Cluster。

OK,结速英文英文举例说明

自动故障转移:当主节点非要正常工作时,Sentinel会结速英文英文一次自动的故障转移操作,它会将与失效主节点是主从关系的其中有有好几个 从节点升级为新的主节点,否则将你你是什么的从节点指向新的主节点。

通知:当被监控的某个Redis服务器总是出先问題,Sentinel通过API脚本向管理员可能你你是什么的线程发送通知。