Redis集群的方案

Redis集群有以下几种方案:

1. 客户端分片

将分片的工作交给客户端来做

好处是不需要使用第三方分布式中间件,完全是自己控制

性能好(无需中间件分发)

坏处是代码得自己写,耦合度和侵入性高

新增和减少Redis实例都必须修改代码,运维麻烦

2. 代理分片(中间件分片)

将分片工作交给第三方中间件来做,中间件接收到客户端的请求,根据路由规则来进行分发和应答

好处是业务代码解耦,无侵入性,运维方便,可以做标准化运维

坏处是有性能上的损耗,毕竟要经过中间件转发

3. Redis Cluster

Redis Cluster将所有的key映射到16384个slot中,集群中的每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。

去中心化,没有中心节点,客户端可以向任何一个实例发出请求,如果所需数据不在该实例中,则该实例会引导客户端自动去对应实例读写数据。

Redis Cluster的成员管理(节点名称,ip,端口,状态,角色)等,都通过节点之间两两通讯,定期交换更新。

整个架构比较重,不推荐使用。

综合考虑,使用代理分片是最好的方案。

代理分片有以下几种中间件可支持:

1. Twemproxy,稳定性高,但运维麻烦

2. Codis,稳定性高,速度快(比Twemproxy快),运维方便

Codis介绍

Codis引入了Group概念,每个Group包括1个Redis Master和1个Redis Slave,避免Group故障,保障可靠性。

为了支持热迁移,Codis还修改了Redis Server源码,即Codis Server。

Codis采用预先分片的机制,分成了1024个slot,也就是所最多支持1024个Codis Server(即1024个Group),这些路由信息都可以保存在Zookeeper。


Redis集群的方案_第1张图片

在高可用方面,Codis还提供了一个Java客户端,即Jodis,如果当个Codis Proxy挂掉,Jodis会自动发现,并且自动切换,保障业务不受影响。

Codis也指出Pipeline,即客户端发出一批情趣,然后一次性返回

你可能感兴趣的:(Redis集群的方案)